用窗函数法设计FIR滤波器_C++程序
- 格式:pdf
- 大小:44.58 KB
- 文档页数:5


1 / 18 FIR数字滤波器的设计方法
IIR数字滤波器最大缺点:不易做成线性相位,而现代图像、语声、数据通信对线性相位的要求是普遍的。正是此原因,使得具有线性相位的FIR数字滤波器得到大力发展和广泛应用。
1. 线性相位FIR数字滤波器的特点
FIR DF的系统函数无分母,为1010)()(NnnNiiiznhzbzH,系统频率响应可写成:10)()(NnjwnjwenheH,令)(jweH=)()(wjewH,H(w)称为幅度函数,)(w称为相位函数。这与模和幅角的表示法有所不同,H(w)为可正可负的实数,这是为了表达上的方便。如某系统频率响应)(jweH=wjwe34sin,如果采用模和幅角的表示法,w4sin的变号相当于在相位上加上)1(je因,从而造成相位曲线的不连贯和表达不方便,而用)()(wjewH这种方式则连贯而方便。
线性相位的FIR滤波器是指其相位函数)(w满足线性方程:
)(w=w (,是常数)
根据群时延的定义,式中表示系统群时延,表示附加相移。线性相位的FIR系统都具有恒群时延特性,因为为常数,但只有=0的FIR系统采具有恒相时延特性。
问题:并非所有的FIR系统都是线性相位的,只有当它满足一定条件时才具有线性相位。那么应满足什么样的条件?从例题入手。
例题:令h(n)为FIR数字滤波器的单位抽样相应。Nnn或0时h(n)=0,并假设h(n)为实数。
(a) 这个滤波器的频率响应可表示为)()()(wjjwewHeH(这是按幅度函数和相位函数来表示的,不是用模和相角的形式),)(wH为实数。(N要分奇偶来讨论)
(1) 当h(n)满足条件)1()(nNhnh时,求)(wH和)(w(w0)
(2) 当h(n)满足条件)1()(nNhnh时,求)(wH和)(w(w0) 2 / 18 (b) 用)(kH表示h(n)的N点DFT
实验四 用窗函数设计FIR滤波器
一、 实验目的
1、熟悉FIR滤波器设计的基本方法。
2、掌握用窗函数设计FIR数字滤波器的原理及方法,熟悉相应的计算机高级语言编程。
3、熟悉线性相位FIR滤波器的幅频特性和相位特性。
4、了解各种不同窗函数对滤波器性能的响应。
二、 实验原理和方法
窗函数法设计的任务在于寻找一个可实现有限长单位脉冲响应的传递函数H(ejw)=10Nnh(n)e-jwn 去逼近hd(n)=1/220Hd(ejw)ejwndw
即h(n)=hd(n)w(n)
(一)几种常用的窗函数
1、矩形窗 w(n)=RN(n)
2、Hanning窗 w(n)=0.5[1-cos(2πn/N-1)]RN(n)
3、Hamming窗 w(n)=[0.54-0.46cos(2πn/N-1)]R N(n)
4、Blackman窗 w(n)=[0.42-0.5 cos(2πn/N-1)+0.08 cos(4πn/N-1)] RN(n)
5、Kaiser窗 w(n)=I0(β(1-[(2n/(N-1))-1]2)½)/I0(β)
(二)窗函数法设计线性相位FIR滤波器的步骤
1、确定数字滤波器的性能要求。确定各临界频率{wk}和滤波器单位脉冲响应长度N。
2、根据性能要求和N值,合理地选择单位脉冲响应h(n)有奇偶对称性,从而确定理想频率响应hd(ejw)的幅频特性和相位特性。
3、用傅里叶反变换公式求得理想单位脉冲响应hd(n)。
4、选择适当的窗函数W(n),求得所设计的FIR滤波器单位脉冲响应。
5、用傅里叶变换求得其频率响应H (ejw),分析它的幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述过程,直至得到满意的结果。
三、实验内容和步骤
1、分别用矩形窗、Hanning窗、Hamming窗、Blackman窗、Kaiser窗(β=8.5)设计一个长度N=8的线性相位FIR滤波器。
FIR滤波器设计C语言程序
FIR滤波器设计C语言程序
FIR滤波器设计C语言程序
1. 引言
2. FIR滤波器原理
FIR滤波器的输入输出关系可以表示为以下方程:
y[n] = h[0]x[n] + h[1]x[n-1] + + h[M]x[n-M]
其中,y[n]为输出信号,x[n]为输入信号,h为FIR滤波器的系数向量,M为滤波器的阶数。
3. 窗函数法设计FIR滤波器
窗函数法是一种简单有效的FIR滤波器设计方法,其思想是通过加窗和傅里叶变换来确定滤波器系数。
步骤如下:
1. 确定滤波器的阶数M,一般通过信号频率响应要求来确定。
2. 选择一个窗函数(如矩形窗、汉宁窗等)。
3. 根据窗函数的性质和滤波器的阶数,计算出滤波器的理想频率响应h_ideal。FIR滤波器设计C语言程序4. 使用傅里叶变换将理想频率响应转换为时间域的滤波器系数h。
5. 对h进行归一化处理,得到最终的滤波器系数。
4. C语言程序实现
下面给出一个简单的C语言程序,实现了FIR滤波器的设计过程。
c
include
include
define N 1000 // 输入信号长度
define M 50 // 滤波器阶数
void fir_filter(float x, float h, float y) {
int i, j;
for (i = 0; i < N; i++) {
y[i] = 0;
for (j = 0; j < M; j++) {
if (i >= j) {FIR滤波器设计C语言程序 y[i] += h[j] x[i j];
}
}
}
}
int mn() {
float x[N]; // 输入信号
float h[M]; // 滤波器系数
float y[N]; // 输出信号
int i;
// 输入信号和滤波器系数
for (i = 0; i < N; i++) {
x[i] = sin(2 M_PI 1000 i / N) + sin(2 M_PI 2000 i / N); // 两个正弦信号叠加
采用窗函数法设计一个数字FIR低通滤波器
悬赏分:0 - 解决时间:2007-12-19 19:45
采用窗函数法设计一个数字FIR低通滤波器,其技术指标为:wp=0.2pi,ws=0.3pi,rp0.25db,as=50db
,并画出其频率响应图。
提问者: 江水西岸 - 一级
最佳答案
结合衰减和过度带,可选择哈明窗。尽管在设计中,没有使用通带波动值Rp,但必须检查设计的实际波动,验证它是否确实在给定容限内。对应的MATLAB程序为:
wp= 0.2* pi; ws = 0.3 *pi;
tr_width = ws –wp; %确定过度带宽
M = ceil (6.6* pi /tr_width) +1 ;% 确定滤波器阶数 ,ceil是向上取整函数
n = [0: 1: M-1];
wc = (ws +wp ) /2; %理想低通的截止频率
hd = ideal _lp (wc, M);
w_ham = (hamming (M))’;
h = hd .* w_ham;
[db, mag, pha, grd, w]=freqz_m (h, [1]);
delta _w =2*pi/1000;
Rp= - (min (db(1:1: wp/ delta _w +1))); %实际通带波动
As= - round (max (db (ws/delta_w +1: 1: 501 ))) ;% 最小阻带衰减
%画图 (见图1-5-1)
subplot (2,2,1); stem(n, hd ); title (‘理想冲激响应’);
axis ([0 ,M-1, -0.1 , 0.3]); xlabel (‘n’); ylabel (‘hd(n)’ );
subplot (2,2,2); stem(n, w_ham ); title (‘哈明窗’);
axis ([0 ,M-1, 0 , 1.1]); xlabel (‘n’); ylabel (‘w(n)’ );