毕业设计(论文)IIR数字滤波器的CAD设计及DSP实现.doc
IIR数字滤波器的CAD设计及DSP实现摘 要:介绍了数字滤波器的基本概念、技术要求和性能指标,给出了IIR数字滤波器的设计方法,并用MATLAB软件设计出了几种常用的数字滤波器。讨论了数字滤波器的实现结构,并通过CCS5000以TMS320C54X DSP为目标器件,以从方波中提取同频率正弦信号为滤波任务,完成了IIR数字滤波器的DSP实现,并对实验结果进行了分析讨论。关键词:IIR数字滤波器;MATLAB;DSPThe design and realization of IIR digital filter by using CAD software and DSPAbstract: The concept, specification and performance index of digital filter are introduced, then the design method of digital filter is given, several kind of commonly digital filter are designed by using MATLAB software. The realization structure of digital filter is presented, With CCS5000 and using TMS320C54X DSP as the goal component, the IIR digital filter is designed, its function is getting the same frequency sine signal from the square-wave.Key word: IIR digital filter; MATLAB; DSP目 录0引言 41数字滤波器概述 41.1数字滤波器的分类 41.2数字滤波器的技术要求和性能指标 51.3 IIR数字滤波器的设计方法 72 基于MATLAB的IIR数字滤波器设计82.1 IIR数字滤波器的双线性变换设计法82.2 基于MATLAB函数直接设计IIR数字滤波器 92.3 利用MATLAB的FDATool工具实现IIR数字滤波器的设计122.4 IIR数字滤波器的实际应用举例133 IIR数字滤波器的DSP实现 153.1 IIR滤波器的结构分析 153.2 IIR滤波器的实现方法 16 3.2.1 直接型IIR数字滤波器的实现方法17 3.2.2 直接型IIR数字滤波器的实现方法183.3软件开发环境Code ComposeStudio (CCS)193.3.1 CCS 简介193.3.2 设计举例20结束语22参考文献23谢辞24附录250引言随着计算机和信息技术的发展,数字信号处理技术已形成一门独立的学科系统,并围绕着理论、现实和应用三个方面迅速发展。作为数字信号理论,一般是指利用经典理论(如数字、信号与系统分析等)作为基础而形成的独特的信号处理理论,以及各种快速算法和各类滤波技术等基础理论。由此在各个应用领域,如语音与图象处理、信息的压缩与编码、信号的调制与调解、信道的辨识与均衡、各种智能控制与移动通讯等,都延伸出各自的理论与技术,可以说凡是用计算机来及其技术处理各类信号的场合都引用了数字信号处理的基本理论、概念和技术。数字滤波器(DF, Digital Filter)在数字信号处理中起着重要的作用,滤波是信号处理的基础,滤波运算是信号处理中的基本运算,在信号的检测与参数的估计等方面,数字滤波器是使用最为广泛的一种线形系统。因此滤波器的设计问题也是数字信号处理中的基本问题。本文介绍了IIR数字滤器的设计原理、步骤及MATLAB设计方法,并通过实例讨论了IIR数字滤器的DSP实现。1 数字滤波器概述数字滤波器是数字信号处理的重要组成部分,所谓数字滤波器是指输入输出均为数字信号,通过一定运算关系改变输入信号所含频率成分相对比例或者滤除某些频率成分的器件。因此它与模拟滤波器的概念是相同的,只是信号的形式和实现滤波的方法不同,但数字滤波器具有比模拟滤波器精度高、体积小、重量轻、稳定、灵活和不要求阻抗匹配以及实现模拟滤波器无法实现的特殊滤波功能等优点,因而被广泛应用。1.1数字滤波器的分类数字滤波器按照不同的分类方法,可以有多种分类,但总起来可以分为两大类。一类被称为经典滤波器,即一般的滤波器,其特点是输入信号中有用的频率成分和希望滤除的频率成分各占有不同的频带,通过一个合适的选频滤波器就可以达到滤波的目的。这种滤波器只能处理输入信号和干扰信号的频带互不重叠的情况,而对于干扰信号和输入信号有频率重叠的情况,这种滤波器就无能为力了,这时就需要采用另一类的滤波器即现代滤波器,这种滤波器能够按照随机信号内部的一些统计分布规律,从干扰中最佳地提取有用信号。例如卡尔曼滤波器,维纳滤波器、自适应滤波器等就属于这种滤波器。与模拟滤波器类似,一般数字滤波器按频率特性划分为低通、高通、带通、带阻、全通等滤波器。需要注意的是这种全通理想滤波器是不可能实现的,因为它们的单位脉冲相应均是非因果而且是无限长的,所以我们只能按照某些准则设计滤波器,使之尽可能逼近它,这种理想的滤波器可作为逼近的标准用。另外,数字滤波器的传输函数都是周期性的,周期为2。滤波器的低频通带在2的整数倍附近处,而高频通带在的奇数倍附近处,这一点是它和模拟滤波器的不同之处。按实现的网络结构或者单位脉冲响应的特性,数字滤波器可分为无限脉冲响应(IIR,Infinite Response)滤波器和有限脉冲响应(FIR, Finite Response)滤波器。它们的系统函数分别为: (1.1) (1.2)1.1式中的H(z)称为N阶IIR滤波器函数,1.2式中的H(z)称为(N-1)阶FIR滤波器函数。二者相比,通常IIR数字滤波器可用较低阶数获得高的选择性,并且执行速度快,所用存储单元更少,所以既经济又高效。本文主要介绍IIR数字滤波器的MATLAB设计及DSP实现。 1.2数字滤波器的技术要求和性能指标一般来说,滤波器的技术要求包括下面几个方面:1.滤波器的截止频率:滤波器类型通带技术要求阻带技术要求 幅频特性低通通带上限频率阻带下限频率高通通带下限频率阻带上限频率带通通带上限频率 通带下限频率下阻带上限频率 上阻带下限频率带阻上通带截止频率下通带截止频率阻带下限频率 阻带上限频率2.通带阻带的容限:滤波器中带通带阻的容限与的具体技术指标,往往由容许的最大衰减及阻带应达到的最小衰减给出。通带及阻带的衰减, 分别定义为:式中均假定已被归一化为1。3 采样频率:由于在数字滤波器的设计中是用弧度表示的,而实际上给出的频率要求往往是频率,单位为Hz,因此在数字滤波器的设计中还应给出采样频率。滤波器的性能指标往往以频率响应的幅度特性的允许误差来表征。以低通滤波器特性为例(如图一),频率响应有通带、过渡带及阻带三个范围。在通带内: 1 0在阻带中: 其中为通带截止频率,为阻带截止频率,为通带误差,为阻带误差。从到称为过渡带,一般是单调下降的。当幅度下降到0.707时,此时,称为3dB通带截止频率。、和统称为边界频率,它们在滤波器的设计中是非常重要的。图1 低通滤波器幅频特性1.3 IIR数字滤波器的设计方法一个IIR数字滤器可以用系统函数表示为 (1.3) 设计IIR数字滤波器也就是要确定系统函数,即求(1.3)式中的 和,也就是要找到一组能满足特定滤波器要求的系数向量A和B.IIR数字滤波器具有无限宽冲激响应,因而与模拟滤波器相匹配。又模拟滤波器的设计可借助于许多图表与公式,因此设计数字滤波器可按技术要求先设计一个模拟滤波器再按一定转换关系,将模拟滤波器转换成相应的数字滤波器,这过程需要两种变换(1)频带变换(2)模/数变换,根据这两种变换的先后次序,相应地有两种设计方法。第一种方法:第二种方法:模/数变换的方法很多,但在工程上比较常用的是脉冲响应不变法和双线性变换法。脉冲响应不变法的优点是其频率坐标变换是线性的,即=,缺点是会产生频率混叠现象,对于双线性变换法,它不可能产生频率混叠现象,这是它与脉冲响应不变法相比的最大优点,因此,大多情况下都采用双线形变换法。双线性变换的关系可以定义为:或者等效表示为基于双线形变换的IIR数字滤波器设计的基本步骤如下:(1)根据任务,先确定性能指标,在设计一个滤波器之前,首先根据工程实际需要确定滤波器的技术指标:边界频率 ,阻带最小衰减和通带最大衰减;(2)将数字滤波器的技术指标转换成模拟滤波器的技术指标,主要是边界频率, 的转换,(3)用模拟滤波器的设计方法得到模拟滤波器的传输函数;可借助巴特沃思(Butterworth)滤波器、切比雪夫(Chebyshev)滤波器等,这些滤波器都有严格的设计公式,现成的曲线和图表供设计人员使用;(4)映射实现:利用双线形变换法将模拟滤波器转换成数字滤波器;(5)用适当的软硬件技术实现。包括采用计算机软件、数字滤波器硬件或者软件结合。2 基于MATLAB的IIR数字滤波器设计MATLAB的意思是矩阵实验室,MATLAB语言在矩阵运算和数值运算等方面具有强大的功能,而且其界面非常直观、简洁,人机交互性好,目前它已经覆盖了几乎所有的科学研究和工程领域,如数字信号处理、数字图像处理、仿真技术、自动控制、神经网络、小波分析等。同样,用MATLAB语言也可以实现滤波器的设计,而且,MATLAB的信号处理工具箱中的FDATool就是专门进行滤波器设计和谱分析的,它使原来繁琐的程序设计简化成函数的调用,使滤波器的设计更为简便。2.1 IIR数字滤波器的双线性变换设计法这种方法设计方法的步骤是先设计模拟滤波器,再通过MATLAB函数将模拟滤波器转化为数字滤波器,在MATLAB中,可以通过系统设定的函数来直接实现双线性变换,既bilinear函数,其调用格式为:Bz,Az=bilinear(B,A,Fs); 设计举例1:使用双线形Z变换法设计一个低通数字滤波器,给定技术指标为=150Hz,=350Hz, =3dB, =30dB, 抽样频率=1000Hz fp=100;fs=300;Fs=1000; rp=3;rs=30; wp=2*pi*fp/Fs; ws=2*pi*fs/Fs; Fs=Fs/Fs; wap=tan(wp/2); was=tan(ws/2); n,wn=buttord(wap,was,rp,rs,s) z,p,k=buttap(n);bp,ap=zp2tf(z,p,k);bs,as=lp2lp(bp,ap,wap)bz,az=bilinear(bs,as,Fs/2)h,w=freqz(bz,az,256,Fs*1000); plot(w,abs(h); grid on;运行结果n = 3wn = 0.6207bs = 0.1323as = 1.0000 1.0191 0.5192 0.1323bz = 0.0495 0.1486 0.1486 0.0495az = 1.0000 -1.1619 0.6959 -0.1378图2 基于双现性变换法设计的数字滤波器的幅频相应曲线2.2 基于MATLAB函数直接设计IIR数字滤波器 MATLAB工具箱中提供了几个直接设计数字滤波器的函数,它们使IIR数字滤波器的设计变得更简单,这些函数有butter,cheby1,cheby2,ellip,Yule-Wale,prony,lpc,stmcb,以及infreqz,我们可由上述函数直接设计出巴特沃思,切比雪夫,椭圆等各种滤波器,下面以butter函数为例介绍基于巴特沃思法直接设计IIR数字滤波器。 在MATLAB中可利用butter函数直接设计各种形式(低通、高通、带通、带阻型)的数字滤波器它的语法为:b,a=butter(N,Wn)b,a=butter(N,Wn,ftype)z,p,k=butter()A,B,C,D=butter() 该函数有三种输出形式:传递函数形式、零极点增益形式及状态方程形式。b,a=butter(N,Wn)用于设计阶次为N,截止频率为Wn的低通数字滤波器,截止频率Wn是指滤波器幅度下降到-RpdB时的频率,它是归一化的频率,在0到1 之间取值,其中1对应于奈奎斯特频率即二分之一采样频率。它的返回值b,a分别表示阶次为N+1的数字低通滤波器系统传递函数的分子和分母多项式系数向量。系统传递函数的表达式可描述为:其中a(0)=1.b,a=butter(N,Wn,ftype)用于设计高通、带通或带阻滤波器,并由参数ftype确定滤波器的形式。(1)当ftype=high时,为高通滤波器,此时滤波器的阶次为N:(2)当ftype=band(默认值)时,为带通滤波器,此时Wn=wl,wh,返回的b,a所构成的滤波器是阶次为2N的带通滤波器,带通范围为wl<<wh(3)当ftype=stop时,为带阻滤波器,此时Wn=wl,wh,返回的b,a所构成的滤波器是阶次为2N的带阻滤波器,带阻范围为wl<<wh。根据函数返回参数数目的不同,可以得到滤波器的不同表达式,如果函数butter返回三个参数,那么将得到的返回值分别是滤波器的零点、极点和增益,如果函数返回四个参数,就可以得到滤波器的状态空间的表达式。 巴特沃思滤波器的阶次可以通过MATLAB中的buttord函数确定,该函数的调用格式为:N,Wn=buttord(Wp,Ws,Rp,Rs)其中Wp 表示通带截止频率,Ws表示阻带截止频率,Rp表示通带波纹系数(dB),Rs表示阻带波纹系数(dB),N表示巴特沃思滤波器的最小阶数,Wn为其截止频率。设计举例2:设计一个15阶的带通巴特沃思数字滤波器,带通频率为150Hz到300Hz采样频率为1000Hz,N=15;Wn=150,300/500;b,a=butter(N,Wn);freqz(b,a,128,1000)figure(2)y,t=impz(b,a,101);stem(t,y) 运行结果:图3 巴特沃思数字带通滤波器的幅度与相位特性曲线图4 巴特沃思数字带通滤波器的冲激响应2.3 利用MATLAB的FDATool工具实现IIR数字滤波器的设计FDATool(Filter Design & Analysis Tool)是MATLAB信号处理箱里专用的滤波器设计分析工具,MATLAB6.0以上的版本还专门增设了滤波器设计工具箱(Filter Design Toolbox)。FDATool可以设计几乎所有的常规滤波器,包括IIR和FIR的各种设计方法。它操作简单,方便灵活。FDATool界面共分为两大部分,一部分是Design Filter,在界面的下半部分,用来设置滤波器的设计参数;另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。IIR数字滤波器设计时的参数设置:(1)Filter Type(滤波器类型)选项,可设置为低通、高通、带通、带阻型滤波器(2)Design Method (设计方法)选项,可设置为巴特沃思、切比雪夫型、切比雪夫型、椭圆型滤波器设计、最大扁平、最小P阶范数等(3)Filter Order(滤波器阶数)选项,设定滤波器阶数,包括Specify Order(指定阶数)和Minimum Order(最小阶数)。设计者可直接在Specify Order中键入所要设计的滤波器的阶数(注意:对于N阶滤波器,Specify Order=N-1);如选择Minimum Order ,则MATLAB将根据设计者所选滤波器类型自动设定一个最小阶数。(4)Frequecy Specifications (频率参数)选项,可定义频带各参数,包括频率单位,采样频率,带通频率,带阻频率等,其中采样频率、带通频率、带阻频率可由设计者自己指定,频率单位可通过下拉框进行选择,主要包括归一化频率(0-1)、Hz、KHz、MHz和GHz。 (5)Magnitude Specifications(幅度参数)选项,可以定义幅度衰减情况,设计低通、高通滤波器时,需要指定通带、阻带频率; 设计带通滤波器时,需要指定阻带1、通带、阻带2的频率;设计带阻滤波器时,需要指定通带1、阻带、通带2的频率。设计举例3:设计一个低通数字滤波器,其通带波纹为0.8dB,通频带的截止频率为960Hz,通带衰减为-40dB,阻带衰减为-60dB,阻带截止频率为1200Hz,采样频率为4800Hz。利用FDATool工具设计的步骤如下:(1) 在MATLAB命令窗口下,执行“FDATool”命令,启动FDATool数字滤波器设计与分析工具,并切换到滤波器设计界面;(2) 在Filter Type(滤波器类型)选项中选择Lowpass(低通滤波器);(3) 在Design Method (设计方法)选项中选择Chebyshev型函数;(4) 在Filter Order(滤波器阶数)选项中选择Minimum Order(最小阶次);(5) 在Frequecy Specifications (频率参数)选项中指定带通频率为Fpass=960,带阻频率为Fstop=1200,采样频率Fs=4800;(6) 在Magnitude Specifications(幅度参数)选项中指定通带波纹Apass=0.8dB,阻带衰减Astop=60dB;(7) 单击Design Filter,即可设计出满足要求的IIR数字低通滤波器;(8) 将设计好的滤波器保存为filter_m.fda通过FDATool工具设计好的IIR低通滤波器的幅频响应曲线如图5所示图5 IIR低通滤波器的幅频响应曲线2.4 IIR数字滤波器的实际应用举例IIR滤波器因为它的特性而被广泛应用于数字通信领域,这里我们将介绍它在通信领域中的一种特殊应用,就是产生和恢复用于按键电话机的双音多频信号(DTMF),电话机产生两个音调,一个是低频音调,一个是高频音调,按键电话机的键盘如图6所示,图中的A、B、C、D为预留的待扩展键,当按下一个按键时,就会产生一对音频信号,其中高音频信号对行进行编码,低音频信号对列进行编码,这种双音多频信号对的单音可以在IIR滤波器上加一个脉冲函数来实现,在Z域,滤波器的输出是传输函数和输入信号的乘积,即又脉冲函数的Z变换为1,所以有,也就是说输出信号的频谱和滤波器的频率响应是一样的。单音信号由正弦波信号产生,所以滤波器的传输函数与正弦波信号的Z变换相同,即,式中的为待求音的数字频率。该音频发生器的差分方程为产生DTMF信号的音频发生器的结构如图7所示,高音频信号和低音频信号相加产生按键信号对于不同频率的音频信号只需改变滤波器的系数即可。 图6 44键的按键式电话简图 图7 按键式音频发生器结构图设计举例4:设计一个产生1336Hz的单音信号,采样频率为8KHz的滤波器,求出其脉冲响应,画出该滤波器的频率响应和冲激响应图。根据算出所需要的数字频率, = =2(1336/8000)=1.0493rad由得信号发生器的差分方程为:由此得到滤波器的频率响应为:利用MATLAB软件可以得到该系统的幅频响应和冲激响应,程序和结果如下:num=0.8671;den=1,-0.9964,1;num1,den1=impinvar(num,den);freqz(num1,den1);impz(num1,den1); 图8 滤波器的幅频响应 图9 滤波器的冲激响应3 IIR数字滤波器的DSP实现使用定点DSP实现IIR滤波器是不太容易的,因为IIR数字滤波器的反馈回路和CPU32比特的体系结构很容易引起计算溢出,虽然可以用调整输入数据的方法克服溢出问题,但定标的结果使得输出信号的幅度降低,因此还得在硬件上人为地增加一个末级运算放大器来放大输出信号。这样就会增加系统的结构和复杂性,下面我们通过IIR滤波器的结构来找出一种比较有效的方法,来较好的消除溢出问题。3.1 IIR滤波器的结构分析一个高阶的IIR滤波器可以简化为若干个二阶滤波器的级联,如下式所示: (3.1)其中n是滤波器的阶数(1) 式中的各二阶滤波器的传递函数可表示为: k=1,2, (3.2)这种IIR滤波器的输入和输出序列的延迟单元相互独立,即输入序列和输出序列各自有自己的延迟单元,我们称这种IIR数字滤波器的结构为直接型。滤波器的输出表达式为: (3.3) 图10 直接型二阶IIR滤波器的结构 图11 直接型二阶IIR滤波器的结构由结构图可以看出二阶IIR滤波器是由前向通道和反馈通道两部分级联构成,由于IIR滤波器是线性系统,所以级联的两部分可以交换位置而不会改变输出结果,交换之后由于延迟线的输出是相同的,所以可以从滤波器结构中消除一对延迟线,因此我们得到如下图所示的滤波器结构,这样交换以后的滤波器结构称为直接型结构。与直接型相比其优点是它节省了一半的延迟单元,但其他性能并没有改变多少,它同样需要在输入端调整信号幅度值以避免溢出,在输出端增加末端放大器以恢复输出信号。如果采用级联和转置相结合的方法,即利用改进的直接型IIR滤波器的结构来设计就能很好地解决溢出问题,由图12所示,通过依次复合一个滤波器的极点和下一级的二阶滤波器的零点构成了改进型的直接型IIR滤波器,前向通道表示为零点,反馈通道表示为极点,零点的运算结果是产生一个较小的值,而极点的运算结果会产生一个比较大的值,因此先用零点运算缩小输入信号,然后用极点运算予以放大,就会得到一个合适的输出值,也就消除溢出。软件的实现也是方便的,级联的部分采用重复的块结构,附加的软件也只是第一部分零点计算和最后一部分的极点计算。这样既节省了延迟单元又使溢出问题得到解决。图12 改进的直接型IIR滤波器的结构3.2 IIR滤波器的实现方法高阶IIR滤波器可以通过多个二阶IIR滤波器级联或并联实现,所以这里先介绍二阶IIR滤波器的实现方法, 3.2.1直接型IIR数字滤波器的实现方法由直接型的传递函数得出差分方程为:可在DARAM中开辟四个循环缓冲区,用来存放变量和系数,并采用循环缓冲区方式寻址。四个循环缓冲区的结构如图13所示。图13 循环缓冲区结构主要程序如下:start: SSBX FRCT ;设置小数乘法 STM #DX, AR1 ;AR1指向DX RPT #1 ;传送初始化数据X(n-2) X(n-1) MVPD #table,*AR1+ STM #DY,AR1 ;AR1指向DY RPT #1 ;传送初始化数据Y(n-2) Y(n-1) MVPD #table+2,*AR1+ STM #DB,AR1 ;AR1指向DB RPT #2 ;传送系数b2 b1 b0 MVPD #table+4,*AR1+ STM #DA,AR1 ;AR1指向DARPT #1 ;传送系数a2 a1 MVPD #table+7,*AR1+STM #DX+2,AR2 ;设定DX段指向AR2STM #DY+1,AR3 ;设定DY段指向AR3STM #DB+2,AR4 ;设定DB段指向AR4STM #DA+2,AR5 ;设定DA段指向AR5STM #3, BK ;设置缓冲区长度 STM #-1, AR0 ;设置变址寻址步长IIR: PORTR PA1,*AR2 ;输入数据x(n) MPY AR2+0%, AR4+0%,A ;计算前向通道A=b0*x(n) MAC AR2+0%, AR4+0%,A ;A=b0*x(n)+b1*x(n-1) MAC AR2,AR4+0%,A ;A=b0*x(n)+b1*x(n-1)+b1*x(n-2) MAC AR3+0%, AR5+0%,A ;计算反馈通道A+a1*y(n-1)A MAC AR3+0%, AR5+0%,A ; A=b0*x(n)+b1*x(n-1)+b1*x(n-2)+a1*y(n-1)+a2*y(n-2)MAR *AR5+0% ;修正AR5STH A,*AR3 ;保存y(n)BD IIR ;循环PORTW *AR3,PA0 ;输出y(n) .end3.2.2 直接型IIR数字滤波器的实现方法 我们可以由图11写出滤波器前向通道和反馈通道的差分方程。前向通道: (3.4) 反馈通道: (3.5)由(3.4)(3.5)两式可对二阶IIR滤波器进行编程,其中乘法-累加运算可采用操作数指令或双操作数指令,数据和系数可存放在DARAM中,如图14所示。图14 双操作数数据存放和系数表主要程序如下:SSBX FRCT ;设置小数乘法STM #w,AR2 ;AR2指向w STM #COFF+4,AR3 ;AR3指向a1单元MVMM AR3,AR1 ; a1单元地址保存于AR1STM #3,BK ; 设置循环缓冲区长度STM #-1, AR0 ;设置变址寻址步长IIR: PORTR PA1,*AR2 ;从PA1口输入数据x(n)LD *AR2+0%,16,A ;计算反馈通道,x(n)送入AHMAC *AR2+0%,AR3-,A ; A= x(n)+a1*w(n-1)MAC *AR2+0%,AR3-,A ; A= x(n)+a1*w(n-1)+a2w(n-2)STH A,*AR2 ;保存w(n)MPY * AR2+0%,AR3-,A ;计算向前通道,A=b0*w(n)MAC * AR2+0%,AR3-,A ;A=b0*w(n)+b1*w(n-1)MAC * AR2,AR3-,A ;A=b0*w(n)+b1*w(n-1)+b2*w(n-2)STM A,*AR2 ;保存y(n)MVMM AR1 ,AR3 ;指针AR3回位,指向a1单元BD IIR ;循环PORTW *AR2,PA0 ;从PA0口输出数据y(n)3.3软件开发环境Code ComposeStudio(CCS) 3.3.1 CCS 简介CCS (Code Composer Studio)是TI公司推出的用于开发DSP芯片的集成开发环境,它采用Windows风格界面,集编辑、编译、链接、软件仿真、硬件调试以及实时跟踪等功能于一体,极大地方便了DSP 芯片的开发与设计,是目前使用最为广泛的DSP开发环境之一。主要有以下特点:³ 项目管理和编辑工具,用来对项目进行创建、配置、生成和运行,支持通过makefile和命令行来生成可执行代码;³ 代码生成工具包括C编译器、汇编器和链接器等工具,另外CCS还提供了可视化的链接工具Visual Linker,帮助用户来调整代码和数据内存,实现程序内存的最优化;³ CCS提供了丰富的调试工具,支持多种模拟器和仿真版,支持在程序运行中探测存储器特定地址的值,用户可以方便地在PC和目标版上交换数据;³ 提供了丰富的函数库支持,如CSL、DSPLIB以及IMGLIB等;³ 支持实时内核DSP/BIOS,极大的便利了程序的开发,使开发者能够把精力集中在对算法的研究上。3.3.2 设计举例下面通过一个数字信号程序来说明在DSP程序的开发和调试过程及二阶IIR数字滤波器的DSP实现设计举例5:利用DSP实现一个低通滤波器使其能在方波中提取同频率正弦波,其中1KHZ的方波由DES5402PP评估板的模拟通道产生,然后利用信号输入通道对产生的方波进行低通滤波,得到一个1KHZ的正弦信号,并利用CCS图形显示工具显示输入和输出的波形。所用滤波器为二阶直接型结构的IIR低通滤波器,通带截止频率为1.2KHZ,阻带截止频率为2.8KHZ,通带衰减为-30dB,阻带衰减为-40dB,采样频率为25 KHZ。滤波器幅频特性及系数由MATLAB计算。(1) 利用MATLAB设计出所要实现的滤波器系数即幅频特性 >> ws=1200/12500ws =0.0960>> wp=2800/12500wp =0.2240>> n,wn=buttord(ws,wp,30,-45)n =2wn =0.0175>> b,a=butter(n,wn)b =0.0007 0.0015 0.0007a =1.0000 -1.9222 0.9251>> freqz(b,a,512,25000)求得系数为b =0.0007 0.0015 0.0007a =1.0000 -1.9222 0.9251(2)利用直接型结构编写IIR低通滤波器实现程序这里我们还是在DARAM中开辟四个循环缓冲区,用来存放变量和系数,并采用循环缓冲区方式寻址。四个循环缓冲区的结构如下图所示。其中循环区长度为3,步长为1,依次递减,输入数据由new_ad传送到寄存器A,再由寄存器A传送到缓冲区,程序中遇到系数需要定标的问题,这里我们采用分步计算的方法解决,即在程序中先定义 再使指针地址不变利用两次加法运算来实现,这样仅仅多用了一个机器周期就解决了问题,使所有系数保持了精度,实现IIR低通滤波器的程序片段如下:ld new_ad,-2,a stm # -1,ar0; stm # 3, bk stl a,*ar3 mpy *AR3+0%,*AR2+0%,A MAC *AR3+0%,*AR2+0%,A MAC *AR3,*AR2,A MAC *AR4+0%,*AR5+0%,A MAC *AR4,*AR5,A MAC *AR4+0%,*AR5+0%,AMAR *AR5+0%(3)利用CCS进行仿真开发, 然后将程序加载到TMS320C5402评估板上实时运行,并通过图形仿真工具观察输入输出信号的波形,以此实现设计要求。实现步骤入下:1. 连接试验箱,短接JP12,使得DES5402PP的信号输出通道与输入通道相连;2. 启动CCS,并新建工程文件,输入汇编程序并存为.asm文件,输入链接命令文件并存为.cmd文件,再依次将他们添加到工程文件中;3. 在asm文件中设置断点,以便观察到连续更新的滤波输出.在View选项中设置输入和输出的图形显示窗口;4. 使用Build选项完成编译、链接,然后将自动生成的.out文件装入DES5402PP板,最后运行程序,观察输入输出信号波形。运行结果如下图所示: (4)滤波结果分析:从运行结果可以看出,输出波形还不是正规的正弦波,有明显的直流分量和残余频率成分,有以下几个方面原因:³ IIR数字滤波器具有无限长的单位脉冲响应,在结构上存在反馈回路,具有递归性,因此IIR数字滤波器的输出不仅与输入有关而且与过去的输出有关,由于定点DSP和CPU的32bit结构,在运算的过程中会对序列进行舍入处理,这种有限字长的效应有时会引起寄生震荡;³ II