我尝试开发一种基于加速度计的计步器。它工作正常,但我读到很多人都在向加速度计的数据添加一个低通滤波器。我知道公式,但不知道如何计算alpha值。即使这样,这些术语也不是很明确或不一致。
我已经使用传感器事件的时间戳确定了dt(采样率)值:
private static final float NS2S = 1.0f / 1000000000.0f;
private float dt;
public void onSensorChanged(SensorEvent sensorEvent) {
int type = sensorEvent.sensor.getType();
long timestamp = System.currentTimeMillis();
if (type == Sensor.TYPE_ACCELEROMETER) {
if(this.timestamp != 0) {
dt = (sensorEvent.timestamp - this.timestamp) * NS2S;
}
this.timestamp = sensorEvent.timestamp;
}
}
对于SENSOR_DELAY_FASTEST,dt的实际值为0.002 s。 对于SENSOR_DELAY_NORMAL,其硬限制为0.2秒。
已实施的LPF:
/**
* Constructs a low pass filter with alpha as smoothing parameter.
* If alpha is 1.0 there is no smoothing.
* If alpha is 0.0 then the new value is completely filtered.
*
* @param alpha Smoothing parameter
*/
public LowPass(float alpha) {
this.alpha = alpha;
}
@Override
public void push(float value) {
if (this.last == null)
this.last = value;
else
this.last = this.last * (1.f - this.alpha) + value * this.alpha;
}
@Override
public float get() {
return this.last == null ? 0.f : this.last;
}
在文献中记载,人通常以1.5步/秒的速度行走。我测试该值,并且每个步骤之间的平均时间间隔为550毫秒。
我有这个公式: tau =(alpha * dt)/(1- alpha)<=> alpha = tau /(tau + dt)
它说必须知道时间常数(tau)和采样率。
在0.002s => 5Hz的情况下,采样率dt。 但是时间常数tau是多少?这是人类以1.81Hz(550ms)行走的频率吗?
如何根据人的行走频率1.8Hz和传感器延迟(即0.002 s和0.2s)来计算正确的alpha值?
谢谢。