实验名称:FIR 低通滤波器的DSP 实现
一、实验目的
1、掌握用窗函数法设计FIR 数字滤波器的原理和方法。 2、熟悉线性相位FIR 数字滤波器的特性。
3、了解各种窗函数对数字滤波器的特性的影响。
二、实验设备
PC 兼容机一台(操作系统为Windows XP ),安装Code Composer Studio 2.2.1软件和MATLAB 6.5.1(含SIMULINK 工具包) 软件。
三、实验内容
FIR 低通滤波器的DSP 实现
1、实验要求:用窗口法设计线性相位的FIR 低通滤波器,截止频率为1kHz ,采样速率为8kHz 。窗口大小N=11,分别加矩形窗和海明窗。检验结果并计算峰值的位置和过渡带宽度。
2、对设计要求的理解
(1)要设计的滤波器为理想低通滤波器,便于FIR 低通滤波器的实现。 (2)FIR 滤波器满足线性相位应具有以下两个条件:一是h (n ) (n =0, 1, , N -1) 为
N -1
的偶对称或奇对称,即h (n ) =±h (N -1-n ) 。 2
故使用窗函数设计滤波器时,所加的窗都以原点对称,设计的理想滤波器的单位脉冲响应d(k)都以原点为偶对称或奇对称。同时保证了d(k)加窗平移后得到的h(n)以M=(N-1)/2对称,也就是保证了设计出的FIR 滤波器具有线性相位。 (3)低通滤波器的系数采用MATLAB 软件仿真工具产生,并把仿真产生的系数导出成头文件,运用到CCS 程序中。课题一中要求采用两种窗函数设计滤波器,两者仅仅是窗函数不同,相应的滤波器系数不同。运用MATLAB 产生两个窗函数对应的系数文件。同时对两种窗函数滤波效果进行对比。
(4)峰值和过滤带的宽度通过理论计算后,再和实际的信号波形进行对比。
3、窗函数法设计FIR 滤波器的思路
N -1
首先从窗口大小N 中计算出M ,其中M =;其次是利用离散时间傅里叶
2
实数;二是h(n)满足以n =
反变换,从d (ω) 中计算出滤波器系数d(k);最后考虑到滤波器的因果性,把d(k)延迟M 个单位得到因果的滤波器系数h(n),其中h (n ) =d (n -M ) , n =0, 1, , N -1。
四、实验原理
1、窗口法设计的滤波器系数的原理。 归一化截止频率ωc =
2πf c
。 , 其中f c 是截止频率,f s 是采样速率。
f s
低通滤波器的频率响应D (ω) 定义为:
⎧⎪1,
D (ω) =⎨
⎪⎩0,
ω≤ωc
-π≤ω
利用离散时间傅里叶反变换(IDTFT )我们得到时域信号:
d (k ) =⎰D (ω) e j ωk
-π
π
ωc ⎡e j ωk ⎤sin(ωc k ) d ωj ωk d ω=⎰1. e =⎢=-∞
2π2π⎣2πjk ⎦-ωπk
c
ωc
对于k=0的时候需要单独考虑,由极限性质可以得到d (0) =矩形窗函数w (n ) 在时域的定义为:
⎧1, n ≤M
w rec (n ) =⎨
⎩0, 其他
ωc
π
sin(ωc k )
k =-M , , 0, M (1)
πk
利用延时的性质把滤波器脉冲值响应移位成因果序列,所以FIR 低通滤波器
故滤波器的系数d ' (k ) =d (k ) w (k ) =
系数h (n ) =d ' (n -M ) =
sin[ωc (n -M )]
n =0, 1, N -1
π(n -M )
2、如采用同阶数的汉明窗,只需将w rec (n ) 改为
πn ⎧
0. 54-0. 46cos , -M ≤n ≤M ⎪
, w ham (n ) =⎨M
⎪⎩0, 其他
所以
h (n ) =w ham (n -M ) d (n -M )
(2) π(n -M ) ⎫sin[ωc (n -M )]⎛
= 0. 54-0. 46cos , n =0, 1, , N -1。⎪⋅
M π(n -M ) ⎝⎭
五、实验的设计
1、课题一的滤波器系数具体的求解
已知窗口大小N 为11,故M =
N -111-1
==5。归一化截止频率为:22
ωc =
2πf c 2π⨯1π
==, f s 84
sin[
由(1)式可得矩形窗设计的滤波器系数h (n ) =
(n -5)]n =0, 1, 10,即π(n -5)
π
h (0) =-0. 045, h (1) =0. 0, h (2) =0. 075,
可以得到:h (3) =0. 1592, h (4) =0. 2251, h (5) =0. 25, h (6) =0. 2251,
h (7) =0. 1592, h (8) =0. 075, h (9) =0. 0, h (10) =-0. 045
由(2)式可以得到汉明窗设计的滤波器系数为:
sin[(n -5)]
2π(n -5) h (n ) =d (n -M ) =.[0. 54-0. 46cos()]n =0, 1, N -1,计
π(n -5) 10
π
h (0) =-0. 0036, h (1) =0. 0, h (2) =0. 02985,
算的:h (3) =0. 1086, h (4) =0. 2053, h (5) =0. 25, h (6) =0. 2053,
h (7) =0. 1086, h (8) =0. 02985, h (9) =0. 0, h (10) =-0. 0036
2、使用MATLAB 仿真工具产生系数
实际在设计FIR 低通滤波器系数时采用MATLAB 仿真工具,具体操作如下: 第一步进入到MATLAB 软件Command Window 界面,输入fdatool 命令,进入到滤波器设计界面。
第二步在Filter Design 设计界面,按照课题要求选择FIR 滤波器,窗函数法,阶数为10,矩形窗。具体的界面如下图:
同时选择工具栏Analysis 中的Filter Coefficients命令即可以观察滤波
器系数。系数具体如下图:
通过观察可以发现:仿真产生的滤波器系数与直接计算的结果相同。
第三步滤波器系数的导出,在工具栏中选择Targets 下的Export to Code Composer Studio命令,即可以得到C 语言形式的头文件。该头文件命名为coeffRectangular.h, 供CCS 软件中的程序调用。
对于汉明窗,只要在Window 下拉菜单中选择Hamming 即可实现汉明窗FIR 低通滤波器的设计。其滤波器系数得到如下图:
可以得到系数文件coeffHamming.h 供程序调用。
3、低通滤波的实现
已知输入信号是x (n ) ,通过低通滤波器h (n ) 之后,输出信号y (n ) 为:
y (n ) =∑h (m ) x (n -m ) 。
m =0M
对于矩形窗的低通滤波器,其差分方程为:
y (n ) =-0. 045x (n ) +0. 075x (n -2) +0. 1592x (n -3) +0. 2251x (n -4) +0. 25x (n -5) +
0. 2251x (n -6) +0. 1592x (n -7) +0. 075x (n -8) -0. 045x (n -10)
同样对于汉明窗设计的FIR 低通滤波器,其差分方程为:
y (n ) =-0. 0036x (n ) +0. 02985x (n -2) +0. 1086x (n -3) +0. 2053x (n -4) +0. 25x (n -5) +0. 2053x (n -6) +0. 1086x (n -7) +0. 02985x (n -8) -0. 0036x (n -10)
4、程序流程图
(1)输入信号的产生
调用sin 、cos 函数生成新的输入信号fIn[0],作为fInput 。
(2)FIR 滤波器的实现
(3)输入信号通过低通滤波器的得到输出信号
5、程序代码
1、 矩形窗的系数文件coeffrectangular.h 代码
#define FIRNUMBER 11
const float fHn[FIRNUMBER] = {
-0.[1**********], 9.745429214e-018, 0.[1**********], 0.1591549367, 0.2250790745, 0.25, 0.2250790745, 0.1591549367, 0.[1**********], 9.745429214e-018, -0.[1**********] };
2、汉明窗系数文件coeffHamming.h 代码
#define FIRNUMBER 11 const float fHn[11] =
{
-0.[1**********]3, 1.635791641e-018, 0.[1**********], 0.1085672006, 0.2053053975, 0.25, 0.2053053975, 0.1085672006, 0.[1**********], 1.635791641e-018, -0.[1**********]3
};
3、 实验源代码(Fir.c )
#include "coeffrectangular.h" //矩形窗系数文件 //#include "coeffhamming.h" //汉明窗系数文件 #include #define SIGNAL1F 1000 #define SIGNAL2F 4500 #define SAMPLEF 10000 #define PI 3.1415926
extern const float fHn[11];
float InputWave(); //输入波形子程序 float FIR(); //滤波器的实现
float fXn[FIRNUMBER]={ 0.0 };//输入信号初始化 float fInput,fOutput; float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2; float f2PI; int i;
float fIn[256],fOut[256]; int nIn,nOut;
main() {
nIn=0; nOut=0;
f2PI=2*PI; fSignal1=0.0; fSignal2=PI*0.1;
fStepSignal1=2*PI/30; //低频成分 fStepSignal2=2*PI*1.4; //高频成分 while ( 1 ) {
fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256; fOutput=FIR();
fOut[nOut]=fOutput;
nOut++; /* break point */ if ( nOut>=256 ) {
nOut=0; } } }
float InputWave() {
for ( i=FIRNUMBER-1;i>0;i-- ) fXn[i]=fXn[i-1];
fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0; fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI; return(fXn[0]); }
float FIR() {
float fSum; fSum=0;
for ( i=0;i
fSum+=(fXn[i]*fHn[i]); // }
return(fSum); }
六、实验过程和结果分析
1、启动CCS 软件,打开Fir.pjt 编译并load program。
2、设置观察窗口
(1)输入信号:选择菜单view->Graph->Time/Frequency,进行如下设置:
(2)输出信号设置与输入信号设置基本一致,只要把Start Address改为&fOutput。
(3)观察低通滤波器的频率响应,设置如下图:
3、设置断点:在主函数有注释“break point”的语句设置软件断点。 4、输出波形图
(1)输入信号波形图:
(2)FIR 低通滤波器的系数
矩形窗系数的时域与频域波形
汉明窗系数的时域与频域波形
从上面两个矩形窗与汉明窗频率响应可以得到如下区别:汉明窗的过滤带比矩形窗要常,但是汉明窗的旁瓣相对矩形窗较小。
(3)输出信号波形
实验结果分析:
(1)从时域上看,输出信号基本实现了过滤了输入信号中的“毛刺”;输出信号基本是低频的正弦信号。
ππ
(2) 从频域上看,输入信号在和0. 8π有两个尖锐的峰值;通过截止频率为
154
π
的低通滤波器后,输出信号在0. 8π处的频率分量受到了很大的衰减,而处的
15
分量大小基本不变。可以说明低通滤波器设计是成功的。
2π2π4π4π==(3)矩形窗的过渡带宽度理论值为,汉明窗的过渡带宽度为,N 11N 11
从上述的滤波器观察基本相同。
七、实验小结
1、实验的特点 (1)本实验的滤波器系数的设计是通过MATLAB 工具仿真产生,并把仿真产生的滤波器系数导入到CCS 软件中作为程序的头文件。如果滤波器的阶数较大,使用MATLAB 系数仿真工具比代公式计算更为方便。
(2)两个窗口法设计线性相位的FIR 低通滤波器,在源程序中包含两种窗函数系数的头文件,方便对两种窗函数的实现。
(3)波形发生器子程序中由sin 和cos 函数得到波形值并返回,在主函数不断循环并计算新的波形值,构成低频和高频信号的叠加。在输入波形中高频成分的幅度是低频的1/6。
2、实验调试过程以及遇到的问题和解决办法
(1)本实验遇到的最大的问题是:如何使用MATLAB 软件对滤波器系数的导出。最初使用sptool 工具,发现其设计的滤波器要求与题目有所不同,最后通过网上查找资料使用fdatool 工具,可以更好、更方便的观察滤波器系数,并且可以产生供程序方便调用的头文件。
(2)在滤波器系数导出时有一个头文件"tmwtypes.h" ,通过分析发现他只是一个对数据类型的定义,如32bit floating point。可以不用这个头文件,直接修改fHn 数组的类型为float 。
(3)其次是对图形的观察存在一些问题,刚开始对Graph 菜单中每一行不是很明白。如观察输入信号时对Acquisition Buffer Size 这一项填写,通过分析发现输入信号fInput 是一个变量,观察时只需要一个内存单元,故这一项选项填写1。所有观察滤波器的冲击响应时观察fHn 时,这一项需要填写11。
3、实验体会和总结
(1)通过本次实验,掌握了用窗函数法设计FIR 数字滤波器的原理和方法。对于滤波器的系数计算采用MATLAB 仿真工具。熟悉了使用CCS 观察图象的方法。 (2)窗函数法设计时,从频率响应中对矩形窗和汉明窗设计的滤波器特性进行了对比,掌握并区分了两者的优缺点。
(3)本实验需要设计的输入信号是一个低频和高频信号的叠加,对参考例程进行分析,掌握了产生所需信号的方法。同时通过对观察的图形进行分析可以加强对滤波器实现的理解。
实验名称:FIR 低通滤波器的DSP 实现
一、实验目的
1、掌握用窗函数法设计FIR 数字滤波器的原理和方法。 2、熟悉线性相位FIR 数字滤波器的特性。
3、了解各种窗函数对数字滤波器的特性的影响。
二、实验设备
PC 兼容机一台(操作系统为Windows XP ),安装Code Composer Studio 2.2.1软件和MATLAB 6.5.1(含SIMULINK 工具包) 软件。
三、实验内容
FIR 低通滤波器的DSP 实现
1、实验要求:用窗口法设计线性相位的FIR 低通滤波器,截止频率为1kHz ,采样速率为8kHz 。窗口大小N=11,分别加矩形窗和海明窗。检验结果并计算峰值的位置和过渡带宽度。
2、对设计要求的理解
(1)要设计的滤波器为理想低通滤波器,便于FIR 低通滤波器的实现。 (2)FIR 滤波器满足线性相位应具有以下两个条件:一是h (n ) (n =0, 1, , N -1) 为
N -1
的偶对称或奇对称,即h (n ) =±h (N -1-n ) 。 2
故使用窗函数设计滤波器时,所加的窗都以原点对称,设计的理想滤波器的单位脉冲响应d(k)都以原点为偶对称或奇对称。同时保证了d(k)加窗平移后得到的h(n)以M=(N-1)/2对称,也就是保证了设计出的FIR 滤波器具有线性相位。 (3)低通滤波器的系数采用MATLAB 软件仿真工具产生,并把仿真产生的系数导出成头文件,运用到CCS 程序中。课题一中要求采用两种窗函数设计滤波器,两者仅仅是窗函数不同,相应的滤波器系数不同。运用MATLAB 产生两个窗函数对应的系数文件。同时对两种窗函数滤波效果进行对比。
(4)峰值和过滤带的宽度通过理论计算后,再和实际的信号波形进行对比。
3、窗函数法设计FIR 滤波器的思路
N -1
首先从窗口大小N 中计算出M ,其中M =;其次是利用离散时间傅里叶
2
实数;二是h(n)满足以n =
反变换,从d (ω) 中计算出滤波器系数d(k);最后考虑到滤波器的因果性,把d(k)延迟M 个单位得到因果的滤波器系数h(n),其中h (n ) =d (n -M ) , n =0, 1, , N -1。
四、实验原理
1、窗口法设计的滤波器系数的原理。 归一化截止频率ωc =
2πf c
。 , 其中f c 是截止频率,f s 是采样速率。
f s
低通滤波器的频率响应D (ω) 定义为:
⎧⎪1,
D (ω) =⎨
⎪⎩0,
ω≤ωc
-π≤ω
利用离散时间傅里叶反变换(IDTFT )我们得到时域信号:
d (k ) =⎰D (ω) e j ωk
-π
π
ωc ⎡e j ωk ⎤sin(ωc k ) d ωj ωk d ω=⎰1. e =⎢=-∞
2π2π⎣2πjk ⎦-ωπk
c
ωc
对于k=0的时候需要单独考虑,由极限性质可以得到d (0) =矩形窗函数w (n ) 在时域的定义为:
⎧1, n ≤M
w rec (n ) =⎨
⎩0, 其他
ωc
π
sin(ωc k )
k =-M , , 0, M (1)
πk
利用延时的性质把滤波器脉冲值响应移位成因果序列,所以FIR 低通滤波器
故滤波器的系数d ' (k ) =d (k ) w (k ) =
系数h (n ) =d ' (n -M ) =
sin[ωc (n -M )]
n =0, 1, N -1
π(n -M )
2、如采用同阶数的汉明窗,只需将w rec (n ) 改为
πn ⎧
0. 54-0. 46cos , -M ≤n ≤M ⎪
, w ham (n ) =⎨M
⎪⎩0, 其他
所以
h (n ) =w ham (n -M ) d (n -M )
(2) π(n -M ) ⎫sin[ωc (n -M )]⎛
= 0. 54-0. 46cos , n =0, 1, , N -1。⎪⋅
M π(n -M ) ⎝⎭
五、实验的设计
1、课题一的滤波器系数具体的求解
已知窗口大小N 为11,故M =
N -111-1
==5。归一化截止频率为:22
ωc =
2πf c 2π⨯1π
==, f s 84
sin[
由(1)式可得矩形窗设计的滤波器系数h (n ) =
(n -5)]n =0, 1, 10,即π(n -5)
π
h (0) =-0. 045, h (1) =0. 0, h (2) =0. 075,
可以得到:h (3) =0. 1592, h (4) =0. 2251, h (5) =0. 25, h (6) =0. 2251,
h (7) =0. 1592, h (8) =0. 075, h (9) =0. 0, h (10) =-0. 045
由(2)式可以得到汉明窗设计的滤波器系数为:
sin[(n -5)]
2π(n -5) h (n ) =d (n -M ) =.[0. 54-0. 46cos()]n =0, 1, N -1,计
π(n -5) 10
π
h (0) =-0. 0036, h (1) =0. 0, h (2) =0. 02985,
算的:h (3) =0. 1086, h (4) =0. 2053, h (5) =0. 25, h (6) =0. 2053,
h (7) =0. 1086, h (8) =0. 02985, h (9) =0. 0, h (10) =-0. 0036
2、使用MATLAB 仿真工具产生系数
实际在设计FIR 低通滤波器系数时采用MATLAB 仿真工具,具体操作如下: 第一步进入到MATLAB 软件Command Window 界面,输入fdatool 命令,进入到滤波器设计界面。
第二步在Filter Design 设计界面,按照课题要求选择FIR 滤波器,窗函数法,阶数为10,矩形窗。具体的界面如下图:
同时选择工具栏Analysis 中的Filter Coefficients命令即可以观察滤波
器系数。系数具体如下图:
通过观察可以发现:仿真产生的滤波器系数与直接计算的结果相同。
第三步滤波器系数的导出,在工具栏中选择Targets 下的Export to Code Composer Studio命令,即可以得到C 语言形式的头文件。该头文件命名为coeffRectangular.h, 供CCS 软件中的程序调用。
对于汉明窗,只要在Window 下拉菜单中选择Hamming 即可实现汉明窗FIR 低通滤波器的设计。其滤波器系数得到如下图:
可以得到系数文件coeffHamming.h 供程序调用。
3、低通滤波的实现
已知输入信号是x (n ) ,通过低通滤波器h (n ) 之后,输出信号y (n ) 为:
y (n ) =∑h (m ) x (n -m ) 。
m =0M
对于矩形窗的低通滤波器,其差分方程为:
y (n ) =-0. 045x (n ) +0. 075x (n -2) +0. 1592x (n -3) +0. 2251x (n -4) +0. 25x (n -5) +
0. 2251x (n -6) +0. 1592x (n -7) +0. 075x (n -8) -0. 045x (n -10)
同样对于汉明窗设计的FIR 低通滤波器,其差分方程为:
y (n ) =-0. 0036x (n ) +0. 02985x (n -2) +0. 1086x (n -3) +0. 2053x (n -4) +0. 25x (n -5) +0. 2053x (n -6) +0. 1086x (n -7) +0. 02985x (n -8) -0. 0036x (n -10)
4、程序流程图
(1)输入信号的产生
调用sin 、cos 函数生成新的输入信号fIn[0],作为fInput 。
(2)FIR 滤波器的实现
(3)输入信号通过低通滤波器的得到输出信号
5、程序代码
1、 矩形窗的系数文件coeffrectangular.h 代码
#define FIRNUMBER 11
const float fHn[FIRNUMBER] = {
-0.[1**********], 9.745429214e-018, 0.[1**********], 0.1591549367, 0.2250790745, 0.25, 0.2250790745, 0.1591549367, 0.[1**********], 9.745429214e-018, -0.[1**********] };
2、汉明窗系数文件coeffHamming.h 代码
#define FIRNUMBER 11 const float fHn[11] =
{
-0.[1**********]3, 1.635791641e-018, 0.[1**********], 0.1085672006, 0.2053053975, 0.25, 0.2053053975, 0.1085672006, 0.[1**********], 1.635791641e-018, -0.[1**********]3
};
3、 实验源代码(Fir.c )
#include "coeffrectangular.h" //矩形窗系数文件 //#include "coeffhamming.h" //汉明窗系数文件 #include #define SIGNAL1F 1000 #define SIGNAL2F 4500 #define SAMPLEF 10000 #define PI 3.1415926
extern const float fHn[11];
float InputWave(); //输入波形子程序 float FIR(); //滤波器的实现
float fXn[FIRNUMBER]={ 0.0 };//输入信号初始化 float fInput,fOutput; float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2; float f2PI; int i;
float fIn[256],fOut[256]; int nIn,nOut;
main() {
nIn=0; nOut=0;
f2PI=2*PI; fSignal1=0.0; fSignal2=PI*0.1;
fStepSignal1=2*PI/30; //低频成分 fStepSignal2=2*PI*1.4; //高频成分 while ( 1 ) {
fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256; fOutput=FIR();
fOut[nOut]=fOutput;
nOut++; /* break point */ if ( nOut>=256 ) {
nOut=0; } } }
float InputWave() {
for ( i=FIRNUMBER-1;i>0;i-- ) fXn[i]=fXn[i-1];
fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0; fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI; return(fXn[0]); }
float FIR() {
float fSum; fSum=0;
for ( i=0;i
fSum+=(fXn[i]*fHn[i]); // }
return(fSum); }
六、实验过程和结果分析
1、启动CCS 软件,打开Fir.pjt 编译并load program。
2、设置观察窗口
(1)输入信号:选择菜单view->Graph->Time/Frequency,进行如下设置:
(2)输出信号设置与输入信号设置基本一致,只要把Start Address改为&fOutput。
(3)观察低通滤波器的频率响应,设置如下图:
3、设置断点:在主函数有注释“break point”的语句设置软件断点。 4、输出波形图
(1)输入信号波形图:
(2)FIR 低通滤波器的系数
矩形窗系数的时域与频域波形
汉明窗系数的时域与频域波形
从上面两个矩形窗与汉明窗频率响应可以得到如下区别:汉明窗的过滤带比矩形窗要常,但是汉明窗的旁瓣相对矩形窗较小。
(3)输出信号波形
实验结果分析:
(1)从时域上看,输出信号基本实现了过滤了输入信号中的“毛刺”;输出信号基本是低频的正弦信号。
ππ
(2) 从频域上看,输入信号在和0. 8π有两个尖锐的峰值;通过截止频率为
154
π
的低通滤波器后,输出信号在0. 8π处的频率分量受到了很大的衰减,而处的
15
分量大小基本不变。可以说明低通滤波器设计是成功的。
2π2π4π4π==(3)矩形窗的过渡带宽度理论值为,汉明窗的过渡带宽度为,N 11N 11
从上述的滤波器观察基本相同。
七、实验小结
1、实验的特点 (1)本实验的滤波器系数的设计是通过MATLAB 工具仿真产生,并把仿真产生的滤波器系数导入到CCS 软件中作为程序的头文件。如果滤波器的阶数较大,使用MATLAB 系数仿真工具比代公式计算更为方便。
(2)两个窗口法设计线性相位的FIR 低通滤波器,在源程序中包含两种窗函数系数的头文件,方便对两种窗函数的实现。
(3)波形发生器子程序中由sin 和cos 函数得到波形值并返回,在主函数不断循环并计算新的波形值,构成低频和高频信号的叠加。在输入波形中高频成分的幅度是低频的1/6。
2、实验调试过程以及遇到的问题和解决办法
(1)本实验遇到的最大的问题是:如何使用MATLAB 软件对滤波器系数的导出。最初使用sptool 工具,发现其设计的滤波器要求与题目有所不同,最后通过网上查找资料使用fdatool 工具,可以更好、更方便的观察滤波器系数,并且可以产生供程序方便调用的头文件。
(2)在滤波器系数导出时有一个头文件"tmwtypes.h" ,通过分析发现他只是一个对数据类型的定义,如32bit floating point。可以不用这个头文件,直接修改fHn 数组的类型为float 。
(3)其次是对图形的观察存在一些问题,刚开始对Graph 菜单中每一行不是很明白。如观察输入信号时对Acquisition Buffer Size 这一项填写,通过分析发现输入信号fInput 是一个变量,观察时只需要一个内存单元,故这一项选项填写1。所有观察滤波器的冲击响应时观察fHn 时,这一项需要填写11。
3、实验体会和总结
(1)通过本次实验,掌握了用窗函数法设计FIR 数字滤波器的原理和方法。对于滤波器的系数计算采用MATLAB 仿真工具。熟悉了使用CCS 观察图象的方法。 (2)窗函数法设计时,从频率响应中对矩形窗和汉明窗设计的滤波器特性进行了对比,掌握并区分了两者的优缺点。
(3)本实验需要设计的输入信号是一个低频和高频信号的叠加,对参考例程进行分析,掌握了产生所需信号的方法。同时通过对观察的图形进行分析可以加强对滤波器实现的理解。