基于DSP的IIR设计(C语言编程).doc

上传人:xin****828 文档编号:6704632 上传时间:2020-03-02 格式:DOC 页数:22 大小:1.09MB
返回 下载 相关 举报
基于DSP的IIR设计(C语言编程).doc_第1页
第1页 / 共22页
基于DSP的IIR设计(C语言编程).doc_第2页
第2页 / 共22页
基于DSP的IIR设计(C语言编程).doc_第3页
第3页 / 共22页
点击查看更多>>
资源描述
基于DSP的IIR滤波器设计姓 名: 专 业: 学 号: 指导教师: 日期:1、 设计目的为了熟练使用DSP,在本课程结束之际,利用所学的数字信号处理知识设计一IIR滤波器,并在基于DSP平台的仿真软件CCS下通过软件模拟仿真实现基本的滤波功能,其中输入信号和滤波器的各个参数自行确定。首先可以借助Matlab来产生输入数据,并根据输入信号确定滤波器参数,然后根据产生滤波器参数在CCS下编写程序实现滤波器功能,最后进行滤波器性能的测试,完成本次课程设计。本设计中使用的信号为信息信号: signal=sin(2*pi*sl*n*T)高频噪声: noise =0.5*sin(2*pi*ns1*n*T)混合信号: x=(signal+noise)其中sl=1000Hz,ns1=4500Hz,T=1/10000。混合信号波形为滤波器输入信号波形,信息信号波形为输出信号波形,滤波器的效果为滤除两个高频噪声。2、 IIR滤波器基本理论数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。IIR滤波器与FIR滤波器相比,具有相位特性差的缺点,但它的结构简单,运算量小,具有经济、高效的特点,并且可以用较少的阶数获得很高的选择性。因此也得到了较为广泛的应用。(1)IIR滤波器的基本结构 IIR滤波器差分方程的一般表达式为:式中x(n)为输入序列;y(n)为输出序列;和为滤波器系数。IIR滤波器具有无限长的单位脉冲响应,在结构上存在反馈回路,具有递归性,即IIR滤波器的输出不仅与输入有关,而且与过去的输出有关.其传递函数为:设计IIR滤波器的任务就是寻求一个物理上可实现的系统函数H(z),使其频率响应H(z)满足所希望得到的频域指标,即符合给定的通带截止频率、阻带截止频率、通带衰减系数和阻带衰减系数。IIR滤波器具有多种形式,主要有:直接型(也称直接I型)、标准型(也称直接II型)、变换型、级联型和并联型.二阶IIR滤波器,又称为二阶基本节,分为直接型、标准型和变换型.对于一个二阶IIR滤波器,其输出可以写成: a.直接型(直接I型)根据上式可以得到直接二型IIR滤波器的结构图.如图所示.共使用了4个延迟单元().图 直接I型二阶IIR滤波器直接型二阶IIR滤波器还可以用图的结构实现.图 直接I型二阶IIR滤波器此时,延时变量变成了w(n).可以证明上图的结构仍满足二阶IIR滤波器输出方程. b.标准型(直接II型) 从图2可以看出,左右两组延迟单元可以重叠,从而得到标准二阶IIR滤波器的结构图,如图所示.由于这种结构所使用的延迟单元最少(只有2个),得到了广泛地应用,因此称之为标准型IIR滤波器.图 标准型二阶IIR滤波器(2)设计方法及原理IIR滤波器的设计可以利用模拟滤波器原型,借鉴成熟的模拟滤波器的设计结果进行双线性变换,将模拟滤波器变换成满足预定指标的数字滤波器,即根据模拟设计理论设计出满足要求的传递函数H(s),然后将H(s)变换成数字滤波器的传递函数H(z)。设计IIR滤波器的基础是设计模拟滤波器的原型,这些原型滤波器主要有:巴特沃兹(Butterworth)滤波器,其幅度响应在通带内具有最平特性;切比雪夫(Chebyshev)滤波器,在通带内具有等波纹特性,且阶数小于巴特沃兹滤波器;椭圆(Elliptic)滤波器,在通带内具有等波纹特性,且阶数最小。 a.用脉冲相应不变法设计IIR数字滤波器 利用模拟滤波器来设计数字滤波器,也就是使数字滤波器能模仿模拟滤波器的特性,这种模仿可以从不同的角度出发。脉冲响应不变法是从滤波器的脉冲响应出发,使数字滤波器的单位脉冲响应序列h(n)模仿模拟滤波器的冲激响应ha(t),即将ha(t)进行等间隔采样,使h(n)正好等于ha(t)的采样值,满足h(n)=ha(nT)式中,T是采样周期。 如果令Ha(s)是ha(t)的拉普拉斯变换,H(z)为h(n)的Z变换,利用采样序列的Z变换与模拟信号的拉普拉斯变换的关系得则可看出,脉冲响应不变法将模拟滤波器的S平面变换成数字滤波器的Z平面,这个从s到z的变换z=esT是从S平面变换到Z平面的标准变换关系式。图 脉冲响应不变法的映射关系 由上式,数字滤波器的频率响应和模拟滤波器的频率响应间的关系为这就是说,数字滤波器的频率响应是模拟滤波器频率响应的周期延拓。正如采样定理所讨论的,只有当模拟滤波器的频率响应是限带的,且带限于折叠频率以内时,即 才能使数字滤波器的频率响应在折叠频率以内重现模拟滤波器的频率响应,而不产生混叠失真,即 但是,任何一个实际的模拟滤波器频率响应都不是严格限带的,变换后就会产生周期延拓分量的频谱交叠,即产生频率响应的混叠失真,如图所示。这时数字滤波器的频响就不同于原模拟滤波器的频响,而带有一定的失真。当模拟滤波器的频率响应在折叠频率以上处衰减越大、越快时,变换后频率响应混叠失真就越小。这时,采用脉冲响应不变法设计的数字滤波器才能得到良好的效果。图 脉冲响应不变法中的频响混叠现象 对某一模拟滤波器的单位冲激响应ha(t)进行采样,采样频率为fs,若使fs增加,即令采样时间间隔(T=1/fs)减小,则系统频率响应各周期延拓分量之间相距更远,因而可减小频率响应的混叠效应。脉冲响应不变法优缺点:从以上讨论可以看出,脉冲响应不变法使得数字滤波器的单位脉冲响应完全模仿模拟滤波器的单位冲激响应,也就是时域逼近良好,而且模拟频率和数字频率之间呈线性关系=T。因而,一个线性相位的模拟滤波器(例如贝塞尔滤波器)通过脉冲响应不变法得到的仍然是一个线性相位的数字滤波器。脉冲响应不变法的最大缺点是有频率响应的混叠效应。所以,脉冲响应不变法只适用于限带的模拟滤波器(例如,衰减特性很好的低通或带通滤波器),而且高频衰减越快,混叠效应越小。至于高通和带阻滤波器,由于它们在高频部分不衰减,因此将完全混淆在低频响应中。如果要对高通和带阻滤波器采用脉冲响应不变法,就必须先对高通和带阻滤波器加一保护滤波器,滤掉高于折叠频率以上的频率,然后再使用脉冲响应不变法转换为数字滤波器。当然这样会进一步增加设计复杂性和滤波器的阶数。 b.用双线性变换法设计IIR数字滤波器脉冲响应不变法的主要缺点是产生频率响应的混叠失真。这是因为从S平面到平面是多值的映射关系所造成的。为了克服这一缺点,可以采用非线性频率压缩方法,将整个频率轴上的频率范围压缩到-/T/T之间,再用z=esT转换到Z平面上。也就是说,第一步先将整个S平面压缩映射到S1平面的-/T/T一条横带里;第二步再通过标准变换关系z=es1T将此横带变换到整个Z平面上去。这样就使S平面与Z平面建立了一一对应的单值关系,消除了多值变换性,也就消除了频谱混叠现象,映射关系如图所示。图 双线性变换的映射关系为了将S平面的整个虚轴j压缩到S1平面j1轴上的-/T到/T段上,可以通过以下的正切变换实现式中,T仍是采样间隔。当1由-/T经过0变化到/T时,由-经过0变化到+,也即映射了整个j轴。将上式写成将此关系解析延拓到整个S平面和S1平面,令j=s,j1=s1,则得再将S1平面通过以下标准变换关系映射到Z平面z=es1T从而得到S平面和Z平面的单值映射关系为:上两式是S平面与Z平面之间的单值映射关系,这种变换都是两个线性函数之比,因此称为双线性变换。首先,把z=ej,可得即S平面的虚轴映射到Z平面的单位圆。其次,将s=+j代入式,得因此由此看出,当0时,|z|0时,|z|1。也就是说,S平面的左半平面映射到Z平面的单位圆内,S平面的右半平面映射到Z平面的单位圆外,S平面的虚轴映射到Z平面的单位圆上。因此,稳定的模拟滤波器经双线性变换后所得的数字滤波器也一定是稳定的。 双线性变换法优缺点双线性变换法与脉冲响应不变法相比,其主要的优点是避免了频率响应的混叠现象。这是因为S平面与Z平面是单值的一一对应关系。S平面整个j轴单值地对应于Z平面单位圆一周,即频率轴是单值变换关系。S平面上与Z平面的成非线性的正切关系,如图所示。由图7-7看出,在零频率附近,模拟角频率与数字频率之间的变换关系接近于线性关系;但当进一步增加时,增长得越来越慢,最后当时,终止在折叠频率=处,因而双线性变换就不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象,从而消除了频率混叠现象。图 双线性变换法的频率变换关系但是双线性变换的这个特点是靠频率的严重非线性关系而得到的。由于这种频率之间的非线性变换关系,就产生了新的问题。首先,一个线性相位的模拟滤波器经双线性变换后得到非线性相位的数字滤波器,不再保持原有的线性相位了;其次,这种非线性关系要求模拟滤波器的幅频响应必须是分段常数型的,即某一频率段的幅频响应近似等于某一常数(这正是一般典型的低通、高通、带通、带阻型滤波器的响应特性),不然变换所产生的数字滤波器幅频响应相对于原模拟滤波器的幅频响应会有畸变,如图所示。图 双线性变换法幅度和相位特性的非线性映射对于分段常数的滤波器,双线性变换后,仍得到幅频特性为分段常数的滤波器,但是各个分段边缘的临界频率点产生了畸变,这种频率的畸变,可以通过频率的预畸来加以校正。也就是将临界模拟频率事先加以畸变,然后经变换后正好映射到所需要的数字频率上。三、IIR滤波器的MATLAB实现MATLAB辅助DSP 实现IIR ,其总体过程为在DSP中编写处理程序,在MATLAB中利用滤波器设计、分析工具( FDATOOL) ,根据指定的滤波器性能快速设计一个FIR ,再把滤波器系数以头文件形式导入CCS 中,头文件中MATLAB 辅助DSP 实现IIR 数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行DSP 程序并显示、分析处理后的数据。使用该方法,便于采用汇编语言来实现程序。头文件名不变,当MATLAB中设计的滤波器系数改变时,相应头文件中系数也改变,方便程序调试、仿真。(1)输入信号的产生首先利用Matlab产生导入CCS的dat文件,具体实现如下代码所示sl=1000; %有效信号ns1=4500; %高频噪声fs=10000; %采样频率N=1000;T=1/fs;n=0:N;signal=sin(2*pi*sl*n*T);noise=0.5*sin(2*pi*ns1*n*T);x=(signal+noise);%待滤波信号figure(1)plot(x)figure(2)y=abs(fft(x);%待滤波频谱df=n*(fs/N);plot(df,y)figure(3)plot(signal)figure(4)ysignal=abs(fft(signal);%滤波后频谱df=n*(fs/N);plot(df,ysignal)%滤波数据导出xout=x/max(x); %归一化xto_css=round(32767*xout);%数据取整xoutcss=xto_css;fid=fopen(iir_input.dat,w); %打开文件fprintf(fid,1651 1 0 0 0n);%输出文件头fprintf(fid,%dn,xoutcss); %输出fclose(fid);产生的时域波形如图所示:图 输入信号波形频谱如图所示:图 输入频谱经过滤波器后的预期时域波形如图:图 输出时域波形频谱如图所示图 输出频谱(2) 滤波器的设计MATLAB集成了一套功能强大的滤波器设计工具FDATool(Filter Design & Analysis Tool),可以完成多种滤波器的设计、分析和性能评估。a.打开Filter Design & Analysis Tool单击MATLAB主窗口下方的“Start”按钮,选择菜单“ToolBox” “Filter Design” “Filter Design & Analysis Tool(FDATool)”命令,打开FDATool,如图所示。图 fadatool的启动b.产生滤波器 阶数为2阶,这里应填1,比阶数少1。IIR类型选择切比雪夫型I型(chebyshev)采样频率为10000Hz,通带截止频率为1000Hz。图 滤波器的幅频特性图 滤波器的相位特性c.产生滤波器系数和头文件图 滤波器系数图 头文件的产生最后将产生的头文件中的滤波器系数数组放入编写好的滤波器函数中,并在进行CCS中进行调试与测试。4、 FIR滤波器的Simulink仿真通过Matlab的 FDATOOL设计滤波器后,为了确认该滤波器是否有效,现通过simulink进行建模仿真观察该滤波器是否有效。把两个信号通过加法器相加后,再通过FDATOOL设计的滤波器即可。注意此处设计的是数字滤波器,需要把三个输入信号数字化。具体仿真模型建立如下:分别观察滤波前后的时域波形图图 滤波前时域波形图 滤波后时域波形五、IIR滤波器的DSP实现(1)标准型二阶IIR滤波器的实现在二阶IIR滤波器结构中,标准型结构是最常见的滤波器结构,其结构如图所示:图 标准型二阶IIR滤波器 由其差分方程对二阶IIR滤波器进行编程,其中乘法-累加运算可采用单操作数指令或双操作数指令,数据和系数可存放在DARAM中,如图所示:图 双操作数数据存放和系数表(2)直接型二阶IIR滤波器的实现二阶IIR滤波器可以用直接型结构来实现.在迭代运算中,先衰减后增益,系统的动态范围和鲁棒性要好些.直接型二阶IIR滤波器的结构如图所示:图 直接型二阶IIR滤波器为了实现直接型滤波,可在DARAM中开辟4个循环缓冲区,用来存放变量和系数,并采用循环缓冲区方式寻址.这4个循环缓冲区的结构如图所示:图 循环缓冲区结构(2) C语言实现IIR采用C语言算法在DSP平台上实现了FIR低通数字滤波器,C语言算法相比于汇编算法可移植性很强。这里是在TMS320VC5510DSP为平台编写的C语言算法, 此算法可以稍加改动用在其他DSP芯片上, 而汇编算法则不然。这种方法具有以下优点:(a) 程序的入口和出口由C语言自动管理,不必手工编写汇编程序实现。(b) 程序结构清晰,可读性强。(c) 程序调试方便。由于C程序中的变量全部由C语言来定义,因此采用C源码调试器可以方便地观察C语言变量。(d) 可移植性较强,通用性较好。具体代码如下:#includemath.h #define IIRNUMBER 2 /滤波器的阶数 int InputWave(); /函数申明int IIR(); /IIR滤波函数float fBnIIRNUMBER= 0.0,0.7757 ; float fAnIIRNUMBER= 0.1122,0.1122 ; /滤波器系数 float fXnIIRNUMBER= 0.0 ; float fYnIIRNUMBER= 0.0 ; int fInput,fOutput; int i,m=0; int fIn256,fOut256; /输入输出缓存int input256; int nIn,nOut; main() nIn=0; nOut=0; fInput=fOutput=0; while ( 1 ) fInput=InputWave(); /从数据中导入数据到输入缓存 fInnIn=fInput; nIn+; nIn%=256; /保证数据缓存不溢出 fOutput=IIR(); /调用IIR滤波函数 fOutnOut=fOutput; /放入输出缓存 nOut+; if ( nOut=256 ) /保证数据缓存不溢出 nOut=0; int InputWave() /处理输入数据 for ( i=IIRNUMBER-1;i0;i- ) fXni=fXni-1; fYni=fYni-1; fXn0=inputm; fYn0=0.0; m+;m%=256; return(fXn0); int IIR() /IIR滤波函数 int fSum; fSum=0; for ( i=0;i VECT .trcinit: SARAM .gblinit: SARAM frt: SARAM .text: SARAM .cinit: SARAM .pinit: SARAM .sysinit: SARAM .bss: SARAM .far: SARAM .const: SARAM .switch: SARAM .sysmem: SARAM .cio: SARAM .MEM$obj: SARAM .sysheap: SARAM .stack: SARAM .sysstack SARAM .csldata DARAM
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 其他分类 > 大学论文


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!