Дискретное вейвлет-преобразование Matlab wfastmod в wmulden

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


person Mambo    schedule 02.02.2016    source источник
comment
Попробуйте прочитать это, чтобы получить наилучшие возможные ответы   -  person brainkz    schedule 02.02.2016
comment
В моем MATLAB нет wfastmod, вы имеете в виду wfastmcd?   -  person Matthias W.    schedule 02.02.2016
comment
Да это wfastmcd!   -  person Mambo    schedule 02.02.2016
comment
@MatthiasW. Вы имеете представление об этой функции?   -  person Mambo    schedule 02.02.2016
comment
@Mambo: еще нет, извини. Просто попытался получить справку/документацию о вашей функции и подумал о переформатировании вашего сообщения с помощью code tags.   -  person Matthias W.    schedule 02.02.2016
comment
Может быть, вы можете решить свою проблему с ответом, который я дал?   -  person Mauker    schedule 15.01.2017


Ответы (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

Это должно делать свое дело.

person Mauker    schedule 04.01.2017
comment
Я думаю, вы должны объединять переменные x_den вместо того, чтобы заменять их на каждой итерации... - person kurokirasama; 12.12.2018