基于TMS320C5402的FIR数字滤波器设计.docx
《基于TMS320C5402的FIR数字滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于TMS320C5402的FIR数字滤波器设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于TMS320C5402的FIR数字滤波器设计
DSP原理与应用
课程设计
题目:
基于TMS320C5402的FIR数字滤波器设计
摘要
滤波器的设计是数字信号处理中最基础的部分,也是比较重要的部分。
这次有限长单位脉冲响应(FIR)滤波器的设计考虑DSP芯片的设计方案,首先采用MATLAB对滤波器进行仿真,使用的是它自带的函数库,仿真成功后得到滤波器的滤波系数,然后再基于TMS320VC5402DSP芯片采用C语言实现FIR数字滤波。
其中用CCS作为DSP开发环境。
FIR滤波器主要采用非递归结构,因此在有限精度运算中不存在稳定性问题,误差较小。
而且它能适应在某些特殊的场合,如构成微分器或积分器,因而有更大的适应性。
关键字:
滤波器、FIR、MATLAB、TMS320C54X、DSP、CCS
一.FIR数字滤波器的概述
1.1FIR滤波器的基本结构
FIR滤波器[7]的单位抽样响应为有限长度,一般采用非递归形式实现。
通常的FIR数字滤波器有横截性和级联型两种。
FIR滤波器实现的基本结构有:
(1)FIR滤波器的横截型结构
表示系统输入输出关系的差分方程可写作:
(2-3)
直接由差分方程得出的实现结构如图2-2所示:
若h(n)呈现对称特性,即此FIR滤波器具有线性相位,则可以简化加横截型结构,下面分情况讨论:
图2-3图2-4
图2-3、N为奇数时线形相位FIR滤波器实现结构
图2-4、N为偶数时线性相位FIR滤波器实现结构
(2)FIR滤波器的级联型结构
将H(z)分解成实系数二阶因子的乘积形式:
(2-4)
这时FIR滤波器可用二阶节的级联结构来实现,每个二阶节用横截型结构实现。
如图所示:
图2-5、FIR滤波器的级联结构
这种结构的每一节控制一对零点,因而在需要控制传输零点时可以采用这种结构。
1.2FIR数字滤波器的特点
系统函数:
H(z)=
有N-1个零点分布于z平面,z=0处是N-1阶极点
(1)系统的单位抽样响应h(n)有限长,设N点
(2)系统函数H(z)在
处收敛,有限z平面只有零点,全部极点在z=0处(因果系统)
(3)无输出到输入的反馈,一般为非递归型结构
1.3滤波器的性能指标
我们在进行滤波器设计时,需要确定其性能指标。
一般来说,滤波器的性能要求往往以频率响应的幅度特性的允许误差来表征。
以低通滤波器特性为例,频率响应有通带、过渡带及阻带三个范围。
在通带内:
1-AP≤|H(ejω)|≤1|ω|≤ωc
在阻带中:
|H(ejω)|≤Astωst≤|ω|≤ωc
其中ωc为通带截止频率,ωst为阻带截止频率,Ap为通带误差,Ast为阻带误差。
与模拟滤波器类似,数字滤波器按频率特性划分为低通、高通、带通、带阻、全通等类型,由于数字滤波器的频率响应是周期性的,周期为2π。
各种理想数字滤波器的幅度频率响应如图所示:
图2-7、各种理想数字滤波器的幅度频率响应
1.4FIR滤波器的优缺点
可以在幅度特性随意设计的同时,保证精确、严格的线性相位;由于FIR滤波器的单位脉冲h(n)是有限序列,因此FIR滤波器没有稳定的问题;由于FIR滤波器一般为非递归结构,因此,在有限运算下不会出现递归结构中的极限振荡等不稳定现象误差较小;FIR滤波器可以采用FFT算法实现,从而提高了运算效率。
总结FIR数字滤波器的优点如下:
1、很容易获得严格的线性相位,避免被处理的信号产生相位失真,这一特点在宽带信号处理、阵列信号处理、数据传输等系统非常重要;
2、可得到多带幅频特性
3、极点全部在原点,无稳定性问题
4、任何一个非因果的有限长序列,总可以通过一定的延时,转变为因果序列,所以因果性总是满足;
5、无反馈运算,运算误差小;
FIR数字滤波器的缺点:
1、因为无极点,要获得好的过渡带特性,需以较高的阶数为代价;
2、无法利用模拟滤波器的设计结果,一般无解析设计公式,要借助计算机辅助设计程序完成
二.TMS320C54的硬件结构与主要特征
TMS320VC5402是TI公司于1999年10月推出的性价比极高的定点数字信号处理器(DSP)。
运算速度高达100MIPS。
图1是它的内部硬件组成框图,包括:
CPU、总线、存储器、片外设电路等。
2.1TMS320C54x主要特性:
(1)CPU部分
◆先进的多总线结构(1条程序总线、3条数据总线和4条地址总线)。
◆40位算术逻辑运算单元(ALU),包括1个40位桶形移位寄存器和2个独立的40位累加器。
◆17位并行乘法器,与40位专用加法器相连,用于非流水线式单周期乘法/累加(MAC)运算。
(2)存储器系统
◆192K字可寻址存储空间:
64K字程序存储空间、64K字数据存储空间及64K字I/O空间,对于C548、C549、C5402、C5410和C5416等可将其程序空间扩展至8M。
◆SARAM与DARAM
(3)片内外设
◆软件可编程等待状态发生器。
◆可编程分区转换逻辑电路。
◆片内锁相环(PLL)和时钟发生器。
◆可编程串行接口(4种)
◆可编程定时器16位(1~2个)
◆8位或16位主机接口(HPI)。
◆多种节电模式:
软件控制片外总线、CLKOUT、器件电压等。
(4)指令系统
◆单指令重复和块指令重复操作。
◆用于程序和数据管理的块存储器传送指令。
◆32位长操作数指令。
◆同时读入2或3个操作数的指令。
◆可以并行存储和并行加载的算术指令。
◆条件存储指令。
◆从中断快速返回的指令。
2.2TMS320C54x硬件结构框图
三.数字滤波器的MATALAB设计
3.1MATLAB的简介
MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
3.2FIR滤波器的设计原理
滤波器就是在时间域或频域内,对已知激励,产生规定响应的网络,使其能够从信号中提取并放大有用的信号,抑制并衰减不需要的信号。
数字滤波器的设计,实质就是对提出的设计要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器频率响应特性,逼近给出的频率响应特性。
设计完成后,可根据计算结果在FPGA或DSP上实现。
FIR数字滤波器系统的传递函数为:
由此得到系统的差分方程:
y(n)=b0x(n)+b1x(n-1)+…+bn-1x[n-(N-1)](3-10)
若FIR数字滤波器的单位脉冲响应序列为h(n),它就是滤波器系数向量b(n)。
应用MATLAB设计FIR滤波器的主要任务就是根据给定的性能指标,设计一个H(z),使其逼近响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化。
3.3窗函数法
常函数设计的基本思想是要选取某一种合适的理想频率选择性滤波器,然后将它的脉冲响应截断得到一个线性相位和因果的FIR滤波器。
因此这种方法的重点在于选择某种合适的窗函数和一种理想的滤波器。
对于给定的滤波器技术指标,选择滤波器长度和具有最窄主瓣宽度和尽可能小的旁瓣衰减的某个窗函数。
任何数字滤波器的频率响应A(ejw)都是w的周期函数,它的傅里叶级数展开式为:
通过频域卷积过程看
的幅度函数H(ω)的起伏现象,可知,加窗处理后,对理想矩形的频率响应产生以下几点影响:
◆使理想频率特性不连续点处边沿加宽,形成一个过渡带,其宽度等于窗的频率响应的主瓣宽度。
◆在截止频率的两边的地方即过渡带的两边,出现最大的肩峰值,肩峰的两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度,而振荡的多少,则取决于旁瓣的多少。
◆改变N,只能改变窗谱的主瓣宽度,改变ω的坐标比例以及改变的绝对值大小,但不能改变主瓣与旁瓣的相对比例(此比例由窗函数的形状决定)。
(1)对窗的要求
◆窗谱主瓣尽可能窄,以获取较陡的过渡带;
◆尽量减小窗谱的最大旁瓣的相对幅度;即能量集中于主瓣,使肩峰和波纹减小,增大阻带的衰减。
(2)频率采样法:
窗函数设计法是从时域出发,把理想的hd(n)用一定形状的窗函数截取成有限长的h(n),来近似理想的hd(n),这样得到的频率响应
逼近于所要求的理想的频率响应
。
频率抽样法则是从频域出发,把给定的理想频率响应
加以等间隔抽样得到
,然后以此
作为实际FIR滤波器的频率特性的抽样值H(k),即
(2-16)
知道H(k)后,由DFT定义可唯一确定有限长序列h(n),利用这N个频域抽样值H(k)同样利用频率内插公式可得FIR滤波器的系统函数H(z),及频率响应
,即:
频率抽样法内插公式:
(2-17)
(3)频率抽样法小结:
优点:
可以在频域直接设计,并且适合于最优化设计。
缺点:
抽样频率只能等于2π/N的整数倍,或等于2π/N的整数倍加上π/N。
因而不能确保截止频率
的自由取值,要想实现自由地选择截止频率,必须增加抽样点数N,但这又使计算量增大。
为了提高逼近质量,减少通带边缘由于抽样点的陡然变化而引起的起伏振荡。
有目的地在理想频率响应的不连续点的边缘,加上一些过渡的抽样点,增加过渡带,减少起伏振荡。
3.4用三中窗函数设计FIR数字滤波器
3.4.1分别用矩形窗和Hamming窗设计线性相位FIR低通滤波器。
通带截止频率Wc=π/4,单位脉冲响应H(n)的长度N=21.
用窗函数法设计FIR数字滤波器时,先求出相应的理想滤波器单位脉冲响应hd(n),再根据阻带最小衰减选择合适的窗函数w(n),最后得到FIR滤波器单位脉冲响应h(n)=hd(n)w(n).
Wc=π/4,N=21,所以线性相位理想低通滤波器的单位脉冲响应为:
3.4.1.1MATLAB代码结果如下:
%Fir.m
N=21;wc=pi/4;%理想低通滤波器参数
n=0:
N-1;r=(N-1)/2;
hdn=sin(wc*(n-r))/pi./(n-r);%计算理想低通单位脉冲响应
ifrem(N,2)~=0;
hdn(r+1)=wc/pi;end%n为奇数时,处理n=r点的0/0型
wn1=boxcar(N);%矩形窗
hn1=hdn.*wn1';%加窗
wn2=hamming(N);%hamming窗
hn2=hdn.*wn2';%加窗
w=2*[0:
511]/512;
hw1=fft(hn1,512);
hw2=fft(hn2,512);
subplot(2,2,1);%作图
stem(n,hn1,'.');grid;
xlabel('n');ylabel('h(n)');
title('矩形窗设计的h(n)')%加注标题
subplot(2,2,2);
plot(w,20*log10(abs(hw1)));grid;
xlabel('w/pi');ylabel('Magnitude(dB)');
title('幅频特性(dB)')
subplot(2,2,3);
stem(n,hn2,'.');grid;
xlabel('n');ylabel('h(n)');
title('hamming窗设计的h(n)')
subplot(2,2,4);
plot(w,20*log10(abs(hw2)));grid;
xlabel('w/pi');ylabel('Magnitude(dB)');
title('幅频特性(dB)')
3.4.1.2结果如下:
结果分析:
对两种窗函数的设计结果分别如图所示。
由图中可以看出,不同的窗函数生成的过渡带宽度和阻带最小衰减是不同的。
这就是选择窗函数的根据。
3.4.2用remez函数设计FIR低通滤波器
逼近低通滤波特性|Hd(ejw)|
|Hd(ejw)|=
带通波纹ap
3dB,阻带衰减as
60dB,并用最小阶数实现。
设计参数f=[1/4,5/16],m=[1,0];由于
Rp=20
,As=-20
所以,dev
(1)=(
)(
)
dev
(2)=
3.4.2.1MATLAB代码结果如下:
代码如下:
%FIR_L.m
%用remez函数设计FIR低通滤波器
fc=1/4;fs=5/16;%输入给定参数
Rp=3;As=60;Fs=2;
f=[fc,fs];m=[1,0];%计算remezord函数所需参数f,m,dev
dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)];
[N,f0,m0,w]=remezord(f,m,dev,Fs);%确定remez函数所需参数
hn=remez(N,f0,m0,w);%调用remez函数进行设计
hw=fft(hn,512);%%求设计出的滤波器频率特性
w=[0:
511]*2/512;
plot(w,20*log10(abs(hw)));grid;
axis([0,max(w)/2,-90,5]);
xlabel('w/pi');ylabel(Magnitude(dB)');
title('幅频特性');
line([0,0.4],[-3,-3]);
line([1/4,1/4],[-90,5]);
line([5/16,5/16],[-903.4.2.2结果如下:
四.数字滤波器的CCS设计
4.1CCS简介
CCS是TI公司推出的用于开发320系列DSP芯片的集成开发环境,采用Windows风格界面。
集编辑、编译、链接、软件仿真、硬件调试及实时跟踪等功能于一体,包括编辑工具、工程管理工具和调试工具等。
CCS有两种工作模式,即
软件仿真器模式:
可脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。
硬件在线编程模式:
可实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。
4.2CCS配置
点击桌面图标“SetupCCStudiov3.1”图标,运行CCS设置程序,如图所示:
点击AddSaveandquit完成设置。
选择C5402DeviceSimulator
4.3CCS环境中工程文件的使用
1.创建工程文件
在CCS集成环境下开发汇编程序或C/C++程序,首先要建立一个工程项目文件夹(*.pjt),再向工程项目文件中添加汇编程序源文件(*.pjt),C/C++源文件(*.c)和链接命令文件(*.cmd),并设置工程项目选项。
使用CCS开发应用程序的一般步骤如下:
◆创建或打开一个工程项目文件(*.pjt),编辑各类文件,可以使用CCS提供的集成环境,对链接命令文件和源程序进行编辑。
◆对工程项目进行编译。
在编译过程中如果出现语法错误,将在编译链接信息视窗窗口中显示错误的信息,用户可以根据显示的信息找到错误的位置,更改错误。
◆对结果和数据进行分析和算法评估
下面分别介绍建立工程文件,单击ProjectNew命令,系统将弹出如图所示的对话框,在该对话框中输入项目文件名。
2、创建新文件
选择FileNew可打开一个新的编辑窗口。
在新窗口中输入源代码。
选择FileSave,在出现的对话框中输入一个文件名,并选择一个扩展名,然后单击保存。
3、向工程中添加文件
添加文件:
单击ProjectAddFiletoProject命令然后弹出如图所示的对话框,单击打开完成对文件的添加。
导入C代码,cmd文件以及rst.lib文件,在D:
\CCStudio_v3.1\C5400\cgtools\lib文件夹下。
4、编译连接装载
对程序进行编译:
执行ProjectCompile命令就可以对当前的汇编程序进行编译生成.obj文件。
若有错误,读者可进行修改。
对程序进行编译链接执行ProjectBuild命令,就可以对当前的项目文件同时进行编译,生成与工程项目名称相同的可执行.out文件。
装载:
单击主菜单“File”中的“LoadProgram”选项,在弹出的对话框中找到.out文件,并打开CCS装载完毕后,会弹出“Disassembly”.
4.4C代码如下
#include
#include\ProgramFiles\MATLAB\R2009a\extern\include\tmwtypes.h>
#defineN81//FIR滤波器的级数为81
#defineLEN200//待滤波的数据长度
longyn;
intinput[LEN];//输入缓冲,在仿真时将从内存载入
intoutput[LEN];//输出缓冲,直接存放在内存中
voidmain()
{
inti,j;
int*x;
for(j=0;j{
x=&input[j];
yn=0;
for(i=0;i<=N-1;i++)
yn+=B[i]*(*x++);
output[j]=yn>>15;
}
while
(1);
}
五.心的体会
本次毕业设计所涉及到的主要知识是DSP方面的。
我将把我本次毕业设计的心得和体会简述如下:
(1)类型寻优确定好所需要设计的滤波器用途后,首先对其进行性能需求分析,明确该系统应该达到的各种性能指标,其次,拟定多种滤波器类型,对这些方案采用Matlab进行仿真,进行综合分析和比较,选择出最佳的滤波器类型作为本设计方案,然后,依据其性能指标编写matlab程序,确定二阶节系数。
(2)系统思维必须有系统的设计思维,把每一个细节都放到整个系统中考虑,考虑整个系统设计的可行性、完整性、稳定性和功能的实现,这样才不会局限在细节上,才能快速的完成性能优越的硬件设计。
(3)把握细节系统也是由细节构成的,在把握整个系统思维的基础上把握每一个细节,因为每一个细节都有可能决定整个系统的性能。
在写VHDL代码时,把每一个变量与过程考虑清楚才可能完成整个程序。
(4)勇于尝试系统即使经过了非常严格的论证也仍然可能存在问题,或许面对问题一时没有很好的解决方案,但是有一个或许可行的大胆的想法,不要犹豫,试一试吧。
勇于尝试往往能够找到更好的解决方法。
(5)保持自信无论遇到什么困难,我都相信自己一定能够找到解决的方法,有的时候只要稍微再用一点力、使一点劲,结果就会不一样。
六.参考文献
一、参考文献
[1]刘会灯、朱飞.MATLAB编程基础与典型应用.人民邮电出版社,2008.7
[2]程佩青.数字信号处理教程.清华大学出版社,2009.11
[4]万永革.数字信号处理的MATLAB实现.科学出版社,2008.9
[5]郭仕剑、王宝顺、贺志国.MATLAB数字信号处理.人民邮电出版社,2007.11