一、实验目的

了解FIR滤波器的特点,掌握程序算法生成滤波器系数的方法,并实现FIR滤波器滤除高频信号,并在LCD上显示结果。

二、实验原理FIR滤波器

FIR(FiniteImpulseResponse)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。


其中,N-1为FIR的滤波器的阶数。


FIR滤波器特性

有限长单位冲激响应(FIR)滤波器有以下特点:

(1)系统的单位冲激响应h(n)在有限个n值处不为零。

(2)系统函数H(z)在|z|0处收敛,极点全部在z=0处(因果系统)。

FIR滤波器的设计

FIR滤波器的设计比较简单,就是要设计一个数字滤波器去逼近一个理想的低通滤波器。通常这个理想的低通滤波器在频域上是一个矩形窗。

在数字信号处理中,傅里叶变换用来求取时域信号的频率成分。因此,通过对特定频率幅度和相位的响应,求取傅里叶变换的逆变换(IDFT),就可以求出满足要求的数字滤波器。

设计FIR滤波器需要提供的参数:

(1)滤波器的类型:低通、高通、带通、带阻

(2)滤波器的采样频率

(3)滤波器的系数个数

(4)阻带衰减(dB)

(5)通带纹波(dB)

(6)过渡带带宽(Hz)

算法生成FIR滤波系数

本实验利用Kaiser窗设计一个FIR低通滤波器,有用信号为100Hz,需要滤掉的信号为450Hz。

Kaiser窗是一种应用广泛的可调节窗,它可以通过改变窗函数的形状来控制窗函数旁瓣的大小,从而在设计中可用滤波器的衰减指标来确定窗函数的形状。与其他窗相比,Kaiser窗最大的特点是可以同时调整主瓣和旁瓣宽度。Kaiser窗的定义如下:


其中n=1,2,⋯,N-1,N表示窗函数的总长度,I_0是第一类贝瑟尔函数。β是一个可调参数,可以通过改变β的值来调整窗函数的形状,从而达到不同的阻带衰减要求。

voidfilter_coefficient(intn,intband,floatfs,floatfln,floatfhn,floatwn,floatbeta,floath[])

n:滤波器阶数(偶数)

band:滤波器类型,1=低通,2=高通,3=带通,4=带阻

Fs:采样频率

fln:通带上边界频率(低通)、通带下边界频率(高通、带通、带阻)

fhn:无意义(低通、高通)、通带上边界频率(带通、带阻)

wn:滤波器窗体,1=retangular,2=taperedrectangular,3=triangular,4=Hanning,5=Hamming,6=Blackman,7=Kaiser

beta:Kaiser窗口的β参数(3β10)

h:滤波器系数

程序流程设计:

设计中首先要进行外设使能配置,然后进行LCD管脚复用配置和LCD中断配置,接着进行LCD显示和触摸的初始化。然后通过FIR滤波器系数算法生成滤波因子,最后产生带有噪声的原始信号并进行FIR滤波和FFT运算,将结果显示在LCD屏幕上,在循环中进行触摸检测,根据标志位判断显示时域或者频域波形。


数字信号处理库

DSPLIB包含优化的、C语言可调用的通用信号处理例程,用于计算密集型实时应用程序。调用这些例程的运行速度比直接用C语言编写的等效代码快得多。使用DSPLIB可以缩短应用程序开发时间。

DSPLIB3_4_0_0包括适用于C64x+或C66x或C674x处理器的Windows或Linux安装可执行文件。每个可执行文件安装一个组件包存储库、一个文档目录、一个Eclipse插件目录和一个扩展的组件目录结构,其中包含组件库、头文件和测试示例。

TMS320C6748处理器使用的是dsplib_c674x_3_4_0_0。


函数源码

FIR滤波函数

使用DSPLIB的库来进行FIR滤波。使用时,直接包含“DSPF_sp_fir_”文件即可。

API接口

voidDSPF_sp_fir_r2(constfloat*x,constfloat*h,float*restrictr,constintnh,constintnr);

程序使用DSPLIB的库来进行FIR滤波,调用的程序源码和使用说明可以安装DSPLIB后查看。调用的FIR滤波函数中:

第一个参数是指向大小为nr+nh-1的输入数组的指针。

第二个参数是指向大小为nh的系数数组的指针。

第三个参数是指向大小为nr的输出数组的指针。

第四个参数是系数个数。

第五个参数是输出样本数


FFT运算函数

使用DSPLIB的库来进行FFT运算。使用时,直接包含“DSPF_sp_”文件即可。

API接口

voidDSPF_sp_fftSPxSP(intN,float*ptr_x,float*ptr_w,float*ptr_y,unsignedchar*brev,intn_min,intoffset,intn_max);

程序使用DSPLIB的库来进行FFT运算,调用的程序源码和使用说明可以安装DSPLIB后查看。调用的FFT函数中:

第一个参数是样本中FFT的长度,

第二个参数是指向数据输入的指针。

第三个参数是指向复杂旋转因子的指针。

第四个参数是指向复杂输出数据的指针。

第五个参数是指向包含64个条目的位反转表的指针。如果样本的FFT长度可以表示为4的幂,

第六个参数是4,否则第六个参数是2。

第七个参数是从主FFT开始的样本中的子FFT偏移索引。

第八个参数是样本中主FFT的大小。


FFT逆变换函数

使用DSPLIB的库来进行FFT逆变换。使用时,直接包含“DSPF_sp_”文件即可。

API接口

voidDSPF_sp_ifftSPxSP(intN,float*ptr_x,float*ptr_w,float*ptr_y,

unsignedchar*brev,intn_min,intoffset,intn_max);

程序使用DSPLIB的库来进行FFT逆变换,调用的程序源码和使用说明可以安装DSPLIB后查看。调用的IFFT函数中:

第一个参数是样本中FFT的长度。

第二个参数是指向数据输入的指针。

第三个参数是指向复杂旋转因子的指针。

第四个参数是指向复杂输出数据的指针。

第五个参数是指向包含64个条目的位反转表的指针。如果样本的FFT长度可以表示为4的幂,

第六个参数是4,否则第六个参数是2。

第七个参数是从主FFT开始的复杂样本中的子FFT偏移索引。

第八个参数是样本中主FFT的大小。


三、操作现象实验设备


硬件连接

(1)连接仿真器和电脑的USB接口。

(2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。


软件操作

导入工程,选择Demo文件夹下的对应工程

编译工程,生成可执行文件

将CCS连接实验箱并加载程序

运行程序后,LCD会显示FIR滤波前后的时域波形,上方为100Hz信号与450Hz噪声组成的混合信号,下方为滤波后得到的结果(保留100Hz信号)。