1、DSP原理及应用FIR滤波器的C54X实现一、 实验目的用matlab获得FIR滤波器的抽头系数,用汇编语言实现FIR滤波器。产生一混频信号,用所设计的滤波器进行滤波,查看滤波器输出。二、实验仪器1PC一台(win7系统);2Code Composer Studio 3.1 软件;3MATLAB 2009;4Dev C+ 6.0 软件。三、实验要求1设计一个FIR低通滤波器,通带边界频率为2500Hz,通带波纹小于1dB;阻带边界频率为3000Hz,阻带衰减大于40dB;采样频率为10000Hz。2设计一个采样频率Fs为10000Hz,输入信号频率为2000Hz和3250Hz的合成信号,通过设
2、计的低通滤波器将3250Hz信号滤掉,余下2000Hz信号。3用循环缓冲区和双操作数寻址方法编写实现FIR滤波的程序。四、实验原理如果FIR 滤波器的冲激响应为h(0),h(1), .,h(N-1)。X(n)表示滤波器在n 时刻的输入,则n 时刻的输出为:y(n) = h(0)x(n) + h(1)x(n-1) + . + h(N-1)xn-(N-1)使用MAC 或FIRS 指令可以方便地实现上面的计算。图1 说明了使用循环寻址实现FIR 滤波器的方法。为了能正确使用循环寻址,必须先初始化BK,块长为N。同时,数据缓冲区和冲激响应(FIR 滤波器的系数)的开始地址必须是大于N 的2 的最小幂的
3、倍数。例如,N=11,大于N 的最小2 的幂为16,那么数据缓冲区的第一个地址应是16 的倍数,因此循环缓冲区起始地址的最低4 位必须是0。在图1 中,滤波系数指针初始化时指向h(N-1),经过一次FIR 滤波计算后,在循环寻址的作用下,仍然指向h(N-1)。而数据缓冲区指针指向的是需要更新的数据,如x(n)。在写入新数据并完成FIR 运算后,该指针指向x(n-(N-1)。所以,使用循环寻址可以方便地完成滤波窗口数据的自动更新。五、实验内容及步骤1FIR滤波器的设计FIR滤波器的设计可以用MATLAB软件的窗函数法进行,这里选择Hamming窗,程序为:b=fir1(16,1500/8000*
4、2)得到FIR数字滤波器系数b为:b0=0b9=0.2834b1=0.0048b10=0.0973b2=0.008b11=-0.029b3=-0.0089b12=-0.0429b4=-0.0429b13=-0.0089b5=-0.029b14=0.008b6=0.0973b15=0.0048b7=0.2834b16=0b8=0.3745在DSP汇编语言中,不能直接输入十进制小数,在MATLAB中进行如下转换:h=round(b*215)将系数转换为Q15的定点小数形式,为:h0=0h9=9287h1=158h10=3187h2=264h11=-951h3=-290h12=-1406h4=-14
5、06h13=-290h5=-951h14=264h6=3187h15=158h7=9287h16=0h8=122722产生滤波器输入信号文件以下是一个产生输入信号的C语言程序,信号是频率为1000Hz和2500Hz的正弦波合成的波形。文件名为firinput.c 。#include #include void main()int i;double f256;FILE *fp;if(fp=fopen(firin.inc,wt)=NULL)printf(cant open file! n);return;for(i=0;iROM1PAGE 0 .data : INTRAM1 PAGE 1FIR_COFF: INTRAM2 PAGE 1FIR_BFR : INTRAM3 PAGE 1STACK : B2B PAGE 1 5在Code Composer Studio 3.1 软件中将有关程序运行并调试。六、实验结果及分析1观察输入信号的波形,如图2所示。2观察输入信号的频谱,如图3所示。3观察输出信号的波形,如图4所示。4观察输出信号的频谱,如图5所示。七、实验总结这次实验完成了FIR滤波器在DSP上仿真实现,对FIR滤波器有更深入的了解,进一步掌握对CCS软件的使用方法,巩固了对DSP汇编语言的理解,对以后深入学习有很大帮助。