我正在使用以下平滑功能来平滑 GPS 的速度读数。
void smoothing_init()
{
k = 0;
kalman_init(0.0625, 32, 1.3833094, 0);
}
void kalman_init(double _q, double _r, double _p, double intial_value)
{
q = _q;
r = _r;
p = _p;
x = intial_value;
}
double smoothing_add_sample(double measurement)
{
p = p + q;
k = p / (p + r);
x = x + k * (measurement - x);
p = (1 - k) * p;
return x;
}
但是,有时这会给我平滑值 700(正常范围是 0-150)然后下降。我猜当我用 0 初始化例程但立即接收到高于 0 的读数(例如 40、50)时会发生这种情况。
我如何调整这些功能以自然地防止这种峰值,但仍然能够平滑数据。