gpt4 book ai didi

c - 如何制作 IIR 滤波器?

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:52 27 4
gpt4 key购买 nike

我正在尝试制作 IIR 滤波器。我做了FIR滤波器,但是我觉得IIR比FIR难。

我认为 IIR 与 FIR 类似,但它让我感到困惑。

我觉得过滤器是这样的

FIR : y(n) = b0(x[n]) + ... +bM-1(x[n-M+1])

IIR : y(n) = {b0(x[n]) + ... +bM-1(x[n-M+1])} - {a1(y[n-1]) + ... +aN(y[n-N}

在这种情况下,a0 怎么样?是只有1吗?

y[n-1]..... 的部分是问题所在。我不知道怎么做。

这是我的代码。

for (n = 0; n < length; n++) {
coeffa = coeffs_A;
coeffb = coeffs_B;
inputp = &insamp[filterLength - 1 + n];
acc = 0;
bcc = 0;
for (k = 0; k < filterLength; k++) {
bcc += (*coeffb++) * (*inputp--);
}
for (k = 0; k < filterLength; k++) {
acc += (*coeffa++) * (////////);
}
output[n] = bcc-acc;
}

在这种情况下,filterLength 为 7,n 为 80

//////是我想知道的。

我想错了吗?

最佳答案

通常 IIR 滤波器是使用直接 form I 实现的或直接form II拓扑。每种形式都需要内存状态。这些内存状态将输出和输入的历史记录保存在其中。这使得 IIR 滤波器的实现变得更加简单。 gtkiostream implements a direct form II approach并且可能是有用的引用。

在解决您的问题时,我喜欢直接从输入和输出估计过滤器的方法,使用输入和输出缓冲区作为内存状态。由于系数总是对输出进行操作,因此使用输出作为缺失变量,如下所示:

acc += (*coeffa++) * output[n-k];

关于c - 如何制作 IIR 滤波器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50585322/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com