这些简单的过滤算法叫什么名字?

信息处理 低通滤波器 高通滤波器
2022-02-17 06:28:45

我在互联网上发现了一些非常简单的信号过滤器代码片段。不幸的是,没有太多信息可以支持它。使用谷歌我发现了类似的代码,但没有一个得到研究或文档的支持。我已经尝试过了,它对我的​​情况来说效果很好。

低通滤波器如下所示:

float RC = 1.0/(CUTOFF*2*3.14);
float dt = 1.0/SAMPLE_RATE;
float alpha = dt/(RC+dt);
float out[numSamples];
out[0] = in[0];
for(i=1; i<numSamples; i++){
    out[i] = out[i-1] + (alpha*(in[i] - out[i-1]));
}

高通滤波器看起来像这样:

float RC = 1.0/(CUTOFF*2*3.14);
float dt = 1.0/SAMPLE_RATE;
float alpha = RC/(RC + dt);
float out[numSamples];
out[0] = in[0];
for (i = 1; i<numSamples; i++){
    out[i] = alpha * (out[i-1] + in[i] - in[i-1]);
}

我想知道这些算法是否有名称或是谁发明了它们,以便我可以找到有关它们的更多信息。

2个回答

除了@MarcusMüller 的回答之外,您还可以在这种平滑信号的简单方法有技术术语吗?.

其他的答案我就不重写了,这里只给出几个方面:

这个滤波器非常有用和常见,它有几个名称,例如一阶指数平均低通滤波器、指数加权移动平均 (EWMA)历史也将其称为 布朗的简单(线性)指数平滑(有时称为SES)。上面的链接在 1956 年提到了这个过滤器,可能可以追溯到 1944 年。

 out[i] = out[i-1] + (alpha*(in[i] - out[i-1]));

来自维基百科关于低通滤波器的文章:

也就是说,这种简单 RC 低通滤波器的离散时间实现是指数加权移动平均

[…]

计算每个 n 个输出的循环可以重构为等价的:

for i from 1 to n
     y[i] := y[i-1] + α * (x[i] - y[i-1])

所以,是的,这是一个“指数加权移动平均线”。你可以称之为单极点 IIR 低通,衰减为α,或只是单击递归低通。

我很高兴能帮到你,这并不难!