gpt4 book ai didi

c - 如何用C语言实现IIR滤波器?

转载 作者:行者123 更新时间:2023-11-30 17:29:25 32 4
gpt4 key购买 nike

我正在尝试用 C 实现简单的 IIR(直接形式 I)过滤器。

对于高通(10 Hz,256 个样本/秒),我这样做:

int Diff = Sample - Previous_Sample;

HP_Output = ((HP_Output + Diff) * 4) / 5;

对于低通(10 Hz @ 32 个样本/秒),我这样做:

int Diff = Sample - LP_Output ;

LP_Output = ((LP_Output + Diff) * 2) / 3;

现在我想知道:这两种实现在数学上都是正确的吗?

如果我想更改输入采样率(或滤波器频率),如何计算新因子?

最佳答案

高通输出对于一阶滤波器实现来说是正确的。来自 high-pass filter realization on wikipedia ,给定采样率fs和滤波器截止频率fc,所需因子alpha可以从关系式中获得:
enter image description here

其产量:
enter image description here

在提供的代码片段中,结果为 alpha ~ 4/5

对于一阶低通滤波器,您的代码本质上仅输出缩放后的输入样本(因为LP_Output + Diff == LP_Output + Sample - LP_Output == Sample)。相反,我期望:

LP_Output = LP_Output + Diff * 2 / 3;

现在,因子 alpha 可以类似地从基于 low-pass filter realization on wikipedia 的推导中获得成为:
enter image description here

同样,在提供的代码片段中,结果为 alpha ~ 2/3

最后,正如 Hans 在评论中指出的那样,对于高阶滤波器实现,您应该查看 IIR 滤波器设计工具来导出系数。

关于c - 如何用C语言实现IIR滤波器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640266/

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