我有一个应用程序,每10毫秒将传感器数据存储到一个数据库中,但信号本身有一些非常尖锐的峰值:
所以看起来信号不一定是嘈杂的,它就在峰值周围,峰周围没有足够的数据点来平滑峰值
我知道我可以应用过滤器来平滑信号,但我想知道在轮询传感器/存储到传感器时是否有任何错误导致此行为的数据库
我原本以为通过使用像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),峰值仍然很明显?