实验无限冲激响应滤波器IIR算法实验

合集下载

实验七--冲激响应不变法IIR数字滤波器设计

实验七--冲激响应不变法IIR数字滤波器设计

实验名称:实验七 冲激响应不变法IIR 数字滤波器设计一、实验目的1、掌握构成一个频率响应与给定的滤波特性相接近的模拟滤波器的设计原理。

2、掌握用冲激响应不变法设计IIR 数字滤波器的基本原理和算法。

3、了解数字滤波器和模拟滤波器的频率响应特性,掌握相应的计算方法,分析用冲激响应不变法获得的数字滤波器频率响应特性中出现的混叠现象。

二、实验原理与计算方法1、冲激响应不变法设计IIR 数字滤波器的基本原理和算法采用冲激响应不变法设计数字滤波器,就是使其单位样值响应)(n h 与相应的模拟滤波器的冲激响应)(t h a 在抽样点处的量值相等,即)()()(nT h t h n h a nTt a === (1)其中T 为抽样周期。

因此用冲激响应不变法设计IIR 数字滤波器的基本步骤,就是首先根据设计要求确定相应的模拟滤波器的传递函数)(s H a ,经Laplace 反变换求出冲激响应)(t h a 后,对它进行抽样得到的)(nT h a 等于数字滤波器的单位样值响应)(n h ,再经z 变换所得)(z H 就是数字滤波器的传递函数。

如果模拟滤波器的传递函数)(s H a 的N 个极点i s 都是单极点,则可以将)(s H a 写成部分分式展开的形式∑=-=Ni iia s s A s H 1)( (2) 那么,经Laplace 反变换求出的模拟滤波器的冲激响应)(t h a 为)()(1t u e A t h Ni t s i a i ∑==相对应的数字滤波器的单位样值响应为)()()(1n u eA t h n h Ni nTs i nTt a i ∑====对上式作z 变换,得∑∑∑∑∑=-=∞=-∞==--===ni Ts iN i n nTn s in nTs i Ni n z eA z eA eA zz H i i i 11111)( (3)由上面的推导可见,只要模拟滤波器的传递函数)(s H a 的N 个极点i s 都是单极点,当已经求出各个极点值i s 和部分分式的系数i A 后,则可以从模拟滤波器的传递函数的表达式(2)直接得到数字滤波器的传递函数)(z H 的表达式(3)。

IIR数字滤波器设计实验报告

IIR数字滤波器设计实验报告

实验三IIR数字滤波器设计实验报告一、实验目的:1.通过仿真冲激响应不变法和双线性变换法2.掌握滤波器性能分析的基本方法二、实验要求:1.设计带通IIR滤波器2.按照冲激响应不变法设计滤波器系数3. 按照双线性变换法设计滤波器系数4. 分析幅频特性和相频特性5. 生成一定信噪比的带噪信号,并对其滤波,对比滤波前后波形和频谱三、基本原理:㈠IIR模拟滤波器与数字滤波器IIR数字滤波器的设计以模拟滤波器设计为基础,常用的类型分为巴特沃斯(Butterworth)、切比雪夫(Chebyshev)Ⅰ型、切比雪夫Ⅱ型、贝塞尔(Bessel)、椭圆等多种。

在MATLAB信号处理工具箱里,提供了这些类型的IIR数字滤波器设计子函数。

(二)性能指标1.假设带通滤波器要求为保留6000hz~~7000hz频段,滤除小于2000hz和大宇9000hz频段2.通带衰减设为3Db,阻带衰减设为30dB,双线性变换法中T取1s.四、实验步骤:1.初始化指标参数2.计算模拟滤波器参数并调用巴特沃斯函数产生模拟滤波器3.利用冲激响应不变法和双线性变换法求数字IIR滤波器的系统函数Hd (z)4.分别画出两种方法的幅频特性和相频特性曲线5.生成一定信噪比的带噪信号6.画出带噪信号的时域图和频谱图6.对带噪信号进行滤波,并画出滤波前后波形图和频谱图五、实验结果模拟滤波器的幅频特性和相频特性:101010101Frequency (rad/s)P h a s e (d e g r e e s )1010101011010-5100Frequency (rad/s)M a g n i t u d e在本实验中,采用的带通滤波器为6000-7000Hz ,换算成角频率为4.47-0.55,在上图中可以清晰地看出到达了题目的要求。

冲击响应不变法后的幅频特性和相频特性:0.10.20.30.40.50.60.70.80.91Normalized Frequency (⨯π rad/sample)P h a s e (d e g r e e s )0.10.20.30.40.50.60.70.80.91Normalized Frequency (⨯π rad/sample)M a g n i t u d e (d B )双线性变换法的幅频特性和相频特性:0.10.20.30.40.50.60.70.80.91Normalized Frequency (⨯π rad/sample)P h a s e (d e g r e e s )00.10.20.30.40.50.60.70.80.91Normalized Frequency (⨯π rad/sample)M a g n i t u d e (d B )通过上图比较脉冲响应不变法双线性变换法的幅频特性和相频特性,而在在幅频曲线上几乎没有差别,都能达到相同的结果。

iir滤波器实验报告

iir滤波器实验报告

iir滤波器实验报告IIR滤波器实验报告引言:数字信号处理是现代通信、音频处理和图像处理等领域中不可或缺的技术。

滤波器作为数字信号处理的重要组成部分,被广泛应用于信号去噪、频率分析和信号重建等方面。

本实验旨在通过设计和实现一个IIR滤波器,探究其在信号处理中的应用和性能。

一、背景知识1.1 数字滤波器数字滤波器是一种能够改变信号频率特性的系统,可以通过去除或增强特定频率的成分来实现信号处理的目的。

根据其传递函数的特点,数字滤波器可以分为FIR(有限脉冲响应)和IIR(无限脉冲响应)滤波器。

1.2 IIR滤波器IIR滤波器是一种具有无限脉冲响应的滤波器,其传递函数中包含了反馈回路。

相比于FIR滤波器,IIR滤波器具有更窄的转换带宽和更陡峭的滚降特性,能够更好地逼近理想滤波器的频率响应。

二、实验目的本实验旨在通过设计和实现一个IIR滤波器,探究其在信号处理中的应用和性能。

具体实验目标如下:1. 理解IIR滤波器的原理和设计方法;2. 掌握IIR滤波器的设计过程和参数选择;3. 分析IIR滤波器在不同输入信号下的性能表现。

三、实验设计与实施3.1 IIR滤波器的设计在本实验中,我们选择了巴特沃斯滤波器作为IIR滤波器的设计模型。

巴特沃斯滤波器具有最平坦的幅频响应特性和最小的群延迟,适用于许多实际应用场景。

首先,我们需要确定滤波器的阶数和截止频率。

阶数决定了滤波器的复杂度和性能,而截止频率则决定了滤波器的频率响应特性。

根据实际需求和信号特性,我们选择了一个二阶巴特沃斯低通滤波器,截止频率为1kHz。

其次,根据巴特沃斯滤波器的设计公式,我们可以计算出滤波器的传递函数和巴特沃斯极点的位置。

通过极点的选择和配置,我们可以调整滤波器的频率响应和滚降特性。

3.2 IIR滤波器的实施根据设计得到的传递函数和极点位置,我们可以使用MATLAB等工具进行IIR滤波器的实施和验证。

具体步骤如下:1. 根据巴特沃斯滤波器的传递函数公式,计算出滤波器的系数;2. 使用MATLAB的filter函数,将待处理的信号输入滤波器,得到滤波后的输出信号;3. 对比输入和输出信号的频谱特性,分析滤波器的性能。

实验无限冲激响应滤波器IIR算法实验

实验无限冲激响应滤波器IIR算法实验

实验 3 :无限冲激响应滤波器IIR算法实验一、实验目的1. 熟悉IIR 数字滤波器特性;2.掌握IIR数字滤波器的设计过程;3.掌握 IIR 数字滤波器性能测试方法;二、实验设备兼容机操作系统Composer Studio v5三、实验内容1.掌握IIR数字滤波器的基础理论;2.基于MATLAB的IIR数字滤波器参数确定方法;3.采用C语言编程实现低通IIR 滤波器;4.掌握基于CCS的波形观察方法;观察滤波前后的波形变化;四.实验原理分析要求:使用低通巴特沃斯滤波器,设计通带截止频率f p为1kHz、增益为-3dB,阻带截止频率f st为12kHz、衰减为30dB,采样频率f s为25kHz;设计:通带截止频率为: f p = 1000Hz, f st = 12000Hz一、滤波器参数计算模拟预畸变通带截止频率为: w p = 2f s tan2πf p/2f s = 弧度/秒模拟预畸变阻带截止频率为:w st = 2f s tan2πf st/2f s= 弧度/秒N = ,则:一阶巴特沃斯滤波器就足以满足要求;一阶模拟巴特沃斯滤波器的传输函数为: Hs=w p/s+w p=s+由双线性变换定义 s=2f s z-1/z+1得到数字滤波器的传输函数为:因此,差分方程为: yn=n-1+n+n-1;二、基于MATLAB的滤波器参数求解1IIR数字滤波器阶次的选择的MATLAB函数N,w c = buttordw p,w st,Rp,As;N,w c = cheb1ordw p,w st,Rp,As;N,w c = cheb2ordw p,w st,Rp,As;N,w c = ellipordw p,w st,Rp,As;对低通滤波器,必须有w p < w st对高通滤波器,必须有w p > w st对带通滤波器,必须有 w s1 < w p1 < w p2 < w s2对带阻滤波器,必须有 w p1 < w s1 < w s2 < w p22 IIR数字滤波器的设计b,a = butterN,wc,’ftype’b,a = cheby1N,wc,’ftype’b,a = cheby2N,wc,’ftype’b,a = ellipN,wc,’ftype’三、基于C语言编程的IIR 数字滤波器编程实现程序流程图五.实验步骤1.打开 CCS,进入 CCS 的操作环境;2.打开工程,浏览程序:工程目录为C:\ICETEK\ICETEK-DM6437-A\Lab0402_IIR3.点击图标,CCS 会自动编译、链接和下载程序;4.运行程序;可以观察收到的数据;选择菜单 Tools->Graph->Dual Time,进行如下设置:Dual Time 参数设置选择菜单 Tools->Graph->FFT Magnitude, 新建 2 个观察窗口,分别进行如下设置:5.设置断点:在有注释“break point”的语句设置软件断点;使用菜单的 View->Breakpoints,打开断点观察窗口,在刚才设置的断点上右键->Breadk point properties 调出断点的属性设置界面,设置 Action 为 Refresh All windows;则程序每次运行到断点,所有的观察窗口值都会被刷新;其中,输入波形:一个低频正弦波与一个高频正弦波的叠加;输出波形:经过低通滤波后的低频正弦波;6.运行并观察结果:⑴ F8 键运行程序;⑵ 观察“IIR”窗口中时域图形;观察滤波效果;7.退出 CCS六.实验结果输入波形为一个低频率的正弦波与一个高频的余弦波叠加而成;如图:通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则被衰减; 六.问题与思考基本任务:1.试微调±改变程序中 f U的取值,观察步长因子μ在自适应算法中所起的作用;2.确定程序中的信号频率,试选用设计不同的信号、噪声组合,基于MATLAB设计不同的类型的滤波器,并基于CCS实现,并观察实验的结果;3.分析实验程序,细化算法流程图;4.结合CCS的使用,分析实验结果提高任务:5.尝试使用信号源生成组合信号,经过A/D采样后,送IIR滤波器实现; 源代码:include""define IIRNUMBER 2 /典范性的滤波器阶数/define SIGNAL1F 1000 /正弦信号频率,代码中没有使用/define SIGNAL2F 4500 /正弦信号频率,代码中没有使用/define SAMPLEF 10000 /采样频率,代码中没有使用/define PIfloat InputWave; /输入给IIR滤波器的信号,每次输出一个点/float IIR; /IIR滤波,每次输出一个点//滤波器的设计采用了案例的结果,应该重新设计/float fBnIIRNUMBER={ , }; /IIR滤波器的分子多项式系数,有错/ float fAnIIRNUMBER={ , }; /IIR滤波器的分母多项式系数/float fXnIIRNUMBER={ }; /IIR滤波器的迭代初始值/float fYnIIRNUMBER={ }; /IIR滤波器的输出值/float fInput,fOutput; /输入点和输出点/float fSignal1,fSignal2; /信号1、2的初始相位/float fStepSignal1,fStepSignal2; /信号1、2的相位步长/float f2PI;int i;float fIn256,fOut256;int nIn,nOut;main{nIn=0; nOut=0;f2PI=2PI;fSignal1=;fSignal2=PI;// fStepSignal1=2PI/30;// fStepSignal2=2PI;fStepSignal1=2PI/50; /信号1的相位步长:f1/fs = 1/50/ fStepSignal2=2PI/; /信号2的相位步长:f1/fs = 1// while 1{fInput=InputWave;fInnIn=fInput;nIn++; nIn%=256;fOutput=IIR;fOutnOut=fOutput;nOut++; / 请在此句上设置软件断点 /if nOut>=256{nOut=0;}}}float InputWave{for i=IIRNUMBER-1;i>0;i--{fXni=fXni-1;fYni=fYni-1;}fXn0=sin fSignal1+cos fSignal2/;fYn0=;fSignal1+=fStepSignal1;if fSignal1>=f2PI fSignal1-=f2PI;fSignal2+=fStepSignal2;if fSignal2>=f2PI fSignal2-=f2PI;return fXn0;}float IIR{float fSum;fSum=;/ yn=n-1+n+n-1 /for i=0;i<IIRNUMBER;i++{fSum+=fXnifAni;fSum+=fYnifBni;}return fSum;}。

无限冲激响应数字滤波器设计实验报告

无限冲激响应数字滤波器设计实验报告

实验5 无限冲激响应数字滤波器设计一、实验目的1、掌握双线性变换法及脉冲相应不变法设计IIR数字滤波器的具体设计方法;2、熟悉用双线性变换法及脉冲响应不变法设计低通、高通和带通IIR数字滤波器的计算机编程。

二、实验原理在MATLAB中,可以用下列函数辅助设计IIR数字滤波器:1)利用buttord和cheb1ord可以确定低通原型巴特沃斯和切比雪夫滤波器的阶数和截止频率;如:求阶数[N, Wn] = cheb1ord (Wp, Ws, Rp, Rs,’s’)选择项说明:high-类别。

缺省为low; s-模/数,缺省为数Rp即p, Rs即s ; Wn-Chebyshev自然频率(3dB频率),数字设计: Wp =p/ Ws=s/ 。

2)[num,den]=butter(N,Wn)(巴特沃斯)和[num,den]=cheby1(N,Wn),[num,den]=cheby2(N,Wn)(切比雪夫1型和2型)可以进行滤波器的设计;3)lp2hp,lp2bp,lp2bs可以完成低通滤波器到高通、带通、带阻滤波器的转换;4)使用bilinear可以对模拟滤波器进行双线性变换,求得数字滤波器的传输函数系数;5)利用impinvar可以完成脉冲响应不变法的模拟滤波器到数字滤波器的转换。

三、实验内容利用MATLAB编程,用脉冲响应不变法和双线性变换法设计一个数字带通滤波器,指标要求如下:通带边缘频率:,,通带峰值起伏:;阻带边缘频率:,,最小阻带衰减:。

1.采用切比雪夫程序:%%%%%%%%%%%采用切比雪夫%%%%%%%%%%脉冲响应format compactfs=1000;%%%%%%%%%%采样频率wp1=0.45*pi*fs;wp2=0.65*pi*fs;ws1=0.3*pi*fs;ws2=0.8*pi*fs;[N,wn]=cheb1ord([wp1 wp2],[ws1 ws2],1,40,'s');[B,A]=cheby1(N,1,wn,'s');[num,den]=impinvar(B,A,fs);[h1,w]=freqz(num,den);%%%%%%%%%%双线性法wp3=2*fs*tan(pi*0.45/2);wp4=2*fs*tan(pi*0.65/2);ws3=2*fs*tan(pi*0.3/2);ws4=2*fs*tan(pi*0.8/2);[N,wn]=cheb1ord([wp1 wp2],[ws1 ws2],1,40,'s');[B,A]=cheby1(N,1,wn,'s');[num,den]=bilinear(B,A,fs);[h2,w]=freqz(num,den);f=w/pi*fs/2;plot(f,20*log10(abs(h1)),'-.',f,20*log10(abs(h2)),'-'); axis([0,600,-80,10]);grid;title('采用切比雪夫')xlabel('f')ylabel('幅度/dB')图形:2.采用巴特沃斯的程序:%%%%%%%%%%%%%%%%采用巴特沃斯format compactfs=1000;%%%%%%%%%%采样频率wp1=0.45*pi*fs;wp2=0.65*pi*fs;ws1=0.3*pi*fs;ws2=0.8*pi*fs;[N,wn]=buttord([wp1 wp2],[ws1 ws2],1,40,'s'); [B,A]=butter(N,wn,'s');[num,den]=impinvar(B,A,fs);[h1,w]=freqz(num,den);%%%%%%%%%%双线性法wp3=2*fs*tan(pi*0.45/2);wp4=2*fs*tan(pi*0.65/2);ws3=2*fs*tan(pi*0.3/2);ws4=2*fs*tan(pi*0.8/2);[N,wn]=buttord([wp1 wp2],[ws1 ws2],1,40,'s');[B,A]=butter(N,wn,'s');[num,den]=bilinear(B,A,fs);[h2,w]=freqz(num,den);f=w/pi*fs/2;plot(f,20*log10(abs(h1)),'-.',f,20*log10(abs(h2)),'-');axis([0,600,-80,10]);grid;title('采用巴特沃斯')xlabel('f')ylabel('幅度/dB')图形:四.小结双线性变换法采用非线性频率压缩方法,它克服了频率混叠的现象,它适合低通,高通,带通,带阻滤波器的设计;用脉冲响应不变法设计的优点是频率坐标变换是线性的,它可以很好的重现原模拟滤波器的频率特性,但它只适合低通和带通滤波器的设计。

无限脉冲响应数字滤波器IIR设计

无限脉冲响应数字滤波器IIR设计

无限脉冲响应数字滤波器(IIR )设计所谓的数字滤波,指的是输入、输出均为数字信号,通过一定运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分。

数字滤波可分为无限脉冲响应(IIR )滤波和有限脉冲响应(FIR )滤波。

本次试验利用VISUAL DSP++ 软环境SIMULATOR 模拟实现无限脉冲响应(IIR )数字信号处理。

无限脉冲响应(IIR)的系统函数为:1()1Mrrr N kk k bz H Z a z-=-==+∑∑ 公式1即如果输入为X(Z),输出为Y(N),则:Y(Z)= X(Z )×H(Z),即01()()1Mrr r N kk k b zY Z X Z a z -=-==+∑∑ 公式2本试验中利用的公式是对上面的公式2对了相应的形式变化,利用中间变量11()()1Nkk k W Z X Z a z -==+∑ 公式3那么()()Mr r r Y Z W N b z -==∑ 公式4因此,本次试验设计了一个4阶IIR 滤波,其对应的公式3和公式4的时域公式如下:W(n)=x(n)*scale+w(n-1)*a1+w(n-2)*a2+w(n-3)*a3+w(n-4)*a4;公式5y(n)=w(n)+w(n-1)*b1+w(n-2)*b2+w(n-3)*b3+w(n-4)*b4;公式6在本次设计中由于系数a4,a3,a2,a1,b4,b3,b2,b1都是用户自己初始化的时候给定的且均为常数,所以公式5和公式6也相应可以变为公式7和公式8:W(n)=x(n)*scale+w(n-1)*a4+w(n-2)*a3+w(n-3)*a2+w(n-4)*a1 公式7 y(n)=w(n)+w(n-1)*b4+w(n-2)*b3+w(n-3)*b2+w(n-4)*b1 公式8其中x(n)是输入的数字序列。

从公式5和公式6可知:只要我们设定设计需要的a4,a3,a2,a1,b4,b3,b2,b1,以及初始化w(n-1), w(n-2), w(n-3), w(n-4),就可以得到我们所需要的滤波器了。

无限冲激响应(IIR)数字滤波器设计

无限冲激响应(IIR)数字滤波器设计

实验四 无限冲激响应(IIR )数字滤波器设计一、实验目的1.熟悉用双线性变换法设计IIR 数字滤波器的原理和方法;2.了解用脉冲响应不变法设计IIR 数字滤波器的原理和方法;3.掌握双线性变换及脉冲响应不变法设计的滤波器的频域特性,了解双线性变换法及脉冲响应不变法的特点;4.掌握数字滤波器的计算机仿真方法;二、实验原理介绍IIR 数字滤波器的系统函数为1z -的有理分式: 1011()1N kk Nk k b z H z a z -=-==+∑∑ 设计IIR 滤波器的系统函数,就是要确定()H z 的阶数N 及分子分母多项式的系数k a 和k b ,使其()()j j z e H e H z ωω==满足指定的频率特性。

由于模拟滤波器的设计有许多简单而严谨的设计公式和大量的图表可以利用,因此IIR 滤波器设计的方法之一是:先设计一个合适的模拟滤波器,然后将模拟滤波器通过适当的变换转换成满足给定指标的数字滤波器。

1、Butterworth 模拟低通滤波器221()1a N c H j Ω=⎛⎫Ω+ ⎪Ω⎝⎭幅度平方函数:其中,N 为滤波器的阶数,c Ω为通带截止频率。

2.Chebyshev 模拟低通滤波器 2221()1()a N c H j C εΩ=Ω+Ω幅度平方函数:3、脉冲响应不变法原理 用数字滤波器的单位脉冲响应序列h(n)逼近模拟滤波器的冲激响应()a h t ,让h(n)正好等于()a h t 的采样值,即:()()a h n h nT =其中,T 为采样间隔。

如果以()a H s 和H(z)分别表示()a h t 的拉氏变换及h(n)的Z 变换,则:12ˆ()()sT a a z e k H z H s H s j k T T π∞==-∞⎛⎫==- ⎪⎝⎭∑4、双线性变换法原理双线性变换法是通过两次映射采用非线性频率压缩的方法,将整个频率轴上的频率范围压缩到±π/T 之间,再用sTz e =转换到z 平面上,从而使数字滤波器的频率响应与模拟滤波器的频率响应相似。

实验-3-无限冲激响应滤波器(IIR)算法实验

实验-3-无限冲激响应滤波器(IIR)算法实验

实验-3-无限冲激响应滤波器(IIR)算法实验介绍滤波器是数字信号处理非常重要的一个概念,用来去除信号中不需要的部分,保留信号中需要的部分。

在数字信号处理中,有两种类型的滤波器:有限冲激响应滤波器(FIR)和无限冲激响应滤波器(IIR)。

本次实验将使用IIR算法实现滤波器。

IIR滤波器是一种递归滤波器,输出序列由输入序列和输出序列的线性组合得到。

实验目标本次实验的主要目标是掌握IIR滤波器算法实现过程,熟悉IIR滤波器的基本结构和原理,并实现IIR滤波器的设计和效果验证。

实验步骤1.确定IIR滤波器的结构和参数。

IIR滤波器有多种不同的结构,包括直接I型IIR结构、直接II型IIR结构、级联结构和平行结构等。

本次实验将使用直接I型IIR结构,结构参数包括两个系数a和b。

2.计算IIR滤波器的系数a和b。

根据设计要求,计算得到IIR滤波器的系数a和b。

系数的选择会影响滤波器的性能,需要根据具体的应用场景进行选择。

3.编写IIR滤波器的代码。

使用计算得到的系数a和b实现IIR滤波器的代码,并测试代码的正确性。

4.测试IIR滤波器的效果。

使用已有的信号对IIR滤波器进行测试,观察滤波器的输出效果。

本次实验实现了IIR滤波器算法,并通过测试验证了滤波器的正确性和效果。

实验结果表明,IIR滤波器在实际应用中具有良好的滤波性能和可靠性,可以有效地对信号进行去噪和滤波处理。

参考文献1.刘嘉辰. 数字信号处理[M]. 清华大学出版社, 2014.2.Lyons R. Understanding digital signal processing[M]. PearsonEducation, 2016.3.Oppenheim A V,Schafer R W. Discrete-time signal processing[M].Prentice Hall, 1999.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验无限冲激响应滤波器
I I R算法实验
The final edition was revised on December 14th, 2020.
实验 3 :无限冲激响应滤波器(IIR)算法实验
一、实验目的
1. 熟悉IIR 数字滤波器特性;
2.掌握IIR数字滤波器的设计过程;
3.掌握 IIR 数字滤波器性能测试方法。

二、实验设备
兼容机
操作系统
Composer Studio v5
三、实验内容
1.掌握IIR数字滤波器的基础理论;
2.基于MATLAB的IIR数字滤波器参数确定方法;
3.采用C语言编程实现低通IIR 滤波器;
4.掌握基于CCS的波形观察方法;观察滤波前后的波形变化。

四.实验原理分析
要求:使用低通巴特沃斯滤波器,设计通带截止频率f p为1kHz、增益为-3dB,阻带截止频率f st为12kHz、衰减为30dB,采样频率f s为25kHz。

设计:
通带截止频率为: f p = 1000Hz, f st = 12000Hz
(一)、滤波器参数计算
模拟预畸变通带截止频率为: w p = 2f s tan(2πf p/(2f s)) = 弧度/秒
模拟预畸变阻带截止频率为:w st = 2f s tan(2πf st/(2f s)) = 弧度/秒
N = ,则:一阶巴特沃斯滤波器就足以满足要求。

一阶模拟巴特沃斯滤波器的传输函数为: H(s)=w
p /(s+w
p
)=(s+
由双线性变换定义 s=2f
s
(z-1)/(z+1)得到数字滤波器的传输函数为:因此,差分方程为: y[n]=[n-1]+[n]+[n-1]。

(二)、基于MATLAB的滤波器参数求解
(1)IIR数字滤波器阶次的选择的MATLAB函数
[N,w
c ] = buttord(w
p
,w
st
,Rp,As);
[N,w
c ] = cheb1ord(w
p
,w
st
,Rp,As);
[N,w
c ] = cheb2ord(w
p
,w
st
,Rp,As);
[N,w
c ] = ellipord(w
p
,w
st
,Rp,As);
对低通滤波器,必须有w
p < w
st
对高通滤波器,必须有w
p > w
st
对带通滤波器,必须有 w
s1 < w
p1
< w
p2
< w
s2
对带阻滤波器,必须有 w
p1 < w
s1
< w
s2
< w
p2
(2) IIR数字滤波器的设计
[b,a] = butter(N,wc,’ftype’)
[b,a] = cheby1(N,wc,’ftype’) [b,a] = cheby2(N,wc,’ftype’)
[b,a] = ellip(N,wc,’ftype’)
(三)、基于C语言编程的IIR 数字滤波器编程实现
程序流程图
五.实验步骤
1.打开 CCS,进入 CCS 的操作环境。

2.打开工程,浏览程序:工程目录为C:\ICETEK\ICETEK-DM6437-A\Lab0402_IIR
3.点击图标,CCS 会自动编译、链接和下载程序。

4.运行程序。

可以观察收到的数据。

*选择菜单 Tools->Graph->Dual Time,进行如下设置:
Dual Time 参数设置
*选择菜单 Tools->Graph->FFT Magnitude,新建 2 个观察窗口,分别进行如下设置:
5.设置断点:在有注释“break point”的语句设置软件断点。

使用菜单的 View-
>Break points,打开断点观察窗口,在刚才设置的断点上右键->Breadk point
properties 调出断点的属性设置界面,设置 Action 为 Refresh All windows。

则程序每次运行到断点,所有的观察窗口值都会被刷新。

其中,输入波形:一个低频正弦波与一个高频正弦波的叠加;输出波形:经过低通滤波后的低频正弦波。

6.运行并观察结果:
⑴ F8 键运行程序。

⑵ 观察“IIR”窗口中时域图形;观察滤波效果。

7.退出 CCS
六.实验结果
输入波形为一个低频率的正弦波与一个高频的余弦波叠加而成。

如图:
通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则被衰减。

六.问题与思考
基本任务:
1.试微调(±改变程序中 f U的取值,观察步长因子μ在自适应算法中所起的作用。

2.确定程序中的信号频率,试选用设计不同的信号、噪声组合,基于MATLAB设计不同的类型的滤波器,并基于CCS实现,并观察实验的结果。

3.分析实验程序,细化算法流程图。

4.结合CCS的使用,分析实验结果
提高任务:
5.尝试使用信号源生成组合信号,经过A/D采样后,送IIR滤波器实现。

源代码:
#include""
#define IIRNUMBER 2 /*典范性的滤波器阶数*/
#define SIGNAL1F 1000 /*正弦信号频率,代码中没有使用*/
#define SIGNAL2F 4500 /*正弦信号频率,代码中没有使用*/
#define SAMPLEF 10000 /*采样频率,代码中没有使用*/
#define PI
float InputWave(); /*输入给IIR滤波器的信号,每次输出一个点*/
float IIR(); /*IIR滤波,每次输出一个点*/
/*滤波器的设计采用了案例的结果,应该重新设计*/
float fBn[IIRNUMBER]={ , }; /*IIR滤波器的分子多项式系数,有错*/
float fAn[IIRNUMBER]={ , }; /*IIR滤波器的分母多项式系数*/
float fXn[IIRNUMBER]={ }; /*IIR滤波器的迭代初始值*/
float fYn[IIRNUMBER]={ }; /*IIR滤波器的输出值*/
float fInput,fOutput; /*输入点和输出点*/
float fSignal1,fSignal2; /*信号1、2的初始相位*/ float fStepSignal1,fStepSignal2; /*信号1、2的相位步长*/
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;
main()
{
nIn=0; nOut=0;
f2PI=2*PI;
fSignal1=;
fSignal2=PI*;
// fStepSignal1=2*PI/30;
// fStepSignal2=2*PI*;
fStepSignal1=2*PI/50; /*信号1的相位步长:f1/fs = 1/50*/ fStepSignal2=2*PI/; /*信号2的相位步长:f1/fs = 1/*/
while ( 1 )
{
fInput=InputWave();
fIn[nIn]=fInput;
nIn++; nIn%=256;
fOutput=IIR();
fOut[nOut]=fOutput;
nOut++; /* 请在此句上设置软件断点 */
if ( nOut>=256 )
{
nOut=0;
}
}
}
float InputWave()
{
for ( i=IIRNUMBER-1;i>0;i-- )
{
fXn[i]=fXn[i-1];
fYn[i]=fYn[i-1];
}
fXn[0]=sin(fSignal1)+cos(fSignal2)/;
fYn[0]=;
fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI ) fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI;
return(fXn[0]);
}
float IIR()
{
float fSum;
fSum=;
/* y[n]=[n-1]+[n]+[n-1] */
for ( i=0;i<IIRNUMBER;i++ )
{
fSum+=(fXn[i]*fAn[i]);
fSum+=(fYn[i]*fBn[i]);
}
return(fSum);
}。

相关文档
最新文档