1、课程设计说明书11 引言1.1 FIR 滤波器的介绍随着信息时代、数字世界的到来,数字信号处理已成为一门极其重要的学科和技术领域。数字信号处理是将信号以数字方式表示并处理的理论和技术,处理的内容包括对数字信号的滤波、变换、频谱分析、检测、估计、压缩、识别等一系列的加工处理。由于大规模集成电路以及数字计算机的飞速发展,加之从 60 年代末以来数字信号处理理论和技术的成熟和完善,用数字方法来处理信号,即数字信号处理,已逐渐取代模拟信号处理。数字信号处理技术的应用领域非常广泛,而数字滤波器的设计是数字信号处理中最重要的设计环节。数字滤波器分为 IIR 滤波器和 FIR 滤波器。本次课设使用的是 FI
2、R 滤波器。FIR 滤波器即有限长单位响应滤波器,是数字信号处理系统中最基本的原件。可以在保证任意频率特性的同时具有严格的线性相位特性。同时其单位冲激响应是有限长的,因而滤波器是稳定的系统。FIR 滤波器在通信、图像处理、模式识别等领域具有广泛的应用。FIR 滤波器误反馈回路,是一种稳定系统,可以设计成具有线性相位特性。设 FIR 滤波器的系数为 h(0)、h(1)h(N-1) ,X(n)表示滤波器在 n 时刻的输入,则那时刻的输出为:y(n)=h(0)*x(n)+h(1)*x(n-1)+h(N-1)*xn-(N-1)FIR 数字滤波器的结构图如图 1 所示:图 1 FIR 滤波器的结构图课程
3、设计说明书21.2 MATLAB 的介绍MATLAB 是由美国 mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,代表了当今国际科学计算软件的先进水平。主要应用于工程计算、信号处理与通讯、图像处理、信号检测、金融建模设计与分析、控制系统设计以及计算生物学等众多应用领域。MATLAB 是矩阵实验室(Matrix Laboratory )之意。除具备卓越的数值计算
4、能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB 的基本数据单位是矩阵,它的指令表达式与数学 ,工程中常用的形式十分相似,故用 MATLAB 来解算问题要比用 C,FORTRAN 等语言完相同的事情简捷得多。当前流行的 MATLAB 5.3/Simulink 3.0 包括拥有数百个内部函数的主包和三十几种工具包(Toolbox) 。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充 MATLAB 的符号计算,可视化建模仿真,文字处理及实时控制等功能。学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。除内部
5、函数外,所有 MATLAB 主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包。1.3 CCS 的介绍CCS 软件简介 CCS(Code Composer Studio)代码调试器是一种合成开发环境。 它是一种针对标准 TMS320 调试器接口的交互式方法。CCS 目前有CCS1.1, CCS1.2 和 CCS2.0 等三个不同时期的版本,又有 CC2000 ( 针对C2XX ),CCS5000 ( 针对 C54XX )和 CCS6000 (针对 C6X )三个不同的型号。我们所使用的是 CCS50002.2 的版本。CCS5000 具有以下特
6、性:TI 编译器的完全集成的环境:CCS5000 目标管理系统,内建编辑器,所有的调试和分析能力集成在一个Windows 环境中。对 C 和 DSP 汇编文件的目标管理:目标编辑器保持对所有文件及相关内容的跟踪。它只对最近一次编译中改变过的文件重新编译,以节省编译时间。课程设计说明书3高集成的编辑器调整 C 和 DSP 汇编代码:CCS5000 的内建编辑器支持 C 和汇编文件的动态语法加亮显示。使用户能很容易地阅读代码和当场发现语法错误。编辑和调试时的后台编辑:用户在使用编译器和汇编器时没有必要退出系统到 DOS 环境中,因为CCS5000 会自动将这些工具装载在它的环境中。在其窗口中,错误
7、会加亮显示 只要双击错误就可以直接到达出错处。在含有浮点并行调试管理器(PDM)的原有的 MS 窗口下支持多处理器CCS5000 在 Windows95 和 Windows-me 中支持多处理。PDM 允许将命令传播给所有的或所选择的处理器。在任何算法点观察信号的图形窗口探针:图形显示窗口使用户能够观察时域或频域内的信号。对于频域图,FFT 在主机内执行,这样就可以观察所感兴趣的部分而无须改变它的 DSP 代码。图显示也可以同探针连接,当前显示窗口被更新时,探针被指定,这样当代码执行到达该点时,就可以迅速地观察到信号。文件探针在算法处通过文件提取或加入信号或数据:CCS5000 允许用户从 P
8、C 机读或写信号流。而不是实时的读信号,这就可以用已知的例子来仿真算法。图形分析:CCS5000 的图形分析能力在其环境中是集成的。在后台(系统命令) 执行用户的 DOS 程序:用户可以执行 CCS5000 中的 DOS 程序,并将其输出以流水方式送到CCS5000 的输出窗口。且允许用户将应用程序集成到 CCS5000。技术状态观察窗口:CCS5000 的可视窗口允许用户进入 C 表达式及相关变量。结构、数组、指针都能很简单地递归扩展和减少,以便进入复杂结构。代数分解窗口:允许用户选择查看写成代数表达式的 C 格式,提高可读性 。目标 DSP 上的帮助:DSP 结构和寄存器上的在线帮助可以使
9、用户不必查看技术手册。用户扩展:扩展语言(GEL)使得用户可以将自己的菜单项加到 CCS5000 的菜单栏中课程设计说明书42 设计过程2.1 设计要求要求采用汇编语言针对 DSP 芯片设计一个 15 阶 FIR 低通滤波器,截止频率为 0.6(归一化后) 。要求 1.在 Matlab 中首先设计符合要求的滤波器,并得到滤波器的参数,并得到该滤波器的幅频特性和相频特性。2.编写汇编程序,在CCS 软件环境下编写 DSP 程序,分别用方波和正弦波验证滤波器的设计。 3.与Matlab 中设计的滤波器进行对比研究。2.2 设计流程2.2.1 FIR 滤波器参数的设计FIR 滤波器的参数用 Matl
10、ab 来设计,其程序为:N=15; %滤波器的阶数Wn=0.6 %滤波器的截止频率 b=fir1(N,Wn)freqz(b,512,1000) %滤波器的幅频特性和相频特性 其运行结果为:b=0.0034 -0.0018 -0.0108 0.0227,0.0165 -0.0997 0.0596 0.50820.5082 0.0596 -0.0977 0.01650.0277 -0.0108 -0.0018 0.0034滤波器的幅频特性和相频特性如图 2 和图 3 所示。图 2 滤波器的幅频特性图 3 滤波器的相频特性课程设计说明书52.2.2 输入方波的 Matlab 设计方波的 Matlab
11、 程序为:t=0:0.25:50;x=square(pi*t);plot(x);xout=x/max(x); %归一化 xto_ccs=round(32767*xout) fid=fopen(square.dat,w); %打开文件 fprintf(fid,1651 1 0 0 0n); %输出文件头 fprintf(fid,%dn,xto_ccs); %输出 fclose(fid); %关闭文件输出方波如 4 所示运行程序后会生成.dat 文件,为 CCS 的输入做准备。2.2.3 正弦叠加信号的 Matlab 设计正弦叠加信号的 Matlab 程序为:f11=500; f12=9000;
12、fs=20000; %采样频率 N=300 %数据个数 T=1/fs; %采样周期 n=-N/2:N/2; x11=0.5*sin(2*pi*f11*n*T); x12=0.5*sin(2*pi*f12*n*T); x_base=(x11+x12); subplot(1,2,1); plot(x_base); %正弦叠加信号的波形yff=abs(fft(x_base) df=n*(fs/N) 图 4 方波信号课程设计说明书6subplot(1,2,2);plot(df,yff); %正弦叠加信号的频谱xout=x_base/max(x_base); %归一化 xto_ccs=round(327
13、67*xout) fid=fopen(input.dat,w); %打开文件 fprintf(fid,1651 1 0 0 0n); %输出文件头 fprintf(fid,%dn,xto_ccs); %输出 fclose(fid);输出正弦叠加信号的波形如图 5 所示:运行程序后也会生成.dat 文件,为 CCS 做输出。2.2.4 FIR 滤波器的设计FIR 结构中的延迟 Z-1 在程序中实现是数据在存储器中的滑动,这对一个L 阶的 FIR 数字滤波器来说,就是要求在存储器中开辟一个 L 个样本并进行乘累加运算。这在 DSP 中可以用两种方法来实现该缓冲区。对于线性缓冲区来说,每当 DSP
14、读入一个样本后都将此样本向后移动,读完最后一个样本后,最前面的样本(最老的)被推出缓冲区,并输入最新的样本至缓冲区顶部。线性缓冲区的存储器延时可以由具有数据移动的 DMOV 指令来实现,它需要将缓冲区置于内部 DARAM 块中;对于循环缓冲区,每当输入新样本时,以新样本改写区中最老的样本,而缓冲区中的其他样本不需要其他样本移动。循环缓冲区可采用循环寻址技术来实现,它不需要必须定位在 DARAM 块中,但需要适当的缓冲区对准以满足循环寻址的要求。本次课设用的是循环寻址,下面主要介绍一下循环寻址的方法。循环缓冲实现延时的特点是:(1)实现 N 阶 FIR 数字滤波器时,需要在数据存储器中开辟一个称
15、为滑窗的 N 个单元的缓冲区,滑窗中存放最新的 N 个样本。(2)当每次输入新样本时以新的样本改写滑窗中最老的样本,而滑窗其他的数据不需要移动。图 5 正弦叠加信号课程设计说明书7(3)利用片内 BK(循环缓冲区长度)寄存器对滑窗进行间接寻址,循环缓冲区地址首位相邻。2.3 仿真结果2.3.1 Matlab 的仿真结果Matlab 中输入为方波信号信号时的输入输出信号波形如图 6 所示:Matlab 中输入信号为正弦叠加信号时的输入输出信号波形如图 7 所示:2.3.2 CCS 的仿真结果CCS 中方波信号和滤波后波形如图 8 所示:图 6 方波信号的输入输出波形图 7 正弦叠加信号的输入输出
16、波形图 8 方波波形及滤波后波形课程设计说明书8CCS 中方波信号的幅频、相频特性如图 9 所示:CCS 中方波信号滤波后的幅频、相频特性如图 10 所示:CCS 中正弦叠加信号与滤波后波形如图 11 所示:图 9 方波信号的幅频、相频特性图 10 方波信号滤波后的幅频、相频特性图 11 正弦叠加信号波形及滤波后波形图 10 方波信号滤波后的幅频、相频特性波形课程设计说明书9CCS 中正弦叠加信号的幅频、相频特性如图 12 所示:CCS 中正弦叠加信号滤波后的幅频、相频特性如图 13 所示:通过上图可看出当输入信号为方波时,输出信号基本为正弦波;当输入信号为叠加正弦波时,输出为低频正弦波。这说
17、明滤波器起到了较好的滤波效果,符合设计要求。通过 Matlab 仿真和 CCS 仿真滤波效果比较,DSP 程序的滤波效果要好于 Matlab 的滤波效果。图 12 正弦叠加信号的幅频、相频特性图 13 正弦叠加信号滤波后的幅频、相频特性课程设计说明书103 总结通过这次对 FIR 滤波器的设计,原来在课堂上学的理论知识变成了实践操作,我们对滤波器的原理和设计流程以及对 Matlab 和 CCS 的操作有了更深入的理解。书上虽然有 FIR 滤波器的设计,但对程序并不是太理解,导致程序总也调不出来。后来经过深入的研究,得知书上的程序使用 I/O 口做的,并不适合本次的课程设计。于是我们将 I/O
18、口改成了数据存储在内存中直接操作,终于把程序调出来。接下来一个难题就是输入数据的生成。通过查资料等方式查出用 Matlab 生成 .dat 文件的方法信号的频率和采样频率的选择也是一个令人头疼的问题。信号的基波要在截止频率内,二次以上谐波要在截止频率外,经过计算我们选择 500Hz 和 9000Hz 的信号叠加,采样频率 20000Hz。这样正好能把低频信号滤出。总之这次课设收获挺大!课程设计说明书11参考文献1 张卫宁 DSP 原理及应用教程北京:科学出版社, 2008.72 戴明桢TMS320C54X DSP 结构原理及应用 北京航空航天大学出版社,2007.83 程佩青 数字信号处理教程
19、 北京:清华大学出版社, 20014 高西全 丁玉美等 数字信号处理 北京:电子工业出版社, 20095 范寿康 DSP 技术与 DSP 芯片 北京:电子工业出版社课程设计说明书12附录DSP 汇编程序.title “fir.asm“.mmregs.global _mainHn: .usect “Hn“ , 16BUF: .usect “BUF“, 16Xn: .usect “Xn“, 200 Yn: .usect “Yn“, 215.dataHDATA:.word 34*32768/10000, -18*32768/10000,-108*32768/10000, 227*32768/1000
20、0.word 165*32768/10000, -997*32768/10000, 596*32768/10000, 5082*32768/10000.word 5082*32768/10000, 596*32768/10000, -977*32768/10000, 165*32768/10000.word 227*32768/10000, -108*32768/10000,-18*32768/10000, 34*32768/10000 .text_main: SSBX FRCTSTM #Hn,AR5 ;AR5 指向冲激响应RPT #15MVPD HDATA,*AR5+STM #BUF,AR4
21、 ;AR4 指向缓冲区间RPTZ A,#15STL A,*AR4+STM #Xn,AR3 ;AR3 指向输入STM #Yn,AR2 ;AR4 指向输出STM #(Hn+15),AR5 ;STM #(BUF+15),AR4STM -1,AR0LD #BUF,DPMVDD *AR3+,*AR4 ;向缓冲去送数STM #215,BRC课程设计说明书13RPTB #TABLE ;卷积算法STM #16,BKRPTZ A,#15MAC *AR4+0%,*AR5+0%,ASTH A,*AR2+ TABLE: MVDD *AR3+,*AR4+0%.endCMD 链接命令文件vectors.objfir.ob
22、j-o fir.out-m fir.mapMEMORYPAGE 0: EPROM: org=0E000H len=1000HVECS : org=0FF80H len=0080HPAGE 1: SARAM: org=0060H len=0040HDARAM: org=0101H len=1380HSECTIONS.text : EPROM PAGE 0.vectors : VECS PAGE 0.data : EPROM PAGE 0.bss : SARAM PAGE 1Hn : align(128) DARAM PAGE 1BUF : align(128) DARAM PAGE 1Xn : DARAM PAGE 1Yn : DARAM PAGE 1课程设计说明书14中断向量文件.title “vectors.asm“.ref _main.sect “.vectors“B _main.end