有什么方法可以在我的Android应用中创建固定的加速度传感器延迟吗?我想精确地达到20 Hz的采样率

时间:2019-07-05 10:25:46

标签: java android

我想以20Hz的采样率模拟一个固定的加速度传感器延迟。 (600个样本/ 30秒)

这是针对人类活动识别Android移动应用程序,它使用TensorFlow来预测用户的活动。我尝试使用固定的SENSOR_DELAY(NORMAL,UI,FASTEST)和samplePeriodUS。我注意到,使用samplingPeriodUS上的自定义值,由于采样率不断变化,因此无法获得一致的延迟。我最终使用了SENSOR_DELAY_NORMAL,因为它给了我一致的采样率,接近46Hz。

使用此代码,我收集了600个加速度计样本(x,y,z),然后将其添加到Arraylist中,然后将其发送到Tensorflow以返回概率。

使用此设置,我希望每13-14秒获得600个样本。我想实现30秒的延迟(20Hz)。

是否可以通过Thread.SleepScheduledExecutorService或线性插值来实现?

好奇地从源代码中提取了源代码,并对其进行了稍微的修改:Github Link

protected void onResume() {
    super.onResume();
    getSensorManager().registerListener(this, getSensorManager().getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
public void onSensorChanged(SensorEvent event) {
    specificActivityPrediction(activity);
    x.add(event.values[0]);
    y.add(event.values[1]);
    z.add(event.values[2]);
}

private void specificActivityPrediction(String activity) {

    if (x.size() == N_SAMPLES && y.size() == N_SAMPLES && z.size() == N_SAMPLES) {
        data = new ArrayList<>();
        data.addAll(x);
        data.addAll(y);
        data.addAll(z);

        results = classifier.predictProbabilities(toFloatArray(data));

        downstairsTextView.setText(Float.toString(round(results[0], 2)));
        joggingTextView.setText(Float.toString(round(results[1], 2)));
        sittingTextView.setText(Float.toString(round(results[2], 2)));
        standingTextView.setText(Float.toString(round(results[3], 2)));
        upstairsTextView.setText(Float.toString(round(results[4], 2)));
        walkingTextView.setText(Float.toString(round(results[5], 2)));
        sendProbabilities(activity);
        x.clear();
        y.clear();
        z.clear();
    }
}

0 个答案:

没有答案