万卷楼第一季_新浦门户网
English
MENU
当前位置: 首页» 要  闻

万卷楼第一季

【字体:

DSP综合课程设计

题目:基于TMS320C5402的FIR数字滤波器的设计

姓名:

目录

摘要-3-

1.数字滤波器设计原理-4-

1.1数字滤波器的定义和分类-4-

1.2数字滤波器的优点-5-

1.3FIR滤波器的基本原理-6-

1.3.1FIR数字滤波器的特点和结构-6-

1.3.2FIR滤波器的优点-8-

1.4FIR和IIR滤波器的比较-9-

2.TMS320C54的硬件结构与主要特性-10-

3.数字滤波器的MATLAB辅助设计-12-

3.1MATLAB简介-12-

3.2FIR数字滤波器的MATLAB设计原理方法-12-

3.2.1FIR滤波器的设计原理-12-

3.2.3等效最佳一致逼近法-17-

3.3基于FDAtool的滤波器设计-22-

3.3.1FDAtool界面介绍-22-

4数字滤波器的CCS实现-24-

4.1简述CCS环境-24-

4.2CCS特点-25-

4.3CCS的配置-25-

4.4CCS环境中工程文件的使用-26-

4.4.1建立工程文件-26-

4.4.2创立新文件-27-

4.4.3向工程中添加文件-27-

4.5编译链接装载-28-

4.6利用Matlab产生噪声信号用于滤波器测试-29-

4.7将滤波器设计文件载入到内存中-31-

4.8查看滤波器滤波效果-31-

4.9观察结果-33-

5总结-34-

6附录程序清单-35-

摘要:滤波器的设计是数字信号处理中最基础的部分,也是比较重要的部分。这次有限长单位脉冲响应(FIR)滤波器的设计考虑了如下三种方案:分别采用通用单片机、DSP芯片、FPGA,考虑各种方案的优缺点以及这次设计的目的和用途,在本次设计中采纳第二中方案。首先采用MATLAB对滤波器进行仿真,使用的是它自带的函数库,仿真成功后得到滤波器的滤波系数,然后再基于TMS320VC5402DSP芯片采用C语言实现FIR数字滤波器。其中用到了CCS作为DSP开发环境。FIR滤波器主要采用非递归结构,因此在有限精度运算中不存在稳定性问题,误差较小。而且它能适应某些特殊的场合,如构成微分器或微分器,因而有更大的适应性。

关键字:滤波器、FIR、MATLAB、TMS320C54X、DSP、CCS

1.数字滤波器设计原理1.1数字滤波器的定义和分类

数字滤波器是指完成信号滤波处理功能的,用有限精度算法实现的离散时间线性非时变系统,其输入是一组数字量,其输出是经过变换的另一组数字量。因此,数字滤波器本身既可以是用数字硬件装配成的一台完成给定运算的专用的数字计算机,也可以将所需要的运算编成程序,让通用计算机来执行。

从数字滤波器的单位冲击响应来看,可以分为两大类:有限冲击响应(FIR)数字滤波器和无限冲击响应(IIR)数字滤波器。滤波器按功能上分可以分为低通滤波器(LPF)、高通滤波器(HPF)、带通滤波器(BPF)、带阻滤波器(BSF)。

按选择物理量分类,滤波器可分为频率选择、幅度选择、时间选择(例如PCM制中的话路信号)和信息选择(例如匹配滤波器)等四类滤波器

按处理信号类型分类,可分为模拟滤波器和离散滤波器两大类。其中模拟滤波器又可分为有源、无源、异类三个分类;离散滤波器又可分为数字、取样模拟、混合三个分类。当然,每个分类又可继续分下去,总之,它们的分类可以形成一个树形结构,如图

1.2数字滤波器的优点

相对于模拟滤波器,数字滤波器没有漂移,能够处理低频信号,频率响应特性可做成非常接近于理想的特性,且精度可以达到很高,容易集成等,这些优势决定了数字滤波器的应用将会越来越广泛。同时DSP处理器(DigitalSignalProcessor)的出现和FPGA(FieldProgrammableGateArray)的迅速发展也促进了数字滤波器的发展,并为数字滤波器的硬件实现提供了更多的选择。

数字滤波器具有以下显著优点:

精度高:模拟电路中元件精度很难达到10-3,以上,而数字系统17位字长就可以达到10-5精度。因此在一些精度要求很高的滤波系统中,就必须采用数字滤波器来实现。

灵活性大:数字滤波器的性能主要取决于乘法器的各系数,而这些系数是存放在系数存储器中的,只要改变存储器中存放的系数,就可以得到不同的系统,这些都比改变模拟滤波器系统的特性要容易和方便的多,因而具有很大的灵活性。

可靠性高:因为数字系统只有两个电平信号:"1”和“0",受噪声及环境条件的影响小,而模拟滤波器各个参数都有一定的温度系数,易受温度、振动、电磁感应等影响。并且数字滤波器多采用大规模集成电路,如用CPLD或FPGA来实现,也可以用专用的DSP处理器来实现,这些大规模集成电路的故障率远比众多分立元件构成的模拟系统的故障率低。

易于大规模集成:因为数字部件具有高度的规范性,便于大规模集成,大规模生产,且数字滤波电路主要工作在截止或饱和状态,对电路参数要求不严格。因此产品的成品率高,价格也日趋降低。相对于模拟滤波器,数字滤波器在体积、重量和性能方面的优势己越来越明显。比如在用一些用模拟网络做的低频滤波器中,网络的电感和电容的数值会大到惊人的程度,甚至不能很好地实现,这时候若采用数字滤波器则方便的多。

并行处理:数字滤波器的另外一个最大优点就是可以实现并行处理,比如数字滤波器可采用DSP处理器来实现并行处理。TI公司的TMS320C5000系列的DSP芯片采用8条指令并行处理的结构,时钟频率为100MHZ的DSP芯片,可高达100MIPs(即每秒执行百万条指令)。

1.3FIR滤波器的基本原理1.3.1FIR数字滤波器的特点和结构

在数字信号处理应用中往往需要设计线性相位的滤波器,FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性。FIR滤波器不断地对输入样本x(n)延时后,再作乘法累加算法,将滤波结果y(n)输出,因此,FIR实际上是一种乘法累加运算。

在数字滤波器中,FIR滤波器的最主要的特点是没有反馈回路,故不存在不稳定的问题,同时,可以在幅度特性是随意设置的同时,保证精确的线性相位。稳定和线性相位特性是FIR滤波器的突出优点。另外,它还有以下特点:设计方式是线性的;硬件容易实现;滤波器过渡过程具有有限区间;相对IIR滤波器而言,阶次较高,其延迟也要比同样性能的IIR滤波器大得多。[3]

FIR数字滤波器系统的传递函数为:

通过反z变换,数字滤波器的差分方程为:

由此得到系统的差分方程:

由上式可以得出如下图所示的直接型结构,这种结构又可以称为卷积型结构。将转置理论应用于图1.1可以得到转置直接型结构。

将式中的系统函数H(z)分解成若干一阶和二阶多项式的连乘积:

(1.4)

(1.4)

则可构成如图所示的级联型结构。其中为一阶节

;为二阶节。每个一阶节、二阶节可用图1.2所示的直接型结构实现。当M1=M2时,即得到图1.3所示的具体结构。这种结构的每一节都便于控制零点,在需要控制传输零点时可以采用。但是它所需要的系数a比直接型的h(n)多,所需要的乘法运算也比直接型多。在对滤波器计算时间没有特殊要求的时候可以采用这种形式。若需要严格考虑滤波器的计算时间则需要折衷它们的优点和缺点来设计。这在算法设计时候要使用软件编辑环境来计算运行的时间问题。通常FIR的计算时间都较长。很多时候我们需要牺牲时间来获得想要得到的滤波器功能。

图1.1FIR滤波器直接型机构图

图1.2级联型结构图

图1.3级联型具体结构

FIR滤波器实质上就是一个分节的延迟线,把每一节的输出用滤波器系数进行加权累加,便得到滤波器的输出结果,它总是稳定并且可实现的。在一些工程实际应用(如:图像处理、数据调制解调)中,往往对相位要求较高。FIR滤波器可以实现严格的线性相位,从而得到了广泛应用。它的差分方程数学表达式为:

式中,N是FIR滤波器的抽头数,x(n)表示在n时刻输入的信号样值,h(n)表示滤波器的第n级抽头系数。横截型FIR滤波器的结构如图2所示:

1.3.2FIR滤波器的优点

可以在幅度特性随意设计的同时,保证精确、严格的线性相位;由于FIR滤波器的单位脉冲h(n)是有限长序列,因此FIR滤波器没有不稳定的问题;由于FIR滤波器一般为非递归结构,因此,在有限运算下不会出现递归型结构中的极限振荡等不稳定现象误差较小;FIR滤波器可以采用FFT算法实现,从而提高了运算效率。

总结FIR数字滤波器的优点:

●很容易获得严格的线性相位,避免被处理的信号产生相位失真,这一特点在宽频带信号处理、阵列信号处理、数据传输等系统中非常重要;

●可得到多带幅频特性;

●极点全部在原点(永远稳定),无稳定性问题;

●任何一个非因果的有限长序列,总可以通过一定的延时,转变为因果序列,所以因果性总是满足;

●无反馈运算,运算误差小。

FIR数字滤波器的缺点:

●因为无极点,要获得好的过渡带特性,需以较高的阶数为代价;

●无法利用模拟滤波器的设计结果,一般无解析设计公式,要借助计算机辅助设计程序完成。

1.4FIR和IIR滤波器的比较

在很多实际应用中如语音和音频信号处理中,数字滤波器来实现选频功能。因此,指标的形式应为频域中的幅度和相位响应。在通带中,通常希望具有线性相位响应。在FIR滤波器中可以得到精确的线性相位。在IIR滤波器中通带的相位是不可能得到的,因此主要考虑幅度指标。IIR数字滤波器的设计和模拟滤波器的设计有着紧密的联系,通常要设计出适当地模拟滤波器,再通过一定的频带变换把它转换成为所需要的数字IIR滤波器。此外,任何数字信号处理系统中也还不可避免地用到模拟滤波器,比如A/D变换器前的抗混叠滤波器及D/A转换后的平缓滤波器,因此模拟滤波器设计也是数字信号处理中应当掌握的技术。

从性能上来说,IIR数字滤波器传递函数包括零点和极点两组可调因素,对极点的唯一限制是在单位圆内。因此可用较低的阶数获得高的选择性,所用的存储单元少、计算量小、效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,则相位非线性越严重。FIR滤波器传递函数的极点是固定在原点,是不能动的,它只能靠改变零点位置来改变它的性能,所以要达到高的选择性,必须用高的阶数,对于同样的滤波器设计指标,FIR滤波器所要求的阶数可能比IIR滤波器高5-10倍,结果成本高信号延时也较大,如果按线性相位要求来说,则IIR滤波器就必须加全通网络进行相位校正,同样大大增加了滤波器的阶数和复杂性。而FIR滤波器却可以得到严格的线性相位。

从结构上看,IIR滤波器必须采用递归结构来配置极点,并保证极点位置在单位圆内。由于有限字长效应,运算过程中将对系数进行舍入处理,引起极点的偏移,这种情况有时会造成稳定性问题,甚至造成寄生振荡。相反,FIR滤波器只要采用非递归结构,不论在理论上还是实际的有限精度运算中都不存在稳定性问题,因此造成的频率特性误差也较小。此外FIR滤波器可以采用快速傅立叶变换算法,在相同的阶数条件下运算速度可以快的多。

2.TMS320C54的硬件结构与主要特性

TMS320VC5402是TI公司于1999年10月推出的性价比极高的定点数字信号处理器(DSP)。运算速度高达100MIPS。图1是它的内部硬件组成框图,包括:CPU,总线,存储器,在片外设电路等。主要特点如下:

⏹  CPU:

●先进的多总线结构(1条程序总线,3条数据总线和4条地址总线)

●40位算术逻辑运算单元(ALU),包括1个40位桶型移位寄存器和2个独立的40位累加器

●17位×17位并行乘法器,与40位专用加法器相连,用于非流水线式单周期乘法/累加(MAC)运算

●比较,选择,存储单元(CSSU),用于加法/比较选择

●指数编码器,可以在单周期内计算40位累加器中数值得到指数

●双地址生成器,包括8个辅助寄存器和2个辅助寄存器算术运算单元(ARAU)存储器

●192K字可寻址存储空间(64K字程序存储器,64K字数据存储器以及64K字I/O空间)

●片内ROM,可配置位程序/数据存储器

●片内双寻址RAM(DARAM)

C5402中的DARAM分为若干块。由于在每个机器周期内,允许对同一DARAM块寻址2次,因此CPU可以在一个机器周期内对同一DARAM读出1次。一般情况下,DARAM总是映象到数据存储空间,主要用于存放数据。但是,它也可以映象到程序存储空间,用来存放程序代码。

⏹指令系统:

●单指令重复和块指令重复操作

●块存储器传送操作

●32位长操作数指令

●同时读入2或3个操作数的指令

●能并行存储和并行加载的算术指令

●条件存储指令

●从中断快速返回

⏹在片外围电路:

●软件可编程等待状态发生器

●可编程分区转换逻辑电路

●带有内部震荡器或者用外部时钟源的片内锁相环(PLL)时钟发生器

●时分多路

●缓冲串行口(BSP)

●16位可编程定时器

●8位并行主机接口(HPI)

●外部总线关断控制,以断开外部的数据总线、地址总线和控制信号

●数据总线具有总线保持器特性

⏹电源:

●可用IDLE1,IDLE2,IDLE3指令控制功耗,使其工作在省电方式下

●CLKOUT输出信号可以关断

⏹在片仿真接口:

●具有符合IEEE1149.1标准的在片仿真接口。

3.数字滤波器的MATLAB辅助设计3.1MATLAB简介

MATLAB是矩阵实验室(MatrixLaboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,当前流行的MATLAB5.3/Simulink3.0包括拥有数百个内部函数的主包和三十几种工具包(Toolbox)。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能。学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。MATLAB具有许多的优点比如:语言简洁紧凑,使用方便灵活,库函数极其丰富;MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性;程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行,等等优点。因此在各个学科和领域得到了广泛的应用。

3.2FIR数字滤波器的MATLAB设计原理方法3.2.1FIR滤波器的设计原理

滤波器就是在时间域或频域内,对已知激励,产生规定响应的网络,使其能够从信号中提取并放大有用的信号,抑制并衰减不需要的信号。数字滤波器的设计,实质上就是对提出的设计要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器频率响应特性,逼近给出的频率响应特性。设计完成后,可根据计算结果在FPGA或DSP上实现。

FIR数字滤波器系统的传递函数为:

(3-9)

由此得到系统的差分方程:

y(n)=b(0)x(n)+b(1)x(n-1)+…+b(N-1)x[n-(N-1)](3-10)

若FIR数字滤波器的单位脉冲响应序列为h(n),它就是滤波器系数向量b(n)。应用Matlab设计FIR滤波器的主要任务就是根据给定的性能指标,设计一个H(z),使其逼近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化。

3.2.2窗函数法

窗函数设计的基本思想是要选取某一种合适的理想频率选择性滤波器,然后将它的脉冲响应截断以得到一个线性相位和因果的FIR滤波器。因此这种方法的重点在于选择某种合适的窗函数和一种理想滤波器。对于给定的滤波器技术指标,选择滤波器长度和具有最窄主瓣宽度和尽可能小的旁瓣衰减的某个窗函数。任何数字滤波器的频率响应都是w的周期函数,它的傅立叶级数展开式为:

(3.1)

(3.2)

其中的Wc为滤波器的归一化的截止频率。傅立叶系数hd(n)实际上就是理想数字滤波器的冲激响应。获得有限冲激响应数字滤波器的一种可能方法就是把无穷级数截取为有限项级数来近似,而吉布斯(Gibbs)现象使得直接截取法不甚令人满意。

窗函数法就是用被称为窗函数的有限加权系列{W(n)}来修正式((3.2)的傅立叶级数,以求得要求的有限冲激响应序列h(n),即有:

h(n)=hd(n)W(n)(3.3)

w(n)是有限长序列,当n>N-1及nData->Load…打开之前Matlab生成的input.dat文件。

将Address设置为input,Length设置为200,Page设置为Data

运行程序,点击RUN按钮,程序即开始运行。

4.8查看滤波器滤波效果

打开View->Graph->Time/Frequency,设置数据,如图:

然后重复前三个步骤,只改变图形选项中的DisplayType、GraphTitle、StartAddress:左上图:数据时域图(StartAddress:input),右上图:输入数据频谱(DisplayType:FFTMagnitude),左下图:输出数据时域图(StartAddress:output),右下图:输出数据频谱(DisplayType:FFTMagnitude)。

4.9观察结果

5总结

本文以窗函数法设计线性相位FIR数字滤波器,介绍用MATLAB工具软件设计数字滤波器的方法并在CCS上仿真结果观察波形图可以看出本次设计基本实现了目标要求,但还存在误差,分析误差原因为在用DSP实现IIR滤波器时,在定点运算中,乘法运算的结果因位数增多而需要进行截止或舍入处理,因而引起了乘法运算的量化效应。由于舍入和截尾都是非线性过程,所以量化效应相当于在滤波器某些链路中引入了非线性环节,给分析和设计带来问题。

如何设置FIR滤波器的参数以及加窗的计算等对滤波器的功能有着非常重要的影响。本文在MATLAB平台上,研究了基于窗函数法并同时考虑衰减等多个参数设置问题。

MATLAB具有强大的数值计算和图形功能,虽然其执行效率较低,但其编程效率与可读性、可移植性要远高于其他高级语言。它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个界面友好的用户环境。它的信号处理工具箱包含了各种经典的和现代的数字信号处理技术,是一个非常优秀的算法研究与辅助设计的工具。在设计数字滤波器时,运用它来进行辅助设计,在系统的准确性和高效率方面起到了至关重要的作用。

在对设计的数字滤波器的进行调试,仿真时采用了CCS开发环境。CCS加速和增强了实时,嵌入信号处理的开发过程,它提供配置、构造、调试、跟踪和分析程序的工具,在基本代码产生工具的基础上增加了调试和实时分析的功能。开发设计人员可在不中断程序运行的情况下检查算法的对错,实现对硬件的实时跟踪调试,从而大大缩减了程序的开发时间。

6附录程序清单

1.利用MATLAB产生噪声信号用于滤波器测试代码

f11=500;

f12=3000;

f13=8000;

fs=10000;

N=1000

T=1/fs;

n=0:N;

x11=sin(2*pi*f11*n*T);

x12=0.7*sin(2*pi*f12*n*T);

x13=0.5*sin(2*pi*f13*n*T);

x_base=(x11+x12+x13);

figure(1)

plot(x_base)

figure(2)

yff=abs(fft(x_base))

df=n*(fs/N)

plot(df,yff)

xout=x_base/max(x_base);

xto_ccs=round(32767*xout)

finput.dat','w');

fprintf(fid,'16511000\n');

fprintf(fid,'%d\n',xto_ccs);

fclose(fid);

2.C语言源代码(*.c)

#include"stdio.h"

#include"E:\MATLAB7\extern\include\tmwtypes.h"

#defineN81//FIR滤波器的级数+1,本例中滤波器级数为80

#defineLEN200//待滤波的数据长度

longyn;

intinput[LEN];//输入缓冲,在仿真时将从内存载入

intoutput[LEN];//输出缓冲,直接存放在内存中

voidmain()

{

inti,j;

int*x;

for(j=0;j15;

}

while(1);

}

3.cmd文件如下

MEMORY

{

PAGE0:EPROG:origin=0x1400,len=0x7c00

VECT:origin=0xff80,len=0x80

PAGE1:USERREGS:origin=0x60,len=0x1c

BIOSREGS:origin=0x7c,len=0x4

IDATA:origin=0x80,len=0x1380

EDATA:origin=0x1400,len=0x8000

EDATA1:origin=0x9400,len=0x4c00

}

SECTIONS

{

.vectors:{}>VECTPAGE0

.sysregs:{}>BIOSREGSPAGE1

.trcinit:{}>EPROGPAGE0

.gblinit:{}>EPROGPAGE0frt:{}>EPROGPAGE0

.text:{}>EPROGPAGE0

.cinit:{}>EPROGPAGE0

.pinit:{}>EPROGPAGE0

.sysinit:{}>EPROGPAGE0

.bss:{}>IDATAPAGE1

.far:{}>IDATAPAGE1

.const:{}>IDATAPAGE1

.switch:{}>IDATAPAGE1

.sysmem:{}>IDATAPAGE1

.cio:{}>IDATAPAGE1

.MEM$obj:{}>IDATAPAGE1

.sysheap:{}>IDATAPAGE1

.stack:{}>IDATAPAGE1

}

。
TOP