查找滤波器系数以使用其测量值对设备进行建模

信息处理 声音的 过滤器设计 系统识别 自回归模型
2022-02-19 03:33:18

我正在尝试实现具有相同频率的数字滤波器。现有演讲者的回应。我已经向扬声器馈送了音频正弦扫描并测量了扬声器输出,均为 48kHz。然后我执行输入(X)和输出(Y)的FFT,将绝对值逐点(absY./absX)除以得到传递函数/频率。响应(H)。

现在我想确定 FIR/IIR 滤波器的滤波器系数 B 和 A,这样我就可以对扬声器的响应进行数字建模。我知道我的传递函数在w的域中,滤波器系数是滤波器差分方程的系数。

这就是我所有的教科书理论似乎都崩溃的地方,我希望有人能澄清一下:

  1. 如果我理解正确,由于我的数据是离散的(以 48k 采样),我的数据是以“n”表示的。如果我执行 H 的ifft(这是复杂的),结果向量基本上是我的滤波器系数?
  2. Matlab 建议使用invfreqz来查找滤波器系数,给定一个复杂的频率响应。这个函数是否从w映射z域?如果是这样,我是否正确理解需要将 FFT 转换为 Z 域以导出其滤波器系数?
  3. 自回归滤波器适合哪些参数?例如:Yule_Walker 或 Levinson,或者如果我想运行梯度下降以适应过滤器?之间计算的误差是多少?
1个回答

我们可以将数字滤波器表示为:

  • 一个差分方程,在每个时间步关联输入和输出: 滤波器系数是在 FIR 的情况下,这种形式基本上是滤波器的实现方式(在离散时域中)。ny[n]=k=0K1b[k]x[nk]m=1Ma[m]y[nm]bkama[m]=0m
  • 通过差分方程的z变换,我们也可以将上述方程表示为:Y(z)=k=0K1b[k]zk1+m=1Ma[m]zmX(z)=H(z)X(z)
  • 频率响应就是在单位圆处计算的 z 变换(这通常简称为 )。H(z=ejω)H(ω)
  • 脉冲响应是的逆变换。通过与脉冲响应卷积,我们还可以得到滤波器的输出,如然而,仅对于 FIR 是有限的(显然,因此得名),我们可以很容易地检查它实际上只是系数H(ejω)y[n]=h[n]x[n]h[n]b[k].

我希望这可以帮助您了解全局。所以回答你的问题:

  1. 频率响应的 IFFT 产生脉冲响应。这仅在 FIR 滤波器的情况下直接对应于滤波器系数。如果您想将您的系统建模为 IIR,您可以使用一种算法,例如 MATLAB 的invfreqz中实现的那种算法,它本质上是一种优化,以使您的频率响应适合复杂的有理函数H(z).

  2. 是的,因为H(z)是滤波器差分方程的表示,其系数就是我们所说的滤波器系数。

无论如何,这些都是重要的基础知识,您可以从例如关于 DSP的经典书籍中学习。甚至MATLAB 文档(我确定您已经检查过)也是不错的资源。