摘 要: 數字濾波技術是數字信號處理的一個重要組成部分,,濾波器的設計是信號處理的核心問題之一,。根據FIR濾波器的原理,,提出了FIR濾波器的窗函數設計法,,并對常用的幾種窗函數進行了比較。給出了在MATLAB環(huán)境下,,用窗函數法" title="窗函數法">窗函數法設計FIR濾波器的過程和設計實例,。仿真結果表明,,設計的FIR濾波器的各項性能指標均達到了指定要求,,設計過程簡便易行,。該方法為快速、高效地設計FIR濾波器提供了一個可靠而有效的途徑,。
關鍵詞: 窗函數 FIR濾波器 MATLAB 仿真
隨著信息時代的到來,,數字信號處理已經成為當今一門極其重要的學科和技術,,并且在通信、語音,、圖像,、自動控制等眾多領域得到了廣泛的應用。在數字信號處理中,,數字濾波器" title="數字濾波器">數字濾波器占有極其重要的地位,,它具有精度高、可靠性好,、靈活性大等特點?,F代數字濾波器可以用軟件或硬件兩種方式來實現。軟件方式實現的優(yōu)點是可以通過濾波器參數的改變去調整濾波器的性能,。
MATLAB是一種面向科學和工程計算的語言,它集數值分析,、矩陣運算,、信號處理和圖形顯示于一體,具有編程效率高,、調試手段豐富,、擴充能力強等特點。MATLAB的信號處理工具箱具有強大的函數功能,,它不僅可以用來設計數字濾波器,,還可以使設計達到最憂化,是數字濾波器設計的強有力工具,。
1 FIR濾波器的設計
1.1 FIR濾波器簡介[1]
根據沖激響應的時域特性,,數字濾波器可分為無限長沖激響應濾波器(IIR)和有限長沖激響應濾波器(FIR)。FIR的突出優(yōu)點是:系統總是穩(wěn)定的,、易于實現線性相位,、允許設計多通帶(或多阻帶)濾波器,但與IIR相比,,在滿足同樣阻帶衰減的情況下需要的階數較高,。濾波器的階數越高,占用的運算時間越多,,因此在滿足指標要求的情況下應盡量減少濾波器的階數,。
FIR濾波器的基本結構可以理解為一個分節(jié)的延時線,把每一節(jié)的輸出加權累加,,可得到濾波器的輸出,。FIR濾波器的沖激響應h(n)是有限長的,數學上M階FIR濾波器可以表示為:
FIR濾波器的設計問題實質上是確定能滿足所要求的轉移序列或脈沖響應" title="脈沖響應">脈沖響應的常數的問題,,設計方法主要有窗函數法,、頻率采樣法和等波紋最佳逼近法等,。
1.2 窗函數設計法的步驟[3][4]
窗函數設計法是一種通過截短和計權的方法使無限長非因果序列成為有限長脈沖響應序列的設計方法。通常在設計濾波器之前,,應該先根據具體的工程應用確定濾波器的技術指標,。在大多數實際應用中,數字濾波器常常被用來實現選頻操作,,所以指標的形式一般為在頻域中以分貝值給出的相對幅度響應和相位響應,。
用窗函數法設計FIR濾波器的步驟如下:
(1)根據過渡帶寬及阻帶衰減要求,,選擇窗函數的類型并估計窗口長度N(或階數M=N-1),。窗函數類型可根據最小阻帶衰減AS獨立選擇,因為窗口長度N對最小阻帶衰減AS沒有影響,。在確定窗函數類型以后,,可根據過渡帶寬小于給定指標確定所擬用的窗函數的窗口長度N。設待求濾波器的過渡帶寬為△ω,,它與窗口長度N近似成反比。窗函數類型確定后,,其計算公式也確定了,,不過這些公式是近似的,得出的窗口長度還要在計算中逐步修正,。原則是在保證阻帶衰減滿足要求的情況下,,盡量選擇較小的N。在N和窗函數類型確定后,,即可調用MATLAB中的窗函數求出" title="求出">求出窗函數wd(n),。
(2)根據待求濾波器的理想頻率響應求出理想單位脈沖響應hd(n),。如果給出待求濾波器的頻率響應為Hd(ejω),,則理想的單位脈沖響應可以用下面的傅里葉反變換式求出:
在一般情況下,hd(n)是不能用封閉公式表示的,,需要采用數值方法表示,。從ω=0到ω=2π采樣N點,采用離散傅里葉反變換(IDFT)即可求出,。
?。?)計算濾波器的單位脈沖響應h(n)。它是理想單位脈沖響應和窗函數的乘積,,即h(n)=hd(n)·wd(n),,在MATLAB中用點乘命令表示為h=hd·wd。
?。?)驗算技術指標是否滿足要求,。為了計算數字濾波器在頻域中的特性,,可調用freqz子程序,如果不滿足要求,,可根據具體情況,,調整窗函數類型或長度,直到滿足要求為止,。
使用窗函數法設計時要滿足以下兩個條件:
?。?)窗譜主瓣盡可能地窄,以獲得較陡的過渡帶,;
?。?)盡量減少窗譜的最大旁瓣的相對幅度,也就是使能量盡量集中于主瓣,,減小峰肩和紋波,,進而增加阻帶的衰減。
根據工程經驗,,給定的濾波器指標參數一般為通帶截止頻率" title="截止頻率">截止頻率ωp,、阻帶截止頻率ωs、實際通帶波動Rp和最小阻帶衰減As,。窗函數設計的經驗公式為:
在實際工程中常用的窗函數有五種,即矩形窗,、三角窗,、漢寧窗、海明窗和凱澤窗,。這些窗函數在MATLAB中分別用boxcar,、triang、hanning,、hamming,、kaiser實現,它們之間的性能比較如表1所示,。
2 MATLAB環(huán)境下的設計實例[2][4]
2.1 高通濾波器的設計
用窗函數設計高通濾波器,,性能指標如下:通帶截止頻率ωs=0.2π,阻帶截止頻率ωp=0.3π,,實際通帶波動Rp=0.25dB,最小阻帶衰減As=70dB,。
分析:從表1可以看出凱澤窗能提供74dB的最小阻帶衰減,所以選用凱澤窗進行設計,,程序主要部分如下:
As=70;
ωs=0.2*π;
ωp=0.3*π
tr_width=ωp-ωs; %計算過渡帶寬
M=ceil((As-7.95)*2*π/(14.36*tr_width)+1)+1; %按凱澤窗計算濾波器長度
disp([’濾波器的長度為’,num2str(M)]);
beta=0.1102*(As-8.7); %計算凱澤窗的β值
n=[0:1:M-1];
disp([’線性相位斜率為’,num2str(beta)]);
w_kai=(kaiser(M,beta))’; %求凱澤窗函數
ωc=(ωs+ωp)/2;
hd=ideal_lp(π,M)-ideal_lp(ωc,M); %求理想脈沖響應
h=hd.*w_kai; %設計的脈沖響應為理想脈沖響應與窗函數乘積
[db,mag,pha,grd,ω]=freqz_m(h,[1]);
delta_ω=2*π/1000;
Rp=-(min(db(ωp/delta_ω+1:1:501)));
disp([’實際通帶波動為’,num2str(Rp)]); %以下為作圖程序
As=-round(max(db(1:1:ωs/delta_ω+1)));
disp([’最小阻帶衰減為’,num2str(As)]);
subplot(1,1,1);
subplot(2,2,1);
stem(n,hd);
title(’理想脈沖響應’);
axis([0 M-1 -0.4 0.8]);
ylabel(’hd(n)’);
subplot(2,2,2);
stem(n,w_kai);
title(’凱澤窗’);
axis([0 M-1 0 1.1]);
ylabel(’wd(n)’);
subplot(2,2,3);
stem(n,h);
title(’實際脈沖響應’);
axis([0 M-1 -0.4 0.8]);
xlabel(’n’);ylabel(’h(n)’);
subplot(2,2,4);
plot(ω/π,db);
title(’幅度響應/dB’);
axis([0 1 -100 10]);
grid;
xlabel(’以π為單位的頻率’);
ylabel(’分貝數/dB’);
程序運行結果如圖1所示,。實際通帶波動為0.04369,最小阻帶衰減為70,濾波器長度為89,,線性相位斜率為6.7553,符合設計要求,。
2.2 低通濾波器的設計
用窗函數設計低通濾波器,,性能指標如下:通帶截止頻率ωp=0.1π,阻帶截止頻率ωs=0.25π,,實際通帶波動Rp=0.10dB,最小阻帶衰減As=40dB,。
分析:從表1可以看出,漢寧窗,、海明窗和凱澤窗能提供大于40dB的最小阻帶衰減,。但漢寧窗的旁瓣峰值較小,而主瓣寬度和海明窗一樣,??梢允篂V波器的階數較少,所以選用漢寧窗進行設計,,程序主要部分如下:
ωp=0.10*π;
ωs=0.25*π;
tr_width=ωs-ωp; %計算過渡帶寬
M=ceil(6.6*/tr_width)+1; %按漢寧窗計算濾波器長度
disp([’濾波器的長度為’,num2str(M)]);
n=0:M-1;
ωc=(ωs+ωp)/2; %截止頻率取為兩邊緣頻率的平均值
hd=ideal_lp(ωc,M); %求理想脈沖響應
w_han=(hanning(M))’; %求漢寧窗函數
h=hd.*w_han; %設計的脈沖響應為理想脈沖響應與窗函數乘積
[db,mag,pha,grd,ω]=freqz_m(h,[1]);%以下為作圖語句
delta_ω=2*π/1000;
Rp=-(min(db(1:1: ωp/delta_ω+1)));
disp([’實際通帶波動為’,num2str(Rp)]); %以下為作圖程序
As=-round(max(db(ωs/delta_ω+1:1:501)));
disp([’最小阻帶衰減為’,num2str(As)]);
subplot(221)
stem(n,hd);
title(’理想沖擊響應’),
axis([0 M-1 -0.1 0.3]);
ylabel(’hd(n)’);
subplot(222)
stem(n,w_han);
title(’漢寧窗’),
axis([0 M-1 0 1.1]);
ylabel(’wd(n)’);
subplot(223)
stem(n,h);
title(’實際沖擊響應’),
axis([0 M-1 -0.1 0.3]);
xlabel(’n’);
ylabel(′h(n)′);
subplot(224);
plot(ω/π,db);
title(′幅度響應(db)′);
axis([0 1 -100 10]),
grid;
xlabel(′以π為單位的頻率′);
ylabel(′分貝數′);
仿真結果如圖2所示,。實際通帶波動為0.076565,最小阻帶衰減為44,濾波器長度為67,,符合設計要求,。
與其他高級語言的程序設計相比,MATLAB環(huán)境下可以更方便,、快捷地設計出具有嚴格線性相位的FIR濾波器,,節(jié)省大量的編程時間,提高編程效率,,且參數的修改也十分方便,,還可以進一步進行優(yōu)化設計。相信隨著版本的不斷提高,,MATLAB在數字濾波器技術中必將發(fā)揮更大的作用,。同時,用MATLAB計算有關數字濾波器的設計參數,,如H(z),、h(n)等,對于數字濾波器的硬件實現也提供了一條簡單而準確的途徑和依據,。
參考文獻
1 吳湘淇,,肖 熙,郝曉莉. 信號系統與信號處理的軟硬件實現[M].北京:電子工業(yè)出版社,,2003
2 張葛祥,,李 娜.MATLAB仿真技術與應用[M].北京:清華大學出版社,2003
3 陳桂明.應用MATLAB語言處理數字信號與數字圖像[M].北京:科學出版社,2001
4 陳懷琛. 數字信號處理教程-MATLAB釋義與實現[M].北京:電子工業(yè)出版社,,2004