我有两个四阶高通滤波器的 C 实现(fs = 16 kHz
, cut-off=100 Hz
,使用 Matlabbutter()
函数设计):
第一个。作为标准差分方程实现完成。
第二。作为两个 Biquad 部分的产品完成。
最终实现将是定点 DSP 代码。
为什么推荐双二阶实施?
我有两个四阶高通滤波器的 C 实现(fs = 16 kHz
, cut-off=100 Hz
,使用 Matlabbutter()
函数设计):
第一个。作为标准差分方程实现完成。
第二。作为两个 Biquad 部分的产品完成。
最终实现将是定点 DSP 代码。
为什么推荐双二阶实施?
假设浮点实现中的两个解是相同的,两个 BiQuad 是标准差分方程的因式分解。BiQuad 是更好的固定点方法,因为您隔离了两个二阶系统,并且由于涉及的量化,这样做更容易在变化下保持稳定。
有关这方面的更多详细信息,请参阅对这篇文章的回复:
和
https://en.wikipedia.org/wiki/Digital_biquad_filter
对于那些不太熟悉的人也请注意:级联两个滤波器在数学上与卷积它们的系数相同;将两个多项式相乘是通过对它们的系数进行卷积来完成的。滤波器的传递函数由多项式描述,所以它们都是一样的;一个四阶滤波器可以分解为两个二阶滤波器。