Android传感器数据并不顺畅

时间:2016-04-13 20:59:33

标签: android signal-processing accelerometer sensor android-sensors

我有一个应用程序,每10毫秒将传感器数据存储到一个数据库中,但信号本身有一些非常尖锐的峰值:

enter image description here

所以看起来信号不一定是嘈杂的,它就在峰值周围,峰周围没有足够的数据点来平滑峰值

我知道我可以应用过滤器来平滑信号,但我想知道在轮询传感器/存储到传感器时是否有任何错误导致此行为的数据库

我原本以为通过使用像10ms这样的短轮询率会给我更多关于峰值的数据以帮助平滑峰值,但是减少这个值POLL_FREQUENCY似乎并不能让我顺利数据,我不知道为什么?

我正在收集服务中的数据:

public void onSensorChanged(SensorEvent event) {
        sensor = event.sensor;

        int i = sensor.getType();
        if (i == MainActivity.TYPE_ACCELEROMETER) {
            accelerometerMatrix = event.values;
        } else if (i == MainActivity.TYPE_GYROSCOPE) {
            gyroscopeMatrix = event.values;
        } else if (i == MainActivity.TYPE_GRAVITY) {
            gravityMatrix = event.values;
        } else if (i == MainActivity.TYPE_MAGNETIC) {
            magneticMatrix = event.values;
        }

        long curTime = System.currentTimeMillis();
        long diffTime = (curTime - lastUpdate);

        // only allow one update every POLL_FREQUENCY (10ms)
        if(diffTime > POLL_FREQUENCY) {
            lastUpdate = curTime;

            //insert into database in background thread
            try{
                //this simply takes the value from accelerometerMatrix
                // and the runnable just inserts into the database as a new row
                executor.execute(insertHandler);
            } catch (SQLException e) {
                Log.e(TAG, "insertData: " + e.getMessage(), e);
            }
        }
    }

因此,所有这些代码都是等待传感器更改事件,检测事件类型(加速度计,陀螺仪等),将值存储到适当的矩阵中,如果超过10毫秒,则存储矩阵值进入数据库

任何人都可以建议为什么尽管使用短轮询频率(10ms),峰值仍然很明显?

0 个答案:

没有答案