exponenta event banner

Сгенерируйте код MATLAB для 1D стационарного шумоподавления вейвлета

Можно сгенерировать MATLAB® код, чтобы воспроизвести основанное на приложении 1D неподкошенное (стационарное) шумоподавление вейвлета в командной строке. Необходимо выполнить эту операцию в инструменте Stationary Wavelet Transform Denoising 1-D. Вы должны первый denoise ваш сигнал, прежде чем можно будет включить операцию File > Generate Matlab Code (Denoising Process).

1D стационарный вейвлет преобразовывает шумоподавление

  1. Войти waveletAnalyzer в командной строке MATLAB.

  2. Выберите SWT Denoising 1-D.

  3. Загрузите Noisy bumps пример. Выберите File > Example Analysis > Noisy Signals > with sym4 at level 5 - - -> Noisy bumps

  4. Установите пороги можно следующим образом:

    • Уровень 1 — 3.5

    • Уровень 2 — 3.4

    • Уровень 3 — 2.3

    • Уровень 4 — 5.3

    • Уровень 5 — 2.2

    Нажмите Denoise.

  5. Сгенерируйте код MATLAB с File > Generate Matlab Code (Denoising Process).

    Операция генерирует следующий код MATLAB.

    function [sigDEN,wDEC] = func_denoise_sw1d(SIG)
    % FUNC_DENOISE_SW1-D Saved Denoising Process.
    %   SIG: vector of data
    %   -------------------
    %   sigDEN: vector of denoised data
    %   wDEC: stationary wavelet decomposition
    
    % Analysis parameters.
    %---------------------
    wname = 'sym4';
    level = 5;
    
    % Denoising parameters.
    %----------------------
    % meth = 'sqtwolog';
    % scal_OR_alfa = one;
    sorh = 's';    % Specified soft or hard thresholding
    thrParams =  {...
        [...
        1.00000000  1024.00000000     3.50000000; ...
        ]; ...
        [...
        1.00000000  1024.00000000     3.40000000; ...
        ]; ...
        [...
        1.00000000  1024.00000000     2.30000000; ...
        ]; ...
        [...
        1.00000000  1024.00000000     5.29965570; ...
        ]; ...
        [...
        1.00000000  1024.00000000     2.20000000; ...
        ]; ...
        };
    
    % Decompose using SWT.
    %---------------------
    wDEC = swt(SIG,level,wname);
    
    % Denoise.
    %---------
    len = length(SIG);
    for k = 1:level
        thr_par = thrParams{k};
        if ~isempty(thr_par)
            NB_int = size(thr_par,1);
            x      = [thr_par(:,1) ; thr_par(NB_int,2)];
            x      = round(x);
            x(x<1) = 1;
            x(x>len) = len;
            thr = thr_par(:,3);
            for j = 1:NB_int
                if j==1 , d_beg = 0; else d_beg = 1; end
                j_beg = x(j)+d_beg;
                j_end = x(j+1);
                j_ind = (j_beg:j_end);
                wDEC(k,j_ind) = wthresh(wDEC(k,j_ind),sorh,thr(j));
            end
        end
    end
    
    % Reconstruct the denoise signal using ISWT.
    %-------------------------------------------
    sigDEN = iswt(wDEC,wname);
  6. Сохраните func_denoise_sw1d.m в папке на пути поиска файлов MATLAB. Выполните следующий код.

    load noisbump.mat;
    [sigDEN,wDEC] = func_denoise_sw1d(noisbump);
  7. Выберите File > Save Denoised Signal и сохраните сигнал denoised как denoisedbumps.mat в папке на пути поиска файлов MATLAB.

    Выполните следующий код.

    load denoisedbump.mat;
    plot(sigDEN,'k'); axis tight;
    hold on;
    plot(denoisedbump,'r');
    % norm of the difference
    norm(sigDEN-denoisedbump,2)

Примечание

Пороги выведены из подмножества коэффициентов в стационарном разложении вейвлета. Для получения дополнительной информации смотрите Содействующий Выбор.