【问题标题】:C implementation of filter with Matlab generated coefficients带有 Matlab 生成系数的滤波器的 C 实现
【发布时间】:2012-04-24 15:20:57
【问题描述】:

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

我希望能够从由 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) = b0x(n) + b1x(n–1) + b2 x(n–2) – a1y(n–1) – a2y(n–2)

其中 b0-b2 系数是零,而 a1 和 a2 系数是两极。

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

这是我认为我已经能够提取的信息:

  • 过滤器由 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. 我从头文件中提取的信息是否正确?

【问题讨论】:

  • 我有一种独特的感觉,我几乎完全掌握了解决方案,但不知何故我看不到它......

标签: c signal-processing


【解决方案1】:

查看屏幕截图,您似乎正在使用 Direct Form II biquad section(aka Canonical Form) - 请参阅 Wikipedia 页面:https://en.wikipedia.org/wiki/Digital_biquad_filter 并注意 Direct Form II 的差分方程(您似乎使用上面直接形式 I 的差分方程)。

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

【讨论】:

  • 这似乎是问题所在......不敢相信我错过了这么明显的东西......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
相关资源
最近更新 更多