资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
基于DSP的FIR低通滤波器的设计 学 号: 电子与控制工程学院一、 设计要求通过ICETEKVC5509-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)*xn-(N-1)FIR滤波器的差分方程为:对上式进行Z变换得到FIR滤波器的传递函数为: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循环来实现乘加运算,得到这一时刻的卷积值。float fir( float x_in,float *x,float *b,int L) /float y_out;int i;for(i=L-1;i0;i-)xi=xi-1; x0=x_in;y_out=0.0;for(i=0;iL;i+)y_out=y_out+bi*xi; return(y_out);直接型FIR滤波器的实现涉及到两个基本操作,一个是输入信号向量与滤波器系数向量的内积计算,另一个是输入信号向量的更新处理。 在每个采样周期信号缓冲器都要更新一次,最老的采样被抛弃,而其他的信号则向缓冲器的右方移动一个单元,一个新的采样被插入存储单元,并被标记。如果这个操作过程不用DSP硬件完成,那么它需要很多的时间。3、 Fir的汇编语言的实现处理信号缓冲器的最有效方法,是把信号采样加载到循环缓冲器中。在循环缓冲器中,采取数据保持固定、反时针方向移动地址的方式,代替保持缓冲器地址固定且正方向移动数据。信号采样的起点由指针x(n) 指定,其它诸采样则沿着顺时针方向,从起点开始依次顺序加载。当接收到一个新的采样时,它会被配置在位置x(n)上,并且完成滤波算法。计算完输出量y(n)以后,指针反时针方向移动一个单元到x(n-L+1)位置,并且当作下一次迭代运算的x(n)。FIR滤波器系数的循环缓冲器如图所示,它总是从第一个系数开始运行。基于以上方法的FIR滤波器,其汇编语言实现如下。汇编语言整数fir滤波器函数:fir.asm; fir.asm 该程序用于实现FIR滤波器,可被C语言程序调用; int fir(int *,int *, unsigned int,int); 参数0: AR0 输入信号缓冲区指针; 参数1: AR1 - FIR滤波器系数向量指针; 参数2: T0 - FIR 滤波器的阶数L; 参数3: T1 - 输入信号当前值在循环缓冲区的序数; 返回值: T0 - 输出信号当前值 .def _fir _fir pshm ST1_55 ;现场ST1,ST2和ST3入栈 pshm ST2_55 pshm ST3_55or #0x340, mmap(ST1_55) ;设置FRCT,SXMD,SATDbset SMUL ;置位SMUL(P50)mov mmap(AR0),BSA01 ; AR0=输入信号循环缓冲区的起始地址mov mmap(AR1),BSA23 ; AR1=滤波器系数循环缓冲区的起始地址mov mmap(T0),BK03 ;设置循环缓冲区大小or #0x5,mmap(ST2_55) ; AR0和AR2为循环缓冲区指针mov T1,AR0 ; AR0从index偏移量开始mov #0,AR2 ; AR2从0偏移量开始sub #2,T0 ;T0=L-2 mov T0,CSR ;设置外部循环次数为L-1 mpym *AR0+,*AR2+,AC0 ;执行第一次运算| rpt CSR ;启动循环macm *AR0+,*AR2+,AC0mov hi(AC0),T0 ; 用Q15格式存放结果 popm ST3_55 ; 恢复ST1, ST2和 ST3popm ST2_55 popm ST1_55 ret.end4、 实验结果实验设计的FIR滤波器的采样频率Fs为25KHz,截止频率Fc为1KHz,当输入700Hz的方波时候,其处理波形显示如下:输入为2KHz的时候,显示如下:四、 总结概括经过这次课设对FIR滤波器的原理有了一定的了解,对于在滤波器设计中MATLAB的相关使用也加深了认识,知道如何通过FDATOOL工具快速设置一个滤波器。在ccs操作过程中通过比较C 语言与汇编语言所设计的滤波器的处理速度有了一定的认识。同时通过此次课设也发现自身所存在的欠缺,在接下的时间需要加以锻炼提升。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号