实验六 IIR滤波器
一、 实验目的
1. 熟悉IIR滤波器C54X实现的编程方法. 2. 测试IIR滤波器的单位冲击响应曲线. 3. 检查IIR滤波器的频率特性。
二、 实验条件
1. 已经设计出四阶IIR滤波器的参数如下:
·通带:0—200Hz
·过渡带宽:200Hz-500Hz ·通带内波动:<0。5dB ·阻带衰减:<—20dB ·采样频率Fs:3600Hz ·脉冲传递函数H(z):
·差分方程式为:
y(n)=*x(n)+*x(n—1)+*x(n-2)+*x(n-3)+*x(n-4)+*y(n-1)+*y
(n-2)+*y(n-3)+*y(n-4)
其中:A1=-3.4647 A2=4。4615 A3=—2.8518 A4=0。6739
B0=0.0951 B1=-0。3139 B2=0。4460 B3=-0.3139 B4=0。0951
生成正弦数据文件的高级语言程序。程序名为sin_flt。exe.
2. 直接形式二阶IIR滤波器程序Lab6.asm以及链接命令文件Lab6.cmd。
三、 实验内容
1. 消化直接形式二阶滤波器程序iir3.asm以及链接命令文件iir3。cmd.
(完整word版)DSP基于CCS的IIR滤波器设计实验
2. 修改Lab6。asm。
①定义循环缓冲区:
X: X(n
Y: YY(n-3 YY(n-1AR4 Y(n)
X(nX(n-X(nX(n) AR2
B4 B:
A:
A4 A3 A2 A1 A0 B3 B2 B1 B0 AR3 AR5
相应的汇编命令为:
X 。usect ”X”,5 Y 。usect ”Y”,5 B .usect \"B\ A 。usect ”A\ ②修改系数表:
初始值y(n—4)- y(n-1)以及x(n-4)- x(n-1)均设置为0。 凡绝对值≥1的系数需化成绝对值〈1的系数。这样,系数表示为: 。word 3116 ;B4=0。0951 .word -10286 ;B3=-0.3139 .word 14615 ;B2=0.4460 。word -10286 ;B1=—0。3139
(完整word版)DSP基于CCS的IIR滤波器设计实验
。word 3116 ;B0=0.0951 .word —22082 ;A4=-0.6739 .word 31149 ;A3/3=2。8518/3 .word -30484 ;A2/5=—4。6515/5 。word 28383 ;A1/4=3。4647/4
③修改传送x的初始值、y的初始值、系数B、系数A的重复次数,分别为3、3、4、3. ④修改传送数据的起始地址:
传送x MVPD #table,*AR1+ 传送y MVPD #table+4,*AR1+ 传送B MVPD #table+8,*AR1+ 传送A MVPD #table+13,*AR1+ ⑤修改BK寄存器,BK=5。 ⑥为循环缓冲区设初始指针:
AR2 X+4 AR4 Y+4 AR5 B+4 AR3 A+4
⑦由于归一化成绝对值小于1的系数,因此反馈通道运算必须作相应的修正。 ⑧对输入数据文件中的数据定标,右移4位,以防止运算中溢出。
3. 修改Lab。cmd文件.
将X、Y、B、A的循环缓冲区均改为align(8)。
4. 汇编和链接
5. 测试本实验IIR滤波器的单位冲击响应曲线 6. 检查本实验IIR滤波器的频率特性曲线
四、 实验程序
(完整word版)DSP基于CCS的IIR滤波器设计实验
;************************** ;* lab6.ASM IIR Filter *
;**************************
。title ”lab6。asm\"
X Y B A PA0 PA1 table: 。mmregs 。def start 。bss in,1 out,1
。usect ”X”,5 \"Y\ 。usect \"B”,5 \"A\",5
.set 0 。set 1 。data
.word 0 0 。word 0 0 。word 0 0 0 ;给in分配一个存储单元
;定义X的缓冲区域 ;I/O口地址赋值 ;X(N—4) ;为标号table开始的存储单元赋初值 ;X(N—3) ;X(N-2) ;X(N—1) ;Y(N-4) ;Y(N—3) ;Y(N—2)
.bss .usect .usect .word .word .word .word (完整word版)DSP基于CCS的IIR滤波器设计实验
。word 0 ;Y(N-1) 。word 3116 ;B4=0.0951 .word -10286 ;B3=-0.3139 。word 14615 ;B2=0。4460 。word —10286 ;B1=-0。3139 。word 3116 ;B0=0.0951 .word -22082 ;A4=-0.6739 .word 31149 ;A3/3=2.8518/3 。word -30484 ;A2/5=—4.6515/5 .word 28383 ;A1/4=3.4647/4
。text
start: SSBX FRCT
STM #X,AR1 ;AR1指向X的首地址 RPT #3 ;重复执行下条语句3次
MVPD #table,*AR1+ ;从table首址重复传递4个数据 STM #Y,AR1 RPT #3
MVPD #table+4,*AR1+ STM #B,AR1 RPT #4
MVPD #table+8,*AR1+ STM #A,AR1 RPT #3
(完整word版)DSP基于CCS的IIR滤波器设计实验
MVPD #table+13,*AR1+
STM #X+4,AR2 ;为循环缓冲区设初始指针 STM #Y+3,AR4 STM #B+4,AR5 STM #A+3,AR3
STM #5,BK ;将5赋值给BK STM #-1,AR0 ;将—1赋值给AR0
STM #1000h,AR6 ;输出数据缓冲区首址为#1000h STM #0200h—1,AR7 ;循环计算512个样本点
LOOP: PORTR PA1,*AR2 ;x(n)/2,防止溢出
;MVKD in,*AR2
LD *AR2,A ;将AR2的地址加载到A累加器
STL A,-1,*AR2 ;A累加器低位右移1位送往AR2寄存器所指地址 MPY *AR2+0%,*AR5+0%,A ;作B0*X(n)+A=A运算,并将地址减一 MAC *AR2+0%,*AR5+0%,A MAC *AR2+0%,*AR5+0%,A MAC *AR2+0%,*AR5+0%,A MAC *AR2,*AR5+0%,A
MAC *AR4,*AR3,A ;作A1/4*Y(n—1) MAC *AR4,*AR3,A MAC *AR4,*AR3,A
MAC *AR4+0%,*AR3+0%,A ;运算四次后将寄存器地址减一 MAC *AR4,*AR3,A ; 作A2/5*Y(n—2) MAC *AR4,*AR3,A
(完整word版)DSP基于CCS的IIR滤波器设计实验
MAC *AR4,*AR3,A MAC *AR4,*AR3,A
MAC *AR4+0%,*AR3+0%,A ;运算五次后将寄存器地址减一 MAC *AR4,*AR3,A ;作 A3/3*Y(n-3) MAC *AR4,*AR3,A
MAC *AR4+0%,*AR3+0%,A ;运算三次后将寄存器地址减一 MAC *AR4+0%,*AR3+0%,A ;作 A4*Y(n-4) MAR *AR3+0%
STH A,*AR4 ;A累加器高位送往AR4寄存器所指地址 ;BD IIR
;MVDK *AR4,out
PORTW *AR4,PA0 ;输出y(n)
STH A,*AR6+ ;保存y(n)
BANZ LOOP,*AR7 ;循环512次— end B end 。END
五、 实验结果
IIR滤波器的单位冲击响应曲线
(完整word版)DSP基于CCS的IIR滤波器设计实验
IIR滤波器的频率特性曲线(低通)
六、 实验体会
实验中了解到了程序中的运算数都是定点小数,所以大于一的系数要作小数处理;
学习了如何编写数据文件,定义I/O端口的GEL参数,将数据文件与I/O口地址相关联;
如何查看频率响应及幅频特性曲线.
因篇幅问题不能全部显示,请点此查看更多更全内容