计算iir滤波器的w个系数

calculating w coefficients for iir filter

本文关键字:iir 滤波器 计算      更新时间:2023-10-16

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

#include "tmwtypes.h"
/* 
 * Expected path to tmwtypes.h 
 * C:Program Files (x86)MATLABR2013a Studentexternincludetmwtypes.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输出。如果有人对这些值应该用于进行所有这些转换的顺序有任何见解,这将是一个很大的帮助。

到目前为止,我开发并尝试的所有方法都无法生成有效的波形文件,头值都可以正确转换,但媒体播放器无法评估其他所有方法。

谢谢。

IIR过滤器是这样工作的:假设样本A和ceof的数组名为"c",则结果数组B为:B[i]=(A[i]*c[0])+(B[i-1]*c[1])+…+(B[n]*c[n])

请注意,只有最新的元素取自A。这更容易在原地完成,只需在移动时更新A即可。这些过滤系数非常剧烈,你确定你做对了吗?第一个也是对称的,这可能表明它是FIR滤波器。

在我看来,您有一个三极IIR滤波器,其系数为N阶实现(与一系列2阶部分相反)。由于这是带阻(或带通),多项式阶数是极点计数的两倍。

我不知道你所说的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/