硬件系统设计分析:FIR滤波器的设计

1、 设计任务
FIR低通滤波器的设计,要求通带频率15KHz,阻带频率16KHz,且阻带衰减大于80dB,通带波纹小于0.1dB,字长:16bits,适用于48KHz采样频率的音频信号。通过Matlab设计滤波器,需要对滤波器进行仿真;并自选硬件平台实现该滤波器,选取时需要对运算量进行分析。
2、 仿真
在仿真中需要计算滤波器系数,并自行生成信号源对滤波器效果进行仿真。
(1)FDATool设计法准备
FDATool(Filter Design & Analysis Tool)是MATLAB信号处理工具箱专用的滤波器设计分析工具,操作简单、灵活,可以采用多种方法设计FIR和IIR滤波器。在MATLAB命令窗口输入FDATool后回车就会弹出FDATool界面。

图1 Filter Design&Analysis Tool窗口
(2)Matlab设计滤波器,在MATLAB中的FDATool工具里设计好所需的滤波器。利用Matlab自带的Filter Design Toolbox模块设计目标滤波器,由于要求的衰减速率较大,过渡带较陡峭,采用Kaiser窗函数滤波器设计方法,查表得到beta系数在7.8以上可以较好地满足阻带衰减(最小衰减低于-80dB)、通带波纹(小于0.000868dB)的要求,以减少滤波器的阶数,但过大的beta参数令过渡带增宽,因此beta选取为8,在选取了一系列阶数进行测试后,本着最小阶数的原则,选取了123阶的kaiser窗fir滤波器。
滤波器的冲激系数要求采用16bits的定长,由于在DSP汇编语言中不能直接输入十进制小数,所以将该系数转化成16位定点形式。实验中的输入信号是三个频率分别为4000HZ、13000HZ和19000HZ的正弦波信号的叠加,图2和图3分别为输入信号经过滤波器前后的幅频特性。

                          图2 输入信号及其频率特性

图3 输入信号经过滤波器后的频率特性
从滤波器输入前后的幅频特性可以看出,原始输入信号的三个频率分别为4000HZ、13000HZ和19000HZ,经过FIR低通滤波器滤波后,19KHZ被滤掉,只剩下4000HZ和13000HZ频率的信号。
3、 滤波器实现平台选取
有限长冲击响应(FIR)滤波器因其具有线性相位、计算结果对有限字长效应不敏感等优点,在数字信号处理领域有着广泛的应用。本次设计的FIR滤波器是基于FPGA的串行乘法累加结构滤波器。用户通过单周期使能信号控制数据输入,N个周期后,一个样点的滤波完成,FIR电路输出数据,用输出使能信号同步。本次设计中滤波器的具体参数及频响曲线见表1。
                               表1 滤波器参数
滤波器类型 低通滤波器
输入字长 16bit
系数字长 16bit
输出字长 16bit
通带截止频率 15k
阻带截止频率 16k
阻带衰减 80dB
通带波纹 0.1dB
实验采用的是TI公司的TMS320C5402芯片。FIR的滤波实现就是进行一系列的乘加运算。在如下采用的DSP汇编程序实现过程中,完成一次滤波大约所需要的370个DSP时钟。TMS320C5402的主频为100M,那么完成一次滤波所需时间为370*10ns=3.7us。语音信号的采样率为48kHz,采样间隔为1/48kHz=21us,得出,因此可以进行实时滤波。
4、 滤波器硬件实现仿真与Matlab仿真对比分析
Code Composer Studio 简称CCS,是TI公司推出的为开发TMS320系列DSP软件的集成开发环境(IDE)。CCS工作在Windows操作系统下,类似与VC++的集成开发环境,采用图形接口界面,提供有编辑工具和工程管理工具。它将前面介绍的各种代码产生工具,诸如汇编器,连接器,C/CC++编辑器,建库工具等集成在了一个统一的开发平台中。CCS所集成的代码调试工具具有各种调试功能,包括了原TI公司提供的C源代码调试器和模拟器所具有的所有功能。能对TMS320系列DSP进行指令级的仿真和进行可视化的实时数据分析。此外,还提供了丰富的输入/输出库函数和行好处理的库函数,极大的方便了TMS320系列DSP软件的开发过程。
为了模拟滤波过程,在FIR汇编程序中,需要模拟滤波器的输入数据x(n)。其方法是首先采用MATLAB程序模拟出的输入数据,然后在汇编程序中通过.copy汇编命令将生成的文件拷贝到汇编程序中,作FIR滤波器的输入数据,使得在硬件仿真中,选用的信号源应该与Matlab中生成信号源一致。MATLAB语言程序运行后所生成的数据文件名为input.inc。根据h(n),带入相应的参数,或者应用在MATLAB中获得的N=241,系数分可见输入文件。由于TMS32054X是16位定点处理器,在进行汇编程序设计时,FIR滤波器系数需要采用Q15格式,即必须将上述系数转化位Q15定点式。
FIR滤波器汇编程序的连接器命令文件(文件名fir.cmd)。链接器(linker)是开发TMS320C54x软件必不可少的开发工具之一,它对段的功能有2个。其一是将由汇编器产生的COFF格式的0BJ文件作为输入块,当有多个文件进行链接时,将相应的段结合在一起产生可执行的输出模块;其二是重新定位,将输出的段分配到存储器中的指定地址。有2个链接器伪指令支持此功能。
     ①存储器(MEMORY)伪指令,用来定义目标系统的存储器空间。可将存储器的区域命名并指定起始地址和长度。
     ②段(SECTIONS)伪指令告诉链接器如何将输入段结合成输出段,并告诉链接器将输出段放在存储器的何处。子段可用来更精细地编排段。可用链接器的SECTIONS伪指令指定子段。若没有明显地指定子段,则子段将和具有相同基段名称的其他段结合在一起。
   根据TMS32054x DSP的硬件介绍及用户可用的程序存储器的地址范围,所写的连接器命令文件fir.cmd在附录文件夹中。
仿真,设置图形参数窗口分别设置不同的参数后,所得到的输入、输出在时域及频域时的波形和频谱如下图所示。

图4 图形属性对话框
(1)输入信号的时域和频域分别如下图所示:

图5 输入信号的时频特性

图6 输入信号的幅频特性
(2)经过FIR滤波器后的输出信号:

图7 经过FIR滤波器后的输出信号的时频特性

图8 经过FIR滤波器后的输出信号的幅频特性
然后将经过滤波后的数据从CCS中导出,储存在output.dat中。下图为输出信号yn在软硬件输出的仿真结果的比较。
图3 输入信号经过MATLAB滤波器后的频率特性

图9 输入信号经过CCS滤波器后的频率特性
5、 结论
本文通过一个设计实例,介绍了利用MATLAB实现FIR滤波器设计与滤波的方法,从仿真结果可以看出在一定程度上可以达到技术指标要求,而且方法简单、快捷,从实验室的角度减轻了工作量。由于MATLAB具有强大的接口功能,仿真后的结果可以很方便的移植到DSP的CCS器件中进行仿真。而这两种仿真方法从实验的角度上看基本是一致的,虽然控制精度的方法不尽相同,效果也不尽相同。
通过在CCS下所显示的滤波前与滤波后信号的时域和频域波形图可以看出:频率分别为4000HZ、14000HZ和19000HZ的三个频率信号,经过截止频率为16000HZ的FIR低通滤波器后,频率为19000HZ的被滤除,频率为5000HZ的被保留,基本上达到滤波效果。若将滤波器的阶数和数据精度都再提高一些,滤波效果将会更好。
DSP系统的应用程序开发属于软件设计范畴,但DSP系统的软件设计和软件调试却不能脱离硬件系统的支持。尽管CCS下安装有脱离硬件系统的软件模拟器(simulator),但软件模拟器具有速度慢、非实时性以及无法评价与硬件有关的程序优劣等缺点,无法在应用系统的软件设计和软件调试中完全取代硬件系统。它只能在无DSP硬件系统条件下,是用于调试一些简单的、无实时性要求或者不能涉及到I/O硬件程序的情况。因此,DSP应用程序开发不能脱离DSP硬件系统。所以,在设计程序之前必须对所涉及的硬件进行熟悉。
在编写程序过程中犯了不少低级错误,这很不应该。还有一些重大错误在同学的帮助下,查错与改正是最重要的一个过程。这次课程设计让我获益颇多。

你可能感兴趣的:(数据结构,编程,软件测试,matlab,vc++)