首先,这是为了对 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
问题:
- 我的差分方程是否适合与头文件中的系数一起使用?
- 我从头文件中提取的信息是否正确?
最佳答案
查看屏幕截图,您似乎正在使用直接形式 II 双二阶截面(又名规范形式)- 参见维基百科页面:https://en.wikipedia.org/wiki/Digital_biquad_filter并注意直接形式 II 的差分方程(您似乎在使用上面直接形式 I 的差分方程)。
请注意,维基百科页面上的图表中未标记 w 项,但它们是中间的延迟项。
关于具有 Matlab 生成系数的滤波器的 C 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300959/