如何确定低通滤波器的ALPHA,平滑常数

时间:2014-05-13 01:25:06

标签: android smoothing lowpass-filter

有很多关于Android传感器数据的帖子非常噪音,并建议实施平滑算法,如低通滤波器。我正在读低通滤波器,我发现我必须计算平滑参数ALPHA。每个人都有不同的ALPHA。但是,我很困惑,因为wiki和Android开发者网站之间并不一致。

两个公式将产生两种不同的ALPHA。这让我很困惑。 哪个公式是正确的?每个人都可以给我解释一下吗?

提前感谢。

3 个答案:

答案 0 :(得分:3)

这里我使用时间常数'tau'

Alpha_A = dt / (dt + tau)
Alpha_B = tau / (tau + dt)

我们试试这个:

dt = 0.5, tau = 1;
Alpha_A = 1/3
Alpha_B = 2/3

因此

Alpha_A = 1 - Alpha_B

我认为这取决于他们如何定义等式。是吗:

New_Filtered = New_Raw * Alpha + Prev_Filtered * (1-Alpha)

New_Filtered = New_Raw * (1-Alpha) + Prev_Filtered * Alpha

IE是否直接处理原始数据,或以前过滤的数据?

他们有效地做同样的事情。

答案 1 :(得分:0)

低通滤波器应该允许低频并消除高频。所以维基百科版看起来对我来说 - 对于低频率,dT应该很大,对于高频率它应该很小。

但是,我真的建议在盲目实施过滤器之前聘请知道DSP的人或进行更多研究。这些东西非常复杂,简单的过滤器通常会产生负面影响。如果你成为一名电气工程师,你会花一年左右的时间学习这些。除非你使用图书馆,否则第一次自己做正确的几率非常低。然后风险变为使用错误类型的过滤器或将常量配置错误。

维基百科显示的过滤器是最简单的,并且副作用最多,仅供参考。

答案 2 :(得分:0)

维基百科网站上发布的内容是正确的,前提是最终用户希望在不需要过滤时将alpha(平滑常量)等于1。这是来自alpha的经典定义,这样当alpha = 1时,迭代过滤器的输出仍然是未过滤的。

if ( first_pass ) {
    Vn-1 = 0;
    first_pass = false;
} else {
    Vn+1 = Vn-1 + alpha * (Vn - Vn-1);
    Vn-1 = Vn+1;
    Vn = Vn+1;
}

注意,在上面的迭代算法中,当alpha = 1时,Vn + 1总是等于Vn。

我怀疑Android开发者网站上使用的alpha设计为在时间常数等于零时变为零。如果Android开发人员在没有需要过滤的情况下需要0来获得平滑常数,那么这可能是设计的。