【问题标题】:how to calculate biquad coefficients for 3rd order low/high pass filters如何计算三阶低/高通滤波器的双二阶系数
【发布时间】:2018-11-30 12:12:51
【问题描述】:

我找到了很多关于如何计算一阶和二阶低/高通滤波器的双二阶滤波器系数的参考资料,但没有找到更高阶的参考资料。

不过,我想为我的扬声器交叉程序实现 N 阶巴特沃斯滤波器。有人可以指出我需要的公式吗?

【问题讨论】:

  • 参见 this answer 以获取 5 阶示例。您在获取巴特沃斯多项式系数(可以通过 Matlab、python、链接小程序等获得)或分解多项式以获得其复数根方面是否有特殊困难?
  • 我写了一组 LADSPA 插件和一个 GUI 来参数化这些。每当交叉频率发生变化时,我需要在 C 代码中重新计算它们,因此 matlab 和 python 都出来了:/ 我需要它们在 python 中让 GUI 显示滤波器的频率响应。欢迎任何伪代码来源,我可以自己将它们改编为 C 和 python。
  • 这是我使用的二阶过滤器的示例:pastebin.com/1Wd1UPFS
  • FWIW 我仍在试图弄清楚如何计算该死的三阶滤波器的滤波器系数。我对 scipy.signal 中的 butter() 代码进行了逆向工程,简化了 N=3(3 阶)的情况,并尝试在 C 中实现它。这是初步结果:pastebin.com/sPVtgB1s 我还需要弄清楚什么在这种情况下如何模拟 numpy.poly() ,它采用多项式函数的零并返回它的系数。有人知道这些东西吗?

标签: algorithm signal-processing


【解决方案1】:

我来回答我自己的问题:

我分解了 scipy.signal.butter() 的代码,并在 N=3(三阶)的情况下用 C 实现了它。结果可以在https://gitlab.com/t-5/ladspa-t5-plugins/blob/master/src/coeffs.h 找到(参见函数 butter_3rd() 和两个辅助函数 poly() 和 convolve() )。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多