2016-02-02 9 views
1

Мне интересно получить дискретное вейвлет-преобразование для снижения шума более чем на 50 000 точек данных. Я использую инструмент wmulden - matlab для вейвлет-трансформации. При этой функции wfastmcd вызывается другая функция, которая принимает только 50000 точек данных за раз. Было бы очень полезно, если бы кто-нибудь предложил разбивать точку данных, чтобы получить преобразование всего набора данных, или если для такого рода вычислений имеется какой-либо другой инструмент matlab.matlab дискретное вейвлет-преобразование wfastmod в wmulden

+0

Рассмотрите возможность чтения [this] (http://stackoverflow.com/help/how-to-ask), чтобы получить наилучшие ответы – brainkz

+0

В моем MATLAB нет 'wfastmod', вы имеете в виду' wfastmcd'? –

+0

Да, это wfastmcd! – Mambo

ответ

0

Я использовал цикл 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 

это должно сделать трюк.