《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > MATLAB環(huán)境下FIR濾波器的設(shè)計(jì)與仿真

MATLAB環(huán)境下FIR濾波器的設(shè)計(jì)與仿真

2008-04-01
作者:楊大柱

  摘 要: 數(shù)字濾波技術(shù)是數(shù)字信號(hào)處理的一個(gè)重要組成部分,濾波器的設(shè)計(jì)是信號(hào)處理的核心問題之一。根據(jù)FIR濾波器的原理,提出了FIR濾波器的窗函數(shù)設(shè)計(jì)法,并對(duì)常用的幾種窗函數(shù)進(jìn)行了比較。給出了在MATLAB環(huán)境下,用窗函數(shù)法" title="窗函數(shù)法">窗函數(shù)法設(shè)計(jì)FIR濾波器的過程和設(shè)計(jì)實(shí)例。仿真結(jié)果表明,設(shè)計(jì)的FIR濾波器的各項(xiàng)性能指標(biāo)均達(dá)到了指定要求,設(shè)計(jì)過程簡(jiǎn)便易行。該方法為快速、高效地設(shè)計(jì)FIR濾波器提供了一個(gè)可靠而有效的途徑。
  關(guān)鍵詞: 窗函數(shù) FIR濾波器 MATLAB 仿真


  隨著信息時(shí)代的到來,數(shù)字信號(hào)處理已經(jīng)成為當(dāng)今一門極其重要的學(xué)科和技術(shù),并且在通信、語音、圖像、自動(dòng)控制等眾多領(lǐng)域得到了廣泛的應(yīng)用。在數(shù)字信號(hào)處理中,數(shù)字濾波器" title="數(shù)字濾波器">數(shù)字濾波器占有極其重要的地位,它具有精度高、可靠性好、靈活性大等特點(diǎn)?,F(xiàn)代數(shù)字濾波器可以用軟件或硬件兩種方式來實(shí)現(xiàn)。軟件方式實(shí)現(xiàn)的優(yōu)點(diǎn)是可以通過濾波器參數(shù)的改變?nèi)フ{(diào)整濾波器的性能。
  MATLAB是一種面向科學(xué)和工程計(jì)算的語言,它集數(shù)值分析、矩陣運(yùn)算、信號(hào)處理和圖形顯示于一體,具有編程效率高、調(diào)試手段豐富、擴(kuò)充能力強(qiáng)等特點(diǎn)。MATLAB的信號(hào)處理工具箱具有強(qiáng)大的函數(shù)功能,它不僅可以用來設(shè)計(jì)數(shù)字濾波器,還可以使設(shè)計(jì)達(dá)到最憂化,是數(shù)字濾波器設(shè)計(jì)的強(qiáng)有力工具。
1 FIR濾波器的設(shè)計(jì)
1.1 FIR濾波器簡(jiǎn)介[1]

  根據(jù)沖激響應(yīng)的時(shí)域特性,數(shù)字濾波器可分為無限長沖激響應(yīng)濾波器(IIR)和有限長沖激響應(yīng)濾波器(FIR)。FIR的突出優(yōu)點(diǎn)是:系統(tǒng)總是穩(wěn)定的、易于實(shí)現(xiàn)線性相位、允許設(shè)計(jì)多通帶(或多阻帶)濾波器,但與IIR相比,在滿足同樣阻帶衰減的情況下需要的階數(shù)較高。濾波器的階數(shù)越高,占用的運(yùn)算時(shí)間越多,因此在滿足指標(biāo)要求的情況下應(yīng)盡量減少濾波器的階數(shù)。
  FIR濾波器的基本結(jié)構(gòu)可以理解為一個(gè)分節(jié)的延時(shí)線,把每一節(jié)的輸出加權(quán)累加,可得到濾波器的輸出。FIR濾波器的沖激響應(yīng)h(n)是有限長的,數(shù)學(xué)上M階FIR濾波器可以表示為:
  
  FIR濾波器的設(shè)計(jì)問題實(shí)質(zhì)上是確定能滿足所要求的轉(zhuǎn)移序列或脈沖響應(yīng)" title="脈沖響應(yīng)">脈沖響應(yīng)的常數(shù)的問題,設(shè)計(jì)方法主要有窗函數(shù)法、頻率采樣法和等波紋最佳逼近法等。
1.2 窗函數(shù)設(shè)計(jì)法的步驟[3][4]
  窗函數(shù)設(shè)計(jì)法是一種通過截短和計(jì)權(quán)的方法使無限長非因果序列成為有限長脈沖響應(yīng)序列的設(shè)計(jì)方法。通常在設(shè)計(jì)濾波器之前,應(yīng)該先根據(jù)具體的工程應(yīng)用確定濾波器的技術(shù)指標(biāo)。在大多數(shù)實(shí)際應(yīng)用中,數(shù)字濾波器常常被用來實(shí)現(xiàn)選頻操作,所以指標(biāo)的形式一般為在頻域中以分貝值給出的相對(duì)幅度響應(yīng)和相位響應(yīng)。
  用窗函數(shù)法設(shè)計(jì)FIR濾波器的步驟如下:
 ?。?)根據(jù)過渡帶寬及阻帶衰減要求,選擇窗函數(shù)的類型并估計(jì)窗口長度N(或階數(shù)M=N-1)。窗函數(shù)類型可根據(jù)最小阻帶衰減AS獨(dú)立選擇,因?yàn)榇翱陂L度N對(duì)最小阻帶衰減AS沒有影響。在確定窗函數(shù)類型以后,可根據(jù)過渡帶寬小于給定指標(biāo)確定所擬用的窗函數(shù)的窗口長度N。設(shè)待求濾波器的過渡帶寬為△ω,它與窗口長度N近似成反比。窗函數(shù)類型確定后,其計(jì)算公式也確定了,不過這些公式是近似的,得出的窗口長度還要在計(jì)算中逐步修正。原則是在保證阻帶衰減滿足要求的情況下,盡量選擇較小的N。在N和窗函數(shù)類型確定后,即可調(diào)用MATLAB中的窗函數(shù)求出" title="求出">求出窗函數(shù)wd(n)。
 ?。?)根據(jù)待求濾波器的理想頻率響應(yīng)求出理想單位脈沖響應(yīng)hd(n)。如果給出待求濾波器的頻率響應(yīng)為Hd(e),則理想的單位脈沖響應(yīng)可以用下面的傅里葉反變換式求出:
  
  在一般情況下,hd(n)是不能用封閉公式表示的,需要采用數(shù)值方法表示。從ω=0到ω=2π采樣N點(diǎn),采用離散傅里葉反變換(IDFT)即可求出。
 ?。?)計(jì)算濾波器的單位脈沖響應(yīng)h(n)。它是理想單位脈沖響應(yīng)和窗函數(shù)的乘積,即h(n)=hd(n)·wd(n),在MATLAB中用點(diǎn)乘命令表示為h=hd·wd。
 ?。?)驗(yàn)算技術(shù)指標(biāo)是否滿足要求。為了計(jì)算數(shù)字濾波器在頻域中的特性,可調(diào)用freqz子程序,如果不滿足要求,可根據(jù)具體情況,調(diào)整窗函數(shù)類型或長度,直到滿足要求為止。
  使用窗函數(shù)法設(shè)計(jì)時(shí)要滿足以下兩個(gè)條件:
  (1)窗譜主瓣盡可能地窄,以獲得較陡的過渡帶;
 ?。?)盡量減少窗譜的最大旁瓣的相對(duì)幅度,也就是使能量盡量集中于主瓣,減小峰肩和紋波,進(jìn)而增加阻帶的衰減。
  根據(jù)工程經(jīng)驗(yàn),給定的濾波器指標(biāo)參數(shù)一般為通帶截止頻率" title="截止頻率">截止頻率ωp、阻帶截止頻率ωs、實(shí)際通帶波動(dòng)Rp和最小阻帶衰減As。窗函數(shù)設(shè)計(jì)的經(jīng)驗(yàn)公式為:
  
  在實(shí)際工程中常用的窗函數(shù)有五種,即矩形窗、三角窗、漢寧窗、海明窗和凱澤窗。這些窗函數(shù)在MATLAB中分別用boxcar、triang、hanning、hamming、kaiser實(shí)現(xiàn),它們之間的性能比較如表1所示。


2 MATLAB環(huán)境下的設(shè)計(jì)實(shí)例[2][4]
2.1 高通濾波器的設(shè)計(jì)

  用窗函數(shù)設(shè)計(jì)高通濾波器,性能指標(biāo)如下:通帶截止頻率ωs=0.2π,阻帶截止頻率ωp=0.3π,實(shí)際通帶波動(dòng)Rp=0.25dB,最小阻帶衰減As=70dB。
  分析:從表1可以看出凱澤窗能提供74dB的最小阻帶衰減,所以選用凱澤窗進(jìn)行設(shè)計(jì),程序主要部分如下:
  As=70;
  ωs=0.2*π;
  ωp=0.3*π
  tr_width=ωp-ωs;                %計(jì)算過渡帶寬
  M=ceil((As-7.95)*2*π/(14.36*tr_width)+1)+1;    %按凱澤窗計(jì)算濾波器長度
  disp([’濾波器的長度為’,num2str(M)]);
  beta=0.1102*(As-8.7); %計(jì)算凱澤窗的β值
  n=[0:1:M-1];
  disp([’線性相位斜率為’,num2str(beta)]);
    w_kai=(kaiser(M,beta))’; %求凱澤窗函數(shù)
    ωc=(ωs+ωp)/2;
    hd=ideal_lp(π,M)-ideal_lp(ωc,M); %求理想脈沖響應(yīng)
    h=hd.*w_kai; %設(shè)計(jì)的脈沖響應(yīng)為理想脈沖響應(yīng)與窗函數(shù)乘積
    [db,mag,pha,grd,ω]=freqz_m(h,[1]);
    delta_ω=2*π/1000;
    Rp=-(min(db(ωp/delta_ω+1:1:501)));
    disp([’實(shí)際通帶波動(dòng)為’,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(’理想脈沖響應(yīng)’); 
      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(’實(shí)際脈沖響應(yīng)’);
      axis([0 M-1 -0.4 0.8]);
      xlabel(’n’);ylabel(’h(n)’);
      subplot(2,2,4);
      plot(ω/π,db);
      title(’幅度響應(yīng)/dB’);
      axis([0 1 -100 10]);
      grid;
      xlabel(’以π為單位的頻率’);
      ylabel(’分貝數(shù)/dB’);
  程序運(yùn)行結(jié)果如圖1所示。實(shí)際通帶波動(dòng)為0.04369,最小阻帶衰減為70,濾波器長度為89,線性相位斜率為6.7553,符合設(shè)計(jì)要求。


2.2 低通濾波器的設(shè)計(jì)
  用窗函數(shù)設(shè)計(jì)低通濾波器,性能指標(biāo)如下:通帶截止頻率ωp=0.1π,阻帶截止頻率ωs=0.25π,實(shí)際通帶波動(dòng)Rp=0.10dB,最小阻帶衰減As=40dB。
  分析:從表1可以看出,漢寧窗、海明窗和凱澤窗能提供大于40dB的最小阻帶衰減。但漢寧窗的旁瓣峰值較小,而主瓣寬度和海明窗一樣??梢允篂V波器的階數(shù)較少,所以選用漢寧窗進(jìn)行設(shè)計(jì),程序主要部分如下:
  ωp=0.10*π;
  ωs=0.25*π; 
  tr_width=ωs-ωp; %計(jì)算過渡帶寬
  M=ceil(6.6*/tr_width)+1; %按漢寧窗計(jì)算濾波器長度
  disp([’濾波器的長度為’,num2str(M)]);
  n=0:M-1;
  ωc=(ωs+ωp)/2; %截止頻率取為兩邊緣頻率的平均值
  hd=ideal_lp(ωc,M); %求理想脈沖響應(yīng)
  w_han=(hanning(M))’; %求漢寧窗函數(shù)
  h=hd.*w_han; %設(shè)計(jì)的脈沖響應(yīng)為理想脈沖響應(yīng)與窗函數(shù)乘積
  [db,mag,pha,grd,ω]=freqz_m(h,[1]);%以下為作圖語句
  delta_ω=2*π/1000;
  Rp=-(min(db(1:1: ωp/delta_ω+1)));
  disp([’實(shí)際通帶波動(dòng)為’,num2str(Rp)]); %以下為作圖程序
  As=-round(max(db(ωs/delta_ω+1:1:501)));
  disp([’最小阻帶衰減為’,num2str(As)]);
    subplot(221)
    stem(n,hd);
    title(’理想沖擊響應(yīng)’),
    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(’實(shí)際沖擊響應(yīng)’),
    axis([0 M-1 -0.1 0.3]);
    xlabel(’n’);
    ylabel(′h(n)′);
    subplot(224);
    plot(ω/π,db);
    title(′幅度響應(yīng)(db)′);
    axis([0 1 -100 10]),
    grid;
    xlabel(′以π為單位的頻率′);
    ylabel(′分貝數(shù)′);
    仿真結(jié)果如圖2所示。實(shí)際通帶波動(dòng)為0.076565,最小阻帶衰減為44,濾波器長度為67,符合設(shè)計(jì)要求。


    與其他高級(jí)語言的程序設(shè)計(jì)相比,MATLAB環(huán)境下可以更方便、快捷地設(shè)計(jì)出具有嚴(yán)格線性相位的FIR濾波器,節(jié)省大量的編程時(shí)間,提高編程效率,且參數(shù)的修改也十分方便,還可以進(jìn)一步進(jìn)行優(yōu)化設(shè)計(jì)。相信隨著版本的不斷提高,MATLAB在數(shù)字濾波器技術(shù)中必將發(fā)揮更大的作用。同時(shí),用MATLAB計(jì)算有關(guān)數(shù)字濾波器的設(shè)計(jì)參數(shù),如H(z)、h(n)等,對(duì)于數(shù)字濾波器的硬件實(shí)現(xiàn)也提供了一條簡(jiǎn)單而準(zhǔn)確的途徑和依據(jù)。

參考文獻(xiàn)
1 吳湘淇,肖 熙,郝曉莉. 信號(hào)系統(tǒng)與信號(hào)處理的軟硬件實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2003
2 張葛祥,李 娜.MATLAB仿真技術(shù)與應(yīng)用[M].北京:清華大學(xué)出版社,2003
3 陳桂明.應(yīng)用MATLAB語言處理數(shù)字信號(hào)與數(shù)字圖像[M].北京:科學(xué)出版社,2001
4 陳懷琛. 數(shù)字信號(hào)處理教程-MATLAB釋義與實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2004

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。