计算 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')
这是你应该得到的:
希望有帮助!