基于Hanning 窗的FIR数字带通滤波器设计
基于Hanning 窗的FIR数字带通滤波器设计
1 需求分析
在现在通信发达的时代,FIR数字滤波器在图像、语声、数据通信等方面得到了大力发展和广泛应用。
在实际进行数字信号处理时,往往需要把信号的观察时间限制在一定的时间间隔内,只需要选择一段时间信号对其进行分析,也即对信号进行加窗函数操作。但是这种操作造成了频谱分量从其正常频谱扩展开来的现象,即所谓的“频谱泄漏”。当进行离散傅立叶变换时,时域中的截断是必需的,因此泄漏效应也是离散傅立叶变换所固有的,必须进行抑制。
对频谱泄漏进行抑制,可以通过窗函数加权抑制DFT的等效滤波器的振幅特性的副瓣,或用窗函数加权使有限长度的输入信号周期延拓后在边界上尽量减少不连续程度的方法实现。而在该FIR数字带通滤波器设计中,为获得有限长单位取样响应,用汉宁窗函数截断无限长单位取样响应序列,该方法也适于功率谱估计。
在该基于Hanning 窗的FIR数字带通滤波器设计中,我本人主要负责该设计的理论研究分析及设计,比如说hanning窗的设计思想、设计原理、方案设计具体流程及分析等,而我的组员李晓芳则是负责实践运行及分析,比如说语言选择、运行环境、程序设计方法、实现步骤及运行分析等。我们协同工作,共同设计并完成该方案。
2 概要设计
1)窗函数的基本思想
先选取一个理想滤波器(它的单位抽样响应是非因果、无限长的),再截取(或加窗)它的单位抽样响应得到线性相位因果FIR滤波器。这种方法的重点是选择一个合适的窗函数和理想滤波器。加窗使过渡带变宽,过渡带的带宽取决于窗谱的主瓣宽度。而滤波器的各种重要指标都是由窗函数决定,因此改进滤波器的关键在于改进窗函数。
窗函数谱的两个最重要的指标是:主瓣宽度和旁瓣峰值衰耗。旁瓣峰值衰耗定义为:
旁瓣峰值衰耗=20lg(第一旁瓣峰值/主瓣峰值)
为了改善滤波器的性能,需使窗函数谱满足:
主瓣尽可能窄,以使设计出来的滤波器有较陡的过渡带;
第一副瓣面积相对主瓣面积尽可能小,即能量尽可能集中在主瓣,外泄少,使设计出来的滤波器的肩峰和余振小。
但上面两个条件是相互矛盾的,实际应用中,折衷处理,兼顾各项指标。
设x(n)是一个长序列,w(n)是长度为N的窗函数,用w(n)截断x(n),得到N点序列xn(n),即
xn(n) = x(n) w(n)
在频域上则有
由此可见,窗函数w(n)不仅仅会影响原信号x(n)在时域上的波形,而且也会影响到频域内的形状。
汉宁窗隶属于广义余弦窗,是广义余弦窗的特例,又被称为余弦平方窗或升余弦窗,采用hanning窗可以有效地降低旁瓣的高度,但是同时会增加主瓣的宽度。
hanning窗是频率为2π/(N–1)的余弦曲线的合成,其中为窗的长度。通常采用下面的命令来生成窗:
其中,A、B、C适用于自己定义的常数。根据它们取值的不同,可以形成不同的窗函数,分别是:
汉宁窗 A=0.5,B=0.5,C=0;
海明窗 A=0.54,B=0.54,C=0;
布莱克曼窗 A=0.5,B=0.5,C=0.08;
2)汉宁窗函数
汉宁窗函数的时域形式可以表示为:
它的频域特性为:
其中,为矩形窗函数的幅度频率特性函数。
汉宁窗函数的最大旁瓣值比主瓣值低31dB,但是主瓣宽度比矩形窗函数的主瓣宽度增加了1倍,为8π/N。
hanning函数:生成汉宁窗
调用方式
(1) w = hanning(n):输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量。
注意:此函数不返回是零点的窗函数的首尾两个元素。
(2) w = hanning(n,'symmetric'):与上面相类似。
(3) w = hanning(n,'periodic'):此函数返回包括为零点的窗函数的首尾两个元素。
3 运行环境
fdatool(filter design & analysis tool)是matlab信号处理工具箱里专用的滤波器设计分析工具,matlab6.5版本增加了滤波器设计工具箱(filter design toolbox)。fdatool可以设计几乎所有的基本的常规滤波器,操作简单,方便灵活。
图1 fdatool设计界面
fdatool界面总共分两大部分,一部分是design filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。
在该实验设计中,软件编程环境通过matlab来实现设计结果。
4 开发工具和编程语言
在该设计实验中,重要运用fdatool开发工具和c汇编语言通过matlab环境来实现。
正如上面所示的fdatool设计界面,我们可以来设计所需参数的带通滤波器。design filter部分主要分为:
filter type(滤波器类型)选项,包括lowpass(低通)、highpass(高通)、bandpass(带通)、bandstop(带阻)和特殊的fir滤波器。
filter order(滤波器阶数)选项,定义滤波器的阶数,包括specify order(指定阶数)和minimum order(最小阶数)。在specify order中填入所要设计的滤波器的阶数(n阶滤波器,specify order=n-1),如果选择minimum order则matlab根据所选择的滤波器类型自动使用最小阶数。
frenquency specifications选项,可以详细定义频带的各参数,包括采样频率fs和频带的截止频率。它的具体选项由filter type选项和design method选项决定,例如bandpass(带通)滤波器需要定义fstop1(下阻带截止频率)、fpass1(通带下限截止频率)、fpass2 (通带上限截止频率)、fstop2(上阻带截止频率),采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。
magnitude specifications选项,可以定义幅值衰减的情况。当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。而window specifications选项,当选取采用窗函数设计时,该选项可定义,它包含了各种窗函数。
5 详细设计
用hanning窗函数法设计一个FIR带通滤波器,指标如下:
低端阻带截止频率 ws1 = 0.3*pi;
低端通带截止频率 wp1 = 0.45*pi;
高端通带截止频率 wp2 = 0.65*pi;
高端阻带截止频率 ws2 = 0.80*pi
程序编程过程:
①定义指标: ws1 = 0.3*pi;
wp1 = 0.45*pi;
wp2 = 0.65*pi;
ws2 = 0.80*pi;
②定义频率: wc = [wp1/pi,wp2/pi];
③定义带宽: B = wp1-ws1;
④汉宁窗长度:N = ceil(8/0.15);
n=0:N-1;
window=hanning(N);
[h1,w]=freqz(window,1);
⑤汉宁窗函数: figure;
stem(window);
xlabel('n');
title('hanning窗函数');
⑥汉宁窗频谱: figure;
plot(w/pi,20*log(abs(h1)/abs(h1(1))));
grid;
xlabel('w/pi');
ylabel('幅度(dB)');
title('hanning窗函数的频谱');
⑦汉宁窗单位脉冲响应:
hn = fir1(N-1,wc,hanning(N));
[h2,w]=freqz(hn,1,512);
figure ;
stem(n,hn);
xlabel('n');
ylabel('h(n)');
title('hanning窗函数的单位脉冲响应');
⑧汉宁窗带通滤波器的幅度特性:
figure;
plot(w/pi,20*log(abs(h2)/abs(h2(1))));
grid;
xlabel('w/pi');
ylabel('幅度(dB)');
title('hanning带通滤波器的幅度特性');
6 调试分析
我们设计带通滤波器时,首先计算出过渡带,然后查表得到不同窗函数所需要的阶数,不同的窗函数所设计的滤波器的形状各有差异,尤其在主瓣宽度、旁瓣的形状以及主瓣与旁瓣的高度差上有比较明显的差别,但是我们也根据实际情况,折衷处理,兼顾各项指标。
但是在以上程序数据条件下运行结果如下:
图2 汉宁窗函数
图3 汉宁窗函数的频谱图
图4 汉宁窗函数的单位脉冲响应
图5 汉宁窗带通滤波器的幅度特性
7 测试结果
测试当N=100时的输出结果图如下:
图6 当N=100时汉宁窗函数
图7 当N=100时汉宁窗函数频谱
图8 当N=100时汉宁窗函数单位脉冲响应
图9 当N=100时 汉宁带通滤波器的幅度特性
加窗使过渡带变宽,过渡带的带宽取决于窗谱的主瓣宽度。当N值由小到大变化时,运行结果图形中汉宁窗函数的单位脉冲响应图和带通滤波器的幅度特性变化都很大,过渡带变的更宽了,也即旁瓣宽度变大,主瓣宽度变的更窄了。
参考文献
[1] 胡广书. 数字信号处理—理论、算法与实现[M]. 北京: 清华大学出版社, 1997.
[2] R. Lyons. Understanding Digital Signal Processing [M]. 2nd ed. Prentice Hall PTR., 2004.
[3] A.V.奥本海姆, R.W.谢弗 and J.R.巴克. 离散时间信号处理[M]. 第二版. 西安交通大学出版社, 2001.
[4] S. K. Mitra. Digital Signal Processing: A Computer-Based Approach[M]. 3rd ed. McGraw-Hill, 2005.
[5] 程佩青编. 数字信号处理教程. 北京:清华大学出版社,2001
[6] 丁玉美,高西全编著. 数字信号处理.西安:西安电子科技大学出版社,2000
[7] 黄文梅,熊桂林,杨勇编著. 信号分析与处理-MATLAB语言及应用.长沙:国防科技大学出版社
[8] 陈怀琛《MATLAB及在电子信息课程中的应用》(第3版): 电子工业出版社2006
基于Hanning 窗的FIR数字带通滤波器设计.doc