收藏 分享(赏)

dsp-fir滤波器.doc

上传人:精品资料 文档编号:10792067 上传时间:2020-01-09 格式:DOC 页数:8 大小:214.67KB
下载 相关 举报
dsp-fir滤波器.doc_第1页
第1页 / 共8页
dsp-fir滤波器.doc_第2页
第2页 / 共8页
dsp-fir滤波器.doc_第3页
第3页 / 共8页
dsp-fir滤波器.doc_第4页
第4页 / 共8页
dsp-fir滤波器.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、基于 DSP 的 FIR 低通滤波器的设计学 号: 电子与控制工程学院一、 设计要求通过 ICETEKVC5509-A 评估板 实现 FIR 滤波功能,将输入的方波信号通过评估板上的 AD 模块,滤波模块,以及 DA 模块后输出正弦波信号并在示波器上观察方波滤除后所产生的正弦波。在 CCS 下编写 C 语音和汇编语言程序分别实现滤波器功能,并且比较 c 语言和汇编语言的执行速度进行比较。二、 设计原理数字信号处理技术的应用领域非常广泛,而数字滤波器的设计是数字信号处理中最重要的设计环节。数字滤波器分为 IIR 滤波器和 FIR 滤波器。本次课设使用的是 FIR滤波器。FIR 滤波器即有限长单位

2、响应滤波器,是数字信号处理系统中最基本的原件。可以在保证任意频率特性的同时具有严格的线性相位特性。同时其单位冲激响应是有限长的,因而滤波器是稳定的系统。FIR 滤波器在通信、图像处理、模式识别等领域具有广泛的应用。在进入 FIR 滤波器前,首先要将信号通过 A/D 器件进行模数转换,把模拟信号转化为数字信号;为了使信号处理能够不发生失真,信号的采样速度必须满足奈奎斯特定理,一般取信号频率上限的 4-5 倍做为采样频率;一般可用速度较高的逐次逼进式A/D 转换器,不论采用乘累加方法还是分布式算法设计 FIR 滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需经过数模转换。FIR

3、滤波器误反馈回路,是一种稳定系统,可以设计成具有线性相位特性。设 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 滤波器的差分方程为: 10)()(Nknxay对上式进行 Z 变换得到 FIR 滤波器的传递函数为: 10)(zNikKbXYH)(FIR 数字滤波器的结构图如图 1 所示:MATLAB 辅助 DSP 实现 FIR ,其总体过程为在 DSP 中编写处理程序,在 MATLAB中利用滤波器设计、分析工具( FDATOOL) ,根据

4、指定的滤波器性能快速设计一个 FIR ,把滤波器系数以头文件形式导入 CCS 中, 头文件中 MATLAB 辅助 DSP 实现 FIR 数字滤波器含滤波器阶数和系数数组,在 MATLAB 中调试、运行 DSP 程序并显示、分析处理后的数据。使用该方法,便于采用汇编语言来实现程序。由于不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。信号的截断产生了能量泄漏,而用FFT 算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的,但是我们可以通过选择不同的窗函数对它们的影响进行抑制。在 MATLAB 设计中采用海明窗。三、 实验过

5、程及结果1、 FIR滤波器的系数在 matlab 中可以通过分析工具 FDATOOL 来快速设计一个 FIR,并得到相关的系数,其设计界面如图所示:得到其相关系数:2、 fir 的 C 程序的实现首先要创建一个数组,数组的大小等于滤波器的阶数,用来存放用 MATLAB 生成的滤波器的系数,另外再定义一个数据缓冲区,来存放采集来的数据,该缓冲区的大小要和滤波器的系数数组的大小相同。然后进行数据移位,将数据缓冲区中的数据向下一个单元移 1 位,然后将刚采进来的数据放到缓冲区的首位。最后用 for 循环来实现乘加运算,得到这一时刻的卷积值。float fir( float x_in,float *x

6、,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 的汇编语言的

7、实现处理信号缓冲器的最有效方法,是把信号采样加载到循环缓冲器中。在循环缓冲器中,采取数据保持固定、反时针方向移动地址的方式,代替保持缓冲器地址固定且正方向移动数据。信号采样的起点由指针 x(n) 指定,其它诸采样则沿着顺时针方向,从起点开始依次顺序加载。当接收到一个新的采样时,它会被配置在位置 x(n)上,并且完成滤波算法。计算完输出量 y(n)以后,指针反时针方向移动一个单元到 x(n-L+1)位置,并且当作下一次迭代运算的 x(n)。FIR 滤波器系数的循环缓冲器如图所示,它总是从第一个系数开始运行。系数缓冲器指针下一个 信号缓冲器指针 )1(Lnx)(nx1)2(3x时刻 n 的信号缓冲

8、器指针 2Lb10b12 当 前 时 刻 n下 一 个 时 刻 n+1被 抛 弃 的 信 号下 一 个 数 据基于以上方法的 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 - 输出信

9、号当前值.def _fir_fir pshm ST1_55 ;现场 ST1,ST2 和 ST3 入栈pshm ST2_55pshm 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 ;

10、AR0 从 index 偏移量开始mov #0,AR2 ; AR2 从 0 偏移量开始sub #2,T0 ;T0=L-2mov T0,CSR ;设置外部循环次数为 L-1mpym *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:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报