1. 程式人生 > >FIR濾波器設計

FIR濾波器設計

一、摘要

  前面一篇文章介紹了通過FDATool工具箱實現濾波器的設計,見“”,這裡通過幾個例子說明採用Matlab語言設計FIR濾波器的過程。

二、實驗平臺

  Matlab7.1

三、實驗原理

  以低通濾波器為例,其常用的設計指標有:

  1. 通帶邊緣頻率fp(數字頻率為Ωp)
  2. 阻帶邊緣頻率fst (數字頻率為Ωst)
  3. 通帶內最大紋波衰減δp=-20log10(1-αp),單位為 dB
  4. 阻帶最小衰減αs=-20log10s),單位為 dB
  5. 阻帶起伏αs
  6. 通帶峰值起伏αp

  其中,以1、2、3、4條最為常用。5、6條在程式中估算濾波器階數等引數時會用到。

  數字頻率 = 模擬頻率/取樣頻率

四、例項分析

例1  用凱塞窗設計一FIR低通濾波器,通帶邊界頻率Ωp=0.3pi,阻帶邊界頻率 Ωs
=0.5pi,阻帶衰減δs不小於50dB。

方法一:手動計算濾波器階數N和β值,之後在通過程式設計出濾波器。

第一步:通過過渡頻寬度和阻帶衰減,計算濾波器的階數B和β值。

第二步:通過程式設計濾波器。

程式如下:

b = fir1(29,0.4,kaiser(30,4.55));

[h1,w1]=freqz(b,1);  

plot(w1/pi,20*log10(abs(h1))); 

axis([0,1,-80,10]); 

grid;

xlabel('歸一化頻率/p') ;

ylabel('幅度/dB') ;

波形如下:

方法二:

採用[n,Wn,beta,ftype] = kaiserord(f,a,dev)函式來估計濾波器階數等,得到凱塞窗濾波器。

  這裡的函式kaiserord(f,a,dev)或者kaiserord(f,a,dev,fs):

  f為對應的頻率,fs為取樣頻率;當f用數字頻率表示時,fs則不需要寫。

  a=[1 0]為由f指定的各個頻帶上的幅值向量,一般只有0和1表示;a和f長度關係為(2*a的長度)- 2=(f的長度)

  devs=[0.05 10^(-2.5)]用於指定各個頻帶輸出濾波器的頻率響應與其期望幅值之間的最大輸出誤差或偏差,長度與a相等,計算公式:

阻帶衰減誤差=αs,通帶衰減誤差=αp,可有濾波器指標中的3、4條得到。

  fs預設為2Hz。

程式如下:

fcuts = [0.3  0.5]; %歸一化頻率omega/pi,這裡指通帶截止頻率、阻帶起始頻率

mags = [1 0];

devs = [0.05 10^(-2.5)];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs);  %計算出凱塞窗N,beta的值

hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale'); 

freqz(hh);

波形如下:

  實際中,一般呼叫MATLAB訊號處理工具箱函式remezord來計算等波紋濾波器階數N和加權函式W(ω),呼叫函式remez可進行等波紋濾波器的設計,直接求出濾波器係數。函式remezord中的陣列fedge為通帶和阻帶邊界頻率,陣列mval是兩個邊界處的幅值,而陣列dev是通帶和阻帶的波動,fs是取樣頻率單位為Hz。

例2  利用雷米茲交替演算法設計等波紋濾波器,設計一個線性相位低通FIR數字濾波器,其指標為:通帶邊界頻率fc=800Hz,阻帶邊界fr=1000Hz,通帶波動 阻帶最小衰減At=40dB,取樣頻率fs=4000Hz。 

解:在MATLAB中可以用remezord 和remez兩個函式設計

程式如下: 

fedge=[800 1000]; 

mval=[1 0]; 

dev=[0.0559 0.01];

fs=4000; 

[N,fpts,mag,wt]=remezord(fedge,mval,dev,fs); 

b=remez(N,fpts,mag,wt); 

[h,w]=freqz(b,1,256); 

plot(w*2000/pi,20*log10(abs(h))); 

grid; 

xlabel('頻率/Hz') ;

ylabel('幅度/dB');

波形如下:

例3 利用MATLAB程式設計設計一個數字帶通濾波器,指標要求如下:通帶邊緣頻率:Ωp1=0.45pi,Ωp2=0.65pi,通帶峰值起伏:δ1<=1[dB]。阻帶邊緣頻率:Ωs1=0.3pi,Ωs2=0.8pi,最小阻帶衰減:δ2>=40[dB] 。

方法一:窗函式法

程式如下:

[n,wn,bta,ftype]=kaiserord([0.3 0.45 0.65 0.8],[0 1 0],[0.01 0.1087 0.01]);%用kaiserord函式估計出濾波器階數n和beta引數

h1=fir1(n,wn,ftype,kaiser(n+1,bta),'noscale');

[hh1,w1]=freqz(h1,1,256);

figure(1)

subplot(2,1,1)

plot(w1/pi,20*log10(abs(hh1)))

grid

xlabel('歸一化頻率w');ylabel('幅度/db');

subplot(2,1,2)

plot(w1/pi,angle(hh1))

grid

xlabel('歸一化頻率w');ylabel('相位/rad');

波形如下:

濾波器係數為:

h1 =

  Columns 1 through 8 

    0.0041    0.0055   -0.0091   -0.0018   -0.0056   -0.0000    0.0391   -0.0152

  Columns 9 through 16 

   -0.0381    0.0077   -0.0293    0.0940    0.0907   -0.2630   -0.0517    0.3500

  Columns 17 through 24 

   -0.0517   -0.2630    0.0907    0.0940   -0.0293    0.0077   -0.0381   -0.0152

  Columns 25 through 31 

    0.0391   -0.0000   -0.0056   -0.0018   -0.0091    0.0055    0.0041

如果直接用freqz(h1,1,256),得幅頻特性和相頻特性曲線:

方法二:等波紋法設計

程式如下:

[n,fpts,mag,wt]=remezord([0.3 0.45 0.65 0.8],[0 1 0],[0.01 0.1087 0.01]);%用remezord函式估算出remez函式要用到的階n、歸一化頻帶邊緣向量fpts、頻帶內幅值響應向量mag及加權向量w,使remez函式設計出的濾波器滿足f、a及dev指定的效能要求。
h2=remez(n,fpts,mag,wt);%設計出等波紋濾波器
[hh2,w2]=freqz(h2,1,256);
figure(2)
subplot(2,1,1)
plot(w2/pi,20*log10(abs(hh2)))
grid
xlabel('歸一化頻率w');ylabel('幅度/db');
subplot(2,1,2)
plot(w2/pi,angle(hh2))
grid
xlabel('歸一化頻率w');ylabel('相位/rad');
h2

波形如下:

濾波器係數如下:

h2 =

  Columns 1 through 9 

   -0.0013    0.0092   -0.0255   -0.0642    0.1177    0.0922   -0.2466   -0.0466    0.3116

  Columns 10 through 17 

   -0.0466   -0.2466    0.0922    0.1177   -0.0642   -0.0255    0.0092   -0.0013

如果直接用freqz(h2,1,256);得幅頻特性和相頻特性曲線:

方法三:採用FDATool工具

 這種方法需要事先計算出濾波器的階數,bate值,然後設定相應引數,最後生成濾波器。

 設定介面如下圖所示:

   將上述圈圈的區域設定好之後,生成濾波器,最後通過analysis選單可以觀察生成的濾波器的各種特性曲線和濾波器係數。這裡的濾波器係數跟方法一的一樣。

波形如下:

五、結果分析

5.1  濾波器設計總結

  FIR濾波器實現一般採用窗函式法和等紋波設計法。窗函式法還包含兩個分支,一種是用公式先手動算出N值和其他對應得窗函式引數值,再代入窗函式和fir1實現,一種是用函式*rord估算出N和相應引數再用fir1實現。不過要注意*rord會低估或高估階次n,可能會使濾波器達不到指定的效能,這時應稍微增加或降低階次。如果截止頻率在0Nyquist頻率附近,或者設定的dev值較大,則得不到正確結果。

  濾波器實現形式及特點:由於一般的濾波器在利用窗函式是其通帶波紋和阻帶波紋不同(一般為第一個阻帶波紋最大)因此,在滿足第一個阻帶衰減旁瓣時,比其頻率高的旁瓣,它們的衰減都大大超出要求。而根據阻帶衰減與項數的近似關係N = P(δ2)*fs/TW,可得當阻帶衰減越大,所需項數越多。

5.2  窗函式法和等波紋設計的不同之處

  窗函式設計是通過最小平方積分辦法來設計的,即該濾波器的誤差為:

  

  即要求最小方法來設計濾波器,這樣的濾波器更忠實於理想濾波器(即濾波係數更接近於理想濾波器)。

證明如下:

因此,幅度頻譜差值越小,實際濾波器就越接近理想濾波器。

  而等波紋濾波器是通過最大加權誤差最小化來實現,其誤差為:

  

要求該誤差最小來實現濾波器,得出來的濾波係數較窗函式設計相差較遠。

以下通過對例3中的h1h2作比較。

%sigsum是用來對陣列各元素進行求和

function y=sigsum(n1,n2,n,x);

y=0; 

for i=n1+1-min(n):n2+1-min(n)

    y=y+x(i);

end

n=0.001:30.001;

h=2*cos(0.55*pi*(n-15)).*sin(0.175*pi*(n-15))./(pi*(n-15));

delta1=h-h1;

n=0.001:16.001;

h=2*cos(0.55*pi*(n-15)).*sin(0.175*pi*(n-15))./(pi*(n-15));

delta2=h-h2;

y1=sigsum(0,30,[0:30],(abs(delta1).^2))/31;

y2=sigsum(0,16,[0:16],(abs(delta2).^2))/17;

 結果如下:

y1 =

  1.9099e-004

y2 =

    0.0278

  由此得到用窗函式實現的濾波係數比用等波紋濾波器係數的每一項更接近於理想濾波器(y1為用窗函式實現的與理想濾波器的差值,y2為用等波紋濾波器實現的與理想濾波器的差值);

  對比二者的幅度頻譜可知,等波紋濾波器阻帶邊緣比用窗函式實現的更平滑(理想濾波器為垂直下降的)。

  從設計的角度考慮,由於窗函式設計法都是通過已有的窗函式對理想濾波器的改造,因此,可以用手算的辦法方便的設計濾波器。

而等波紋濾波器,其實現是通過大量的迭代運算來實現,這樣的方法一般只能通過軟體來設計。

  項數的問題由於等波紋濾波器能較平均的分佈誤差,因此對於相同的阻帶衰減,其所需的濾波係數比窗函式的要少。

5.3 幾點說明

1.相頻特性曲線形狀不同說明

  上面第一個圖是用角度為單位畫出來的,下面的圖是用rad單位畫出來的。從圖形可以觀察到在0.30.8數字頻率間兩個圖都是嚴格的線性相位,至於下面的圖為什麼在這個區間會有跳變是因為rad的區間只有-pi——pi,當相位由-pi繼續增加時只能跳到pi而不能大於pi,而角度表示則可以連續增大。

2.呼叫firl或者reme函式時,用scale(預設方式)對濾波器進行歸一化,即濾波器通帶中心頻率處的響應幅值為0db。用noscale不對濾波器歸一化。

相關推薦

VIVADO FIR濾波器設計與仿真(二)

put tps ilo 用法 ilog ril [ ] 技術 仿真 VIVADO FIR濾波器設計與仿真(二) 在VIVADO FIR濾波器設計與仿真(一)中產生了兩路正弦信號,頻率分別為4MHz和5MHz,今天要進行FIR濾波器設計,在進行濾波器設計之前,需要對濾波器的參

簡單的FIR濾波器設計(Matlab)

濾波器分析還是Matlab做更方便,寫的特別簡單的fir濾波器設計程式碼。 其實也也就是套用了函式的框架,註釋了一點關鍵內容方便學習而已。 其實網上很多教程,善用搜索吧。 % fir filter % Better used in GNSS data analysis. % wp: 通帶邊界歸

matlab的FIR濾波器設計

1.matlab設計fir濾波器的方法 matlab可以使用fir1函式設計低通、高通、低通、帶通等具有嚴格線性相位特性的濾波器。 fir1函式的幾種語法如下: b=fir1(n,wn); b=fir1(n,wn,'ftype'); b=fir1(n,wn,'

FIR數字濾波器的FPGA實現(二)-序列FIR濾波器設計(1)

(二)FIR數字濾波器的FPGA實現-序列FIR濾波器設計 文章目錄 (二)FIR數字濾波器的FPGA實現-序列FIR濾波器設計 0 序列FIR濾波器基本原理 1 基於移位暫存器的序列 FIR 濾波器 1.1 基本理論

加窗FIR濾波器設計實驗【內含實際使用filter的例子,討論了filter、fftfilt、filtfilt的差別】

轉自:http://blog.sina.com.cn/s/blog_6e8d34350100ng3f.html 題一: 利用加窗傅立葉級數法,設計一個具有如下指標的線性相位FIR低通濾波器:通帶截止頻率在4rad/s處,阻帶截止頻率在6rad/s處,最大通帶衰減為0.2dB,最小阻帶衰減為4

FIR濾波器設計例子

窗函式設計法窗函式設計線性相位 FIR 濾波器的步驟如下: 1 ) 確定所要設計的濾波器的型別和技術指標; 2 ) 確定窗函式。查表,根據阻帶衰減指標選擇窗函式,選擇原則是:在符合指標要求情況下,選擇最簡單的窗函式; 3 ) 確定目標濾波器的頻率特性和 h n d (

【DSP學習筆記】基於CCS5.5的FIR濾波器設計

一、概述        本文是基於TMS320C5510晶片設計的FIR濾波器。介紹利用matlab和CCS5.5設計FIR濾波器的過程和模擬結果。輸入訊號包含100Hz和200Hz兩個成分,通過matlab生成一個FIR低通濾波器的各階係數,利用CCS完成訊號處理並且展示模

基於Simulink的FIR濾波器設計與模擬--初識matlab

一直對訊號分析與處理有著比較濃厚的興趣,只可惜數學水平挺一般,難以將興趣發展為job,因此就蜻蜓點水了。 公司裡的幾乎人人都會simulink,而我是十足的門外漢。看別人用得行雲流水總是挺眼饞的,於是也班門弄斧試試。 實現的功能是將三個幅度都為1初相位0,頻率分別為1

FIR濾波器設計

一、摘要   前面一篇文章介紹了通過FDATool工具箱實現濾波器的設計,見“”,這裡通過幾個例子說明採用Matlab語言設計FIR濾波器的過程。 二、實驗平臺   Matlab7.1 三、實驗原理   以低通濾波器為例,其常用的設計指標有: 通帶邊緣頻率fp(數字頻率為Ωp)阻帶邊緣頻率fst (數字頻率

FIR濾波器設計(Kaiser窗案例)

例題:利用Kaiser窗設計一個FIR低通濾波器,低通邊界頻率0.3pi,祖代邊界頻率0.5pi,阻帶衰減At不小於50dB。 Kaiser 窗函式: 令 beta = pi * alpha, 步驟1. 確定濾波器階數N N = (At -

使用MATLAB設計FIR濾波器

AMM lap 獲取 處理 ali 圖片 組成 相關 高通 1. 采用fir1函數設計,fir1函數可以設計低通、帶通、高通、帶阻等多種類型的具有嚴格線性相位特性的FIR濾波器。語法形式: b = fir1(n, wn) b = fir1(n, wn, ‘ftyp

序列FIR濾波器---Verilog設計

數字濾波器 數字濾波器從實現結構上劃分,有FIR和IIR兩種。FIR的特點是:線性相位、消耗資源多;IIR的特點是:非線性相位、消耗資源少。由於FIR系統的線性相位特點,設計中絕大多數情況都採用FIR濾波器。 線性相位系統的意義,這裡的線性相位指的是在設計者關心的通帶範圍內,LTI系

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

1.設計引數         首先,先明白幾個概念。通帶,阻帶,過渡帶,通帶紋波和阻帶紋波分別是什麼?看下圖,        範圍稱為通帶,對於允許誤差而言,這個範圍,稱為通帶紋波。同樣的,對於範圍則是阻帶,這個範圍,稱為阻帶紋波。中間的黑色部分是過度帶。角頻率稱為通帶邊

如何快速設計一個FIR濾波器(二)通俗易懂,膜拜

一、理想低通濾波器單位脈衝響應是什麼樣 在如何快速設計一個FIR濾波器(一)中,我們介紹了一種簡單設計FIR的方法——零極點法。這個方法非常簡單,稍加培訓,用筆和紙就能完成;當然缺點也很顯而易見:零極點設計出的濾波器,只能給出大概的頻率響應,對於一些要求較高的系統,顯得無能為力。今天我們介紹一種更加嚴謹的方

FPGA數字訊號處理(三)序列FIR濾波器Verilog設計

該篇是FPGA數字訊號處理的第三篇,選題為DSP系統中極其常用的FIR濾波器。本文將在上一篇“FPGA數字訊號處理(二)並行FIR濾波器Verilog設計” https://blog.csdn.net/fpgadesigner/article/details/8

濾波器設計(2):經典FIR數字濾波器設計

引言以前有一篇IIR濾波器設計的文章。與IIR相對應,這篇文章主要講FIR濾波器的設計。以下一段摘自百度百科。FIR(Finite Impulse Response)濾波器:有限長單位衝激響應濾波器,又稱為非遞迴型濾波器,是數字訊號處理系統中最基本的元件,它可以在保證任意幅頻

語音訊號濾波去噪——使用FLATTOPWIN設計FIR濾波器

摘 要 本課程設計主要內容是設計利用視窗設計法選擇FLATTOPWIN窗設計一個FIR 濾波器,對一段含噪語音訊號進行濾波去噪處理並根據濾波前後的波形和頻譜分析濾波效能。本課程設計模擬平臺為MATLAB7.0,開發工具是M語言程式設計,通過課程設計瞭解FI

FIR數字濾波器設計頻率抽樣法MATLAB模擬

1.MATLAB原始碼 M=63; Wp=0.5*pi;%所需頻率取樣點個數及通帶截止頻率 m=0:(M+1)/2; Wm=2*pi*m./(M+1);%通頻帶上的取樣點及阻帶截止頻率 mtr=fl

fir濾波器

fir // reference implementation of an FIR template <typename SampleType, typename NumericType> static void reference (const NumericType* firC

[Matlab]橢圓濾波器設計:低通、高通、帶通和帶阻

fig atl info grid AR subplot 要求 ear 波紋 橢圓濾波器(Elliptic filter)又稱考爾濾波器(Cauer filter): 這是在通帶和阻帶等波紋的一種濾波器。 橢圓濾波器相比其他類型的濾波器,在階數