如何计算低通滤波器的Alpha值

时间:2019-05-22 08:27:50

标签: android accelerometer lowpass-filter

我尝试开发一种基于加速度计的计步器。它工作正常,但我读到很多人都在向加速度计的数据添加一个低通滤波器。我知道公式,但不知道如何计算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值?

谢谢。

0 个答案:

没有答案