IIR滤波器
IIR滤波器通常不用于音频信号处理、部分低端视频信号处理、数字中频的频带选择器中,典型的应用例子是现在手机中都用到的FM数字立体声收音芯片(FM / BT / WiFI三合一芯片)。
典型的IIR滤波器直接型实现结构如图 3-29 所示。
IIR滤波器可以认为是由两个FIR滤波器组合而成,一个是针对输入x(n)的FIR滤波器,一个是针对输出y(n)的FIR滤波器,只是该滤波器的所有计算结果将会反馈累积到y(n)上面。
IIR滤波器的硬件实现方案
对于IIR滤波器,通常看到的表达式如下:
将上述表达式转换为如下形式:
在实现IIR滤波器时,可以将分子、分母两个表达式拆分为两个FIR滤波器设计。第一个是,第二个FIR是
。将这两个滤波器的输出合并累加:
合并后的输出即为IIR滤波器输出。由于IIR滤波器的基本硬件实现与FIR滤波器非常相似,所以此处只给出几个基本实现模式,不再详细描述IIR滤波器硬件实现。
IIR滤波器的直接型实现结构
如图 3-30 与 3-31 所示
IIR滤波器Verilog举例
所实现IIR滤波器框图如 3-33 所示
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2024/10/06 22:52:19
// Design Name:
// Module Name: IIR
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module IIR #( parameter BIT_WIDTH = 16 ) (
input clk,
input syn_rst,
input signed [BIT_WIDTH-1:0] filter_in,
output signed [BIT_WIDTH-1:0] filter_out
);
localparam SUM_WIDTH = BIT_WIDTH + 2 ;
reg signed [SUM_WIDTH-1:0] filter_d1;
reg signed [SUM_WIDTH-1:0] filter_d2;
reg signed [SUM_WIDTH-1:0] filter_reg;
wire signed [SUM_WIDTH-1:0] sum_result;
always @(posedge clk ) begin
if (syn_rst)
begin
filter_d1 <= 0;
filter_d2 <= 0;
filter_reg <= 0;
end
else
begin
filter_reg <= { {2{filter_in[BIT_WIDTH]}} , filter_in} ;
filter_d1 <= filter_reg ;
filter_d2 <= filter_d1 ;
end
end
assign sum_result = filter_reg - (filter_d2>>3) + filter_d1 - (filter_d1>>2);
assign filter_out = sum_result[BIT_WIDTH-1:0] ;
endmodule
IIR滤波器的几个关键问题
IIR滤波器的优点
(1)高效率(结构简单、系数小、乘法操作较少,幅频特性精度很高)。
(2)可以解析控制,强制系统在指定位置为零点,从而保证该位置附近的频率响应非常低。
(3)有明确的模拟滤波器对应关系。
IIR滤波器的缺点
(1)由于输出反馈可能会破坏系统的稳定性,因此IIR滤波器设计需要考虑如何使系统保持稳定。
(2)由于IIR滤波器是非线性相位的,不同频率分量的信号经过FIR滤波器后延迟时间不一致。