计算iir滤波器的w系数

时间:2013-11-24 18:52:15

标签: c++ matlab

我正在尝试将我在Matlab中设计的IIR滤波器实现为一个c ++程序,以滤除波形文件中不需要的信号。 Matlab中的fdatool生成了这个C头使用(它是一个带阻滤波器):

#include "tmwtypes.h"
/* 
 * Expected path to tmwtypes.h 
 * C:\Program Files (x86)\MATLAB\R2013a Student\extern\include\tmwtypes.h 
 */
const int al = 7;
const real64_T a[7] = {
     0.9915141178644,   -5.910578456199,    14.71918523779,   -19.60023964796,
      14.71918523779,   -5.910578456199,   0.9915141178644
};
const int bl = 7;
const real64_T b[7] = {
                   1,   -5.944230431733,    14.76096188047,   -19.60009655976,
      14.67733658492,   -5.877069568864,   0.9831002459245
};

经过几个小时的研究,我仍然无法弄清楚使用这些值来确定W值的正确方法,然后如何使用这些W值来正确计算我的Y输出。如果有人对订购有任何了解,应该使用这些值进行所有这些转换,这将是一个重要的帮助。

我开发并尝试过的所有方法都没有生成有效的wave文件,标题值全部正确转换,但媒体播放器无法评估其他所有方法。

感谢。

2 个答案:

答案 0 :(得分:0)

IIR过滤器以这种方式工作: 假设一个样本数组A和名为'c'的ceof数组,结果数组B将是: B [i] =(A [i] * c [0])+(B [i-1] * c [1])+ ... +(B [n] * c [n])< /强>

请注意,只有最新的元素来自A. 这样就地更容易,只需在移动时更新A. 这些过滤器系数非常暴力,你确定你得到了它们吗? 第一个也是对称的,可能表明它是一个FIR滤波器。

答案 1 :(得分:0)

在我看来,你有一个3极IIR滤波器,其系数为第N阶实现(与一系列二阶部分相对)。由于这是带阻(或带通),因此多项式阶数是极数的两倍。

我不确定W值的含义,除非您尝试评估此滤波器的频率响应。

要计算Y值,请按照此链接查看有关实施IIR过滤器的代码。请参阅第N个订单实现代码。

http://www.iowahills.com/A7ExampleCodePage.html

BTW:我认为这些是N阶系数并模拟它们。我在0.05 Pi处获得了10 dB的陷波。听起来不错?

,其中 B6 = 0.9915141178644 。 。 。 b0 = 0.9915141178644

a6 = 0.9831002459245 。 。 。 a0 = 1

此外,您可能希望发布如下问题:

https://dsp.stackexchange.com/