FIR数字滤波器的算法实现与习题(1)
- 格式:doc
- 大小:42.00 KB
- 文档页数:3
FIR数字滤波器的算法实现与习题[例3] 窗函数设计法实现一个低通数字滤波器,要求通带截止频率10kHz,阻带截止频率22kHz,阻带衰减大于75dB,采样频率f s=75kHz。
过渡带宽度=通带截止频率+过渡带宽度/2=10kHz+12/2kHz=16 kHz数字截止频率Ω1=2π×f1/ f s=2π×16/50=0.64π理想低通滤波器单位脉冲响应h1(n)=sin(nΩ1)/n/π=sin(0.64πn)/n/π选择布莱克曼窗,滤波器长度为N=5.98 f s过渡带宽度=5.98×50/12=24.9取N=25,布莱克曼窗函数为w(n)=0.42-0.5cos(2πn/24)+0.08cos(4πn/24)滤波器单位脉冲响应为h(n)= h1(n)w(n) n≤N-1h(n)=0 n< N-1根据上式计算出,然后将单位脉冲响应移位为因果序列,完成的滤波器差分方程为y(n)=0.001x(n-2) -0.002x(n-3) -0.002x(n-4)+0.01x(n-5)-0.009x(n-6)-0.018x(n-7)+0.049x(n-8) -0.02x(n-10)+0.11x(n-11)+0.28x(n-11)+0.64x(n-13)+0.28x(n-14)-0.11x(n-15)-0.02x(n-16)-0.049x( n-17)-0.018x(n-18)-0.009x(n-19)+0.01x(n-20)-0.002x(n-21)-0.002x(n-22)+0.001x(n-23) 数字滤波器程序如下:#include “math.h”//数学函数头文件#define N 25 //FIR阶数N#define PI 3.1415926float InputWave( );//输入波形float FIR();// FIR滤波函数声明float fHn[N]={0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,//滤波器系数-0.018,0.049,-0.02,0.11,0.28,0.64,0.28,-0.11,-0.02,0.049,-0.018,-0.009,0.01,-0.002,-0.002,0.001,0.0,0.0};float fXn[N]={0.0};float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;float f2PI;//2*PIint i;float FIN[256],FOUT[256];//输入信号与输出信号i int nIn,nOut;main(void){nIn=0;nOut=0;f2PI =2*PI;fSignal1=0.0;fSignal2=PI*0.1;fStepSignal1=2*PI/30;fStepSignal2=2*PI*1.4;while(1){fInput=InputWave();FIN[nIn]= fInput;nIn++;nIn%=256;fOutput=FIR();//调用HR滤波函数FOUT[nOut]= fOutput;nOut++;if( nOut>=256) nOut=0;}}float InputWave() //输入波形函数{for(i=N-1;i>0;i--) fXn[i]=fXn[i-1];fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;fSignal1+ = fStepSignal1;if( fSignal1>=f2PI) fSignal1- = f2PI;fSignal2+ = fStepSignal2;if( fSignal2>=f2PI) fSignal2- = f2PI;retum( fXn[0] );float FIR( ) //FIR滤波函数{float fSum;fSum=0;for( i=0;i<N;i++) fSum + = (fXn[i]*fHn[i]);return(fSum);}思考题与习题1.DSP芯片有哪些主要特点?2.简述典型DSP应用系统的构成。
实验四FIR数字滤波器的设计
FIR(有限冲击响应)数字滤波器是一种常见的数字信号处理器件,
可以用于滤波、降噪等应用。
下面是一种FIR数字滤波器的设计流程:
1.确定滤波器的需求:首先确定需要滤除的频率范围和滤波的类型,
例如低通、高通、带通、带阻等等。
2.设计滤波器的频率响应:根据滤波器的需求,设计其理想的频率响应。
可以使用窗函数、最小二乘法等方法获得一个理想的滤波器响应。
3.确定滤波器的阶数:根据设计的频率响应,确定滤波器的阶数。
阶
数越高,滤波器的响应越陡峭,但计算复杂度也会增加。
4.确定滤波器的系数:根据滤波器的阶数和频率响应,计算滤波器的
系数。
可以使用频域窗函数或时域设计方法。
5.实现滤波器:根据计算得到的滤波器系数,实现滤波器的计算算法。
可以使用直接形式、级联形式、传输函数形式等。
6.评估滤波器的性能:使用所设计的FIR滤波器对输入信号进行滤波,评估其滤波效果。
可以使用频率响应曲线、幅频响应、群延时等指标进行
评估。
7.调整滤波器设计:根据实际的滤波效果,如果不满足需求,可以调
整滤波器的频率响应和阶数,重新计算滤波器系数,重新实现滤波器。
以上是FIR数字滤波器的基本设计流程,设计过程中需要考虑滤波器
的性能、计算复杂度、实际应用需求等因素。
第6章 有限脉冲响应(FIR)数字滤波器的设计习题1. 已知FIR 滤波器的单位脉冲响应为:(1) h (n )长度N =6h (0)=h (5)=1.5h (1)=h (4)=2h (2)=h (3)=3(2) h (n )长度N =7h (0)=- h (6)=3h (1)=- h (5)=- 2h (2)=-h (4)=1h (3)=0试分别说明它们的幅度特性和相位特性各有什么特点。
2. 已知第一类线性相位FIR 滤波器的单位脉冲响应长度为16, 其16个频域幅度采样值中的前9个为:H g (0)=12, H g (1)=8.34, H g (2)=3.79, H g (3)~H g (8)=0根据第一类线性相位FIR 滤波器幅度特性H g (ω)的特点, 求其余7个频域幅度采样值。
3. 设FIR 滤波器的系统函数为求出该滤波器的单位脉冲响应h (n ), 判断是否具有线性相位, 求出其幅度特性函数和相位特性函数。
4. 用矩形窗设计线性相位低通FIR 滤波器, 要求过渡带宽度不超过π/8 rad 。
希望逼近的理想低通滤波器频率响应函数H d (e j ω)为(1) 求出理想低通滤波器的单位脉冲响应h d (n );(2) 求出加矩形窗设计的低通FIR 滤波器的单位脉冲响应h (n )表达式, 确定)9.01.29.01(101)(4321−−−−++++=z z z z z Hα与N之间的关系;(3)简述N取奇数或偶数对滤波特性的影响。
5.用矩形窗设计一线性相位高通滤波器,要求过渡带宽度不超过π/10 rad。
希望逼近的理想高通滤波器频率响应函数H d(e jω)为(2)用h1(n)和h2(n)分别构成的低通滤波器是否具有线性相位?群延时为多少?题8图9.对下面的每一种滤波器指标,选择满足FIRDF设计要求的窗函数类型和长度。
(1)阻带衰减为20 dB,过渡带宽度为1 kHz,采样频率为12 kHz;(2)阻带衰减为50 dB,过渡带宽度为2 kHz,采样频率为20 kHz;(3)阻带衰减为50 dB,过渡带宽度为500 Hz,采样频率为5 kHz。
主讲人:李艳凤电子信息工程学院数 字 信 号 处 理Digital Signal Processing已知信号y(t)= x(t)+ n(t) ,其中x(t)是频率范围在0~2.5 kHz 的有用信号,n(t)是频率范围在3 kHz~4 kHz的噪声信号。
若按抽样频率fsam=10 kHz对信号y(t)进行抽样,得到离散信号y[k],设计能滤除y[k] 中噪声信号的FIR数字滤波器,要求对噪声的衰减As 不小于40dB。
FIR数字滤波器设计解:pp p sam 2π05r .πad f T f Ωω===s s s sam2π06r .πad f T f Ωω=== 设计数字低通滤波器以滤除噪声,有用信号频率范围是0~2.5 kHz ,噪声信号的频率范围是3 ~4 kHz数字滤波器的设计指标选择I 型线性相位FIR 数字滤波器 选取 : f p =2.5 kHzf s =3 kHz解:由于对噪声的衰减A s 不小于40dB ,选择Hann 窗p 0.5πrad Ω=s 0.6πradΩ=6.2p /N≤|Ωs - Ωp | 阶数M=N - 1由窗口类型以及过渡带宽度决定I 型线性相位FIR 数字滤波器,阶数M 为偶数,因而选取N =63取整得 N =62c p s ()/20.55π radΩΩΩ=+=6.2p /N≤0.1pd πj ()j d d π1[]()e e d 2πk h k A ϕΩΩΩΩ-=⎰解: 1. 确定幅度函数A d (Ω)和ϕd (Ω)d 1||0.55π()0A ΩΩ≤⎧=⎨⎩其他d ()2M ϕΩΩ=-2.根据A d (Ω)和ϕd (Ω)构建H d (e j Ω),通过IDTFT 求解h d [k ]3.加窗截短h d [k ],得到h [k ]= h d [k ]w N [k ],k =0, 1, …, 62.0.55Sa[0.55(31)]=p -k M =62FIR数字滤波器设计谢谢本课程所引用的一些素材为主讲老师多年的教学积累,来源于多种媒体及同事和同行的交流,难以一一注明出处,特此说明并表示感谢!。
实验五FIR数字滤波器的设计FIR数字滤波器(Finite Impulse Response)是一种数字滤波器,它的输出仅由有限数量的输入样本决定。
设计FIR数字滤波器的步骤如下:1.确定滤波器的要求:首先需要明确滤波器的频率响应、截止频率、通带和阻带的幅频响应等要求。
2.选择滤波器类型:根据实际需求选择合适的滤波器类型,如低通滤波器、高通滤波器、带通滤波器或带阻滤波器等。
3.确定滤波器的阶数:根据滤波器类型和要求,确定滤波器的阶数。
通常情况下,滤波器的阶数越高,能够实现更陡峭的频率响应,但会引入更多的计算复杂度。
4.设计滤波器的理想频率响应:根据滤波器的要求和类型,设计滤波器的理想频率响应。
可以使用常用的频率响应设计方法,如窗函数法、最小最大法或线性相位法等。
这些方法可以实现平滑的频率响应或者良好的阻带衰减。
5.确定滤波器的系数:根据设计的理想频率响应,通过反变换或优化算法确定滤波器的系数。
常用的优化算法包括频域方法、时域方法、最小二乘法或最小相位法等。
6.实现滤波器:将所得的滤波器系数转化为滤波器的差分方程形式或直接计算滤波器的频域响应。
7.评估滤波器性能:使用合适的测试信号输入滤波器,并对滤波器的输出进行评估。
可以使用指标,如频率响应曲线、幅度响应误差、相位响应误差或阻带衰减等指标来评估滤波器性能。
8.优化滤波器性能:根据评估结果,进行必要的修改和优化设计,以满足滤波器的要求。
通过以上步骤,可以设计出满足需求的FIR数字滤波器。
需要注意的是,FIR数字滤波器设计的复杂度和性能需要权衡与平衡,以满足实际应用的要求。
FIR 数字滤波器设计本章知识点:对于一个离散时间系统∑∑=-=--=M 1n nn 1-N 0n nnz a 1z bz H )(,若分母多项式中系数0a a a M 21==== ,则此系统就变成一个FIR 系统∑-=-=1N 0n n nz bz H )(,其中系数1-N 10b ,.b ,b 即为该系统的单位取样响应h ( 0 ) , h ( 1 ) ,… h ( N-1 ),且当n > N-1时,h ( n ) = 0。
FIR 系统函数H(z) 在Z 平面上有N-1个零点,在原点z=0处有N-1个重极点。
这类系统不容易取得较好的通带和阻带特性,要想得到与IIR 系统类似的衰减特性,则要求较高的H(z)阶次。
相比于IIR 系统来说,FIR 系统主要有三大突出优点:1)系统永远稳定;2)易于实现线性相位系统;3)易于实现多通带(或多组带)系统。
线性相位FIR 滤波器实现的充要条件是:对于任意给定的数值N (奇数或偶数),冲激响应h[n] 相对其中心轴21-N 必须成偶对称或奇对称,此时滤波器的相位特性是线性的,且群延时均为常数 21-=N τ。
由于h(n) 有奇对称和偶对称两种情况,h(n)的点数N 有奇数、偶数之分。
因此,h (n )可以有4种不同的类型,分别对应于4种线性相位FIR 数字滤波器:h[n] 偶对称N 为奇数、h[n] 偶对称N 为偶数、h[n] 奇对称N 为奇数、h[n] 奇对称N 为偶数。
四种线性相位FIR 滤波器的特性归纳对比于表5.1中。
一.FIR DF 设计方法FIR DF 的设计实现不能像IIR DF 设计那样借助于模拟滤波器的设计方法来实现,其设计方法主要是建立在对理想滤波器频率特性进行不同程度逼近的基础上,主要的逼近方法有三种:窗函数法;频率抽样法;最佳一致逼近法。
1. 窗函数法窗函数法是设计FIR 滤波器的最直接方法,它通过采用不同时宽的窗函数,对理想滤波器的无限长冲激响应h d (n)进行截短,从而得到系统的有限长冲激响应 h (n),这一过程可用式5-1来描述:,021-N ||,(n)h )()()(d ⎪⎩⎪⎨⎧≤=其它= n n w n h n h R d (5.1)其中W R (n)是时宽为N 的窗函数。
实验四:用窗函数法设计FIR 数字滤波器4学时 设计性一、实验目的1.掌握用窗函数法设计FIR 数字滤波器的原理和方法。
2.熟悉线性相位FIR 数字滤波器特征。
3.了解各种窗函数对滤波特性的影响。
二、实验仪器微型计算机 matlab 软件 三、实验原理和方法如果所希望的滤波器的理想频率响应函数为 )(ωj d eH ,则其对应的单位脉冲响应为)(n h d =π21ωωωππd eeH j j d )(⎰-(2-1)窗函数设计法的基本原理是用有限长单位脉冲响应序列)(n h 逼近)(n h d 。
由于)(n h d 往往是无限长序列,且是非因果的,所以用窗函数)(n ω将)(n h d 截断,并进行加权处理,得到:)(n h =)(n h d )(n ω (2-2) )(n h 就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率响应函数)(ωj d e H 为:)(ωj d eH =∑-=-1)(N n j e n h ω (2-3)式中,N 为所选窗函数)(n ω的长度。
由第七章可知,用窗函数法设计的滤波器性能取决于窗函数)(n ω的类型及窗口长度N 的取值。
设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N 。
各种类型的窗函数可达到的阻带最小衰减和过渡带宽度见第七章。
这样选定窗函数类型和长度N 后,求出单位脉冲响应)(n h =)(n h d ·)(n ω,并按式(2-3)求出)(ωj e H 。
)(ωj eH 是否满足要求,要进行验算。
一般在)(n h 尾部加零使长度满足于2的整数次幂,以便用FFT 计算)(ωj e H 。
如果要观察细节,补零点数增多即可。
如果)(ωj eH 不满足要求,则要重新选择窗函数类型和长度N ,再次验算,直至满足要求。
如果要求线性相位特性,则)(n h 还必须满足)1()(n N h n h --±= (2-4)根据上式中的正负号和长度N 的奇偶性又将线性相位FIR 滤波器分成四类。
实验二FIR滤波器设计与实现FIR(Finite Impulse Response)滤波器是一种数字滤波器,由有限长的冲激响应组成。
与IIR(Infinite Impulse Response)滤波器相比,FIR滤波器具有线性相位、稳定性和易于设计等优点。
本实验旨在设计和实现一个FIR滤波器。
首先,我们需要确定滤波器的规格和要求。
在本实验中,我们将设计一个低通FIR滤波器,将高频信号滤除,只保留低频信号。
滤波器的截止频率为fc,滤波器的阶数为N,采样频率为fs。
接下来,我们需要确定滤波器的频率响应特性。
常用的设计方法有窗函数法、最小最大规范法等。
本实验采用窗函数法进行滤波器设计。
窗函数法的基本思想是利用窗函数来加权冲激响应的幅度,以达到要求的频响特性。
常用的窗函数有矩形窗、汉宁窗、汉明窗等。
在本实验中,我们选择汉宁窗作为窗函数。
首先,我们需要计算出滤波器的理想频率响应。
在低通滤波器中,理想频率响应为0频率处幅度为1,截止频率处幅度为0。
然后,我们需要确定窗函数的长度L。
一般来说,窗函数的长度L要大于滤波器的阶数N。
在本实验中,我们选择L=N+1接下来,我们利用窗函数对理想频率响应进行加权处理,得到加权后的冲激响应。
最后,我们对加权后的冲激响应进行归一化处理,使滤波器的频率响应范围在0到1之间。
在设计完成后,我们需要将滤波器实现在实验平台上。
在本实验中,我们使用MATLAB软件进行滤波器实现。
首先,我们需要生成一个输入信号作为滤波器的输入。
可以选择一个随机的信号作为输入,或者选择一个特定的信号进行测试。
然后,我们将输入信号输入到滤波器中,得到滤波器的输出信号。
最后,我们将滤波器的输入信号和输出信号进行时域和频域的分析,以评估滤波器的滤波效果。
在实验的最后,我们可以尝试不同的滤波器设计参数,如截止频率、窗函数的选择等,以观察滤波器设计参数对滤波器性能的影响。
综上所述,本实验是关于FIR滤波器设计与实现的实验。
第五章FIR 滤波器的设计附加题1. 一FIR 数字滤波器的传输函数为12341()[1242]30H z z z z z ----=++++ 求()h n 、幅度()H ω、和相位()ϕω。
2. 一个FIR 线性相位滤波器的h(n)是实数,且n<0和n>6时,h(n)=0。
如果h(0)=1且系统函数在30.5j z e π=和z = 3处各有一个零点,求()H z 。
3. 一个FIR 线性相位滤波器的h(n)是实数,且n<0和n>6时,h(n)=0。
如果h(0)=1且系统函数在30.5j z e π=和z = 3处各有一个零点,求()H z 。
4. 如图所示h 1(n)为N=8的偶对称序列,h 2(n)为其循环右移4位后的序列。
设H 1(k)=DFT [ h 1(n) ],H 2(k)=DFT [ h 2(n) ](1)问 | H 1(k)| = | H 2(k)| 吗?1()k θ与2()k θ的关系是什么?(2)若h 1(n)、h 2(n)各构成一个低通滤波器,问它们是否是线性相位的?延时分别是多少?(3)两个滤波器的性能是否相同?0123456701234567h 1(n) h 2(n)5. 用矩形窗设计一线性相位FIR 低通数字滤波器0()0j a c j d c e H e ωωωωωωπ-⎧≤≤⎪=⎨<≤⎪⎩ (1)求h d (n);(2)求h(n),并确定a 与N 的关系;(3)讨论N 取奇数和偶数对滤波器性能有什么影响。
6. 设计一个线性相位FIR 低通滤波器,给定抽样频率为42**1.5*10(/sec)s pi rad Ω=,通带截止频率为32**1.5*10(/sec)p pi rad Ω=,阻带起始频率为32**3*10(/sec)st pi rad Ω=,阻带衰减不小于-50db 。
7. 选择合适的窗函数设计FIR 数字滤波器:通带衰减为0dB ,阻带衰减为40dB ,通带边缘频率为1kHz ,阻带边缘频率为2.5kHz ,采样频率为12kHz 。
实验七FIR滤波器的算法一、实验目的和任务1.理解并掌握FIR数字滤波器的机理;2. 掌握用MATLAB构建FIR滤波器的方法,设计FIR低通滤波器;3. 掌握FIR滤波器的算法;二、实验原理滤波器的种类很多,从功能上可以分为低通、高通、带通和带阻滤波器,上述每种滤波器又可以分为模拟滤波器和数字滤波器。
如果滤波器的输入输出都是数字信号,则这样的滤波器称之为数字滤波器,它通常通过一定的运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分来实现滤波。
根据数字滤波器冲激响应的时域特性,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器[3]。
有数字信号处理的一般理论可知,IIR滤波器的特征是具有无限持续时间的冲激响应,而FIR滤波器使冲激响应只能持续一定的时间。
三、FIR滤波器的窗函数设计法FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。
窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:(1) 通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。
(2) 由性能指标确定窗函数W(n)和窗口长度N。
(3) 求得实际滤波器的单位脉冲响应h(n),h(n)即为所设计FIR滤波器系数向量b(n)。
(4) 检验滤波器性能。
设计FIR低通、带通滤波器,并改变参数要求,观察输出结果。
实例一及解析:wp=0.2*pi;Ap=1;ws=0.3*pi;As=15;T=1;Fs=1/T;Op=(2/T)*tan(wp/2);Os=(2/T)*tan(ws/2);N=ceil((log10((10^(Ap/10)-1)/(10^(As/10)-1)))/(2*log10(Op/Os)));OmegaC=Os/((10^(As/10)-1)^(1/(2*N)));[z,p,k]=buttap(N);p=p*OmegaC;k=k*OmegaC^N;bs=k;as=real(poly(p));[b,a]=bilinear(bs,as,Fs);n=0:0.02*pi:pi;[H,w]=freqz(b,a,n);magH=abs(H);db=20*log10((magH+eps)/max(magH));subplot(2,1,1);plot(w/pi,magH);subplot(2,1,2);plot(w/pi,db);实例一的解析:wp=0.2*pi;Ap=1;ws=0.3*pi;As=15;T=1;Fs=1/T;Op=(2/T)*tan(wp/2);Os=(2/T)*tan(ws/2 );%利用双线性变换法计算模拟滤波器的截止频率和通带截止频率N=ceil((log10((10^(Ap/10)-1)/(10^(As/10)-1)))/(2*log10(Op/Os)));%这是在求滤波器的阶数ceil函数是用来求大于后面的最小实数OmegaC=Os/((10^(As/10)-1)^(1/(2*N)));[z,p,k]=buttap(N);%z = [];p = exp(sqrt(-1)*(pi*(1:2:2*n-1)/(2*n)+pi/2)).';k = real(prod(-p));详细使用方法见matlab help中的buttap,是固定滤波函数p=p*OmegaC;k=k*OmegaC^N;bs=k;as=real(poly(p));[b,a]=bilinear(bs,as,Fs); %把s变换变成z变换n=0:0.01*pi:pi;[H,w]=freqz(b,a,n);magH=abs(H);db=20*log10((magH+eps)/max(magH));subplot(2,1,1);plot(w/pi,magH);subplot(2,1,2);plot(w/pi,db);实例二(Buttord函数法)2.高通滤波器程序:fc=30;fs=100;fst=35;Rc=0.5;Rst=40;Wc=fc/(fs/2);Wst=fst/(fs/2);[N,Wn]=Buttord(Wc,Wst,Rc,Rst);[B,A]=Butter(N,Wn,'high');[H,w]=freqz(B,A);plot(w*fs/(2*pi),abs(H))gridfs=1000;fc1=180;fc2=280;fst1=140;fst2=320;rc=0.5;rst=40;wc=[fc1,fc2]/(fs/2);wst=[fst1,fst2]/(fs/2);[N,Wn]=Buttord(wc,wst,rc,rst);[B,A]=Butter(N,Wn); fs=1000;0510152025303540455000.20.40.60.811.21.4。
实验8 FIR 数字滤波器设计实验一.实验目的1.掌握用窗函数法设计FIR 数字滤波器的原理和方法。
2.熟悉线性相位FIR 数字滤波器特性。
3.了解各种窗函数对滤波器特性的影响。
二.实验设备PC 兼容机一台,操作系统为WindowsXP ,安装CCS 软件。
三.实验原理1.基于窗函数法设计FIR 数字滤波器的基础理论。
(请参考教材《数字信号处理教程》)2.根据要求设计FIR 数字低通滤波器。
要求:通带边缘频率10kHz p f =,阻带边缘频率22kHz st f =,阻带衰减70dB ,采样频率50kHz s f =。
(1) 求各对应的数字频率:通带截止频率:2210500.4 p p s f f ωπππ==⋅=弧度阻带截止频率:2222500.88 st st s f f ωπππ==⋅=弧度阻带衰减相当于:270dB δ=(2) 求()d h n 。
设,()0, j j c d e H e ωτωωω-⎧≤=⎨⎩其他, 理想数字低通滤波器的截止频率为:10.40.88()0.6422c p st ππωωωπ+=+== 由此可得:()()sin ,1()2, c j j n d c n n n h n e e d n πωτωπωττπτωπωτπ--⎧-⎡⎤⎣⎦≠⎪⎪-==⎨⎪=⎪⎩⎰ 其中,12N τ-=(3) 求窗函数。
由阻带衰减2δ确定窗形状,由过渡带宽确定N 。
由于270dB δ=,查表可选择布莱克曼窗。
由于布莱克曼窗过渡带宽满足: 5.982/N ωπ=⋅故:窗函数长度 )5.9820.880.424.9N πππ=⋅-=所以N =25,窗函数为:2424()0.420.5cos 0.08cos ()2424n n w n R n ππ⎡⎤⎛⎫⎛⎫=-+⋅ ⎪ ⎪⎢⎥⎝⎭⎝⎭⎣⎦ (4) 求()h n 。
()()24sin 0.641224()()()0.420.5cos 0.08cos ()122424d n n n h n h n w n R n n ππππ-⎡⎤⎡⎤⎛⎫⎛⎫⎣⎦=⋅=⋅-+⋅ ⎪ ⎪⎢⎥-⎝⎭⎝⎭⎣⎦(5) 根据上面计算出的()h n ,得到数字滤波器的差分方程为:()0.001(2)0.002(3)0.002(4)0.01(5)0.009(6)0.018(7)0.049(8)0.02(9)0.11(10)0.28(11)0.64(12)0.28(13) 0.11(14)0.02(15)0.049(y n x n x n x n x n x n x n x n x n x n x n x n x n x n x n x n =-----+-----+-----+-+-+-----+16)0.018(17)0.009(18)0.01(19)0.002(20)0.002(21)0.001(-22)x n x n x n x n x n x n -----+-----+3.程序流程图:四.实验步骤1.设置软件仿真工作模式。
第7章 FIR 数字滤波器的Matlab 实现之南宫帮珍创作7.1 实验目的●学习用窗函数法设计FIR 数字滤波器的原理及其设计步伐;●学习编写数字滤波器的设计法式的方法, 并能进行正确编程;●根据给定的滤波器指标, 给出设计步伐.7.2 实验原理及实例分析FIR 低通数字滤波器的设计原理如果系统的冲激响应)(n h d 为已知, 则系统的输入/输出关系为:对低通滤波器, 只要设计出低通滤波器的冲激响应函数, 就可以由上式获得系统的输出了.假设所希望的数字滤波器的频率响应为)(jw d e H , 它是频域的周期函数, 周期为2 , 那么它与)(jwd e H 相对应的傅立叶系数为以)(n h d 为冲激响应的数字滤波器将具有频域响)(jwd e H . 可是将)(n h d 作为滤波器脉冲响应有两个问题:(1)它是无限长的, 与FIP 滤波器脉冲响应有限长这一前提纷歧致(2)它是非因果的, 0,0)(<≠n n h d对此, 要采用以下的办法,(1)将)(n h d 截短 (2)将其往右平移,由此获得)(2n h 的实际频域响应jnwN n jwd e n h e H ∑-==102)()(, 与理想频域响应)(jw de H 相近, 但不完全一致.理论证明上述现象是对)(n h d 进行简单截长处置的肯定结果, 一般称为吉布斯现象, 为尽可能的减少吉布斯现象, 应对)(n h d 进行加窗截取, 即以)()()(n W n h n h N d ⋅=作为FIR 滤波器的系数.经常使用的窗函数有矩形窗、海明窗和布莱克曼窗等. 用窗函数法设计FIR 滤波器Matlab 设计FIR 滤波器有多种方法和对应的函数, 见表7-1.表7-1 matlab 设计FIR 滤波器的方法和函数窗函数方法不单在数字滤波器的设计中占有重要的位置, 同时可以用于功率谱的估计, 从根本上讲, 使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs 现象所带来的影响.窗函数设计线性相位FIR 滤波器步伐如下:(1) 确定命字滤波器的性能要求, 临界频率}{k w , 滤波器单元脉冲响应长度N(2) 根据性能要求, 合理选择单元脉冲响应h(n)的奇偶对称性, 从而确定理想频率响应)(jwd e H 的幅频特性和相频特性(3) 求理想单元脉冲响应)(n h d , 在实际计算中, 可对)(jwd e H 采样, 并对其求IDFT 的)(n h M , 用)(n h M 取代)(n h d(4) 选择适当的窗函数w (n ), 根据)()()(n W n h n h N d ⋅=求所需设计的FIR 滤波器单元脉冲响应(5) 求)(jwd e H , 分析其幅频特性, 若不满足要求, 可适当改变窗函数形式或长度N, 重复上述设计过程, 以获得满意的结果调用格式:a) b=fir1(N,wn)b)b=fir1(N,wn,’hign ’)N 为滤波器的阶次, wn 是通带截止频率, 其值在0~1之间, 1对应抽样频率的一半;b 是设计好的滤波器系数h(n).对格式a), 若wn 是标量, 则用来设计低通滤波器, 若wn 是1×L 的向量, 则用来设计带通(带阻)滤波器.其格式为: b=fir1(N,wn,’DC-1’)或b=fir1(N,wn,’DC-0’),其中, 前者保证第一个带为通带, 后者保证第一个带为阻带. b )用来设计高通滤波器.用于发生窗函数的matlab 文件有如下8个: bartlett.m(巴特利特窗) blackman.m(布莱克曼窗)rectangle.m(矩形窗) hamming.m (汉明窗) hanning.m (汉宁窗) triang.m(三角窗)chebwin.m (切比雪夫窗) Kaiser.m (凯泽窗)π, 使用具有30dB 波纹的chebyshev 窗.解:源法式如下:b=fir1(34,0.48,'high',chebwin(35,30));freqz(b,1,512) 其响应波形如图7-1所示.图7-1 带通FIR 滤波器【实例7-2】设计一个24阶FIR 带通滤波器, 通带频率0.350.65w ππ≤≤.解:源法式如下: wn=[0.35 0.65]; N=24;b=fir1(2*N,wn,'DC-0');% DC-0暗示第一个带为阻带, 这样设计出来的滤波器为带通滤波器. freqz(b,1,512)图7-2 带通FIR 滤波器【实例7-3】 设计具有下面指标的低通FIR 滤波器由于其最小阻带衰减为50dB, 因此可以选择hamming窗来实现这个滤波器, 因为它具有较小的过渡带.解:MATLAB源法式为%数字滤波器指标wp=0.2*pi;ws=0.3*pi;tr_width=ws-wp;%通带宽度N=ceil(6.6*pi/tr_width)+1;%滤波器长度if rem(N,2)==0N=N+1;endNw=N;%滤波器长度为奇数n=[0:1:Nw-1];wc=(ws+wp)/2;%截止频率alpha=(Nw-1)/2;m=n-alpha+0.00001;%如果不加0.00001, 当n= alpha时, m为0, 下式分母为0, 不能执行hd=sin(wc*m)./(pi*m);%理想滤波器的冲激响应% 生成hamming窗w_ham=(hamming(Nw))';% 频域图像的绘制h=hd.*w_ham;% 滤波器实际冲激响应freqz (h,[1])figure(2);subplot(2,2,1),stem(n,hd);title('理想脉冲响应') axis([0 Nw-1 -0.3 0.3]);xlabel('n');ylabel('hd(n)') subplot(2,2,2),stem(n,w_ham);title('hamming窗') axis([0 Nw-1 -0.3 1.2]);xlabel('n');ylabel('w(n)') subplot(2,2,3),stem(n,h);title('实际脉冲响应')axis([0 Nw-1 -0.3 0.3]);xlabel('n');ylabel('h(n)')其响应波形如图7-2所示.图7-3hamming窗函数设计FIR滤波器【实例7-4】设带通滤波器的指标为选择Blackman窗来实现这个滤波器.解:MATLAB源法式为% 数字滤波器指标ws1=0.2*pi;wp1=0.35*pi;ws2=0.65*pi;wp2=0.8*pi;As=60;tr_width=min((wp1-ws1),(wp2-ws2));% 过渡带带宽N=ceil(11*pi/tr_width)+1;if rem(N,2)==0N=N+1;endNw=N;n=[0:1:Nw-1];wc1=(ws1+wp1)/2;wc2=(ws2+wp2)/2;alpha=(Nw-1)/2;m=n-alpha+0.00001;%如果不加0.00001, 当n= alpha时, m为0, 下式分母为0, 不能执行hd=sin(wc2*m)./(pi*m)-sin(wc1*m)./(pi*m);%理想滤波器的冲激响应% 生成blackman窗w_bla=(blackman(M))';h=hd.*w_bla;% 频域图像的绘制freqz(h,[1])figure(2);subplot(2,2,1),stem(n,hd);title('idael impulse response') axis([0 Nw-1 -0.4 0.5]);xlabel('n');ylabel('hd(n)')subplot(2,2,2),stem(n,w_bla);title('blackman window')axis([0 Nw-1 0 1.1]);xlabel('n');ylabel('w(n)')subplot(2,2,3),stem(n,h);title('actual impulse response') axis([0 Nw-1 -0.4 0.5]);xlabel('n');ylabel('h(n)')其响应波形如图7-4所示.图7-4blackman 窗函数设计FIR 滤波器7.3编程练习1. 设计一个48阶FIR 带阻滤波器, 通带频率00.35,0.65w w πππ≤≤≤≤.2.用窗函数设计一个线性相位FIR 高通滤波器, 并满足性能指标:通带鸿沟频率0.66wp π=,阻带鸿沟频率0.5ws π=, 阻带衰减不小于40db.提示:参考例7-3, 4;首先根据阻带衰减, 选择合适的窗函数, 见课本P342, 表7-3.再根据P345, 式7-74写出理想滤波器的冲激响应hd.。
FIR数字滤波器的算法实现与习题
[例3] 窗函数设计法实现一个低通数字滤波器,要求通带截止频率10kHz,阻带截止频率22kHz,阻带衰减大于75dB,采样频率f s=75kHz。
过渡带宽度=通带截止频率+过渡带宽度/2=10kHz+12/2kHz=16 kHz
数字截止频率
Ω1=2π×f1/ f s=2π×16/50=0.64π
理想低通滤波器单位脉冲响应
h1(n)=sin(nΩ1)/n/π=sin(0.64πn)/n/π
选择布莱克曼窗,滤波器长度为
N=5.98 f s过渡带宽度=5.98×50/12=24.9
取N=25,布莱克曼窗函数为
w(n)=0.42-0.5cos(2πn/24)+0.08cos(4πn/24)
滤波器单位脉冲响应为
h(n)= h1(n)w(n) n≤N-1
h(n)=0 n< N-1
根据上式计算出,然后将单位脉冲响应移位为因果序列,完成的滤波器差分方程为y(n)=0.001x(n-2) -0.002x(n-3) -0.002x(n-4)+0.01x(n-5)-0.009x(n-6)-0.018x(n-7)+0.049x(n-8) -0.02x(n-10)+0.11x(n-11)+0.28x(n-11)+0.64x(n-13)+0.28x(n-14)-0.11x(n-15)-0.02x(n-16)-0.049x( n-17)-0.018x(n-18)-0.009x(n-19)+0.01x(n-20)-0.002x(n-21)-0.002x(n-22)+0.001x(n-23) 数字滤波器程序如下:
#include “math.h”//数学函数头文件
#define N 25 //FIR阶数N
#define PI 3.1415926
float InputWave( );//输入波形
float FIR();// FIR滤波函数声明
float fHn[N]={0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,//滤波器系数-0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
-0.11,-0.02,0.049,-0.018,-0.009,0.01,
-0.002,-0.002,0.001,0.0,0.0};
float fXn[N]={0.0};
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;//2*PI
int i;
float FIN[256],FOUT[256];//输入信号与输出信号
i int nIn,nOut;
main(void)
{
nIn=0;nOut=0;
f2PI =2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
fStepSignal1=2*PI/30;
fStepSignal2=2*PI*1.4;
while(1)
{
fInput=InputWave();
FIN[nIn]= fInput;
nIn++;nIn%=256;
fOutput=FIR();//调用HR滤波函数
FOUT[nOut]= fOutput;
nOut++;
if( nOut>=256) nOut=0;
}
}
float InputWave() //输入波形函数
{
for(i=N-1;i>0;i--) fXn[i]=fXn[i-1];
fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;
fSignal1+ = fStepSignal1;
if( fSignal1>=f2PI) fSignal1- = f2PI;
fSignal2+ = fStepSignal2;
if( fSignal2>=f2PI) fSignal2- = f2PI;
retum( fXn[0] );
float FIR( ) //FIR滤波函数
{
float fSum;
fSum=0;
for( i=0;i<N;i++) fSum + = (fXn[i]*fHn[i]);
return(fSum);
}
思考题与习题
1.DSP芯片有哪些主要特点?
2.简述典型DSP应用系统的构成。
3.简述DSP应用系统的一般设计开发过程。
如何选择DSP芯片? 4.常用的DSP芯片有哪些?
5.DSP控制器的应用领域有哪些?
6.哈佛结构与冯·诺依曼结构计算机存储器的组成有何不同? 7.5416 DSP引脚可以分为哪几类?其中的XMP/MC引脚有什么作用? 8.简述5416 DSP的内部结构主要部分的功能。
9.简述5416 DSP的片内存储器的组成、地址与用途。
10.如何由外部晶振或外部时钟频率确定CPU时钟频率?
11.什么是DSP的低功耗模式?
12.如何使用看门狗定时器?
13.C54x DSP的通用I/O接口有哪些引脚?有哪些功能?如何使用?
14.片内外设寄存器的地址是如何安排的?如何访问?
15.C54x DSP的中断是如何组织的?有哪些中断源?
16.响应中断后,如何找到中断服务程序入口地址?
17.DSP复位后从哪里开始执行程序?
18.辅助寄存器有哪些?其作用是什么?
19.状态寄存器ST0、ST1的作用是什么?
20.C54x DSP有哪些寻址方式?
21.直接寻址方式中,数据存储单元的地址是如何形成的?
22.访问片内外设寄存器可以采用哪些寻址方式?
23.C54x DSP有哪些类型的指令?
24.DSP应用系统的软件开发流程是什么?
25.采用CCS集成开发环境进行软件开发调试的步骤是什么?
26.说明.text段、.data段、.bss段分别包含什么内容?
27.链接命令文件包括哪些主要内容?如何编写?
28.DSP C语言有哪些特点?
29.如何访问片内外设寄存器的某些位?
30.如何直接访问存储器单元?
31.C语言与汇编语言混合编程有哪些方法?
32.DSP的硬件仿真器(Emulator)和软件仿真器(Simulator)有什么异同点? 33.C54x DSP的串行通信接口有哪些特点?
34.异步串行通信的数据格式有哪些?如何设置?
35.如何设置异步串行通信的波特率?
36.如何设计DSP与PC串行通信的硬件电路与软件?
37.C54xDSP的最小系统包括哪些具体电路?
38.如何设计DSP的复位电路?
39.如何设计DSP的时钟电路?
40.如何用DSP C语言编程实现常用的FFT与FIR信号处理算法?。