dsp-fir滤波器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于DSP的FIR低通滤波器的设计学号:电子与控制工程学院一、设计要求通过ICETEK–VC5509-A评估板实现FIR滤波功能,将输入的方波信号通过评估板上的AD模块,滤波模块,以及DA模块后输出正弦波信号并在示波器上观察方波滤除后所产生的正弦波。在CCS下编写C语音和汇编语言程序分别实现滤波器功能,并且比较c语言和汇编语言的执行速度进行比较。二、设计原理数字信号处理技术的应用领域非常广泛,而数字滤波器的设计是数字信号处理中最重要的设计环节。数字滤波器分为IIR滤波器和FIR滤波器。本次课设使用的是FIR滤波器。FIR滤波器即有限长单位响应滤波器,是数字信号处理系统中最基本的原件。可以在保证任意频率特性的同时具有严格的线性相位特性。同时其单位冲激响应是有限长的,因而滤波器是稳定的系统。FIR滤波器在通信、图像处理、模式识别等领域具有广泛的应用。在进入FIR滤波器前,首先要将信号通过A/D器件进行模数转换,把模拟信号转化为数字信号;为了使信号处理能够不发生失真,信号的采样速度必须满足奈奎斯特定理,一般取信号频率上限的4-5倍做为采样频率;一般可用速度较高的逐次逼进式A/D转换器,不论采用乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需经过数模转换。FIR滤波器误反馈回路,是一种稳定系统,可以设计成具有线性相位特性。设FIR滤波器的系数为h(0)、h(1)……h(N-1),X(n)表示滤波器在n时刻的输入,则那时刻的输出为:y(n)=h(0)*x(n)+h(1)*x(n-1)+……+h(N-1)*x[n-(N-1)]FIR滤波器的差分方程为:10)()(Nkkknxany对上式进行Z变换得到FIR滤波器的传递函数为:10)()z(zNikKzbzXYH)(FIR数字滤波器的结构图如图1所示:MATLAB辅助DSP实现FIR,其总体过程为在DSP中编写处理程序,在MATLAB中利用滤波器设计、分析工具(FDATOOL),根据指定的滤波器性能快速设计一个FIR,把滤波器系数以头文件形式导入CCS中,头文件中MATLAB辅助DSP实现FIR数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行DSP程序并显示、分析处理后的数据。使用该方法,便于采用汇编语言来实现程序。由于不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的,但是我们可以通过选择不同的窗函数对它们的影响进行抑制。在MATLAB设计中采用海明窗。三、实验过程及结果1、FIR滤波器的系数在matlab中可以通过分析工具FDATOOL来快速设计一个FIR,并得到相关的系数,其设计界面如图所示:得到其相关系数:2、fir的C程序的实现首先要创建一个数组,数组的大小等于滤波器的阶数,用来存放用MATLAB生成的滤波器的系数,另外再定义一个数据缓冲区,来存放采集来的数据,该缓冲区的大小要和滤波器的系数数组的大小相同。然后进行数据移位,将数据缓冲区中的数据向下一个单元移1位,然后将刚采进来的数据放到缓冲区的首位。最后用for循环来实现乘加运算,得到这一时刻的卷积值。floatfir(floatx_in,float*x,float*b,intL)//{floaty_out;inti;for(i=L-1;i0;i--){x[i]=x[i-1];}x[0]=x_in;y_out=0.0;for(i=0;iL;i++){y_out=y_out+b[i]*x[i];}return(y_out);}直接型FIR滤波器的实现涉及到两个基本操作,一个是输入信号向量与滤波器系数向量的内积计算,另一个是输入信号向量的更新处理。在每个采样周期信号缓冲器都要更新一次,最老的采样被抛弃,而其他的信号则向缓冲器的右方移动一个单元,一个新的采样被插入存储单元,并被标记。如果这个操作过程不用DSP硬件完成,那么它需要很多的时间。3、Fir的汇编语言的实现处理信号缓冲器的最有效方法,是把信号采样加载到循环缓冲器中。在循环缓冲器中,采取数据保持固定、反时针方向移动地址的方式,代替保持缓冲器地址固定且正方向移动数据。信号采样的起点由指针x(n)指定,其它诸采样则沿着顺时针方向,从起点开始依次顺序加载。当接收到一个新的采样时,它会被配置在位置x(n)上,并且完成滤波算法。计算完输出量y(n)以后,指针反时针方向移动一个单元到x(n-L+1)位置,并且当作下一次迭代运算的x(n)。FIR滤波器系数的循环缓冲器如图所示,它总是从第一个系数开始运行。系数缓冲器指针下一个  信号缓冲器指针)1(Lnx)(nx)1(nx)2(nx)3(nx)(nx时刻n的信号缓冲器指针2Lb1Lb0b1b2b当前时刻n下一个时刻n+1被抛弃的信号下一个数据基于以上方法的FIR滤波器,其汇编语言实现如下。汇编语言整数fir滤波器函数:fir.asm;fir.asm该程序用于实现FIR滤波器,可被C语言程序调用;intfir(int*,int*,unsignedint,int);参数0:AR0–输入信号缓冲区指针;参数1:AR1-FIR滤波器系数向量指针;参数2:T0-FIR滤波器的阶数L;参数3:T1-输入信号当前值在循环缓冲区的序数;返回值:T0-输出信号当前值.def_fir_firpshmST1_55;现场ST1,ST2和ST3入栈pshmST2_55pshmST3_55or#0x340,mmap(ST1_55);设置FRCT,SXMD,SATDbsetSMUL;置位SMUL(P50)movmmap(AR0),BSA01;AR0=输入信号循环缓冲区的起始地址movmmap(AR1),BSA23;AR1=滤波器系数循环缓冲区的起始地址movmmap(T0),BK03;设置循环缓冲区大小or#0x5,mmap(ST2_55);AR0和AR2为循环缓冲区指针movT1,AR0;AR0从index偏移量开始mov#0,AR2;AR2从0偏移量开始sub#2,T0;T0=L-2movT0,CSR;设置外部循环次数为L-1mpym*AR0+,*AR2+,AC0;执行第一次运算||rptCSR;启动循环macm*AR0+,*AR2+,AC0movhi(AC0),T0;用Q15格式存放结果popmST3_55;恢复ST1,ST2和ST3popmST2_55popmST1_55ret.end4、实验结果实验设计的FIR滤波器的采样频率Fs为25KHz,截止频率Fc为1KHz,当输入700Hz的方波时候,其处理波形显示如下:输入为2KHz的时候,显示如下:四、总结概括经过这次课设对FIR滤波器的原理有了一定的了解,对于在滤波器设计中MATLAB的相关使用也加深了认识,知道如何通过FDATOOL工具快速设置一个滤波器。在ccs操作过程中通过比较C语言与汇编语言所设计的滤波器的处理速度有了一定的认识。同时通过此次课设也发现自身所存在的欠缺,在接下的时间需要加以锻炼提升。

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功