滤波器:对特定的频率或者特定频率以外的频率进行消除电路。从功能的角度,数字滤波器对输入离散信号的数字代码进行运算处理,以达到滤除频带外信号的目的。
有限冲激响应(FIR)滤波器的系统函数:
H ( z ) = y ( z ) / x ( z ) = a + b / z 1 + c / z 2 H(z)=y(z)/x(z)=a+b/z^1 +c/z^2 H(z)=y(z)/x(z)=a+b/z1+c/z2
y(z)和x(z)分别表输入和输出信号;a,b,c表示抽头系数;z^1 和z^2 表示延迟,其中z^1 表示延迟一个时钟周期,z^2 表示延迟2个时钟周期。
1.串行滤波器
- 对于输入序列X[n]的FIR滤波器,X[n]是输入数据流。各级的输入连接和输出连接被称为抽头,系数(b0,b1,…,bn)被称为抽头系数;
- M阶滤波器将会有M+1个抽头;
- 乘累加,即通过移位寄存器用每个时钟边沿处的数据流采样值乘以抽头系数,然后将它们累加形成输出Y[n];
- 数据的输入速率 = 系统时钟频率/滤波器长度(M+1),例如8阶滤波器,系统时钟为24MHz,则数据的输入频率(采样速率)为3MHz;
- 串行滤波器的数据处理速度较慢;
- 注意在8阶滤波器中,抽头系数是具有对称性的,b0=b8,b1=b7,…b3=b5;所以在乘累加时,可以先将输入信号相加,再与抽头系数相乘,减少乘法器电路的数量和芯片面积。
//位宽为4 bit的8阶滤波器
//组成:
// * 移位寄存器模块 :用于存储串行进入滤波器的数据
// * 乘加计算模块:用于进行滤波器FIR计算
//顶层模块
module FIR(data_out,data_in,clk,rst_n);
input [3:0]data_in;
input clk,rst_n;
output