關於FIR濾波器的係數

一、FIR頻率採樣結構

    頻率採樣實現是FIR濾波器的另一種結構方式,其中描述濾波器的參數爲所求的頻率響應的參數,而不是衝激響應h(n)。爲了得到頻率採樣結構,我們通過等間隔的頻率採樣指定所需要的頻率響應。

    我們可以使用MATLAB中的函數實現其具體的操作,我們主要用到了fir1函數或者fir2函數。

    fir1函數是用窗函數法設計線性相位FIRDF的工具箱函數,以實現線性相位FIRDF的標準窗函數法設計。

    b=fir1(n,wn);

    b=fir1(n,wn,'ftype');

    b=fir1(n,wn,'ftype',window);

    其中b爲濾波器係數,n爲濾波器階數。wn爲截止頻率的取值,其取值範圍必須爲0≤Wn≤1。

    在採樣前我們首先要對頻率進行歸一化處理。在fir1濾波器設計時採用的是歸一化頻率。實際採樣頻率爲fs,實際的截止頻率爲fc,設歸一化截止頻率爲fcm,fcm=fc/(fs/2)。當設計帶通和帶阻濾波器時, Wn=[W1 W2],W1≤ω≤W2。

例如設計一個48階的濾波器:

fs=3200;%採樣頻率
fs_half=fs/2;%歸一化頻率
f1=45/fs_half;f2=55/fs_half;
b = fir1(48,[f1 f2]);%設計濾波器

[H w]=freqz(b,1,512);%求頻響

[b_new,a_new]=invfreqz(H,w,48,0);
figure;freqz(b,1,512);
figure;freqz(b_new,1,512);

    fir2函數可以用於設計有任意頻率響應的加窗FIR濾波器,對標準的低通、帶通、高通和帶阻濾波器的設計可使用fir1函數. 

    函數fir2的各種形式如下:
    b = fir2(n,f,m)
    b = fir2(n,f,m,window)
    b = fir2(n,f,m,npt)
    b = fir2(n,f,m,npt,window)
    b = fir2(n,f,m,npt,lap)
    b = fir2(n,f,m,npt,lap,window)

    關於函數中的參數,n爲濾波器的階數。向量f是指定頻率點的幅度響應樣本,它所劃分的頻率段與m定義的幅度響應樣本對應;f和m具有相同的長度,並且f的第一個和最後一個分量分別是0和1;可以對f中的頻點進行復制,從而跳變地逼近幅度響應指標。
    npt指定了函數fir2()進行內插得頻率響應的柵格點數目,默認值爲512。
    lap指定了在f中重複頻率點間插入的區域大小。

例如設計一個30階的FIR濾波器,其代碼如下:

f = [0 0.6 0.6 1]; m = [1 1 0 0];
b = fir2(30,f,m);
[h,w] = freqz(b,1,128);
plot(f,m,w/pi,abs(h))
legend(‘Ideal’,‘fir2 Designed’)
title(‘Comparison of Frequency Response Magnitudes’)

再舉一個例子。用fir2設計一個60階的FIR濾波器,要求濾波器0到π/4的幅度響應爲0 ,π/4到π/2的幅度響應爲1/4,π/2到3π/4的幅度響應爲0,3π/4到1的幅度響應爲1。其程序如下:

n=60;
f=[0 0.25 0.25 0.50 0.50 0.75 0.75 1];
m=[0 0 1/4 1/4 0 0 1 1];
%對幅頻響應插值時插值點的個數
npt=1024;
%插值時不連續點轉變成連續時的點數 lap=50; %衰減爲30dB的切比雪夫窗函數
window=chebwin(61,30);
b=fir2(n,f,m,npt,lap,window);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章