计算 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 的样本。
演示代码
以下代码生成随机数据并将其放入结构数组中,每个元素有两个字段:date 和 closing_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')
这是你应该得到的:
希望有帮助!