点,由频率为1000Hz和2500Hz 的两个余弦波叠加而成
2、为了验证设计的可行性,自身录制一个语音片段,主要信号为低频成分,其中夹杂着高频成分的噪声。
在MATLAB中产生一个indata.dat文件供CCS输入,在matlab中输入的代码为:
x=wavread('D:\\matlab\\work\\XINZAO.wav'); %语音文件的路径 y=fft(x,1024);
plot(abs(y(1:1000))); %采样100个点 x1=round(1024*x);
fid=fopen('indata.dat','w'); %生成一个dat文件 fprintf(fid,'1651 1 00E2 1000\\n');
fprintf(fid,'%d\\n',x1); %输出
3.4 FIR滤波器的系统参数
在本设计中,使用MATLAB模拟产生合成信号,然后利用CCS进行滤波。
本次FIR滤波器设计的的参数选取指标如下:
采用37阶低通滤波器,汉明窗(Hamming Window)函数,通带截止频率为1500 Hz,阻带截止频率为2000 Hz,通带波纹为0.01,阻带波纹为0.1,采样频率为8000Hz。
在选项中选择或输入滤波器参数,然后点击”Design Filter”按钮完成滤波器设计。设计成功后的结果如图下图所示。在fdatool中,选择Targets->Code Composer Studio?IDE。在出现的对话框中选择输出文件类型为C.header file,输出系数类型为signed 16-bit integer。点击Generate按钮,选择路径,即可输出前一步设计出的FIR滤波器系数表。
错误!未指定书签。4 FIR滤波器的CCS设计与仿真
CCS是一种针对TMS320系列DSP的集成开发环境,在windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具,提供了配置、建立、调试、跟踪和分析程序的工具,从而完成编辑、编译、链接、调试和数据分析等工作。
在CCS中编写汇编语言程序,进行调试,实现FIR滤波的功能。本课程设计使用CCS开发应用程序的一般步骤为:
(1)创建一个工程项目文件fir2.h,用汇编语言编写处理主程序fir2.asm。另外根据板上的存储器配置方式,编写存储器配置文件fir.cmd文件,将MATLAB生成的fir2.h和indata.dat文件拷贝到工程文件夹下。
(2)编辑各类文件。使用CCS提供的集成编辑环境,对头文件、链接命令文件和源程序进行编辑。
(3)对工程项目进行编译,生成可执行文件。如出现语法错误,将在构建窗口中显示错误信息。用户可以根据显示信息定位错误信息,更改错误。
(4)下载程序、输入数据,执行程序,对结果和数据进行分析和算法评估。利用CCS提供的探测点、图形显示等工具,对运行结果、输出数据进行分析,评估算法性能。
4.1 CCS程序流程图
开始 DSP初始将滤波系数分别存放在存储单元bn中 从第L个数开始读入抽样值 抽样值存入在存储单元xn中 将bn中和xn中对应的值相乘累加L=L+1 输出结果
4.1.1 程序分析
FIR滤波器的DSP实现主要有线性缓冲区法和循环缓冲区法两种。 线性缓冲区法又称延迟线法。其特点:
(1)对于N级的FIR滤波器,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;
(2)从最老样本开始取数,每取一个样本后,将此样本向下移位; (3)读完最后一个样本后,输入最新样本存入缓冲区的顶部。 循环缓冲区法的特点如下:
(1)对于N级FIR滤波器,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;
(2)从最新样本开始取数;
(3)读完最后一个样本(最老样本)后,输入最新样本来代替最老样本,而其他数据位置不变;
(4)用片内BK(循环缓冲区长度)寄存器对缓冲区进行间接寻址,使循环缓冲区地址首尾相邻。
本次设计的FIR滤波器所采用的就是循环缓冲区法。
对DSP进行初始化,并设置好存储单元。为数字滤波作准备,将预先设计好的有N个抽头的FIR数字滤波器的冲激响应序列h(n)中的N个数值放入存储单元bn中,从indata数据存储段中读入抽样值,将抽样值逐一放入存储单元xn中。
主要循环程序如下:
STM #-1,AR0 RPTZ A,#N ;将ACC累加器清零,循环N次 MAC *AR2+0%,*AR3+0%,A STH A,*(yn) ;保存输出 MVKD *(yn),*AR5+ 将累加器清零,将存储单元bn与xn值对应相乘并累加到ACC中,循环N次将ACC中的值保存输出。再从indata数据存储段中读入一个新的数据,代替原来的最老样本 MVDD *AR4+,*AR2+0% ,重复循环直到数据全部处理完。 最后将处理完的数据输入到outdata数据存储段中。 4.1.2 数据输入
MATLAB辅助DSP 实现FIR滤波器滤波 ,其总体过程是为DSP 中编写处理程序提供滤波器系数。在MATLAB中利用滤波器设计、分析工具( FDATOOL) ,根据指定的滤波器性能快速设计一个FIR ,然后把滤波器系数以头文件形式导入CCS 中,头文件中包含MATLAB 辅助DSP 实现FIR 数字滤波器的阶数和系数数组,在MATLAB中调试、运行DSP 程序并显示、分析处理后的数据。
打开CCS IDE 中file的data加载初始化data数据,在Address中输入数据存放的起始地址indata,并设置数据栈长度。
4.1.3 运行程序仿真
运行程序,查看输入输出波形,修改相应参数进行调试。
在View的Graph中单击Time/frequency出现graph property dialog框。 将显示类型,图形名称,起始地址,抽样点数,数据类型等分别进行设置,输出各种波形。输出滤波前的信号时域波形。首先,设置如下图所示,输出滤波前的信号时域波形。
图 2 滤波前语音信号的时域Graph Property Dialog设置参数图
将Display Type改为FFT Magnitude 就可以看到滤波前信号的频谱,将Start Address改为outdata就可以看到滤波后信号的时域波形和频谱。
4.2 CCS仿真结果