天天看點

魯棒局部均值分解 (RLMD)(Matlab代碼實作)

 👨‍🎓個人首頁:​​研學社的部落格​​ 

💥💥💞💞歡迎來到本部落格❤️❤️💥💥

🏆部落客優勢:🌞🌞🌞部落格内容盡量做到思維缜密,邏輯清晰,為了友善讀者。

⛳️座右銘:行百裡者,半于九十。

📋📋📋本文目錄如下:🎁🎁🎁

目錄

​​💥1 概述​​

​​📚2 運作結果​​

​​🎉3 參考文獻​​

​​🌈4 Matlab代碼實作​​

💥1 概述

RLMD 是一種改進的局部均值分解,由一組優化政策提供支援。優化政策可以處理LMD中的邊界條件、包絡估計和篩選停止準則。它同時從混合信号中提取一組單分量信号(稱為乘積函數)及其相關的解調信号(即AM信号和FM信号),與其他自适應信号處理方法(如EMD)相比,這是最吸引人的特征。RLMD可用于時頻分析。

📚2 運作結果

魯棒局部均值分解 (RLMD)(Matlab代碼實作)
魯棒局部均值分解 (RLMD)(Matlab代碼實作)
魯棒局部均值分解 (RLMD)(Matlab代碼實作)
魯棒局部均值分解 (RLMD)(Matlab代碼實作)

部分代碼:

[x, display, stop_thre, sifting_stopping_mode, max_iter, max_pfs, smooth_mode,...

    ma_span, ma_iter_mode, extd_r, x_energy, pfs, ams, fms, iterNum, fvs]...

    = initial(x,varargin{:});

% Initialize main loop

i = 0;

xs = x; % copy x to xs for sifting process, reserve original input as x.

nx = length(x);

while i < max_pfs && ~stoplmd(xs, x_energy) % outer loop for PF selection    

    i = i+1;    

    % initialize variables used in PF sifting loop

    a_i = ones(1,nx);

    s_j = zeros(max_iter,nx);

    a_ij = zeros(max_iter, nx);

    % PF sifting iteration loop

    j = 0;

    stop_sifting = 0;

    s = xs;

    while j < max_iter && ~stop_sifting %  inner loop for sifting process

        j = j+1;

        [m_j, a_j, n_extr] = lmd_mean_amp(s, smooth_mode, ma_span, ma_iter_mode,...

            extd_r);

        % force to stop iter if number of extrema of s is smaller than 3.

        if n_extr < 3

            break;

        end

        h_j = s-m_j; % remove mean.

        s = h_j./a_j; % demodulate amplitude.

        a_i = a_i .* a_j; % mulitiply every ai

        a_ij(j, :) = a_i;

        s_j(j, :) = s;

        [stop_sifting,fvs(i,:)] = is_sifting_stopping(a_j, j, fvs(i,:), sifting_stopping_mode, stop_thre);

    end % sift iteration loop

    switch sifting_stopping_mode

        case {'liu'}

            [~, opt0] = min(fvs(i,1:j)); % ***Critical Step***

            opt_IterNum = min(j, opt0); % in case iteration stop for n_extr<3

            %             opt_IterNum = min(j-2, opt0);

        otherwise

            error('No specifications for sifting_stopping_mode.');

    end

    ams(i, :) = a_ij(opt_IterNum, :); % save each amplitude modulation function in ams.

    fms(i, :) = s_j(opt_IterNum, :); % save each pure frequency modulation function in fms.

    pfs(i, :) = ams(i, :).*fms(i, :); % gain Product Funcion.

    xs = xs-pfs(i, :); % remove PF just obtained from input signal;

    iterNum(i) = opt_IterNum; % record the iteration times taken by of each PF sifing.

end % main loop

pfs(i+1, :) = xs; % save residual in the last row of PFs matrix.

ams(i+1:end,:) = []; fms(i+1:end,:) = []; pfs(i+2:end,:) = []; fvs(i+1:end,:) = [];

ort = io(x, pfs);

% Output visualization

if display == 1

    lmdplot(pfs, ams, fms, smooth_mode);

end

end

%--------------------------- built-in functions ---------------------------

% initialize signal and options

function [x, display, stop_thre, sifting_stopping_mode, max_iter, max_pfs, smooth_mode,...

    ma_span, ma_iter_mode, extd_r, x_energy, pfs, ams, fms, iterNum, fvs]...

    = initial(x,varargin)

🎉3 參考文獻

​​🌈​​4 Matlab代碼實作

繼續閱讀