IIR数字滤波器的DSP实现.docx
《IIR数字滤波器的DSP实现.docx》由会员分享,可在线阅读,更多相关《IIR数字滤波器的DSP实现.docx(18页珍藏版)》请在冰豆网上搜索。
IIR数字滤波器的DSP实现
湖南科技大学
信息与电气工程学院
《课程设计报告》
题目:
IIR数字滤波器的DSP实现
专业:
电子信息工程
班级:
电子二班
姓名:
高二奎
学号:
1104030205
指导教师:
尹艳群
2015年1月8日
信息与电气工程学院
课程设计任务书
2014—2015学年第一学期
专业:
电子信息工程班级:
电子二班学号:
1104030205姓名:
高二奎
课程设计名称:
DSP原理及应用
设计题目:
IIR数字滤波器的DSP实现
完成期限:
自2015年1月1日至2015年1月8日共1周
设计依据、要求及主要内容(可另加附页):
1、设计目的:
通过课程设计,使学生综合运用DSP技术课程和其他有关先修课程的理论和生产实际知识去分析和解决具体问题的能力得到提高,并使其所学知识得到进一步巩固、深化和发展。
通过课程设计初步培养学生对工程设计的独立工作能力,学习设计的一般方法。
通过课程设计树立正确的设计思想,提高学生分析问题、解决问题的能力。
通过课程设计训练学生的设计基本技能,如计算、绘图、查阅设计资料和手册,熟悉标准与规范等。
2、要求:
1.熟悉DSP处理器及其结构性能,掌握DSP芯片配套开发工具的使用方法。
2.按要求设计出硬件电路。
3.画出硬件连接原理图,并对硬件工作原理进行说明。
4.给出软件流程图及编写程序,每一条指令的后面附上相应的注释。
5.进行软、硬件调试,检查是否达到相关的功能。
6.写出调试方法。
7.设计报告结尾附上心得体会。
3、主要内容:
熟悉5410DSP的MCBSP的使用,了解AD50的结构,掌握AD50各寄存器的意义及其设置,掌握AD50与DSP的接口,AD50的通讯格式及AD50的DA实验。
指导教师(签字):
批准日期:
年月日
目录
一、摘要·························································3
二、数字滤波器介绍和IIR数字滤波器的理论分析·····················3
2.1数字滤波器介绍··············································3
2.2IIR滤波器的设计方法及原理···································4
三、DSP软件的简单介绍···········································6
3.1DSP系统的特点···············································6
3.2DSP系统的设计流程···········································7
3.3DSP系统的开发工具CCS········································7
四、TMS320C5402的介绍···········································9
五、基于DSP的IIR程序设计及软件调试·····························11
5.1IIR程序设计················································11
5.2软件调试结果·········································13
六、总结和心得··················································15
七、参考文献·······················································
一、摘要
随着计算机和信息技术的飞速发展,数字信号处理已经成为高速实时处理的一项关键技术,广泛应用在语音识别、智能检测、工业控制等各个领域。
数字滤波器是对数字信号实现滤波的线性时不变系统。
数字滤波实质上是一种运算过程,实现对信号的运算处理。
DSP数字信号处理(DigitalSignalProcessing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
传感器数字信号处理是利用传感器对模拟信号或数字信号进行采集并把其转换成计算机可识别的电信号,并利用计算机对信号进行处理以达到计算机辅助控制或是计算机自动控制的目的。
DSP芯片是一种特别适合数字信号处理运算的微处理器,主要用来实时、快速地实现各种数字信号处理算法。
用DSP芯片实现IIR数字滤波器,不仅具有精确度高、不受环境影响等优点,而且因DSP芯片的可编程性,可方便地修改滤波器参数,从而改变滤波器的特性,设计十分灵活。
本课题主要应用MATLAB软件设计IIR数字滤波器,并对所设计的滤波器进行仿真;应用DSP集成开发环境——CCS调试汇编程序,文章结合TM320C5509的结构特点,介绍了一种IIR滤波器在TM320C5509中的实现方法。
文中程序已经过硬件验证,仿真结果表明该设计符合要求。
关键词 数字滤波;IIR;DSP;TM320C5509;MATLAB
二、数字滤波器介绍和IIR数字滤波器的理论分析
2.1数字滤波器介绍
数字滤波器是对数字信号实现滤波的线性时不变系统。
数字滤波实质上是一种运算过程,实现对信号的运算处理。
输入数字信号(数字序列)通过特定的运算转变为输出的数字序列,因此,数字滤波器本质上是一个完成特定运算的数字计算过程,也可以理解为是一台计算机。
描述离散系统输出与输入关系的卷积和差分方程只是给数字信号滤波器提供运算规则,使其按照这个规则完成对输入数据的处理。
时域离散系统的频域特性:
其中
、
分别是数字滤波器的输出序列和输入序列的频域特性(或称为频谱特性),
是数字滤波器的单位取样响应的频谱,又称为数字滤波器的频域响应。
输入序列的频谱
经过滤波后
因此,只要按照输入信号频谱的特点和处理信号的目的,适当选择
,使得滤波后的
满足设计的要求,这就是数字滤波器的滤波原理。
数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。
IIR数字滤波器的特征是,具有无限持续时间冲激响应,需要用递归模型
来实现,其差分方程为:
系统函数为:
设计IIR滤波器的任务就是寻求一个物理上可实现的系统函数H(z),使其频率响应H(z)满足所希望得到的频域指标,即符合给定的通带截止频率、阻带截止频率、通带衰减系数和阻带衰减系数。
2.2IIR滤波器的设计方法及原理
IIR滤波器差分方程的一般表达式为:
式中x(n)为输入序列;y(n)为输出序列;
和
为滤波器系数.若所有系数
等于0,则为FIR滤波器.
IIR滤波器具有无限长的单位脉冲响应,在结构上存在反馈回路,具有递归性,即IIR滤波器的输出不仅与输入有关,而且与过去的输出有关.
将上式展开得出y(n)表达式为:
在零初始条件下,对上式进行z变换,得到:
设N=M,则传递函数为:
上式可写成:
上式具有N个零点
和N个极点
.若有极点位于单位圆外将导致系统不稳定.由于FIR滤波器所有的系数
均为0,不存在极点,不会造成系数的不稳定.对于IIR滤波器,系统稳定的条件如下:
若|
|<1,当n→
时,h(n)→0,系统稳定;
若|
|>1,当n→
时,h(n)→
系统不稳定.
IIR滤波器具有多种形式,主要有:
直接型(也称直接I型)、标准型(也称直接II型)、变换型、级联型和并联型.
三、DSP软件的简单介绍
3.1DSP系统的特点
DSP系统是以数字信号处理为基础的,因此不但具有数字处理的全部优点而且还具有以下特点[24]:
1.接口方便:
DSP应用系统与其他以现代数字技术为基础的系统或设备都是相互兼容的,这样的系统接口以实现某种功能要比模拟系统与这些系统接口要容易得多。
2.编程方便:
DSP应用系统中的可编程DSP芯片,能灵活方便地进行修改和升级。
3.稳定性好:
DSP应用系统以数字处理为基础,受环境温度及噪声的影响较小、可靠性高,无器件老化现象。
4.精度高:
16位数字系统可以达到10-5级的精度。
5.可重复性好:
模拟系统的性能受元器件参数性能变化的影响比较大,而数字系统基本不受影响,因此数字系统便于测试、调试和大规模生产。
6.集成方便:
DSP应用系统中的数字部件有高度的规范性,便于大规模集成。
当然,数字信号处理也存在一些缺点。
例如,对于简单信号处理任务,若采用DSP则使成本增加。
DSP系统中的高速时钟可能带来高频干扰和电磁泄漏等问题,而且DSP系统消耗的功率也较大。
此外,DSP技术更新速度快,对于数学知识要求高,开发和测试工具还有待进一步完善。
3.2DSP系统的设计流程
一个DSP系统的设计过程大概要有以下几个步骤。
1.根据系统的任务要求,确定系统处理精度要求、速度要求、实时性要求等性能指标。
2.根据系统的要求进行高级语言的算法模拟,比如使用MATLAB等仿真工具,验证算法的可行性,得出最佳的处理方法。
3.DSP的系统设计,主要分为硬件设计和软件设计。
硬件设计是指根据系统要求选择合适的DSP芯片,然后设计相应的外围电路。
软件设计主要是指根据系统的要求和选用的DSP芯片编写相应的程序。
程序的编写可以使用汇编语言,汇编语言编写的程序效率高,但比较烦杂;也可采用C语言,DSP的C语言基本上是标准C语言,编写比较简单,但效率低。
在实际系统开发时往往是两种语言结合编写,在算法运算量大的地方使用汇编语言,在运算量小的地方使用C语言,这样既能缩短软件的开发周期,提高程序的可读性和可移植性,又满足了系统的实时性要求。
本文的设计采用汇编语言编写、设计软件程序。
3.3DSP系统的开发工具CCS
CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供有环境配置、源文件编辑、程序调试、跟踪和分析等工具。
CCS有两种工作模式,即
软件仿真器模式:
可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。
硬件在线编程模式:
可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。
CCS的开发系统主要由以下组件构成:
1.TMS320C54x集成代码产生工具;
2.CCS集成开发环境;
3.DSP/BIOS实时内核插件及其应用程序接口API;
4.实时数据交换的RTDX插件以及相应的程序接口API;
5.由TI公司以外的第三方提供的各种应用模块插件。
CCS的功能十分强大,它集成了代码的编辑、编译、链接和调试等诸多功能,而且支持C/C++和汇编的混合编程,其主要功能如下:
1.具有集成可视化代码编辑界面,用户可通过其界面直接编写C、汇编、.cmd文件等;
2.含有集成代码生成工具,包括汇编器、优化C编译器、链接器等,将代码的编辑、编译、链接和调试等诸多功能集成到一个软件环境中;
3.高性能编辑器支持汇编文件的动态语法加亮显示,使用户很容易阅读代码,发现语法错误;
4.工程项目管理工具可对用户程序实行项目管理。
在生成目标程序和程序库的过程中,建立不同程序的跟踪信息,通过跟踪信息对不同的程序进行分类管理;
5.基本调试工具具有装入执行代码、查看寄存器、存储器、反汇编、变量窗口等功能,并支持C源代码级调试;
6.断点工具,能在调试程序的过程中,完成硬件断点、软件断点和条件断点的设置;
7.探测点工具,可用于算法的仿真,数据的实时监视等;
8.分析工具,包括模拟器和仿真器分析,可用于模拟和监视硬件的功能、评价代码执行的时钟;
9.数据的图形显示工具,可以将运算结果用图形显示,包括显示时域/频域波形、眼图、星座图、图像等,并能进行自动刷新;
10.提供GEL工具。
利用GEL扩展语言,用户可以编写自己的控制面板/菜单,设置GEL菜单选项,方便直观地修改变量,配置参数等;
11.支持多DSP的调试;
12.支持RTDX技术,可在不中断目标系统运行的情况下,实现DSP与其他应用程序的数据交换;
13.提供DSP/BIOS工具,增强对代码的实时分析能力。
四、TMS320C5402的介绍
TMS320C5509采用双乘累加单元(MAC)结构。
整个处理器内部分为5个大的功能单元:
存储器缓冲单元(M)、指令缓冲单元(I)、程序控制单元(P)、地址生成单元(A)和数据计算单元(D),各个功能单元之间通过总线连接。
TMS320C5509中共有12条总线:
1条32位程序数据总线(PB),1条24位程序地址总线(PAB),5条16位的数据总线(BB、CB、DB、EB、FB)和5条24位的数据地址总线(BAB、CAB、DAB、EAB、FAB)。
作为嵌入式芯片的一种,DSP芯片是一种非常适合于进行数字信号处理的微处理器芯片,已经广泛应用于实现各种数字信号处理运算。
其显著特点可以归纳如下:
1.哈佛结构
哈佛结构是不同于传统的冯·诺曼(VonNeuman)结构的并行体系结构,其主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。
与两个存储器相对应的是系统中设置了程序总线和数据总线两条总线,从而使数据的吞吐率提高了一倍。
2.流水线
与哈佛结构相关,DSP芯片广泛采用流水线以减少指令执行时间,从而增强了处理器的处理能力。
TMS320系列处理器的流水线深度从2-6级不等。
第一代TMS320处理器采用二级流水线,第二代采用三级流水线,而第三代则采用四级流水线。
也就是说,处理器可以并行处理2-6条指令,每条指令处于流水线上的不同阶段。
3.专用的硬件乘法器
在一般形式的FIR滤波器中,乘法是DSP的重要组成部分。
对每个滤波器抽头,必须做一次乘法和一次加法。
乘法速度越快,DSP处理器的性能就越高。
在通用的微处理器中,乘法指令是由一系列加法来实现的,故需许多个指令周期来完成。
相比而言,DSP芯片的特征就是有一个专用的硬件乘法器。
4.特殊的DSP指令
DSP芯片的另一个特征是采用特殊的指令。
例如TMS320C10中的LTD指令,可单周期完成加载寄存器、数据移动、同时累加操作。
还有DMOV指令,它完成数据移位功能。
在数字信号处理中,延迟操作非常重要,这个延迟就是由DMOV指令来实现的[9]。
5.快速的指令周期
哈佛结构、流水线操作、专用的硬件乘法器、特殊的DSP指令再加上集成电路的优化设计,可使DSP芯片的指令周期缩短到200ns以下。
现在,许多DSP处理器的指令周期已经从第一代的200ns降低至现在的20ns以下,甚至在10ns以内。
快速的指令周期使得DSP芯片能够实时实现许多DSP应用。
6.面向寄存器和累加器
DSP所使用的不是一般的寄存器文件,而是专用寄存器,较新的DSP产品都有类似于RISC的寄存器文件。
许多DSP还有大的累加器,可以在异常情况下对数据溢出进行处理。
7.支持前、后台处理
DSP支持复杂的内循环处理,包括建立起X、Y内存和分址/循环计数器。
一些DSP在做内循环处理中把中断屏蔽了,另一些则以类似后台处理的方式支持快速中断。
许多DSP使用硬连线的堆栈来保存有限的上下文,而有些则用隐蔽的寄存器来加快上下文转换时间。
8.拥有简便的单片内存和内存接口
DSP设法避免了大型缓冲器或复杂的内存接口,减少了内存访问。
一些DSP的内循环是在其单片内存中重复执行指令或循环操作部分代码,它多采用SRAM而不是DRAM,因为前者接口更简便。
2000年3月,德州仪器(TI)公司推出了高性能低功耗的TMS320C55x芯片[10]。
其性能可以达到400-800MIPS,但功耗低到0.05mW/MIPS。
TMS320系列包括定点、浮点和多处理器等三种类型的数字信号处理器。
它的结构是专门针对实时信号处理而设计的,具有指令灵活、可操作性强、速度快以及支持并行运算和C语言等特点,是性价比较高的一类DSP,在通信设备中得到了广泛的应用。
C5000系列DSP是针对个人便携设备而设计的,如音乐播放器、3G蜂窝电话、数码相机、高速音频设备、高精度的信号和多通道应用。
通常人们把C54x和C55x系列通称C5000系列,主要用于功耗低、便携式的无线通信终端产品。
C5000系列包括旧有的C5x、当前主流的C54x和较新的C55x系列。
其中,C54x采用改进的哈佛结构,并集成有丰富的硬件逻辑和外部接口资源,具有较高的性能,及较低的成本和体积。
C55x是在C54x的基础上发展起来的,也采用改进型哈佛结构,其器件功耗较C54x更低,性能更高。
TMS320C55x采用多总线结构,由五组内部数据总线(3个用于读,2个用于写)和一组内部程序存储总线构成。
32bit的程序总线(PB)传送从程序存储器来的指令代码和立即数。
三组16bit数据读总线(BB,CB和DB)连接数据读地址产生逻辑。
CB和DB总线传送双操作数。
DB总线传送单操作数。
BB总线提供第三种读路径并且能够提供双乘操作数的系数。
两组16bit数据写总线(EB,FB)连接数据写地址产生逻辑。
六组24bit数据总线(PAB,CAB,DAB,BAB,EAB,FAB)传送执行指令所需要的地址。
还有一条附加总线为DMA控制器和外设控制器提供服务。
TMS320C55x的CPU结构主要包括四种功能单元:
即指令缓冲单元(I单元),程序流程单元(P单元),地址数据流程单元(A单元)和数据计算单元(D单元)。
其数据计算单元包括一个40bit的可以提供-32到31移位范围的桶形移位器,一个40bit的算术逻辑电路(ALU),两个乘累加器(MAC)可以在一个周期中执行两个MAC操作,以及四个40bit的累加器。
在其地址数据流程单元还包括一个16bit的算术逻辑电路(ALU),为主ALU提供简单的算术运算。
55x的指令集功能强大而且使用灵活,它同时具有易于使用和程序效率高的特点。
寻址方式包括绝对寻址、寄存器间接寻址、直接寻址,这些寻址方式降低了算法所需要的指令数量,减小了代码量,也提高了芯片运算速度。
特别要提到的是C55x指令集中所提供的三操作数指令,这种指令可以实现3个操作数的同时处理(如写入寄存器或存储器等操作),大大压缩了代码的指令数量。
五、基于DSP的IIR程序设计及软件调试
5.1IIR程序设计
IIR.c程序
#include
#defineIIRNUMBER2
#defineSIGNAL1F1000
#defineSIGNAL2F4500
#defineSAMPLEF10000
#definePI3.1415926
floatInputWave();
floatIIR();
floatfBn[IIRNUMBER]={0.0,0.7757};
floatfAn[IIRNUMBER]={0.1122,0.1122};
floatfXn[IIRNUMBER]={0.0};
floatfYn[IIRNUMBER]={0.0};
floatfInput,fOutput;
floatfSignal1,fSignal2;
floatfStepSignal1,fStepSignal2;
floatf2PI;
inti;
floatfIn[256],fOut[256];
intnIn,nOut;
main()
{
nIn=0;nOut=0;
fInput=fOutput=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
//fStepSignal1=2*PI/30;
//fStepSignal2=2*PI*1.4;
fStepSignal1=2*PI/50;
fStepSignal2=2*PI/2.5;
while
(1)
{
fInput=InputWave();
fIn[nIn]=fInput;
nIn++;nIn%=256;
fOutput=IIR();
fOut[nOut]=fOutput;
nOut++;//breakpoint
if(nOut>=256)
{
nOut=0;
}
}
}
floatInputWave()
{
for(i=IIRNUMBER-1;i>0;i--)
{
fXn[i]=fXn[i-1];
fYn[i]=fYn[i-1];
}
fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;
fYn[0]=0.0;
fSignal1+=fStepSignal1;
if(fSignal1>=f2PI)fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if(fSignal2>=f2PI)fSignal2-=f2PI;
return(fXn[0]);
}
floatIIR()
{
floatfSum;
fSum=0.0;
for(i=0;i{
fSum+=(fXn[i]*fAn[i]);
fSum+=(fYn[i]*fBn[i]);
}
return(fSum);
}
IIR.cmd程序
-w
-stack400h
-heap100
-lrts.lib
MEMORY
{
PAGE0:
VECT:
o=80h,l=80h
PRAM:
o=100h,l=1f00h
PAGE1:
DRAM:
o=2000h,l=1000h
}
SECTIONS
{
.text:
{}>PRAMPAGE0
.data:
{}>PRAMPAGE0
.cinit:
{}>PRAMPAGE0
.switch:
{}>PRAMPAGE0
.const:
{}>DRAMPAGE1
.bss:
{}>DRAMPAGE1
.stack:
{}>DRAMPAGE1
.vectors:
{}>VECTPAGE0
}
5.2软件调试结果
通过IIR滤波器前的波形
通过IIR滤波器后的波形
在效果图中,上面波形为DSP实验箱产生的滤波前的效果图,下面波形为进行IIR滤波后的效果图。
从两图的比较可以看出,所设计的IIR滤波器收到了较好的效果,完成了设计要求。
在编写及调试的过程中主要遇到以下问题:
(1)在编写程序的过程中要对所涉及的存储单元进行初始化,这样在数据或是代码段进行汇编时才不会出现问题。
(2)编写程序需要对数据段、代码段、堆栈段进行设置。
要编写相应的.cmd(链接命令文件)文档对其进行合理化的分配空间。
(3)在编写程序时一定要编写相应的中断向量表文件,这样在汇编时才不会出错。
六、总结和心得
通过对本课题的研究,自己从中取得了一些成绩,理论水平也得到了一定的