FIR數字濾波器設計 窗函式法 C語言實現

2022-06-15 14:12:08 字數 1654 閱讀 9844

理想濾波器在物理上是不可實現的,其單位脈衝響應是無限長、非因果的。窗函式法,就是從時域出發,用有限長、因果的單位脈衝響應h(n)去逼近理想濾波器的無限長、非因果的單位脈衝響應的方法。窗函式法又叫傅利葉級數法。

更多背景資料,請看數字訊號處理(李永全),p175。

設n-1階fir數字濾波器的單位衝擊響應為h(n),則傳遞函式h(z)為:

窗函式法的設計步驟如下:

1.根據給定的理想頻率響應hd(e^jw),利用傅利葉反變換,求出單位衝擊響應hd(n):

2.將hd(n)乘以窗函式w(n),得到所要求的fir濾波器係數h(n):

3.求卷積:

子函式語句:

void firwin(int n, int band, int wn, int fs, double h, double kaiser=0.0, double fln=0.0, double fhn=0.0);
形參說明

n:濾波器的階數

band:濾波器的型別,取值1-4,分別為低通、帶通、帶阻、高通濾波器

wn:窗函式的型別,取值1-7,分別對應矩形窗、圖基窗、三角窗、漢寧窗、海明窗、布拉克曼窗和凱塞窗

fs:取樣頻率

h:存放濾波器的係數

kaiser:beta值

fln:帶通下邊界頻率

fhn:帶通上邊界頻率

void firwin(int n, int band, int wn, int fs, double h, double kaiser, double fln, double fhn)

else

delay = n / 2.0;

wc1 = 2 * pi * fln;

wc2 = 2 * pi * fhn;

switch (band)

if (mid == 1)

break;

}case 2:

if (mid == 1)

break;

}case 3:

if (mid == 1)

break;

}case 4:

if (mid == 1)

break;}}

}//n:視窗長度 type:選擇窗函式的型別 beta:生成凱塞窗的係數

static double window(int type, int n, int i, double beta)

case 2:

if (i > n-k-2)

break;

}case 3:

case 4:

case 5:

case 6:

case 7:

}return(w);

}static double kaiser(int i, int n, double beta)

static double bessel0(double x)

}return(sum);

}

得到係數之後,與輸入訊號求卷積即可!

數字濾波器 FIR和IIR

傳統的線性數字濾波器一般有兩種型別,有限衝激響應 fir 濾波器和無限衝激響應 iir 濾波器。fir數字濾波器只用當前和過去的輸入樣點值來得到當前的輸出樣點值,過去的輸出樣點值乙個也未用到。給定乙個有限持續時間的非0輸入值,fir濾波器給出乙個有限持續時間的非0輸出值。給定乙個全為0的輸入,fir...

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

以前有一篇iir濾波器設計的文章。與iir相對應,這篇文章主要講fir濾波器的設計。fir finite impulse response 濾波器 有限長單位衝激響應濾波器,又稱為非遞迴型濾波器,是數字訊號處理 系統中最基本的元件,它可以在保證任意幅頻特性的同時具有嚴格的線性相頻特性,同時其單位抽樣...

數字濾波器

數字濾波器,可以分為兩大類 一類為經典濾波器,輸入訊號中的有用成分和希望濾除的成分頻率不同.一類為現代濾波器,其輸入訊號中有用訊號和希望濾除的訊號頻帶交疊.經典濾波器,從頻域上可以分為低通 高通 帶通 帶阻濾波器 從時域特性上來看,數字濾波器可以分為fir 有限衝激響應數字濾波器 和iir 無限衝激...