FIR(Finite Impulse Response)Filter:有限冲激响应滤波器,又称为非递归线性滤波器。
FIR滤波器的冲击响应是一个值为滤波器抽头系数的采样序列,其脉冲响应由有限个采样值构成。长度(抽头数)为N+1、阶数为N的FIR系统的转移函数。
FIR滤波器是如何滤波的?
信号通过一个FIR滤波器其实就是信号与FIR滤波器的系数进行卷积(即移位相乘再累加)的过程。但是很多书上却喜欢用很复杂的文字和公式来描述这个本来很简单的概念,唯恐读者感受不到他们的书的高大上!
简单信号模型
低频信号:即在时域上变化慢的信号,如1 1 1 1 2 2 2 2,还有直流信号1 1 1 1 1 1 1
高频信号:即在时域上变化快的信号,如1 2 1 2 1 2 1 2
简单的滤波器模型
低通滤波器:1 1
高通滤波器:1 -1
用滤波器模型对高频或者低频信号进行卷积可以很明显的看出来滤波器对高低频信号的过滤。数字滤波器是在时间序列中工作的,接受一个离散的,有限长度的自序列,产生一个输出序列。
FIR滤波器可以用下图所示的z域功能模块图来描述,其中有z^-1的方框都代表了有一个时钟周期延时的寄存器单元,一个M阶的FIR滤波器有M+1个抽头,通过移位寄存器用每个时钟边沿n(时间下标)处的数据流采样值乘以抽头系数,并将他们加起来形成输出y fir{n}。
module FIR_gussian_lowpass
#(
parameter order=8//滤波器阶数N
)
( input data_in,clock,reset,
output data_out
);
parameter word_size_in=8,//输入数据位宽
word_size_out=2*word_size_in+2,//输出数据位宽
b0=8'd7,//滤波器抽头系数N+1个
b1=8'd17,
b2=8'd32,
b3=8'd46,
b4=8'd52,
b5=8'd46,
b6=8'd32,
b7=8'd17,
b8=8'd7;
reg [word_size_in-1:0] sample [1:order];
integer k;
always@(posedge clk or negedge reset)
begin
if(reset==1)
begin
for(k=1;k<=order;k=k+1)
sample[k] <= 0;
end
else
begin
sample[1] <= data_in;
for(k=2;k<=order;k=k+1)
sample[k] <= sample[k-1];
end
end
assign data_out=b0*data_in + b1*sample[1]+b2*sample[2]+b3*sample[3]+b4*sample[4]
+b5*sample[5]+b6*sample[6]+b7*sample[7]+b8*sample[8];
endmodule