基于MATLAB与CCS的FIR滤波器设计与实现

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

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

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

资源描述

基于MATLAB与CCS的FIR滤波器设计与实现摘要当前,数字信号处理技术受到了人们的广泛关注,其理论及算法随着计算机技术和微电子技术的发展得到了飞速的发展,并被广泛应用于语音和图像处理、数字通信、频谱分析、模式识别和自动控制,以及雷达、军事、航空航天、医疗和家用电器等众多领域。数字滤波器是数字信息处理中最重要的组成部分之一,几乎出现在所有的数字信号处理系统中。按照数字滤波器的特性,它可以被分成线性与非线性、因果与非因果、无限长冲激响应(IIR)与有限长冲激响应(FIR)等等。本课题通过对FIR滤波器的基本理论及其算法的深入理解,根据规定指标完成基于MATLAB的FIR滤波器的理论设计,再将设计好的滤波器系数调入到CCS中,完成FIR滤波器在DSP上的实现。比对CCS与MATLAB中的仿真结果,以此发现DSP程序的不足。关键词MATLAB;DSP;CCS;数字滤波器;FIR滤波器研究要求:根据要求设计低通FIR滤波器,分别使用MATLAB和CCS实现仿真,对仿真结果进行比对分析。要求:采样频率48KHZ,通带频率15KHZ,阻带截至频率18KHZ,阻带衰减60dB。研究内容:一、FIR滤波器的理论基础及算法介绍(一)数字滤波器数字滤波器是种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。可以设计系统的频导响应,让它满足一定的要求,从而对通过该系统的信号的某些特定的频率成分进行过滤,这就是滤波器的基本原理。如果系统是一个连续系统,则滤波器称为模拟滤波器。如果系统是一个离散系统,则滤波器称为数字滤波器。信号f(t)通过线性系统后,其输出Y(t)就是输入信号f(t)和系统冲激响应h(t)的卷积。除了h(t)=S(t)外,y(t)的波形将不同于输入波形f(t)。从频域分析来看,信号通过线性系统后,输出信号的频谱将是输入信号的频谱与系统传递函数的乘积。除非F(jw)为常数,否则输出信号的频谱将不同于输入信号的频谱,某些频率成分|H(jw)|有较大的模,因此,F(jw)中这些频率成分将得到加强,而另外一些频率成分处H(jw)的模很小甚至为零,F(jw)中这部分频率分量将被削弱或消失。因此,系统的作用相当于对输入信号的频谱进行加权。线性系统对信号频谱的这种加工,可以有意识地用来按照人们的需要改变信号的频谱结构。这就是所谓频率滤波,是信号处理的一种方法。此时,人们也往往称此系统为滤波器。由于计算机和人规模集成电路技术的进步,依靠传统的模拟电路来实现的电子系统已不适应。现在都在开始采用数字化技术,传统的模拟滤波器,正在被数字滤波器所代替,数字滤波器的输入是个数字序列,输出是另一个数字序列。从本质上说它只是个序列的运算加工过程。但另方面因为它是一个离散系统,而一个离散系统具有定的频率响应特性,适当地控制离散系统结构使其频率特性满足一定的要求,就可以起到和模拟滤波器同样的作用。但数字滤波器却具有精度高,可靠性强,灵活性大,适应范围广(在甚低频范围),快速等优点。而且可以分时复用,同时处理若干不同信号,因此已得到越来越广泛的应用。一个离散的时间系统,当它的系统函数一经确定后就可以根据H(Z)写出输出和输入关系的差分方程来,再用计算机根据不同的输入序列情况求出其相应的输出序列。数字滤波器是一个具有指定频率特性的离散系统,因此它的设计就在于确定它的系统函数。在找到能满足频率特性要求的系统函数后,就可以用硬们或软件来实现硬件实现就是用数字电路制成的运算单元(延时器,加法器等)按框图联接成专用的处理机,软件实现就是按差分方程写出计算机的计算程序,然后用通用计算机完成,在地球物理数据处理中,上要依靠通用计算机来实现数字滤波。数字滤波器的传递函数就是系统单位函数响应的z变换,因为冲激信号的频率特性是频率的周期函数,而且其周期就是抽样频率1/T,因此数字滤波器的频率特性也有周期重复的特点,在模拟滤波器中低通、高通、带通、带阻四种形状的频率特性,在数字滤波器中只在频率的一个周期内保留,但在整个频率轴上将有完全不同的形式,因此,必须适当选择抽样频率。(二)FIR滤波器原理及算法对于一个FIR滤波器系统,它的冲激响应总是有限长的,最具体的FIR滤波器可用下式表示:1N0i1N0i1N0nn)i(x)in(h)in(x)i(h)n(yz)n(h)z(H式中:i是FIR滤波器的抽头数;x(n-i)是延时,i个抽头的输入信号;h(i)是第i级抽头数(单位脉冲响应);N是滤波器的阶数;y(n)表示滤波器的输出序列。其中单位冲激响应和传输函数描述了系统的时域和频域性质,差分方程则反映了实现该滤波器所需的运算。滤波器就是寻求一个可实现的系统函数H(z),使其频率响应H(ejω)满足所希望得到的频域信号,也可以用卷积的形式来表示:y(n)=z(n)*h(n)(三)FIR滤波器的设计FIR滤波器的设计任务就是给定要求的频率特性,按一定的最佳逼近准则,选取滤波器系统函数H(z)中的各个参数h(n),即滤波器的单位抽样响应及阶数N,使得频率特性满足设计要求。通常FIR滤波器的设计方法主要有三种:窗函数法、频率抽样法和切比雪夫波纹逼近法。本研究采用窗函数法,使用的是布莱克曼窗函数。窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:(1)通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。(2)由性能指标确定窗函数W(n)和窗口长度N。(3)求得实际滤波器的单位脉冲响应h(n),h(n)即为所设计FIR滤波器系数向量b(n)。(4)检验滤波器性能。二、FIR滤波器的MATLAB实现(一)设计代码(二)仿真结果(1)FIR滤波器幅频响应(2)对s=sin(2*pi*6000*t)+sin(2*pi*20000*t)的输入信号滤波前后进行波形对比需要注意的是,直接设计得到FIR滤波器的系数矩阵是很小的小数,而实验中所使用的TMS320C55xDSP是16位的定点处理器。所以在经行汇编程序设计时,FIR00.10.20.30.40.50.60.70.80.91-100-90-80-70-60-50-40-30-20-10010幅频响应(dB)00.511.52x10-3-2-1012滤波前时域波形t/sfuzhi00.511.52x10-3-2-1012滤波后时域波形t/sfuzhi0123x1040204060滤波前时域波形f/Hzfuzhi0123x1040102030滤波后时域波形f/Hzfuzhi滤波器系数要采用Q15格式,即必须将得到的系数转化为Q15格式。故需要所有数据归一化后乘以32767,取结果的整数部分,才可以作为数据调入CCS中。三、FIR滤波器的DSP实现(一)DSP中卷积的实现由于卷积是数字信号处理中最常用到的算法,因此几乎所有的DSP芯片中都设有专门的指令支持卷积运算。在TMS320C55x中可以采用macd指令完成卷积。macd指令的形式如下:macd(Smem,pmad,src);在macd指令中,Smem是间接寻址参数,它是指令中指向数据存储器的单地址。Pmad是表示程序存储器地址的16位常数。Src表示累加器,可以是A累加器或是B累加器。这条指令在执行时,先把指令中的pmad常数送到程序地址寄存器的PAR中,然后将Smem地址中的数据用PAR地址在程序存储器中读取的数据相乘,并将乘积结果累加到由Src指定的累加器。在指令执行时,Smem地址中的内容被同时复制到T寄存器和Smem地址中之后的下一个地址单元中。若采用repeat指令,则在执行指令的最后,PAR寄存器自动加1,这样到macd再次执行时就直接用PAR中的地址读取程序存储器中的数据。通常情况下,macd指令执行时需要三个周期。但是若用repeat执行macd,进入流水线后只要一个周期就可以执行一次macd指令。由此可见,该指令同时完成了乘累加和数据延迟(移位)的功能,这正是卷积算法所要求的。(二)MATLAB和DSP的联系MATLAB设计完成后,得到16位的滤波器系数矩阵。这个系数矩阵即为DSP程序中完成卷积的冲激响应的系数。MATLAB设计得到的是89阶的FIR低通滤波,即得到的h(n)为89个值。同样,可以在MATLAB中找到输入的需要滤波的信号s的变量矩阵。将这两个变量的值存入t1.h文件中,在程序中调用该头文件,再运行程序,即可完成MATLAB与DSP的关联。(三)DSP的程序设计流程(四)技术难点(1)定点数的定标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整形数来表示。一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。本次研究所采用的TMS320C55x芯片为16位。显然,字长越长,所能表示的书的范围越大,精读也就越高。在滤波器的实现过程中,DSP所要处理的数可能是整数,也可能是小数或混合小数。然而,DSP在执行算数运算指令时,并不知道当前所处理的数据是证书还是小数,更不能指出小数点的位置在哪里。因此,在编程时必须指定一个数的小数点处于哪一位,这就是定标。通过定标,可以在16位数的不同位置上确定小数点,从而表示出一个范围大小不同且精度也不同的小数。Q越大,数值范围越小,但精度越高;相反依然如此。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示较大的数值范围,必须以牺牲精度为代价,要想提高精度,则数的表示范围就相应的减小。就DSP运算处理过程来说,实际参与运算的都是变量,有的是未知的,有的则在运算过程中不断改变数值,但它们在实际工程环境中作为一个物理参量而言都有一定的动态范围。只要范围确定了,Q值也就确定了。因此,在设计钱,首先要通过细致和严谨的分析,找出参与运算的所有变量的变化范围,充分估计运算中可能出现的各种情况,然后确定采用何种标准才能保证运算结果正确可靠。另外,在FIR滤波器的设计算法中,大量的运算是乘法和累加,故应该尽量采取纯整数,以简化操作和编程。具体来说,在本次研究中,即是在MATLAB中对得到的小数进行归一化后乘以2的15次方减一,扩展到16位上,再对该数取整,得到全部变量的值。使其可以在CCS中被正确调用。(2)误差问题因为在用定点DSP实现时,所有的数据都是定长的,运算也都是定点运算,因而会产生有限字长效应。所产生的误差主要包括:数模转换引起的量化误差、系数量化引起的误差以及运算过程中的舍入误差。(五)CCS仿真结果在CCS上调试仿真得到的结果:(1)滤波前的信号频谱图(2)FIR滤波器的幅频响应(3)滤波后的信号频谱图四、DSP程序实现结果和Matlab仿真的差异性分析(一)滤波器幅频响应对比(二)滤波前后信号频谱对比对比看,DSP中实现的FIR低通滤波器对于高频部分的信号滤除效果比较理想。00.10.20.30.40.50.60.70.80.91-100-90-80-70-60-50-40-30-20-10010幅频响应(dB)总结这学期的DSP学习不同于往常的理论知识学习,更多的加入了我们自己的思考环节和动手实现环节,以及对于遇到问题的思考和解决。虽然对于理论知识掌握的不牢固,使得研究过程略有坎坷,但是在克服困难的同时也收获了很多。对于以前学过的理论知识有了印象上的加深巩固并有了自己的理解及认识,同时也将理论知识运用到了实际设计中,使得所学知识在更深层次上得到了进一步深化。通过对资料的查询和不断尝试,对本来不熟悉的知识有了进一步了解。在设计过程中经过多次失败和调试,对设计流程、程序实现都有了深刻的理解。在设计开始时觉得还有些茫然,但随着时间的退役,在老师的讲解和同学讨论的共同努力下,最终在规定时间内完成了整个设计。在完成设计的同时,巩固了所学,又获得了新知,同时也提高了对问题的思考及动手解决问题的能力。参考文献:1、TMS320C55xDSPLibraryProgrammer’sReference

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

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

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

×
保存成功