1、基于DSP的FIR滤波器设计 DSP课程设计 选题名称: 基于DSP的FIR滤波器的设计与仿真 校 院: 南京师范大学 物科院 专 业: 电子信息工程 姓名: 季玲玲 学号: 07090423 摘要:DSP作为一门新兴学科,越来越引起人们的关注,目前已广泛应用在各个领域。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。本文主要介绍基于DSP数字滤波器设计,使用 CCS实现FTSK数据输入, 使用FIR滤波器对FTSK调制信号进行处理,输出需要波形与频谱。文中采用线性缓冲区和带移位双操作寻址方法实现FIR滤波器。以窗函数法设计线性相位FIR数字滤波
2、器为例,介绍用MATLAB工具软件设计数字滤波器的方法和在定点DSP上的实现,实现时,先在CCS仿真开发,然后加载。利用DSP来快速设计FIR数字滤波器的方法,寻找系数的快速传递,MATLAB中调试仿真DSP程序。关键词:数字滤波器,Matlab,FIR,CCS一实验设计1 .设计目的和要求本文主要介绍基于DSP数字滤波器设计,使用 CCS5000Simulator 实现FTSK数据输入, 使用FIR滤波器对FTSK调制信号进行处理,输出需要波形与频谱。文中采用线性缓冲区和带移位双操作寻址方法实现FIR滤波器。通过课程设计,加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP
3、应用技术的实际训练,掌握设计较复杂DSP系统的基本方法。通过使用汇编语言编写具有完整功能的图形处理程序或信息系统,使学生加深对所学知识的理解,进一步巩固汇编语言讲法规则。学会编制结构清晰、风格良好、数据结构适当的汇编语言程序,从而具备解决综合性实际问题的能力。2系统功能介绍一个实际的应用系统中,总存在各种干扰。数字滤波器在语音信号处理、信号频谱估计、信号去噪、无线通信中的数字变频以及图像信号等各种信号处理中都有广泛的应用,数字滤波器也是使用最为广泛的信号处理算法之一。在本设计中,使用MATLAB模拟产生合成信号,然后利用CCS进行滤波。设定模拟信号的采样频率为32000Hz,。设计一个FIR低
4、通滤波器,其参数为:滤波器名称: FIR低通滤波器采样频率: Fs=40000Hz 通带: 4000Hz4500Hz过渡带: 2500Hz3000Hz,3500Hz4000Hz带内波动: 0.5dB 阻带衰减: 50dB滤波器级数: N=154滤波器系数: 由MATLAB根据前述参数求得。使用MATLAB编写程序产生待滤波数据使用MATLAB滤波器的设计分析工具FDATOOL设计FIR滤波器使用CCS编写程序实现滤波功能查看程序运行后的输入输出波形并比较滤波效果3总体设计方案流程图 二设计原理及操作步骤1滤波器原理对于一个FIR滤波器系统,它的冲击响应总是又限长的,其系统函数可记为:其中N-1
5、是FIR的滤波器的阶数,为延时结,为端口信号函数。最基本的FIR滤波器可用下式表示:其中输入采样序列,是滤波器系数,N是滤波器的阶数Y(n)表示滤波器的输出序列,也可以用卷积来表示输出序列y(n)与x(n)、h(n)的关系,如下: y(n)=x(n)*h(n)2 DSP 实现FIR滤波的关键技术(1)用线性缓冲区实现FIR滤波器 (2)用循环缓冲区实现FIR滤波器 3操作步骤(1)打开matlab软件,根据滤波要求设置滤波器类型、通带截止频率、指定阶数、采样频率等设计相关的matlab语言。指定完设计参数后运行得出波形。(2)把生成的滤波器系数传到目标DSP。编译CCS程序, 如果有错误,按错
6、误进行修改;没错误,则往下执行。(3)加载初始化DATA数据。运行程序,查看输入输出波形,修改相应参数进行调试4程序流程在本实验中使用MATLAB模拟产生信号,观察滤波前的时域波形和频域波形。MATLAB仿真后,使用得到的滤波器参数,进行DSP编程,在DSP中实现带通滤波,并使用CCS的频谱分析功能,查看DSP的滤波效果。(1)MATLAB程序流程图如图1所示 初始化产生需要虑波信号 画出原始信号频谱图 生成fir滤波器 进行滤波 画出滤波后信号频谱图2.CCS汇编程序流程图如图2所示 初始化 输入原始信号 定义滤波器系数为原始信号和系数指定寄存器 做滤波算法 本次滤波结束待滤波系数减一是是否
7、有待滤波数据 滤波结束三设计结果及波形图MATLAB辅助DSP 实现FIR ,其总体过程为在DSP 中编写处理程序,在MATLAB中利用滤波器设计、分析工具( FDATOOL) ,根据指定的滤波器性能快速设计一个FIR ,然后把滤波器系数以头文件形式导入CCS 中,头文件中MATLAB 辅助DSP 实现FIR 数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行DSP 程序并显示、分析处理后的数据。使用该方法,便于采用汇编语言来实现程序。头文件名不变,当MATLAB中设计的滤波器系数改变时,相应头文件中系数也改变,方便了程序调试、仿真。(一)在MATLAB中先编写程序,查看待滤波和已滤
8、波的信号的时域和频域波形,如图1和图2所示。已滤波的信号的时域和频域波形,如图5和图6所示。(二) 在CCS中进行调试,实现带通滤波的功能。将显示类型,图形名称,起始地址,抽样点数,数据类型等分别进行设置,输出各种波形。输出滤波前的信号时域波形。上图为滤波前的信号,波形很杂乱,从时域上很难看出信号的周期性修改相应设置,输出如下图所示滤波前信号频谱。 经过滤波后,时域波形如图12所示。总 结通过本次课程设计,我进一步了解了数字滤波是信号处理技术,掌握了数字滤波器的基本理论知识以及它实现方法,学习了数字滤波器的结构、设计理论,还掌握了其他数字滤波器的原理和特性,并且复习了MATLAB的相关知识,掌
9、握了CCS环境下的程序开发方法、调试工具的使用及优化级别的选择等,利用MATLAB与CCS设计了低通滤波器以及高通滤波器。在设计中我们利用DSP来快速设计FIR数字滤波器的方法,寻找系数的快速传递,MATLAB中调试仿真DSP程序,并且解决了在实验设计中遇到的各种问题和错误,如采样频率设置的过小,截止频率大于采样频率的一半,运行的时候图形出现错误。在CCS中未定义标号,程序运行错误等等,真的学到了很多东西,锻炼了动手能力。DSP是以众多学科为理论基础的,它所涉及的范围极其广泛。所以在今后的工作和学习生活中,我们要多多综合运用模拟电子、数字电子和DSP基本原理等课程中所学的理论知识去独立完成一个
10、项目的设计。参考文献1基于MATLAB的系统分析与设计 西安电子科技大学出版社 楼顺天,李博函著2基于MatLab与DSP的滤波器的快速设计方法.现代计算机 王秀芳,关凌涛著3基于定点DSP的FIR数字滤波器的研究与设计.曲阜师范大学 赵秀玲等著4 MATLAB在数字信号处理中的应用M.北京:机械 工业出版社 罗军辉,罗勇江等著.附件:汇编程序清单:Fir.asm内容: .title fir.asm ;为汇编源程序取名 .mmregs ;定义存储器映像寄存器 .global _c_int00ORDER .set 154 D_LEN .set 1024 ; The Length of Input
11、 Dataxn .usect xn, (ORDER-1)a0 .usect a0, (ORDER-1)input .usect input, D_LEN output .usect output,D_LEN .copy HM.h ; Get coefs from coef.h .text ;定义文本代码段 .asg AR0, FIR_INDEX .asg AR2, FIR_DATA .asg AR3, FIR_COEF .asg AR5, DATA_IN .asg AR6, DATA_OUT_c_int00: SSBX FRCT STM #a0,FIR_COEF ; Copy a0(coefs
12、) to FIR_COEF(AR3) RPT #ORDER-1 ;从程序数据器到数据存储器 MVPD #coeff,*FIR_COEF+ ;重复传送地址 STM #1, FIR_INDEX STM #xn, FIR_DATA ; Copy xn(data) to FIR_DATA(AR2) RPTZ A,#ORDER-1 ;将A清零,重复执行下条指令155次 STL A, *FIR_DATA+ ;将A的低字内容送到数据存储里 STM #(xn+ORDER-1), FIR_DATA STM #(a0+ORDER-1), FIR_COEF STM #input, DATA_IN ; Get dat
13、a from input STM #output, DATA_OUT ; Write data to output STM #D_LEN-1, BRC RPTBD next-1 STM #ORDER, BK LD *DATA_IN+, AFIR: STL A, *FIR_DATA+% ;将A的低字内容放到程序存储里面 RPTZ A, (ORDER-1) MAC *FIR_DATA+0%, *FIR_COEF+0%, A ; FIRS ;执行乘法并累加,结果放在A中 STH A, *DATA_OUT+ ;将A的高字内容放到输出的数据存储里面 nextFIR_END: B FIR_END .end
14、FIR.m的程序如下:fs=40000; %/采样HzN=1024 %数据个数T=1/fs; %采样周期n=0:N-1;df=n*(fs/N)%待滤波信号波形xin=randn(1,1024)figure(1)plot(xin)%待滤波信号频谱xinff=abs(fft(xin);figure(2)plot(df,xinff)%滤波后信号波形y_filter_out=filter(B,1,xin)% Y = FILTER(B,A,X)figure(3)plot(y_filter_out)%滤波后信号频谱yff=fft(y_filter_out);figure(4)plot(df,yff)xin
15、=xin/max(xin);%归一化xto_ccs=round(32767*xin)%取整fid=fopen(input1.dat,w);%打开文件fprintf(fid,1651 1 0 0 0n);%输出文件头fprintf(fid,%dn,xto_ccs);%输出fclose(fid);Fir.m内容: f11=2500; %/Hzf12=5500; %/Hzf13=9000; fs=32000; %/采样HzN=500 %数据个数T=1/fs; %采样周期n=0:N;x11=sin(2*pi*f11*n*T);x12=0.7*sin(2*pi*f12*n*T);x13=0.5*sin(
16、2*pi*f13*n*T);x_base=(x11+x12+x13);%待滤波信号波形figure(1)plot(x_base) %待滤波信号频谱figure(2)yff=abs(fft(x_base)df=n*(fs/N)plot(df,yff) y_f_out=filter(B,1,x_base);y_f_fft=abs(fft(y_f_out);figure(3)plot(y_f_out) figure(4)plot(df,y_f_fft) xout=x_base/max(x_base);%归一化 xto_ccs=round(32767*xout) fid=fopen(input129.dat,w);%打开文件fprintf(fid,1651 1 0 0 0n);%输出文件头fprintf(fid,%dn,xto_ccs);%输出fclose(fid);lhm.c的程序如下:#include stdio.h#include LHM.h#define N 111#define LEN 501long yn;int inputLEN;int outputLEN;void main() int i,j; int *x; for(j=0;jLEN-1;j+) x=&inputj; yn = 0; for(i=0; i15; while(1);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2