IIR 滤波器 - 计算相位响应

信息处理 过滤器 无限脉冲响应 DSP核心
2022-02-15 05:03:40

使用此处的 Audio EQ Cookbook 中的公式,很容易在 C++ 中实现双二阶 IIR 滤波器,即计算系数 b0、b1、b2、a0、a1、a2。

现在,我想计算给定 IIR 滤波器的相位响应。我已经阅读了许多关于 IIR 设计的论文,阅读了网站(DSP 指南),但找不到这样做的方法。在设计期间如何计算和指定 IIR 滤波器的相位?

3个回答

找到特定频率下双二阶的相位响应很简单。回想一下双二阶的传递函数:

H(z)=b0+b1z1+b2z2a0+a1z1+a2z2

系统的频率响应可以通过让z=ejω, 在哪里ω是范围内的归一化频率[π,π). 所以,它看起来像这样:

H(ejω)=b0+b1ejω+b2ej2ωa0+a1ejω+a2ej2ω

由于复杂的指数,值H(ejω)会很复杂。频率的相位响应ω只是得到的复数的相位角。同一频率下的幅值响应同样等于数的幅值。

您可能需要的唯一其他细节是如何到达ω:给定一个以采样率采样的信号fsHz,如果您想知道给定频率下的频率响应fHz,您可以使用上面的等式,并让:

ω=2πffs

您需要滤波器频率响应的参数。后者由

(1)H(ω)=b0+b1ejω+b2e2jωa0+a1ejω+a2e2jω

这是一个复杂的函数,它的参数可以通过使用函数来计算atan2(y,x),其中y的虚部是H(ω)并且x是真正的部分H(ω).

如果您将 IIR 的传递函数分解为其极点和零点的位置,您可以以图形方式求解(甚至直观地检查少量极点/零点)相位响应。在复平面中绕单位圆走,并将所有传递函数极点和零点的角度加/减到单位圆上的任何点,以获得该点表示的频率处的相位响应。