2013-07-19 67 views
-1

我有一個信號,它是一個數組(長度爲m),並且我有一個類型爲salt和papper的噪音。我已經應用了低通濾波器(LPF),並取得了非常好的結果。不過,我想對信號應用中值濾波器,並與LPF的結果進行比較)。如何在Matlab上將中值濾波器應用於信號(數組)?

我知道功能是medfilt1(X,N),但不知道N代表什麼。

函數是:y = medfilt1(X,X,BLKSZ,DIM)我想將它應用到一個數組raw_Signal <5000x1double>

對於葛X raw_Signal我用

N=3 %the default number 
BLKSZ= 5 
DIM = 1 %apply the filter to the rows 

函數的輸出是經濾波的信號,但我不理解輸入的N很好。任何人都可以用一個例子向我解釋。

回答

0

它是過濾器的長度。一般來說,第k個值是N/2個先前值和N/2個後續值的中值。

即,

對於n奇數,Y(k)是x的值(K-(N-1)/ 2:K +(N-1)/ 2)。對於n偶數,y(k)是x(kn/2),x(k-(n/2)+1)的中值,..., x(k +(n/2) - 1)。在這種情況下,medfilt1排序號碼,然後取平均 第n/2的和(n/2)+1元素

1

N是多少樣本被用於計算每個中間值。所以如果你的信號是[a b c d e f g],並且N是3,那麼第二個輸出是中位數([a b c])。第三個是中位數([b c d])等等。第一個輸出有點問題,因爲你會嘗試使用一個不存在的樣本,所以它只是中值([0 a b]);

手邊的直覺建議如下(不要把它作爲一個確切的描述):一般來說,N越大,過濾將發生的越多。考慮這一點:如果你在任何3個樣本中只有一個噪聲點(異常值),那麼其他2箇中值將是一個非常好的估計值,並且所有的噪聲都會被過濾掉。如果在一組特定的3個樣本中有2個噪聲點,則中位數將最終選擇2個噪聲點中的1個。 N = 5會抓住它,但會更擾亂你的無噪點。

不要惹BLKSZ。正如幫助文字所說,只有在內存不足的情況下才使用它,如果是,請選擇BLKSZ,以便BLKSZ x N x 8(工作矩陣的字節大小)介於1MB和100MB之間。否則,請將其保留。因爲你有一個矢量,所以假設DIM = 1,所以Y = medfilt1(X,N)就是你所需要的。

+0

好吧,其實我誤解了N與BLKSZ。其實我不知道這是什麼BLKSZ,但我知道什麼是N. 你能解釋一下BLKSZ是什麼嗎?它與CPU的內存有什麼關係? –

+0

您是否閱讀過文檔? ** y = medfilt1(x,n,blksz)使用for循環一次計算blksz(塊大小)輸出採樣。**它進一步描述計算blksz輸出採樣將需要N×blksize的工作矩陣。 blksize默認是長度(x)(換句話說,計算一遍中的所有輸出樣本)。如果這會掛斷您的機器,或者無法完成,請按照上述說明選擇blksize。 – Peter

1

點X上的1D中值濾波器通過取相鄰值的N/2-1,對它們進行排序並返回中值來工作。一個實際的例子:

x=[1,1,1,2,3,4,1,1,1] 

x(4), N=3 => [1,(2),3] => median(x(4)) = 2 

x(4), N=5 => [1,1,(2),3,4] => median(x(4)) = 2 

x(6), N=3 => [3,4,1] => [1,(3),4] median(x(6)) = 3 

x(6), N=5 => [2,3,4,1,1] => [1,1,(2),3,4] => median(x(6)) = 2 

希望幫助。

相關問題