天天看點

[數字信号處理]使用窗函數設計FIR濾波器

1.設計參數    

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

[數字信号處理]使用窗函數設計FIR濾波器

       範圍

[數字信号處理]使用窗函數設計FIR濾波器

稱為通帶,對于允許誤差而言,

[數字信号處理]使用窗函數設計FIR濾波器

這個範圍,稱為通帶紋波。同樣的,對于範圍

[數字信号處理]使用窗函數設計FIR濾波器

則是阻帶,

[數字信号處理]使用窗函數設計FIR濾波器

這個範圍,稱為阻帶紋波。中間的黑色部分是過度帶。角頻率

[數字信号處理]使用窗函數設計FIR濾波器

稱為通帶邊緣頻率,

[數字信号處理]使用窗函數設計FIR濾波器

角頻率則被稱為阻帶起始頻率。

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

2.理想FIR低通濾波器

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

[數字信号處理]使用窗函數設計FIR濾波器

       這裡的

[數字信号處理]使用窗函數設計FIR濾波器

,表示截止頻率。

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

[數字信号處理]使用窗函數設計FIR濾波器

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

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

3.窗函數

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

[數字信号處理]使用窗函數設計FIR濾波器

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

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

[數字信号處理]使用窗函數設計FIR濾波器

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

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

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

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

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

  矩形窗                           1.8π/N                                  21[dB]

  漢甯窗                            6.2π/N                                 44[dB]

  漢明窗                            6.6π/N                                 53[dB]

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

4.用窗函數實作一個FIR濾波器

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

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

[數字信号處理]使用窗函數設計FIR濾波器

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

      3.最後,根據窗函數和理想濾波器的機關沖擊響應,計算出我們所需要的濾波器的機關沖擊響應。

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

[數字信号處理]使用窗函數設計FIR濾波器

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

[數字信号處理]使用窗函數設計FIR濾波器

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

[數字信号處理]使用窗函數設計FIR濾波器

        窗長度有了,計算機關沖擊響應吧。

[數字信号處理]使用窗函數設計FIR濾波器

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

[數字信号處理]使用窗函數設計FIR濾波器

       5.寫在最後的話

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

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

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

        這個問題的解決方法,和窗函數的FIR設計代碼的實作在下一節[數字信号處理]機關沖擊響應的頻響與FIR的實作代碼(C語言)。

         部落格位址:http://blog.csdn.net/thnh169/ 

繼續閱讀