ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:689.75KB ,
资源ID:4213010      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4213010.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(IIR 滤波器实验.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

IIR 滤波器实验.docx

1、IIR 滤波器实验实验五 IIR 滤波器实验一 实验目的(1) 了解IIR 滤波器的原理及使用方法;(2) 了解使用Matlab 语言设计IIR 滤波器的方法;(3) 了解DSP 对IIR 滤波器的设计及编程方法;(4) 熟悉对IIR 滤波器的调试方法;二 实验内容本试验要求设计滤波器采样频率为600hz ,截止频率200hz 的高通滤波器。设计IIR 滤波器实现上面要求。输入信号频率为100HZ 和300HZ 的合成信号,目的是通过我们设计的滤波器将100HZ的信号滤掉,余下300HZ 的信号成分,达到滤波的效果。三 实验原理数字滤波器的输入xk和输出yk之间的关系可以用如下常系数线性差分方

2、程及其z变换描述:系统的转移函数为:设NM ,则传输函数变为:转换成极零点表示为: 式中,表示零点,表示极点,它具有N个零点和N个极点,如果任何一个极点在Z平面单位圆外,则系统不稳定。如果系数bj全都为0,滤波器成为非递归的FIR滤波器, 这时系统没有极点,因此FIR 滤波器总是稳定的。对于IIR 滤波器,有系数量化敏感的缺点。由于系统 对序列施加的算法,是由加法、延时和常系数乘三种基本运算的组合,所以可以用不同结构的数字滤波器来实现而不影响系统总的传输函数。图4.1 是四阶直接型IIR 滤波器的结构。图 4.1 四阶直接型IIR 滤波器的结构四 实验步骤1滤波器的Matlab 语言设计在Ma

3、tlab 中使用滤波器设计工具箱(FDA )设计滤波器。图 4.2 打开的FDA 主界面图上图 4.2 是打开的滤波器设计的主界面图,在图4.2 上可以设计各种满足用户要求的滤波器,包括滤波器的类型(IIR 或 FIR )、滤波器的阶数、滤波器的种类、滤波器的截至频率、带宽、纹波系数、采样频率等各种和设计滤波器有关的所有参数。图中,我们设计IIR 型的3 阶切比雪夫I 型的采样频率为600HZ ,截至频率为200HZ 的低通滤波器。图中中间显示的数据为设计好的滤波器参数。下图 4 .3 是对应频率特性图。图 4.3 滤波器的频率特性图下图 4.4 是对应的冲击响应特性图。图 4 .4 滤波器的

4、冲击响应特性图图 4 .5 是对应的滤波器阶跃特性图。图 4 .6 是对应的滤波器极零点示意图。图 4 .7 是对应的滤波器结构示意图。图 4 .5 滤波器阶跃特性图。图 4 .6 滤波器的极零点示意图图 4 .7 滤波器的结构示意图2从 Matlab 语言转换成通用语言使用Matlab 语言设计出滤波器的参数之后,紧接着需要编写通用的语言,以便向DSP所需要的汇编语言转换,也直接使用C 语言,然后调用CCS 自带的C 编译器将C 语言转换成汇编语言,但一般情况下,滤波器对实时要求比较高,而整个滤波器的程序编写也不是很大,所以建议采用汇编语言编写。滤波器设计的第二步需要编写通用的语言,在这里,

5、我们仍然使用Matlab 语言编写易懂的语句。下面程序是编写后的程序。浅显易懂,移值性强。* 滤波器程序 *clear all; 清寄存器值clf; 清屏N256; 数据点数Fs=600; 采样频率dt=1/fsfor K=1:Nf1=300; 信号频率f2=100; 信号频率y(k)=sin(2*pi*f1*k*dt)+sin(2*pi*f2*k*dt)+sin(2*(f1+20)*k*dt); 产生信号endlp200; 截止频率wn1=2lp/fs; 函数的参数zl,pl,kl=CHEBY1(3,0.5,wnl,high); 滤波器的极零点表示B,A= CHEBY1(3,0.5,wnl,

6、high); 滤波器的传递函数表示yy1(1)=0;yy1(2)=0;b(1)=0.0580; b(2)=-0.1741; b(3)=0.1741;b(4)=-0.058;a(1)=1; a(2)=1.1795; a(3)=0.918;a(4)=0.2742n=254; for i=1:n yy1(i)=b(4)* y(i+3)+ b(3)*y(i+2)+ b(2)*y(i+1)+b(1)*y(i)+a(4)*yy1(i+2)+a(3)*yy1(i+1) +a(2)*yy1(i); end滤波y=fft(y,N); 将信号做FFT 变换pyy=y.*conj(y); 做功率谱分析f=(0:(N

7、/2-1);figure(1);plot(f,pyy(1:N/2)y=fft(yy1,N); 将滤波后数据做功率谱分析pyy=y.*conj(y);f=(0:(N/2-1);figure(2);plot(f,pyy(1:N/2)对程序的说明:程序有四个部分,第一部分是用for 循环产生需要滤波的信号;第二部分是生成Cheby1 滤波器,其中产生极点和零点;第三部分是进行滤波;第四部分画出信号的功率谱图。图 4.8 和图 4.9 分别是滤波前和滤波后的信号功率谱图。图 4.8 滤波前的信号功率谱图图 4.9 滤波后的信号功率谱图3 滤波器的汇编语言设计在编写汇编程序之前,首先将滤波器的参数写出,

8、从上面滤波器的设计中我们得出滤波器的参数如下,这些参数从图 4.2 打开的FDA 主界面图可以看到。图 4.10 是滤波器的参数显示图。图 4.10 滤波器的参数图显然,图 4.10 所提供的滤波器的参数不能直接拿到DSP 汇编语言中去,图 4.10 中的设计有大于1 的数据,例如分母中的第二个参数,这样一个大于1 的数据,直接放入DSP中,需要进行数据格式的浮点运算。将导致编程的复杂程度,而且也会导致DSP 运行程序速度的降低。一般情况下我们都不这样使用,而是将数据做一定比例的压缩后计算(当然如果一定需要这样做,也是可以的,对浮点数据的处理可以参考我们的实验1 )。将数据做8 倍的压缩,得到

9、新的数据为:分子:0.00725 -0.027625 0. 027625 -0.00725分母:1.000 0.1474375 0.11475 0.034275可以注意到只有一个参数没有压缩,就是分母的第一个参数。请读者思考。针对以上滤波参数,编写汇编语言程序如下:.mmregs.ref filter_startK_DATA_SIZE .set 256 ; 输入数据个数K_BUFFER_SIZE .set 8K_STACK_SIZE .set 256 ; 堆栈K_A .set 3 ; a 的个数K_B .set 4 ; b 的个数K_CIR .set K_BUFFER_SIZESTACK .u

10、sect stack,K_STACK_SIZESYSTEM_STACK .set K_STACK_SIZE+STACKDATA_DP .usect filter_vars,0filterdata .usect filter_vars,K_DATA_SIZEbufferdatay .usect filter_vars,K_BUFFER_SIZE*2bufferdatax .usect filter_vars,K_BUFFER_SIZE*2.data.global inputdatainputdata.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8

11、408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WOR

12、D 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -16

13、43, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 113

14、68, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128,

15、4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16304.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408,

16、6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16304.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16304.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16304.text.asg

17、 AR2,ORIGIN.asg AR3,INPUT.asg AR4,FILTER.asg AR5,OUTPUTSTART:SSBX FRCTSSBX INTMLD #DATA_DP,DPSTM #STACK,SPCALL filter_startNOPNOPNOPLOOPB LOOP.def b1,b2,b3,a1,a2.def filter_startb1 .set 00EDH ; b1=0.00725b2 .set -02C9H ; b2=-0.027625b3 .set 02C9H ; b3=0.02762b4 .set -00EDH ; b4=-0.00725a1 .set 12DFH

18、a2 .set 0ED0Ha3 .set 0463H.textfilter_start:STM #K_CIR,BKSTM #1,AR0 ;设置循环缓冲区大小和步长STM #inputdata,ORIGINSTM #bufferdatax,INPUTSTM #bufferdatay,FILTERSTM #filterdata,OUTPUT;初始化RPT #K_A-1 ;a1,a2,a3 的个数MVDD *ORIGIN+,*INPUT+0% ;初始化头3 个YsSTM #bufferdatax,INPUT;设置初始化滤波数据RPT #K_A-1 ;a1,a2,a3 的个数MVDD *INPUT+0

19、%,*FILTER+0% ;初始化3 个YsSTM #bufferdatay,FILTERSTM #bufferdatax,INPUT;滤波STM #K_DATA_SIZE-3-1,BRC ;头3 个值直接通过RPTB filter_end-1;等待硬件中断MVDD *ORIGIN+,*INPUTRPT #K_B-1-1 ;b1,b2,b3, b4 的个数MAR *INPUT-0% ;调整输入到相应位置MPY *INPUT+0%,#b4,B ;B=b4*x(i)LD B,AMPY *INPUT+0%,#b3,B ;B=b3*x(i+1)ADD B,AMPY *INPUT+0%,#b2,B ;B

20、=b2*x(i+2)ADD B,AMPY *INPUT+0%,#b1,B ;B=b1*x(i+3)ADD B,A ;y(x+3)=AMPY *FILTER+0%,#a3,B ;B=y(i)*a3ADD B,A ;A=A+BMPY *FILTER+0%,#a2,B ;B=y(i+1)*a2ADD B,A ;A=A+BMPY *FILTER+0%,#a1,B ;B=y(i+2)*a1ADD B,A ;y(x+3)=A+BSTH A,*FILTER-0% ;FILTER+STH A,*OUTPUT+MAR *FILTER-0% ;调整滤波器到相应位置NOPRET.end配置文件:MEMORY PAG

21、E 0:PARAM: org = 3000h len = 4000hPAGE 1:DARAM: org = 100h len=4000hSECTIONS.text : PARAM PAGE 0stack : DARAM PAGE 1filter_vars : DARAM PAGE 1.bss : DARAM PAGE 1.data : DARAM PAGE 1程序运行结果如下:如果使用我们提供的配置文件,其中滤波前的数据首地址放在数据存储空间的地址320H 处,滤波后的数据首地址放在数据存储空间的地址200H 。图4.11 滤波前CCS 中的数据时域波形图 4.12 滤波前CCS 中的数据频域波形图4.13 滤波后CCS 中的数据时域波形图 4.14 滤波后CCS 中的数据频域波形

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1