Matlab дискретное вейвлет-преобразование wfastmod в wmulden
Мне интересно получить дискретное вейвлет-преобразование для уменьшения шума более чем 50000 точек данных. Я использую инструмент wmulden - matlab для вейвлет-преобразования. В рамках этой функции, wfastmcd, вызывается другая функция, которая принимает только 50000 точек данных за раз. Было бы очень полезно, если бы кто-нибудь предложил, как разделить точку данных, чтобы получить преобразование всего набора данных, или если есть какой-либо другой инструмент matlab, доступный для таких вычислений.
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
Это должно делать свое дело.