1 项目背景 (源码下载,至简设计法辅导交流群:544453837)1.1 FIR和IIR滤波器 FIR(Finite Impulse Response)Filter:有限冲激响应滤波器,又称为非递归线性滤波器。 FIR滤波器,顾名思义,其脉冲响应由有限个采样值构成。长度(抽头数)为N、阶数为N−1的FIR系统的转移函数、差分方程和单位冲激响应分别如下列三式所示。
IIR(Infinite Impulse Response)Filter:无限冲激响应滤波器,又称为递归线性滤波器。 FIR相对与IIR来说,具有如下的优点: Ø 可以具备线性相位特性 线性相位的概念:如果滤波器的N个实值系数为对称或者反对称结构,该滤波器具有线性相位。 W(n)=±W(N−1−n)W(n)=±W(N−1−n) 线性相位的特性:通过线性相位滤波器的信号的所有频率部分具有相同的延迟量。
Ø 易于设计 但FIR也有自身的缺点:同样指标的滤波器,FIR需要更多的参数,即实现时消耗更多的计算单元,产生更大的延迟。
1.2 FIR滤波器的原理
信号通过一个FIR滤波器其实就是信号与FIR滤波器的系数进行卷积(即乘累加)的过程。我们以一个简单信号模型为例,了解一下FIR波形器的原理。 现在有三组信号,分别是: 信号1:低频信号,即在时域上变化慢的信号,其输入先后为1 1 1 1 2 2 2 2。 信号2:直流信号,其输入先后为1 1 1 1 1 1 1 。 信号3:高频信号,即在时域上变化快的信号,其输入先后为1 2 1 2 1 2 1 2 。 简单的滤波器模型 低通滤波器:1 1 信号1与低通滤波器进行卷积运算,其结果再除以2,得到如下数据:1 1 1 1.5 2 2 2。可以看到,低频信号经过低通滤波器后,各个点仍然保持了其形状,而且在1变成2时,还变平缓了。 信号2与低通滤波器进行卷积运算,其结果再除以2,得到如下数据:1 1 1 1 1 1 1。可以看到,直流信号与输入的信号完成相同。 信号3与低通滤波器进行卷积运算,其结果再除以2,得到如下数据:1.5 1.5 1.5 1.51.5 1.5 1.5。可以看到,高频信号经过低通滤波器后,已经完成消去了形状,变成了直流信号。 再考虑另一种滤波器模型,高通滤波器:1 -1 信号1与高通滤波器进行卷积运算,其结果再除以2,得到如下数据:0 0 0 -0.5 0 0 0。可以看到,低频信号经过高通滤波器后,信号变化基本上消失。 信号2与低通滤波器进行卷积运算,其结果再除以2,得到如下数据:0 0 0 0 0 0 0。可以看到,直流信号仍然是没有变化。 信号3与低通滤波器进行卷积运算,其结果再除以2,得到如下数据:-0.5 0.5 -0.5 0.5-0.5 0.5 -0.5 0.5。可以看到,高频信号已经仍然保持了变化的形状。 由这两个例子可以看出,FIR滤波器其实就是信号与FIR滤波器的系数进行卷积(即乘累加)的过程。通过调整滤波器系数、抽头个数,就可实现低通、高通、带通等滤波器。 1.3 FIR滤波器的设计1.3.1 matlab产生滤波器系数 打开matlab在其命令窗口输入fdatool 按下回车
调出FIR滤波器的设计界面。
在波形设计界面中,我们重要关注以下选项。 Response Type:选择可以选择滤波器的类型,可选择:lowpass低通滤波器、Highpass高通滤波器、bandpass带通滤波器、bandstop带阻滤波器。 Fs(采样频率): Fstop :信号截止频率 Fpass: Filter Order:用来设置滤波器的抽头个数。可以在specify order中输入个数,也可以选择Minimumorder,让系统计算满足要求的前提下的最小抽头个数。 点击Design Filter,就可以计算出抽头系数。 产生系数后点击file 菜单里的Export 将系数保存到工作区
点击export
点击之后打开工作区里的Num。
而后将下图第一列的数据复制粘贴到txt文件中。
注意复制后需在两个系数间插入逗号(英文输入状态下的的逗号)。
这样就得到滤波器的系数了。 1.3.2FPGA生成FIR IP核 打开工程后,在IP catalog这一界面中选择DSP下一目录中选择Filter 在选择选择 FIR II
首先在Fitter这一界面做如下操作
Filter Type Interpolation Factor: Decimation Factor: Max Number of channels:
|