1. 程式人生 > >[數字訊號處理]使用窗函式設計FIR濾波器

[數字訊號處理]使用窗函式設計FIR濾波器

1.設計引數    

    首先,先明白幾個概念。通帶,阻帶,過渡帶,通帶紋波和阻帶紋波分別是什麼?看下圖,

       範圍稱為通帶,對於允許誤差而言,這個範圍,稱為通帶紋波。同樣的,對於範圍則是阻帶,這個範圍,稱為阻帶紋波。中間的黑色部分是過度帶。角頻率稱為通帶邊緣頻率,角頻率則被稱為阻帶起始頻率。

       通常的濾波器的設計,都會指明這幾個引數,最後設計的濾波器,必須滿足這幾個引數。當然,這裡舉得例子是低通濾波器的,高通或者帶通,就與之相反了。

2.理想FIR低通濾波器

      首先,先由理想低通濾波器為出發點開始考慮。理想低通濾波器的頻響如下所示


       這裡的

,表示截止頻率。

       先由理想的濾波器出發,求其理想濾波器的單位衝擊響應。得到了單位衝擊響應,也就得到了濾波器的係數。這樣,我們就設計出了一個理想的濾波器。這是一個完美的想法,那麼開始動手吧,尋找他的單位衝擊響應。運用離散時間的傅立葉逆變換,有如下的式子。


       由此,我們得到了一個單位衝擊響應的表示式(sinc是辛格函式),到這我們就可以設計出一個理想的濾波器了嗎?好吧,讓我們再確認一遍。第一,這個式子是離散的。對於單位衝擊響應,本來就應該是離散的,沒有錯,很好,我們距離理想濾波器又近了一步。第二,這個式子所求出的單位衝擊響應的個數,很不幸!個數是無限的。到這裡,我們基本可以確定了,理想濾波器是實現不了的。

       雖然理想濾波器是實現不了的,但是我們可以退一步,從無限的理想濾波器的單位衝擊響應中,在選擇一部分衝擊響應,構成一個不太理想的,但又達到一定標準的濾波器。我們只能“將就”著使用這個不太理想的濾波器,那麼接下來還有一個問題,我們要如何從無限的數列中選擇出有限的一部分,從而達到我們的設計要求。

3.窗函式

       首先,我們先考慮最簡單的情況。對於理想單位衝擊響應而言,其形狀大概和一個高斯分佈很像(當然,只是很像,n=0時候,單位衝擊響應的值最大,由兩邊慢慢減少。當然,可能也出現負值。)!所以,我們為了能使得濾波器的效能接近理想濾波器,那麼,我們選擇其最主要的部分,也就是,值較大的部分。其餘部分則放棄。根據之前的敘述,我們可以使用如下式子表示。


      這個式子確實可以幫助我們選擇一部分有限的數列。而這個式子,被稱為矩形窗。可以看出,N越大,效能越街進理想濾波器。這裡N稱為窗函式的長度。

      這就是我們選定的視窗,然後我們把視窗函式加上,也就是加窗!其實也就一個乘法,如下所示。


  這樣,也就完成了一個加窗。

  但是,在實際的實踐過程中,很少用矩形窗的。其原因是,矩形窗的阻帶衰減不夠,僅僅只有21[dB]。於是,各種各樣的視窗就被提出了。各有各的特點,在我們所學的初步的設計中,我們就僅僅看阻帶衰減就夠了。各種窗函式的效能如下。

================================================

      窗函式                       過渡帶大小                       阻帶衰減                               

================================================

  矩形窗                           1.8π/N                                  21[dB]

  漢寧窗                            6.2π/N                                 44[dB]

  漢明窗                            6.6π/N                                 53[dB]

布萊克曼窗                        11π/N                                 74[dB]

4.用窗函式實現一個FIR濾波器

       以上說了很多有關於窗函式的原理,現在來整理一下設計的步驟。

       1.根據設計的規格,引數要求,我們選擇一個適合的窗函式。這裡主要我們還是看阻帶衰減,阻帶衰減要大於給定的值。一般,若沒有給定阻帶衰減,我們則需要通過通帶紋波和阻帶紋波去求,如下。


      2.根據要求的通帶邊緣頻率和阻帶起始頻率,計算過度區的大小,從而計算出窗函式的長度。

      3.最後,根據窗函式和理想濾波器的單位衝擊響應,計算出我們所需要的濾波器的單位衝擊響應。

      現在,我們來實戰一下,假設我們需要設計如下濾波器。

    

       規格中,沒有給定阻帶衰減,我們只能自己計算。

   

       這裡,阻帶衰減為40.8[dB],我們選擇的窗的阻帶衰減不能比這個小,這裡其實漢寧窗就可以做到。但我還是選擇用漢明窗去做。然後,計算窗長度。


        窗長度有了,計算單位衝擊響應吧。

  

       這樣,我們就得到了一個FIR濾波器。下面是我們計算出來的這個濾波器的單位衝擊響應。


       5.寫在最後的話

       到此,我們“設計”出了一個濾波器,我們也順利的得出了它的單位脈衝響應。

       但是,濾波器真的可以實現麼?真的可以設計出這樣一個濾波器麼?

       我覺得要拿著這個單位脈衝響應結果,去實際計算一下,才能發現,這樣的濾波器是實現不了的!拿教科書上的話來說,這個濾波器是非因果的!