原始信號沒有負值 濾波器 濾波後 為什麼會出現負值?

我在matlab里用一個 high-pass filter 得到大於0.01Hz的信號, 原始信號中沒有負值,為什麼得到的結果會有負值?


高通濾波以後,低頻分量被去除,其中第一個去除的就是頻率為0的分量,也就是信號的均值。比如一個離散信號[4 3 5 2 1 3 3 4 3 2 3]這麼一個信號,均值為3。那麼高通以後,首先去掉均值3,信號就變成了[1 0 2 -1 -2 0 0 1 0 -1 0]。這不就有負值了!

下面有同學問,為什麼低通濾波以後也有負值?好吧,其實是同一個道理,但是為了說的再清楚一點,這裡需要一點頻域變換的基礎,但是相當簡單,希望不至於讓大家皺眉頭。頻域變換有那麼幾個,比如正弦變換,餘弦變換,大名鼎鼎的傅里葉變換,這裡為了便於理解,所以用了離散餘弦變換(DCT),畢竟傅里葉變換中的基函數是複數函數,稍微有點不那麼直觀。

好,讓我們從餘弦逆變換(IDCT)開始。還是我上面提到的那個離散信號吧,他的波形是這個樣子的。

figure 1: the waveform of signal a

IDCT的公式是:

x(n) = sum_{k=1}^Nw(k)y(k)cos(pifrac{(2n-1)(k-1)}{2N}),n=1,2,ldots,N

這裡n是時間採樣的序號,大N是總採樣次數或者說是信號長度,k是頻率的序號。y(k)是DCT的係數。w(k)是變換中的一個參數,可以理解為幅度係數。

w(k) = sqrt{frac{1}{N}},~	extrm{for}~k = 1

w(k) = frac{2}{sqrt{N}},~	extrm{for}~k = 2,3,ldots,N

IDCT公式就是說原始信號a是由N個餘弦信號線性加權得到的。對於我們的問題,這11個餘弦信號在沒有乘以前面的係數w(k)y(k)之前長成下面的樣子。

figure 2:basis functions for DCT

DCT變換係數如下:y = [9.9499 0.7531 0.9687 1.5356 -0.7531 -1.7684 0.1623 0.1800 1.8622 0.9567 -0.0220]

w(k)y(k) = [3.0000 0.4541 0.5841 0.9260 -0.4542 -1.0664 0.0979 0.1085 1.1229 0.5769 -0.0133] (看第一個,就是頻率為0的餘弦函數的係數,也就相當於是均值,是3吧。)

那麼將原始的餘弦信號乘上係數w(k)y(k)得到的11組餘弦信號長成下面的樣子:

figure 3: weighed basis functions for DCT

乘上了係數w(k)y(k)只不過改變了這些餘弦函數的幅度。所以figure2和figure3的差別就是信號變強或者變弱了而已,波形沒變化。

好,現在把figure 3裡面的11個餘弦信號加在一起就還原成信號a了。所謂高通,低通,帶通濾波就是把其中幾組信號從原信號中減掉。不管具體是減哪幾個,當你減掉的這些信號足夠大的時候,你就有可能減出負數來。就這麼簡單。(剛才作圖的時候頻率忘記乘上pi了,現在的對了。)


推薦閱讀:

Python的各種imread函數在實現方式和讀取速度上有何區別?
三維碼的應用前景?
彩色圖片是通過何種演算法變成黑白圖片?
用OpenCV處理圖圖片,只顯示圖片中的黃色乒乓球,其他區域為黑色?
我目前是研一的計算機視覺學生,我的課題是醫學圖像的分割,但我在matlab opencv itk徘徊?

TAG:信號 | 圖像處理 | 通信 | 傅里葉變換FourierTransform | 信號與系統 |