FIR滤波器设计与DSP实现
- 格式:doc
- 大小:758.50 KB
- 文档页数:8
FIR滤波器设计与DSP实现
一、实验目的
1. 掌握数字滤波器的设计过程;
2. 了解FIR 的原理和特性;
3. 熟悉设计FIR 数字滤波器的原理和方法。
二、实验内容
1. 通过MATLAB 设计确定FIR 滤波器系数;
2. DSP 初始化;
3. A/D 采样;
4. FIR 运算,观察滤波前后的波型变化。
三、实验背景知识
1. 有限冲击响应数字滤波器(FIR)的基础理论
FIR 数字滤波器是一种非递归系统,其冲激响应h(n)是有限长序列,其差分方程表达式
为:,其中N 为FIR 滤波器的阶数。
在数字信号处理应用中往往需要设计线性相位的滤波器,FIR 滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性。
为了使滤波器满足线性相位条件,要求其单位脉冲响应h(n)为实序列,且满足偶对称或奇对称条件,即h(n)=h(N-1-n)或
h(n)=-h(N-1-n)。
这样,当N 为偶数时,偶对称线性相位FIR 滤波器的差分方程表达式为
由上可见,FIR 滤波器不断地对输入样本x(n)延时后,再做乘法累加算法,将滤波器结果y(n)输出。
因此,FIR 实际上是一种乘法累加运算。
而对于线性相位FIR 而言,利用线性相位FIR 滤波器系数的对称特性,可以采用结构精简的FIR 结构将乘法器数目减少一半。
2. 本实验中FIR 的算法公式:
四、实验程序的功能与结构说明
1.Filter 实验所包含文件
①. DEC5502_Filter.c:这是实验的主程序,包含了系统初始化,音频芯片各控制寄存
器的初始化, A/D 采样程序;
②. FIR_Filter 滤波子程序;
③. AIC.c:音频芯片各控制寄存器的初始化;
④. E2PROM_Function.c:包含对IIC 的各操作函数;
⑤. I2C.c:进行I2C 初始化;
⑥. mcbsp.c:配置mcbsp;
⑦. SEED_DEC5502.cmd: 声明了系统的存储器配置与程序各段的连接关系。
2.程序流程图
3.实验准备
首先将光盘下 03. Examples of Program \ 05. SEED-DTK5502 实验程序目录下的
3.4.1 FiR_filter 的文件夹拷贝到D:盘根目录下。
①. 将DSP 仿真器与计算机连接好;
②. 将DSP 仿真器的JTAG 插头与SEED-DEC5502 单元的J1 相连接;
③. 打开SEED-DTK5502 的电源。
观察SEED-DTK_MBoard 单元的+5V,+3.3V,
+15V,-15V 的电源指示灯以及SEED_DEC5502 的电源指示灯D2、D4 是否均
亮;若有不亮的,请断开电源,检查电源。
④. 用音频线连接SEED-DTK_MBoard 单元的J10 接口与SEED-DEC5502 单元的J5接口。
4.实验步骤
①.打开CCS,进入CCS 的操作环境;
②.装入DEC5502_FIR.pjt 工程文件,添加SEED_DEC5502.gel 文件,进行调试;
③. 打开DEC5502_Filter.c 文件,到第35 行修改SAMPLELONG 宏定义。
SAMPLELONG 是采样长度选择,有3 个选择1、2、3。
1 表示256+256,2 表示512+256,3 表示1024+256本实验中将其设置为3,如下图所示:
④. 修改完宏定义后,编译、连接生成DEC5502_Filter.out 文件,装载程序
DEC5502_Filter.out;
⑤. 本实验需要设置实验箱信号源。
通过液晶屏和键盘,设置信号源:当液晶屏上出现“通讯自检不成功,请复位系统”时,按下“Enter”键,进入“信号发生器设置”。
在“信号发生器设置”这一菜单下:
“通道”设为“0”;
“信号类型”可根据需要任意选择,本实验中设置为“带噪声的正弦波”
“信号频率”和“信号振幅”可在屏幕下方“有效输入”限定的范围内任意输入,建议振幅设为1000 左右,频率”设为300 左右;
“电压偏移”设为0;、
“信号发生器开关”设为“开启”(通过关闭到开启的转变,使其指示灯变亮)。
此时便有信号输入音频芯片AIC23 的输入端。
⑥打开DEC5502_Filter.c 文件,在第340行“while(1){”设置断点,与357 行
“fir_filter(DataBuffer,hfir,DDataBuffer,ORDER_FIR,SampleLong,ROUND_FIR)”设置断点。
⑦. 运行程序,程序停在第一个断点处,表明数据采集完成;继续运行程序,程序停在
第二个断点处,表明滤波完成。
可以观察收到的数据和显示的图像;DataBuffer 数组显示的是原始信号图像;DDataBuffer 数组显示的是滤波后信号图像。
可以修改信号源,继续执行,观察不同信号源的滤波结果。
其中图像显示设置对话框中Start adderss:起始地址;Acquisition Buffer Size:输入数据个数;Display Data Size:显示数据个数(注意:显示个数要与程序中宏定义的采样个数一致);DSP Data Type:数据类型;
本实验采用带噪声的正弦波为输入信号,对图像显示设置对话框设置和对应的图形显示如下:
滤波前:
滤波后
5.MATLAB的应用
实际上每种算法函数的开始处都已定义好进行FIR运算时所需的系数,这些系数是用Matlab 产生的。
下面具体介绍一下在Matlab 中如何设置各种参数,从而可 Matlab 中设置不同参数,实现不同的滤波效果
说明:实验箱提供的信号默认采样频率为48KHz,信号频率在前面实验中已设置为300Hz,幅值已设为为1000mv。
本实验中fir 具体参数设置如下:(为方便起见,采用MATLAB 执行格式,括弧内为说明)
ezFIR FILTER DESIGN SCRIPT
Input FIR Filter order(EVEN for BS and HP Filter) : 100(阶数)
Low Pass: 1
High Pass: 2
Band Pass: 3
Band Stop: 4
Select Any one of the above Response: 1(低通)
Hamming: 1
Hanning: 2
Bartlett : 3
Blackman: 4
Select Any one of the above window : 1(使用Hamming 窗)
Enter the Sampling frequency: 48000(采样频率)
Enter the corner frequency(Fc): 500(截止频率)
Enter the name of the file for coeff storage : filter.dat(生成dat 文件名)说明:MATLAB 源文件在在光盘下03. Examples of Program \06. MAtlab 文件夹中,文件名为ezFIR,只需运行它,按照以上说明输入参数(或根据具体需要输入所需参数后)即可得到FIR-FILTER 算法所需的系数。
经MATLAB运行后产生的参数如下(因为是对称的所以只有一半)
807,-64730,-64734,795,786,774,66296,197352,328405,524992,\787114,1114770,144242 4,1966685,2490945,3146276,3867142,4719080,5636553,6619563,\7799181,9044335,1035 5025,11796788,13304088,14942461,16580836,18350283,20185268,22085790,\24051850,2 6017911,27983973,29950038,31981640,33947707,35913776,37814310,39649310,41418774 ,\43122705,44695564,46137352,47513605,48758787,49807361,50724864,51511296,52101 120,52625407,\52887551
用新产生的参数,取代filter.h中原来的参数从新运行,仍选用带噪声的正弦波为输入信号,图像显示设置对话框设置同上,对应的图形显示如下:
时域(上图为滤波前,下图为滤波后):
频域(上图为滤波前,下图为滤波后):
五、实验心得
通过这次实验,我熟悉了CCS开发环境以及设计运行调试过程,认识到AIC23语音芯片和I2C协议以及MCBSP模块的各个工作原理以及三者之间的关系,学会对模块的初始化定义和编写的流程。
使我对DSP产生了浓厚的兴趣,激发了我学习DSP的积极性,从这次实验结果上来说,清晰的结果使我对书本上的知识有了更深入的理解。
该实验通过FIR滤波器滤波后把噪声滤除掉了,从时域图来看,原来的带有毛刺的音频波形滤波后变得平滑,从频域图来看,噪声所在的频域段基本上被滤除掉,对FIR滤波器的作用有了形象的理解。
通过MATLAB 自己设计FIR滤波器的参数,一方面对FIR滤波器的原理有了深入的理解,另一方面对各个参数在滤波效果上面的影响有了直观的印象。
最后,感谢老师的耐心指导!。