FIR滤波器实验
(一) 实验目的
熟悉数字滤波的基本原理和实现方法; 熟悉线性相位FIR数字滤波器特性;
通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。 (二)实验原理
FIR 滤波器算法的函数表达式:
short oflag = fir (DATA *x, DATA *h, DATA *r, DATA **dbuffer,ushort nh, ushort nx)
参数
(定义于 fir.asm)
x[nx] h[nh] r[nx] Dbuffer[nh] Nx Nh Oflag 指向输入向量,长度为 nx 指向系数向量,长度为 nx 例如:若 nh=3: 则:H = b0, b1, b2。 内存对齐:这是一个环行缓冲区,必须起始于k位边界上(就是说起始地址的k个LSB位必须为0)。其中k为大于log2(nh)的整数,具体解释见TMS320C54X DSP Reference Set 第5-15页5.5.3.4小节。 指向输出向量,长度为 nx 延迟缓冲区 在多重缓冲区方法中,该向量在进行第一次块操作时应该初始化为0;在后面的块操作中,延迟缓冲区保存着计算r所必须的输入值。 内存对齐:与h向量一致。 输入向量的长度 系数向量的长度 溢出标志 若 oflag = 1, 则运算中产生32位溢出 若 oflag = 0, 运算中未产生32位溢出 说明
使用系数向量h,计算实数的FIR滤波。输入数据存于向量x中。该例程使用一个缓冲内存d,来保存前一次的输入值。可以进行块滤波操作,或者单个数据滤波(nx=1)。 算法
nhr[j] =
h[k]x[jk]
k0 0 <=j <=nx
(三)实验步骤
(1) 用MATLAB设计软件设计出FIR数据文件,可采用随机光盘里WAVE文件夹中的数据文件。
(2)启动CCS,编写实验程序代码(可参考随机光盘中的alldsp4\\Simulator\\ hpassfir例程),进行编译并加载到DSP中。
(3)采用单步运行或执行到光标处,或全速运行,并打开波形观察窗口,跟踪观察其执行过程和滤波效果。
此处举例介绍随机光盘里的例程低通滤波器的程序运行,以及如何观察滤波效果:
①先打开项目,然后编译、加载实验程序,然后点击菜单debug—Go main就进入实验程序test.c(如图一)。
图 一 程序
②然后我们打开波形观察窗口,路径是View—Graph—Time/Frequence,将出现如下图二所示的图形属性框,因为本程序编写的是输入向量放在x中,而滤波后的输出向量放在r中,因此图形属性框应选择:在Display Type一栏中选择 Dual Time 项;Interleaved Data Sources一栏中选择No项; Start Address-upper display一栏中输入x,
Start Address-upper display 一栏中输入r; Acquistition Buffer Size 一栏中输入256;Display Data Size 一栏中输入256;DSP Data Type一栏中选择16-bit signed integer项;其他为默认值,然后点击“OK”就可打开图形观察窗口如图三。
图二 图形属性窗口
图三 输入数据波形
③ 输入数据文件,路径是File—Data—Load,将WAVE文件夹的“fwave1k+500.dat数据文件载入,如图四所示设置。然后就会出现如图三所示的输入波形窗口。
图四 加载数据设置
④运行程序,就可观察到输入数据经过FIR滤波后的效果,如图五所示。至此就可观察信号经过FIR滤波后的信号的改变。
图五 FIR 滤波后的输出数据
具体实验程序请参考:随机光盘里的lpassfir文件夹。
(六) 实验思考
根据上述低通FIR滤波器的设计方法设计出高通FIR滤波
实验十一 IIR滤波器实验
(一)实验目的
熟悉设计IIR数字滤波器的原理与方法; 掌握数字滤波器的计算机仿真方法;
通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。 (二)实验设备
计算机;DSP硬件仿真器;SZ-DSPD实验开发系统。 (三)实验硬件设置
在做实验之前,需要接通该实验所需的硬件电路,本实验为:先将实验箱右侧的船型开关往“I”方向打开电源,然后将系统主板左上角红色按钮按下接通+/-5V电源;SZ-5416D主控模块上的J7,J9短接;然后开始做实验,注意在做DSP实验时开始按SZ-5416D主控模块上的K1硬件复位后,实验中不要再按复位键,以免实验由于DSP复位而失败。 (四)实验原理
IIR滤波器的函数表达式:
short oflag = iirlat (DATA *x, DATA *h, DATA *r, DATA **d, int nh, int nx) 参数 (定义于iirlat.asm)
x [nx] h[nh] 指向长度为nx的输入向量。 指向lattice滤波系数向量,格式如下: h = b0, b1, b2, b3… 内存对齐:这是一个环行缓冲区,必须起始于k位边界上(就是说起始地址的k个LSB位必须为0)。其中k为大于log2(nh)的整数,具体解释见TMS320C54X DSP Reference Set 第5-15页5.5.3.4小节。 r[nx] 指向实数输出向量。(r 可以等于 x) d[nh] 指向延迟缓冲区。 在多重缓冲区方法中,该向量在进行第一次块操作时应该初始化为0;在后面的块操作中,延迟缓冲区保存着计算r所必须的输入值。 内存对齐:这是一个环行缓冲区,必须起始于k位边界上(就是说起始地址的k个LSB位必须为0)。其中k为大于log2(nh)的整数,具体解释见TMS320C54X DSP Reference Set 第5-15页5.5.3.4小节。 nx 输入输出向量长度 nh oflag 系数向量长度 溢出标志 若 oflag = 1, 则运算中产生32位溢出 若 oflag = 0, 运算中未产生32位溢出 说明
使用储存于向量h中的系数计算实IIR lattice滤波。输入数据存于向量x中,输出存于向量r中。该例程的延迟缓冲单元保存着继续进行操作所必须的数据,可以进行块滤波操作,也可以进行单个数据滤波(nx=1)。 算法
eN[n] = x[n]
ei-1[n] = ei[n] + hie’i-1[n-1], e’i[n] = -kie i-1 [n] + e’i-1[n-1], y[n] = e0[n] = e’0[n]
(五)实验步骤
(1)启动CCS,编写实验程序代码(可参考随机光盘中的alldsp4\\Simulator\\iirlat例程),进行编译并加载到DSP中。
(2)全速运行,并打开波形观察窗口,跟踪观察其执行过程和滤波效果。 此处举例介绍随机光盘里的例程LATTICE IIR滤波器的程序运行,以及如何观察滤波效果:
①先打开项目,然后编译、加载实验程序. ②全速运行实验程序,然后我们打开波形观察窗口,路径是View—Graph—Time/Frequence,将出现如下图一所示的图形属性框,因为本程序编写的是输入量放在0x2000中,而滤波后的输出向量放在地址0x100中,因此图形属性框显示输入数据波形是应选择如图二所示,当观察滤波后的波形是只需在图一的基础上在Start Address一栏中输入0x100,然后点击“OK”就可打开图形观察窗口如图二。
同样为了更直观的观察其滤波效果,可以观察信号的频谱图。方法是如打开波形观察窗口一样只需在图一所示的Display Type一栏中选择FFT Magnitude,然后在signal type一栏中选择real即可,得出的频谱图如图三所示,同样输出数据的波形也只需再修改一下地址0x100即可。
i = N, (N-1), …., 1 i = N, (N-1), …., 1
图一 图形属性窗口
图二 输入数据波形
图三 输入数据的FFT频谱图
图
四 输出数据波形
图五 输出数据的FFT频谱图
具体实验程序请参考:随机光盘里的文件夹。
(六) 实验思考
根据上述低通IIR滤波器的设计方法设计使用5个参数的IIR滤波器。