【问题标题】:Applying Discrete wavelet transformation (DWT) on a given data set using Matlab使用 Matlab 对给定数据集应用离散小波变换 (DWT)
【发布时间】:2012-07-22 11:33:34
【问题描述】:

我有一个包含以下两个字段的股票市场数据集:

  • 日期
  • 收盘价

我想在这个数据集上应用 DWT 并使用 Matlab 绘制图表。有人可以指导我如何做到这一点..

谢谢

编辑

这是一个示例数据集

日期、开盘价、最高价、最低价、收盘价、成交量

24-Oct-03,29.12,29.2,28.93,29.16,3069600

23-Oct-03,29.5,29.69,29.34,29.55,3414200

22-Oct-03,29.95,29.95,29.49,29.65,6659700

这是 CSV。

我需要绘制一个 DWT 图,其中 x 轴是日期,y 轴是任何一个或所有变量。

【问题讨论】:

    标签: matlab math graph dwt


    【解决方案1】:

    计算 DWT

    这实际上很简单。使用dwt 获取近似系数和细节系数。例如,使用 daubechies 4-tap 小波的 DWT 将是:

    [cA, cD] = dwt(X, 'db4')
    

    X 是您的数据。

    如果X 中的每个样本都有多个字段,并且您希望仅在某个字段上应用 DWT,例如 X.closing_price,请添加方括号:

    [cA, cD] = dwt([X.closing_price], 'db4')
    

    请注意,此解决方案假定数据样本是按恒定时间间隔采集的。
    要绘制数据,需要准备另一个向量,对应天数:

    t = 1:2:length(X);
    

    x 轴值每隔一天跳过一次,因为近似系数和细节系数向量各有一半 X 的样本。


    演示代码

    以下代码生成随机数据并将其放入结构数组中,每个元素有两个字段:dateclosing_price

    %# Generate some random data
    C = cell(31, 2);
    C(:, 1) = arrayfun(@(z)[num2str(z), '-Oct-03'], 1:length(C), 'Un', 0);
    C(:, 2) = num2cell(100 * randn(1, length(C)));
    X = cell2struct(C, {'date', 'closing_price'}, 2);
    

    现在说正事:

    %# Apply DWT
    [cA, cD] = dwt([X.closing_price], 'db4');
    
    %# Prepare x-axis values
    t = 1:2:length(X);
    
    %# Plot result with respect to date
    figure
    subplot(2, 1, 1), plot(t, cA)
    title('Approximation coefficients'), xlabel('day'), ylabel('C_A')
    subplot(2, 1, 2), plot(t, cD)
    title('Detail coefficients'), xlabel('day'), ylabel('C_D')
    

    这是你应该得到的:

    希望有帮助!

    【讨论】:

    • 绘制图形时出现错误。它显示“使用绘图时出错。向量必须具有相同的长度。”也可以在 x 轴上有日期值本身(我的意思是不将它们更改为 1 2 3 4 等)...
    • size(cA)=size(cD)=19 and size(t)=31 .... 应用 [cA, cD] = dwt([X.closing_price], 'db4') ; cA 和 cD 计数将变得小于输入数据的计数......因此我收到错误“向量必须是相同的长度”......
    • 非常感谢您的解决方案。那么,我不能每天都进行绘图吗?
    • 简而言之,没有。但是我有点误导你,我将 x 轴的值设置为 1 到 19 以避免错误。实际上,x 轴值应该是1:2:length(X),每隔一天跳过一次。我仍然觉得 length(X) 是 31 很奇怪,但 cAcD 各有 19 个样本。他们应该有一半的样本X,每个。请注意,我已更正了解决方案,但您应该查看您的数据并进行验证。
    • 我还想知道一件事。是否可以在查找 DWT 时使用 whos 并获取函数使用的内存量(RAM)
    猜你喜欢
    • 2013-07-20
    • 2012-05-23
    • 2016-05-11
    • 1970-01-01
    • 2016-02-18
    • 2018-10-20
    • 1970-01-01
    • 2015-11-28
    • 2018-10-23
    相关资源
    最近更新 更多