高版本MATLAB中medfilt1函數(shù)不支持復數(shù)問題

medfilt1函數(shù)功能為一維中值濾波,最近在MATLAB R2018b中使用時,發(fā)現(xiàn)該函數(shù)已經(jīng)不能支持直接輸入復數(shù)進行濾波了,如下圖在幫助文檔中也有說明


1.png

在網(wǎng)上查詢了好久,不知道為啥沒有一點相關(guān)資料。后來下載了MATLAB R2010b進行安裝,果然低版本的medfilt1函數(shù)就是支持輸入復數(shù),進入函數(shù)m文件,發(fā)現(xiàn)高低版本內(nèi)部實現(xiàn)方式不同,但順藤摸瓜、追根溯源一通,最后發(fā)現(xiàn)在哪個版本(高或低具體忘了)中,medfilt1函數(shù)中最終是調(diào)用了求中值函數(shù)median,這也是medfilt1的核心所在,只是對一段數(shù)據(jù)通過一個移動的窗不斷進行median操作,看到這突然有點激動,用復數(shù)一試便知median是支持復數(shù)操作的,這就好辦了,自己動手寫一個medfilt1函數(shù),為了與MATLAB庫函數(shù)區(qū)別開,函數(shù)名為medfilt。

function [y] = medfilt(sig,n)
    % input sig is a column vector
    slen = length(sig);
    y = zeros(slen,1);
    if(mod(n,2)==0)
        N = n/2;
        stpt = zeros(N,1);
        edpt = zeros(N-1,1);
        sigex = [stpt;sig;edpt]; % 前補N個零,后補N-1個零
    else
        N = (n-1)/2;
        adpt = zeros(N,1);
        sigex = [adpt;sig;adpt]; % 前后各補N個零
    end
    for k = 1:slen
        subsig = sigex(k:k+n-1);
        y(k,1) = median(subsig);
    end
end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容