java - 如何对角度值进行低通滤波

标签 java math geometry filtering computational-geometry

我正在从传感器接收以弧度为单位的角度更新,并且我想通过低通滤波功能传递它们,以便由于噪音而稍微平滑它们。

我的低通滤波器函数是这样的

protected void lowPass(float alpha, double[] input, double[] output) {
    for (int i = 0; i < input.length; i++) {
        output[i] = alpha * output[i] + (1 - alpha) * input[i];
    }
}

而且它对大多数部分都非常有效。

问题是有时角度“走完整个圈”,例如从 2π 到 0、0 到 -2π 等等。当然这会导致“不正确”的输出,因为过滤器函数将 2π 和 0 简单地视为 6.28 和 0.0。

我如何实现可以正确处理这些类型的角度的过滤器函数?

最佳答案

有一种有趣的方法用于 angle averaging .

获取角度alpha的余弦和正弦(作为具有该角度的 vector 的分量)并将它们用于单独的过滤,然后获取结果 vector 的角度

 cosa = alpha * cos(output) + (1 - alpha) * cos(input);
 sina = alpha * sin(output) + (1 - alpha) * sin(input);
 output = atan2(sina, cosa)

关于java - 如何对角度值进行低通滤波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49968036/

相关文章:

geometry - 如何更新 Three.js r58 中的几何顶点位置?

java - 无法获取我的坐标 graphics2D mouseclick java

java - Java 中比较器接口(interface)的构造函数

java - 一次只允许一个用户访问数据

c# - 从两个大整数中获取精确的百分比

c - 计算特定 (x,y) 坐标处的三角形

java - 无法在 JBoss EAP 6.2 中通过 SSL 连接到 SOAP 服务

c++ - 关于形式 (1)/( b ^ c ) 中的函数的数学问题

algorithm - 给定 N,找到最大的 *奇数/偶数 * 加起来得到 N

sql - SQL Azure 是否适合临时密集型 SQL 处理?