matlab离散小波变换wmmod在wmulden中的应用

时间:2016-02-02 14:54:28

标签: matlab haar-wavelet wavelet-transform

我有兴趣推导出离散小波变换,用于降低超过50,000个数据点的噪声。我正在使用wmulden - matlab工具进行小波变换。在此函数wfastmcd下,正在调用另一个函数,一次只能获取50000个数据点。如果有人建议如何对数据点进行分区以获得整个数据集的变换,或者是否有任何其他matlab工具可用于这类计算,那将非常有用。

1 个答案:

答案 0 :(得分:1)

我使用for循环来解决这个问题。

首先,我计算了我需要在固定大小的50000窗口上拍摄信号的“步数”,例如:

MAX_SAMPLES = 50000;
% mySignalSize is the size of my samples vector.
steps = ceil(mySignalSize/MAX_SAMPLES);

之后,我已经应用wmulden函数“步”次,每次检查我的步长是否不大于原始信号矢量大小,如下所示:

% Wavelet fields
level = 5;
wname = 'sym4';
tptr  = 'sqtwolog';
sorh  = 's';

npc_app = 'heur';
npc_fin = 'heur';

den_signal = zeros(mySignalSize,1);

for i=1:steps

    if (i*MAX_SAMPLES) <= mySignalSize
       x_den = wmulden(originalSignal( (((i-1) * MAX_SAMPLES) + 1) : (i*MAX_SAMPLES) ), level, wname, npc_app, npc_fin, tptr, sorh);
       den_signal((((i-1) * MAX_SAMPLES) + 1):i*MAX_SAMPLES) = x_den;
    else
        old_step = (((i-1) * MAX_SAMPLES) + 1);
        new_step = mySignalSize - old_step;
        last_step = old_step + new_step;
        x_den = wmulden(originalSignal( (((i-1) * MAX_SAMPLES) + 1) : last_step ), level, wname, npc_app, npc_fin, tptr, sorh);
        den_signal((((i-1) * MAX_SAMPLES) + 1):last_step) = x_den;
    end
end

这应该可以解决问题。