华北水利水电大学North China University of Water Resources and Electric PowerDSP课程设计题目: FIR数字低通滤波器学院信息工程学院专业电子信息工程姓名学号指导教师摘要 (1)一. 绪论 (1)1.1设计背景 (1)1.2设计方法分析 (1)二.FIR滤波器设计过程 (2)2.1 FIR滤波器原理 (2)2.2 FIR滤波器的实现方法 (3)2.3 FIR滤波器的MATLAB实现 (4)2.4 设计流程图 (6)三.MATLAB和 CCS操作步骤及仿真结果 (7)3.1 matlab中的.M文件的编写 (7)3.2 工程文件的建立 (12)3.3 仿真结果及分析 (12)四.心得与总结 (12)摘要当前,数字信号处理技术受到了人们的广泛关注,其理论及算法随着计算机技术和微电子技术的发展得到了飞速地发展,并被广泛应用于语音和图象处理、数字通信、谱分析、模式识别和自动控制等领域。
数字滤波器是数字信号处理中最重要的组成部分之一,几乎出现在所有的数字信号处理系统中。
设计中通过MATLAB环境中图形化的方式建立数字信号处理的模型进行DSP的设计和仿真验证,将设计的图形文件.mdl直接转换成C语言程序在CCS中运行。
利用MATLAB 软件开发产品加速了开发周期,比直接在CCs中编程方便快捷了很多,对于任何复杂功能的DSP系统,只需要进行少量的添加和修改就能完成功能正确的C语言程序设计。
一. 绪论1.1设计背景一个实际的应用系统中,由于设备或者是外界环境的原因,总存在各种干扰,使信号中混入噪声,譬如音频信号中高频成分的噪声使得音乐听起来刺耳,失去了原有悦耳的音质。
为了提高信号质量,可以对信号进行滤波,从噪声中提取信号,即对一个具有噪声和信号的混合源进行采样,然后经过一个数字滤波器,滤除噪声,提取有用信号。
DSP(数字信号处理器)与一般的微处理器相比有很大的区别,它所特有的系统结构、指令集合、数据流程方式为解决复杂的数字信号处理问题提供了便利,本文选用TMS320C54X作为DSP处理芯片,通过对其编程来实现FIR滤波器。
对数字滤波器而言,从实现方法上,有FIR滤波器和无限冲激响应(IIR)滤波器之分。
由于FIR滤波器只有零点,因此这一类系统不像IIR系统那样易取得比较好的通带与阻带衰减特性。
但是FIR系统有自己突出的优点:①系统总是稳定的;②易实现线性相位;③允许设计多通带(阻带)滤波器。
其中后两项是IIR系统不易实现的。
1.2设计方法分析FIR滤波器的设计方法分析数字滤波器依据冲激响应的宽度划分为有限冲激响应(FIR)滤波器和无限冲激响应滤波(IIR)。
FIR 滤波器是有限长单位冲激响应滤波器,在结构上是非递归型的,有限冲激响应滤波器(FIR),具有以下的优点:(1)可以在幅度特性随意设计的同时,保证精确、严格的线性相位;(2)由于FIR滤波器的单位脉冲响应h(n)是有限长序列,因此F I R 滤波器没有不稳定的问题;(3)由于FIR 滤波器一般为非递归结构,因此在有限精度运算下,不会出现递归结构中极性震荡等不稳定现象,误差较小。
FIR 滤波器的设计方法有窗函数设计法和频率采样设计法,下面扼要介绍窗函数设计法。
窗函数法设计FIR 滤波器的基本思想是:根据给定的滤波器技术指标,选择滤波器长度N 和窗函数ω(n),使其具有最窄宽度的主瓣和最小的旁瓣。
其核心是从给定的频率特性,通过加窗确定有限长单位脉冲响应序列h(n)。
给定滤波器的频率响应为Hd(ejw),要求设计一个频率响应为H(ejw)的滤波器来逼近Hd(ejw),其中:对Hd(ejw)进行傅立叶反变换推导出其时域响应hd(n),即由于hd(n)是无限长序列,且是非因果的。
要得到有限长的h(n),需要用一个有限长的窗口函数序列ω(n)来截取h(n),即二.FIR 滤波器设计过程2.1 FIR 滤波器原理数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列,FIR 滤波器的差分方程为:∑-=-=10)()(N k k k n x a n y对上式进行Z 变换得到FIR 滤波器的传递函数为:()()()∑-=-==10N i k k z b z X z Y z H由上式可以看出,H(z)是1-z 的N-1次多项式,它在z 平面内有N-1个零点,同时在原点处有N-1个重极点。
N 阶滤波器通常采用N 个延迟单元、N 个加法器与N+1个乘法器,取图中(a)、(b)两种结构。
FIR 滤波器的一般结构因为FIR 滤波器的单位抽样响应是有限长的,所以它永远是稳定的。
另外,若对 h(n)提出一些约束条件,那么可以很容易地使 H(z)具有线性相位,这在信号处理的很多领域是非常重要的。
FIR 滤波器的设计任务,是要决定一个转移函数H(z),使它的频率响应满足给定的要求。
这里所说的要求,除了通带频率p ω、阻带频率及两个带上的最大和最小衰减p ∂和s ∂外,很重要的一条是保证H(z)具有线性相位。
2.2 FIR 滤波器的实现方法(1)采用DSP(Digital Signal Processing)处理器来实现DSP 处理器是专为数字信号处理而设计的,它的主要数字运算单元是一个乘累加器,能够在一个机器周期内完成一次乘累加运算,配有适合于信号处理的指令,具备独特的循环寻址和倒序寻址能力。
这些特点都非常适合数字信号处理中的滤波器设计的有效实现,并且它速度快,成本低。
用DSP 芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响外,还具有灵活性好的特点。
(2)用计算机软件实现软件实现方法即是在通用的微型计算机上用软件实现。
利用计算机的存储器、运算器和控制器把滤波所要完成的运算编成程序通过计算机来执行,软件可由使用者自己编写,也可以使用现成的。
但是这种方法速度慢,难以对信号进行实时处理,虽然可以用快速傅立叶变换算法来加快计算速度,但要达到实时处理要付出很高的代价。
(3)用FPGA 等可编程器件实现使用相关开发工具和VHDL 等硬件开发语言,通过软件编程用硬件实现特定的数字滤波算法。
这一方法由于具有通用性的特点并可以实现算法的并行运算,无论是作为独立的数字信号处理,还是作为DSP 芯片的协作处理器都是比较活跃的研究领域。
可以采用DSP 或FPGA 来实现硬件电路。
采用固定功能的专用信号处理器实现(4) 专用信号处理器采用专用集成电路ASIC 来实现,适用于过程固定而又追求高速的信号处理任务,是以指定的算法来确定它的结构,使用各种随机逻辑器件组成的信号处理器。
它们体积小、保密性好,具有极高的性能,然而灵活性差。
2.3 FIR滤波器的MATLAB实现MATLAB辅助DSP 实现FIR ,其总体过程为在DSP中编写处理程序,在MATLAB中利用滤波器设计、分析工具( FDATOOL) ,根据指定的滤波器性能快速设计一个FIR ,再把滤波器系数以头文件形式导入CCS 中,头文件中MATLAB 辅助DSP 实现FIR 数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行DSP 程序并显示、分析处理后的数据。
使用该方法,便于采用汇编语言来实现程序。
头文件名不变,当MATLAB中设计的滤波器系数改变时,相应头文件中系数也改变,方便程序调试、仿真。
MATLAB集成了一套功能强大的滤波器设计工具FDATool(Filter Design & Analysis Tool),可以完成多种滤波器的设计、分析和性能评估。
(1).打开Filter Design & Analysis Tool单击MATLAB主窗口下方的“Start”按钮,选择菜单“ToolBox”→“Filter Design”→“Filter Design & Analysis Tool(FDATool)”命令,打开FDATool,如图1所示。
图1(2)产生滤波器阶数为81阶,这里应填80,比阶数少1。
窗函数选择切比雪夫型(chebyshev),滤波器类型为Lowpass,采样频率为20000Hz,通带截止频率分别为1000HZ。
得图2图2 (3).产生滤波器系数,如图3图3 (4)头文件的产生(5)选择所需的型号:(6)生成头文件最后将产生的头文件中的滤波器系数数组放入编写好的滤波器函数中,并在进行CCS中进行调试与测试。
2.4 设计流程图程序流程图(1)对DSP进行初始化,定义DSP的一些向量和工作模式;(2)为数字滤波作准备,将预先设计好的有N个抽头的FIR数字滤波器的冲激响应序列h(n)中的N个数值放入存储单元B1~BN;(3)作好滤波准备工作后,开始进行抽样,并读入抽样值,放入存储单元A1中;(4)之后便对抽样值进行运算处理:(a)将累加器清零,并设置两个准备相乘的存储单元A与B的初始值K和L;(b)将第K个抽样值AK与冲激响应序列的第L个数值BL相乘(K+L=N+1),并将乘积送入累加器进行累加;(c)将第K-1个抽样值AK-1放入AK,此时AK中原数值被覆盖;(d)重复(b)~(c),直至共完成N次乘加运算。
(5)输出处理结果;(6)重复(3)~(5)。
三.MATLAB和CCS操作步骤及仿真结果3.1 matlab中的.M文件的编写sl=300; %有效信号ns1=2000; %高频噪声ns2=8000; %高频噪声fs=20000; %采样频率N=1000;T=1/fs;n=0:N;signal=sin(2*pi*sl*n*T);noise1=0.7*sin(2*pi*ns1*n*T);noise2=0.4*sin(2*pi*ns2*n*T);x=(signal+noise1+noise2);%待滤波信号figure(1)plot(x)figure(2)y=abs(fft(x));%待滤波频谱df=n*(fs/N);plot(df,y)figure(3)plot(n,signal)figure(4)ysignal=abs(fft(signal));%滤波后频谱df=n*(fs/N);plot(df,ysignal) %滤波数据导出xout=x/max(x); %归一化xto_css=round(32767*xout);%数据取整xoutcss=xto_css;fid=fopen('G:\2012156\d\inputld.dat','w'); %打开文件fprintf(fid,'1651 1 0 1 0\n');%输出文件头fprintf(fid,'%d\n',xoutcss); %输出fclose(fid);%fid=fopen('sine.dat','w');%将文件头写入文件,将生成的y信号写入到文件,格式四位小数%fprintf(fid,'1651 1 0 1 0\n');%fprintf(fid,'%.4f\n',y);%将文件头写入文件,将生成的y信号写入到文件,格式十六进制,负数用补码%fprintf(fid,'1651 1 0 1 0\n');%fprintf(fid,'0x%x\n', round(y*100) + (y<0)*2^16);运行此程序产生以下四个图:20040060080010001200-2.5-2-1.5-1-0.500.511.522.500.20.40.60.81 1.2 1.4 1.6 1.82x 1041002003004005006001002003004005006007008009001000-1-0.8-0.6-0.4-0.200.20.40.60.8100.20.40.60.81 1.2 1.4 1.6 1.82x 1041002003004005006003.2 工程文件的建立在CCSV3.3中建立新工程,把c源代码和.cmd文件导入后,外加rts. lib文件,它是TI提供的运行时支持库, 如果是C代码写的源程序, 必须要包含该库,该库由TI公司做好放在CCS\ cgtools\ lib中。