FIR滤波器设计
- 格式:doc
- 大小:327.00 KB
- 文档页数:17
. .. FIR带通滤波器的设计 一、 设计要求 试用DSP设计FIR滤波器,分别实现带通的功能,具体要求如下: (1) 滤波器的阶数≥5,截止频率自行选定,滤波系数用MATLAB确定。 (2)编制C54XDSP实现FIR滤波器的汇编源程序。 (3)用软件仿真器完成上述程序的模拟调试。 (4)以数据文件形式自行设定滤波器输入数据,以数据文件形式输出滤波结果,并与输入数据进行比较分析。用软件仿真器有关工具显示FIR滤波器的输入输出波形,以证明滤波器滤波性能。
二、 设计目的 (1)了解FIR滤波器的原理及使用方法; (2)了解使用MATLAB语言设计FIR滤波器的方法; (3)了解DSP对FIR滤波器的设计及汇编方法; (4)熟悉DSP的调试方法; 三、 FIR滤波器的基本原理
假设FIR滤波器的冲击响应为h(0)、h(1)、h(2) ……h(N-1),x(n)为滤波器的输入信号,则对应的滤波器输出由下列关系式确定,10()()()Nmynhmxnm FIR滤波器的传递函数为: . .. 10NiiiYzHzbzXz
直接由差分方程得出的实现结构如图1所示:
图1 横截型(直接型﹑卷积型) FIR滤波器的结构图 一般只要实现了上面的关系式就相当于将信号进行了滤波,从上面的关系式我们可以看出首先必须知道FIR滤波器的冲击响应系数h(0)、h(1)、h(2) ……h(N-1),这和知道FIR
滤波器的系数是一样的,我们必须在高级语言中将这些滤波器冲击响应的系数得到,在本次设计中我们使用MATLAB语言实现这一任务,然后将得到的冲击响应系数应用到DSP汇编语言的程序中,实现上述计算公式,就可以方便的实现FIR滤波器,完成实验的要求,达到滤波的效果。
四、 FIR滤波器的设计 FIR滤波器的设计方法主要有窗函数法和频率采样法。其中,窗函数法是最基本的方法。本次设计采用窗函数法。 一般是先给定所要求的理想滤波器频率响应()jdHe,由()jdHe导出()dhn,
我们知道,理想滤波器的冲击响应()dhn是无限长的非因果序列,而我们要设计
的是()dhn是有限长的FIR滤波器,所以要用有限长序列()dhn来逼近无限长序列
()dhn,设:
1()()2jjddhnHeed (3-1)
常用的方法是用有限长度的窗函数w(n)来截取即: ()()()dhnnhn (3-2) . .. 这里窗函数就是矩形序列RN(n),加窗以后对理想低通滤波器的频率响应将产生什么样的影响呢?根据在时域是相乘关系,在频域则是卷积关系: ()1()()[]2jjjdRHeHeWed
(3-3)
其中,为矩形窗谱,()jHe是FIR滤波器频率响应。 通过频域卷积过程看的幅度函数H(ω)的起伏现象,可知,加窗处理后,对理想矩形的频率响应产生以下几点影响: (1)使理想频率特性不连续点处边沿加宽,形成一个过渡带,其宽度等于窗的频率响应的主瓣宽度。 (2)在截止频率的两边的地方即过渡带的两边,出现最大的肩峰值,肩峰的两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度,而振荡的多少,则取决于旁瓣的多少。 (3)改变N,只能改变窗谱的主瓣宽度,改变ω的坐标比例以及改变的绝对值大小,但不能改变主瓣与旁瓣的相对比例(此比例由窗函数的形状决定)。 (4)对窗函数的要求: a、窗谱主瓣尽可能窄,以获取较陡的过渡带; b、尽量减小窗谱的最大旁瓣的相对幅度;即能量集中于主瓣,使肩峰和波纹减小,增大阻带的衰减。
五、 CCS的使用步骤。 1.创建源文件:(1)打开CCS选择File New Source File命令; (2)编写源代码并保存; (3)保存源程序名为:*.C,选择File Save; . .. (4) 创建其他源文件可重复上述步骤。 2.创建工程文件:(1)选择 Project New,创建一个新工程。 (2)点击Project选择Add file to project,添加所需文件。 (3)在弹出的对话框的下拉菜单中选择所需的源程序,点击打 开,即可添加到工程中。
3.设置编译与选项:(1)点击project选择Build options 在弹出的对话框中 设置相应的参数,一般按照默认参数即可:
4.工程编译与调试:(1)点击Project选择Build all,对工程进行编译,如正确则产生Out文件。若需修改程序,可以使用Project中的Build命令进行它只对修改部分做编译。(2)点击file中的load program,在弹出的对话框中载入Debug文件夹下的.out可执行打开。(3)装载完毕。
5.运行程序:在view菜单下选择Watch window选项来观测变量值。一次输入input和output来观测输入输出变量值。分别为滤波前的输入数据和滤波后的输出数据的首地址。在本次设计中,输入首地址为:0x00a6;输出首地址为:0x2400.
6.观察波形:在View菜单下拉选项Garph/time freguence.弹出一个话框。根据要求设计响应参数,来观测输入输出波形。
六、 带通滤波器设计指标 本次要设计一个FIR带通滤波器,其采样频率fs=15000Hz,通带为2000Hz~3000Hz,即保留频率在2000Hz~3000HzX围内的信号成分,幅度失真小于1dB;阻带边界频率为1000Hz和4000Hz,衰减小于30dB。同时,FIR滤波器的. .. 阶数N=20。 七、 设计思路及实现步骤 1.基于Matlab工具箱Signal中的fir1函数设计FIR带通滤波器,选择Hamming窗函数法,进而获取FIR带通滤波器的系数b,并保存为fir01.txt数据文件。这里FIR滤波器的阶数N=20。
程序格式为:b=fir1(N-1.[ws1,ws2],’style’); 实现代码如下: clear all fs=10000; %采样频率; fs=10000; %采样频率; fd1=1000; %阻带下截止频率 f1=2000; %通带下截止频率 f2=3000; %通带上截止频率 fd2=4000; %阻带下截止频率 w1=f1/10000*2; w2=f2/10000*2; %频率的归一化处理; b=fir1(19,[w1,w2],'bandpass'); fp=fopen('fir01.txt,'wt'); fprintf(fp,'.%20.4f\n',b); fclose(fp); . .. 获得的FIR带通滤波器的系数b如下: b= -0.0007 0.0031 0.0092 -0.0217 -0.0421 0.0696 0.1012 -0.1321 -0.1568 0.1706 0.1706 -0.1568 -0.1321 0.1012 0.0696 -0.0421 -0.0217 0.0092 0.0031 -0.0007 . .. 同时,通过Matlab中的滤波器设计工具,可以得到满足设计要求的FIR带通滤波器的频率特性和相位特性。 其中,参数设计如下: 阻带下截止频率Fstop1=1000HZ; 通带下截止频率Fass1=2000HZ; 通带上截止频率Fpass2=3000HZ; 阻带上截止频率Fstop2=4000HZ; 具体如下图所示:
FIR滤波器的频率特性 .
.. FIR滤波器的相位特性 2.建立DSP汇编程序的FIR滤波器系数文件 程序如下: clear all fs=10000; fstop1=1000; f1=2000; f2=3000; fstop2=4000; w1=f1/10000*2; w2=f2/10000*2; b=fir1(19,[w1,w2],'bandpass'); fp=fopen('firdata.inc','wt'); fprintf(fp,'.word%5.0f\n',b*32768); fclose(fp); 利用上述程序产生的firdata.inc文件,内容如下: . .. N .set 20 COFF_FIR: .sect “COFF_FIR” .word 101 .word 300 .word -711 .word-1379 .word 2281 .word 3317 .word-4330 .word-5139 .word 5589 .word 5589 .word-5139 .word-4330 .word 3317 .word 2281 .word-1379 .word -711 .word 300 .word 101 .word -24