资源描述:
《汕头大学电子系dsp实验报告6》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、汕头大学实验报告学院:工学院系:电子工程系专业:电子信息工程年级:09成绩:实验六FIR和IIR数字滤波器的DSP设计一、实验目的1.了解FIR/IIR滤波器的原理及使用方法;2.了解使用Matlab语言设计FIR/IIR滤波器的方法;3.了解DSP对FIR/IIR滤波器的设计及编程方法;4.熟悉对FIR/IIR滤波器的调试方法.二、实验原理1.FIR滤波器的原理:在dsp中用循环缓冲区法来实现FIR算法:-8-1.IIR滤波器的原理传递函数H(z)为:其对应差分方程:编程时,开辟四个缓冲区,存放
2、输入、输出变量和滤波器的系数-8-一、问题(一)解释程序,并分析CCS显示的实验结果1、FIR:.mmregs.globalstart.defstart,_c_int00KS.set256;定义块重复次数,及输出的个数N.set16;定义卷积的阶次COEF_FIR.sect"COEF_FIR".word62,188,86,-764,-1453,625,6202,11439;定义滤波器系数.dataINPUT.copy"FIRIN.INC";输入数据在数据区0x2400OUTPUT.space102
3、4;输出数据在数据区0x2500x_new.usect"DATA1",N/2x_old.usect"DATA2",N/2size.setN/2.text_c_int00bstart-8-nopnopstart:SSBXFRCT;设置FRCT(小数方式位)STM#x_new,AR2;AR2指向New缓冲区第一个单元STM#x_old+(size-1),AR3;AR3指向Old缓冲区最后一个单元STM#-1,AR0STM#INPUT,AR4;模拟输入数据指针AR4初始化STM#OUTPUT,AR5;滤
4、波器输出数据指针AR5初始化STM#KS-1,BRC;;//块重复次数RPTBDLOOP-1STM#size,BK;循环缓冲区块大小BK=sizeLD*AR4+,ASTLA,*AR2;输入样本值FIR_FILTER:ADD*AR2+0%,*AR3+0%,A;AH=x(n)+x(n-15)RPTZB,#size-1;;//重复执行下一条指令size次firs*AR2+0%,*AR3+0%,COEF_FIR;B=B+AH*h(0),AH=x(n-1)+x(n-14)STHB,*AR5+;保存滤波输出数
5、据到AP5所指向单元MAR*+AR2(2)%;修正AR2,指向New缓冲区最老的数据替代MAR*AR3+%;修正AR3,指向OLD缓冲区最老的数据替代MVDD*AR2,*AR3+0%;用New缓冲区最老的数据替代Old缓冲区中最老的数据LOOP:EENDBEEND.end-8-1、IIR:.title"diir.asm".mmregs.globalstart.defstart,_c_int00N.set6INPUT.copy"iirin.inc"table.word63,0,-188,0,188,
6、0,-63.word0,11675,0,9663,0,2948.dataBN.usect"BN",N+1AN.usect"AN",N+1INBUF.usect"INBUF",256OUTPUT.usect"OUTPUT",256.text.asgAR0,INDEX_P.asgAR2,XN_P.asgAR3,ACOEF_P.asgAR4,YN_P.asgAR5,BCOEF_P_c_int00bstart-8-nopnopstart:SSBXFRCTSSBXOVMSSBXSXMSTM#BN+N,AR1
7、RPT#NMVPD#table,*AR1-STM#AN+N-1,AR1RPT#N-1MVPD#table+N+1,*AR1-STM#OUTPUT,AR1RPTZA,#255STLA,*AR1+STM#INBUF,AR1RPT#255MVPD#INPUT,*AR1+STM#OUTPUT,YN_PSTM#INBUF,XN_PSTM#N-1,INDEX_PSTM#255,BRCRPTBLOOP-1IIR:SUBA,ASTM#BN,BCOEF_PSTM#AN,ACOEF_PRPT#N-1MAC*XN_P+
8、,*BCOEF_P+,AMAC*XN_P,*BCOEF_P,AMAR*XN_P-0RPT#N-1MAC*YN_P+,*ACOEF_P+,ASTHA,*YN_P-0LOOP:EENDBEEND.end-8-(二)用MATLAB产生实验用的IIR和FIR滤波器,分析实验结果1、FIR说明:查看firinput.c文件可知,此低通滤波器的截止频率为:1000Hz,采用频率为:8000Hz;用matlab设计此低通滤波器方法如下:Matlab程序:>>b=fir1(16,1000/4000