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

标签 c signal-processing

首先,这是为了对 future 的应用进行一些研究。

我希望能够从 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. 我从头文件中提取的信息是否正确?

最佳答案

查看屏幕截图,您似乎正在使用直接形式 II 双二阶截面(又名规范形式)- 参见维基百科页面:https://en.wikipedia.org/wiki/Digital_biquad_filter并注意直接形式 II 的差分方程(您似乎在使用上面直接形式 I 的差分方程)。

enter image description here

enter image description here

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

关于具有 Matlab 生成系数的滤波器的 C 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300959/

相关文章:

c# - 实时获取吉他输入的频率

iphone - 一个优秀、简单、软调制解调器库的来源

c - 将 char[] 写入数组

c - 什么时候在 C 中需要转换 void 指针?

python - 从信号频谱图中提取峰

matlab - MatLab 中的矩形函数/方波

c - 使用相位累加器的 FM 合成

C Malloc 3D 数组

c - [curl lib]如何获得响应/重定向 url?

c - 为什么导入 fs.h 后变量的类型不完整 'struct file_operations'?