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