MATLAB常用的FIR濾波器設計方法之窗函數法

2021-01-10 快樂的濾波

FIR濾波器很多工科出身的人都不會陌生,在我們的學習和工作中,也常常需要設計FIR濾波器。因為FIR濾波器有兩個特點:濾波器是穩定的以及具有線性相位。FIR濾波器在信號處理相關領域當然也包括本人所在的雷達信號處理領域有著廣泛的應用。本文主要介紹MATLAB最常用的FIR濾波器設計方法之窗函數法。其他的方法將在另一章中介紹。

窗函數法是一種基礎且普遍應用的FIR濾波器設計方法。首先需要根據性能指標(如主瓣寬度、旁瓣衰減等)確定適合的窗函數。 主瓣寬度、旁瓣衰減是一對情敵,想要主瓣寬度窄且旁瓣衰減大,那是電視劇裡都不會出現的情況。實際中,需要根據自己的任務指標權衡。此外,還需要確定階數。然後就可以用fir1函數設計濾波器了。

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

其中:

b:我們設計的fir濾波器係數,長度為n+1;b跟過渡帶的寬度有關,設計時根據性能要求確定。

n:濾波器的階數。注意,b的長度為n+1。

wn:濾波器的截止頻率,可以是一個標量或者多元素的向量。取值範圍0<wn<1,wn = 1對應於奈奎斯特採樣頻率(採樣頻率/2)。wn是單個值時,為低通/高通濾波器,ftype可以為low/high;當wn為有兩個元素的向量[w1 w2 ],w1 < w2 , 為帶通/帶阻濾波器,ftype可以為bandpass/stop; 如果Wn有兩個以上元素[w1 w2 …… wn],w1< w2 <…… <wn,ftype可以為'DC-0' | 'DC-1'。ftype為'DC-0'代表第一個帶(0~w1 )為阻帶(系統默認),ftype為'DC-1'代表第一個帶(0~w1 )為通帶。wn對應於濾波器歸一化增益-6dB處。

window:表示使用的窗函數,最常用的是漢明窗(Hamming)、漢寧窗(Hanning)、三角窗(bartlett、triang)、矩形窗(boxcar)、布萊克曼窗(Blackman)、chebwin(切比雪夫窗)、凱賽窗(Kaiser);默認是漢明窗(Hamming)。各種窗的差別主要在集中於主瓣的能量和分散在所有旁瓣的能量之比。

例如我們需要設計一個50階,截止頻率ω = 0.3π,使用漢明窗的低通濾波器。

b = fir1(50,0.3,'low',hamming(51));

freqz(b,1,512)

lowpass hamming

注意:窗函數長度和濾波器係數b的長度應一致。

改一下需求,需要設計一個50階,通帶為 0.3π <ω <0.6π,旁瓣衰減50dB,採用切比雪夫窗的帶通濾波器。

b = fir1(50,[0.3 0.6],'bandpass',chebwin(51,50));

freqz(b,1,512)

bandpass chebwin

對這個濾波器做個小測試。

fs = 200;%採樣頻率

f1 = 10;

f2 = 50;

f3 = 80;

t = linspace(0,1,fs);

x = 2*sin(2*pi*f1*t)+5*sin(2*pi*f2*t)+3*sin(2*pi*f3*t);

plot(abs(fft(x,512)));

title('原始信號頻譜')

b = fir1(50,[0.3 0.6],'bandpass',chebwin(51,50));

y = filter(b,1,x);

figure;

plot(abs(fft(y,512)));

title('濾波後信號頻譜')

原始信號
濾波後信號

可見頻率為10Hz和80Hz的分量被濾除掉了。

用漢明窗(Hamming)、漢寧窗(Hanning)設計呢?如下圖所示。

再來說一下ftype為'DC-0' | 'DC-1'的時候。舉兩個例子。

設計一個46階,阻帶為ω <0.4π,0.6π <ω <0.9π的濾波器。

bnd = [0.4 0.6 0.9];

b_0 = fir1(46,bnd,'DC-0');

fvtool(b_0,1);

DC-0

如果我們需要把上面的阻帶換為通帶呢?binggo!把ftype:DC-0換成ftype:DC-1 就可以了。

DC-0

把兩個濾波器畫在一起,如下圖:

clc;clear;

bnd = [0.4 0.6 0.9];

b_0 = fir1(46,bnd,'DC-0');

b_1 = fir1(46,bnd,'DC-1');

h = fvtool(b_0,1,b_1,1);

legend(h,'DC-0','DC-1')

kaiser窗

Kaiser窗是一種最優化窗,具有很好的旁瓣抑制性能。

[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)

f是一個矢量,表示帶的邊緣頻率。f的長度是a的長度*2-2。關於f和a定義了一個分段常數響應函數。下面會通過例子說明。範圍為0~fs/2。

dev指定le通帶紋波和阻帶衰減。表示每個頻帶輸出濾波器的頻率響應與其期望值之間最大允許的偏差。

fs:採樣頻率Hz為單位。

比如設計一個通帶為0~1KHz,阻帶為1.5~4KHz,5%的通帶紋波和阻帶衰減為50dB的低通濾波器。

fsamp = 8000;

fcuts = [1000 1500];

mags = [1 0];

devs = [0.05 0.0035];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);

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

fvtool(hh,1);

再如設計一個帶阻濾波器。

fsamp = 8000;

fcuts = [1000 1500 2500 3000 ];

mags = [1 0 1];

devs = [0.05 0.0035 0.05];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);

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

fvtool(hh,1);

下面我們分析一下這個濾波器。fsamp ,採樣頻率。

fcuts ,帶邊緣頻率。fcuts 應小於fsamp/2。

mags = [1 0 1];

我們從上圖中可以看到在0<f<1000Hz時,濾波器為通帶。1000<f<1500時是過渡帶,沒有mags 對應。在1500<f<2500時,濾波器為阻帶,在2500<f<3000時,是過渡帶,沒有mags 對應。在3000<f<4000時,濾波器為通帶。mags 的作用就是定義某一段頻率區間是通帶還是阻帶。

其他的FIR濾波器設計方法在另一章中介紹。

相關焦點

  • 一種改進型的FIR數字濾波器設計
    在數位訊號處理中,濾波佔有極其重要的作用,數字濾波器是譜分析、雷達信號處理、通信信號處理應用中的基本處理算法。目前常用的濾波器設計方法普遍採用matlab仿真,dsp實現。但這一傳統設計方法需要的開發周期較長,且設計過程反覆進行,非常不便。
  • 用MATLAB設計FIR濾波器的方法
    介紹了利用MATLAB信號處理工具箱進行FIR濾波器設計的三種方法:程序設計法、FDATool設計法和SPTool設計法,給出了詳細的設計步驟,並將設計的濾波器應用到一個混和正弦波信號,以驗證濾波器的性能。
  • Matlab輔助DSP設計FIR數字濾波器
    數字濾波器由於其精度高、穩定性好、使用靈活等優點,廣泛應用在各種數位訊號處理領域。數字濾波器根據衝擊響應函數的時域特性,可以分為FIR(有限長衝擊響應濾波器)和IIR(無限長衝擊響應濾波器)。FIR濾波器與IIR濾波器相比,具有嚴格的線性相位,幅度特性可任意等優點。而且,FIR濾波器的單位抽樣響應是有限長的,故一定是穩定的,他又可以用快速傅立葉變換(FFT)算法來實現過濾信號,可大大提高運算效率。
  • 基於FDATool的FIR濾波器設計方法(一)
    圖1  設計FIR濾波器的方法有多種,其中Matlab軟體提供了很多關於濾波器設計的工具箱,FDATool就是一個很好的工具,如圖2所示就是FDATool的界面,可以在Matlab的Command窗口中直接輸入
  • 基於FPGA+MATLAB的串行多階FIR濾波器設計
    摘要 FIR濾波器的設計分為濾波器係數計算和濾波器結構的具體兩個部分。根據單位衝激響應函數的時域特性可分為兩類:無限衝激響應(Infinite Impulse Response,IIR)濾波器和有限衝激響應(Finite Inpulse Response,FIR)濾波器。與IIR濾波器相比,FIR濾波器的實現是非遞歸的,較穩定;且FIR濾波器可獲得嚴格的線性相位特性。因此,應用領域較廣。
  • matlab中的成型濾波器設計
    matlab 中成型濾波器設計有好幾個函數:rcosineFd=9600;Fs=38.4e3;[num,den] = rcosine(Fd,Fs,'sqrt',0.25);freqz(num);其中的Fd表示輸入數據的採樣率
  • 什麼是fir數字濾波器 什麼叫FIR濾波器
    線性相位是指濾波器的相位響應是頻率的線性函數(在+/-180度)。因此濾波器的延時後,所有的頻率相位相同。因而濾波器不會產生相位和延遲扭曲。在某些領域,比如數字解調器,沒有相位或者延遲扭曲是FIR濾波器相對於其他IIR和模擬濾波器的一個關鍵優點2.1.3 線性濾波器的條件是什麼?FIR濾波器經常被設計成為線性相位的,當然不是必須要這麼做。
  • 基於Matlab的FIR數字濾波器設計
    摘要:提出FIR敷字濾波器的設計方案,並基於Matlab實現濾波仿真。通過使用Matlab信號處理工具箱提供的函數,選擇適當的窗函數編寫程序,其中窗函數按照實際信號的處理需求,參數折中選擇。實驗獲得了比較理想的濾波器特性,可以實現較好的濾波作用。
  • Matlab在FIR數字濾波器中的應
    提出FIR數字濾波器的設計方案,並基於Matlab實現濾波仿真。通過使用Matlab信號處理工具箱提供的函數,選擇適當的窗函數編寫程序,其中窗函數按照實際信號的處理需求,參數折中選擇。實驗獲得了比較理想的濾波器特性,可以實現較好的濾波作用。而且在實際應用中只需按需求修改濾波器參數,並結合程序的相應改動,即可實現不同功能的濾波器。
  • 基於Matlab的FIR數字濾波器設計方案
    最後通過建模和仿真證明,本方案中設計的濾波器能夠快速有效組成的常規數字濾波器, 實現不同截止頻率的FIR濾波器,極大地減輕了工作量,實用性較強。  相對於IIR數字濾波器,FIR濾波器以其線性相位的極大優勢得到了更加長足的發展。數字濾波器可以用硬體或軟體兩種方式來實現,而後者的優點是可以通過改變濾波器參數去調整整體性能,而MATLAB所提供的信號處理工具箱具有強大的函數功能,它不僅可以用來設計數字濾波器,還可以使設計達到最憂化,因此它成為了FIR數字濾波器設計的強有力的工具。
  • FIR與IIR濾波器的區別與特點比較
    圖2 IIR濾波器機構的表示方法 在matlab下設計IIR濾波器可使用buttterworth函數設計出巴特沃斯濾波器,使用cheby1函數設計出契比雪夫i型濾波器,使用cheby2設計出契比雪夫II型濾波器
  • 基於MATLAB的數字基帶傳輸的 FIR濾波器的設計
    為了解決理想低通特性存在的問題,可採用升餘弦滾降特性的系統,以使理想低通濾波器的邊緣緩慢下降,並使振幅特性在滾降段中心頻率處呈奇對稱,從而保證滿足奈奎斯特第一準則。這種系統可減小碼間串擾和位定時誤差。 由於FIR數字濾波器可實現對升餘弦滾降特性的近似,故本文經過FIR數字濾波器設計來對各種窗函數進行選擇,並通過窗函數法實現對升餘弦特性低通濾波器的設計,同時用MATIAB來仿真實現。
  • 基於MATLAB的理想低通濾波器的設計
    低通濾波器在信號處理中的作用等同於其它領域如金融領域中移動平均數(moving average)所起的作用;低通濾波器有很多種,其中,最通用的就是巴特沃斯濾波器和切比雪夫濾波器。 數字濾波器設計流程圖
  • matlab濾波器設計-IIR濾波器的設計與仿真
    數字濾波器有多種分類,根據數字濾波器衝激響應的時域特徵,可將數字濾波器分為兩種,即無限長衝激響應(IIR)濾波器和有限長衝激響應(FIR)濾波器。 IIR數字濾波器具有無限寬的衝激響應,與模擬濾波器相匹配,所以IIR濾波器的設計可以採取在模擬濾波器設計的基礎上進一步變換的方法。其設計方法主要有經典設計法、直接設計法和最大平滑濾波器設計法。FIR數字濾波器的單位脈衝響應是有限長序列。
  • 基於Matlab和Visual C++的數字濾波器設計方法
    所以文中提出一種以模擬濾波器為基準,設計具有相同功能而且參數可調的數字濾波器的方法。並以二階RC無源低通濾波電路為例對此過程進行說明,與模擬濾波電路和傳統的數字濾波相比,該方法不僅比傳統的數字濾波算法簡單快捷,而且可有效防止模擬電路中器件的寄生參數、精度、溫度等的影響,使濾波更加穩定。
  • 基於Matlab的FIR型希爾伯特變換器設計
    為了實現數字解調,通常需要藉助希爾伯特變換器對信號進行分解,利用Matlab設計希爾伯特變換器是一種最為快捷、有效的方法。通過具體的設計、仿真及對原始信號和經過希爾伯特變換器輸出延遲信號的比較,說明Matlab是一個在濾波器設計方面很有力的工具。
  • 用頻率採樣法設計FIR濾波器
    有限長脈衝響應(FIR)數字濾波器由於設計靈活,濾波效果好以及過渡帶寬易控制,因此在數位訊號處理領域得到了廣泛的應用。FIR數字濾波器的典型設計方法主要有窗函數法和頻率採樣法。正確理解和掌握這兩種設計方法是學習FIR數字濾波器的一個重要環節。
  • 不同階數的FIR數字濾波器的DSP設計實現
    1 FIR濾波器的設計方法  通常採用窗函數法設計FIR濾波器方法簡單,但是這些濾波器的設計還不是最優的。 首先 通帶和阻帶的波動基本上相等,雖然一般需要δ2δ1,但是在窗函數法中不能分別控制 這些參數。另外對於大部分窗函數來說,通帶內或阻帶內的波動不是均勻的,通常離開過渡 帶時會減小。
  • 基於FPGA的高效FIR濾波器設計與實現
    摘要: 給出了一種基於FPGA的數字濾波器的設計方法。該方法先通過MATLAB設計出一個具有具體指標的FIR濾波器, 再對濾波器係數進行處理, 使之便於在FPGA中實現, 然後採用基於分布式算法和CSD編碼的濾波器結構進行設計, 從而避免了乘法運算, 節約了硬體資源,其流水線的設計方式也提高了運行速度。Matlab和Modelsim仿真表明, 該設計功能正確, 能實現快速濾波。
  • FIR濾波器設計方案
    FIR濾波器設計方案 電子設計 發表於 2018-10-02 14:09:07 1.引言 在信息信號處理過程中,如對信號的過濾、檢測、預測等,都要使用濾波器,數字濾波器是數位訊號處理(DSP,DigitalSignalProcessing