用Matlab生成系数的C实现滤波器

时间:2012-04-24 15:20:57

标签: c signal-processing

首先,这是针对未来应用的一些研究。

我希望能够从Matlab过滤器设计和分析工具(FDATool)生成的c头文件中提取系数。

fdatool settings http://dl.dropbox.com/u/39710897/fdatool.png

我已经使用了FDATool的上述设置,然后生成了以下C头文件: http://dl.dropbox.com/u/39710897/fdacoefs.h

据我了解,我可以通过使用直接形式差分方程来实现此过滤器。 我相信方程为y(n)= b 0 x(n)+ b 1 x(n-1)+ b 2 x(n-2) - a 1 y(n-1) - a 2 y(n-2)

其中b 0 -b 2 系数为零,a 1 2 系数是极点。

这里的问题是我不完全确定头文件中的内容。这些信息似乎很难找到,这可能意味着我错过了一些非常明显的东西......

以下是我认为我能够提取的信息:

  • 过滤器由3个双二次(称为“双二次”)部分组成。
  • 第1部分的系数为:
    • B0:0.129355475306511
    • B1:-1.997004866600037
    • B2:1.000000000000000
    • A1:-1.995552659034729
    • A2:0.996141731739044
  • 第2部分的系数为:
    • B0:0.129355475306511
    • B1:-1.999969959259033
    • B2:1.000000000000000
    • A1:-1.997882604598999
    • A2:0.998035132884979
  • 第3部分的系数为:
    • B0:0.011426069773734
    • B1:0.000000000000000
    • B2:-1.000000000000000
    • A1:-1.993502736091614
    • A2:0.993802070617676

问题:

  1. 我的差分方程是否适合与头文件中的系数一起使用?
  2. 我从头文件中提取的信息是否正确?

1 个答案:

答案 0 :(得分:1)

查看屏幕截图,您似乎使用了直接表格 II 双二阶段(又名Canonical表格) - 请参阅维基百科页面:https://en.wikipedia.org/wiki/Digital_biquad_filter并注意直接表格II的差异方程式(你似乎正在使用上面的Direct Form I的差分方程式。

enter image description here

enter image description here

请注意,维基百科页面上的图表中没有标注w术语,但它们是中间的延迟术语。