Android 智能手表采样频率
Android Smartwatch sampling frequency
我一直在使用 Sony Smartwatch 3 长时间(平均 8 小时)记录加速度计数据。以下是主要代码块:ax、ay 和 az 是用于存储传感器值的数组列表,ta 是具有相应时间戳的数组列表。
private void startMeasurement() {
mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));
Log.d("lister", "listeners");
Sensor accelerometerSensor = mSensorManager.getDefaultSensor(SENS_ACCELEROMETER);
// Register the listener
if (mSensorManager != null) {
mSensorManager.registerListener(this, accelerometerSensor,25000);
}
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == SENS_ACCELEROMETER){
ax.add(event.values[0]);
ay.add(event.values[1]);
az.add(event.values[2]);
ta.add(System.currentTimeMillis());
}
}
public void write(){
String timeStamp = new SimpleDateFormat("yyMMdd_HHmmss").format(Calendar.getInstance().getTime());
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/sensor_data/" + timeStamp + ".csv");
try{
FileWriter fw = new FileWriter(file);
BufferedWriter buffWriter = new BufferedWriter(fw,50*1024);
for(int i=0;i<ax.size();i++){
buffWriter.write(String.valueOf(ax.get(i)));
buffWriter.write(",");
buffWriter.write(String.valueOf(ay.get(i)));
buffWriter.write(",");
buffWriter.write(String.valueOf(az.get(i)));
buffWriter.write(",");
buffWriter.write(String.valueOf(ta.get(i)));
buffWriter.write("\n");
}
buffWriter.flush();
buffWriter.close();
}catch (IOException e){
e.printStackTrace();
}
}
在查看样本之间的时间差时,我注意到在记录数据一段时间后该时间有所增加。在下面的 link 中,您可以看到样本之间的时间差图(以秒为单位)。
为什么会出现录制一段时间后差异突然跳到50?
最终使用 Android 的 PowerManager 和 PARTIAL_WAKE_LOCK 解决了问题。它消耗更多电池,但我真的需要采样频率保持几乎恒定。
我一直在使用 Sony Smartwatch 3 长时间(平均 8 小时)记录加速度计数据。以下是主要代码块:ax、ay 和 az 是用于存储传感器值的数组列表,ta 是具有相应时间戳的数组列表。
private void startMeasurement() {
mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));
Log.d("lister", "listeners");
Sensor accelerometerSensor = mSensorManager.getDefaultSensor(SENS_ACCELEROMETER);
// Register the listener
if (mSensorManager != null) {
mSensorManager.registerListener(this, accelerometerSensor,25000);
}
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == SENS_ACCELEROMETER){
ax.add(event.values[0]);
ay.add(event.values[1]);
az.add(event.values[2]);
ta.add(System.currentTimeMillis());
}
}
public void write(){
String timeStamp = new SimpleDateFormat("yyMMdd_HHmmss").format(Calendar.getInstance().getTime());
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/sensor_data/" + timeStamp + ".csv");
try{
FileWriter fw = new FileWriter(file);
BufferedWriter buffWriter = new BufferedWriter(fw,50*1024);
for(int i=0;i<ax.size();i++){
buffWriter.write(String.valueOf(ax.get(i)));
buffWriter.write(",");
buffWriter.write(String.valueOf(ay.get(i)));
buffWriter.write(",");
buffWriter.write(String.valueOf(az.get(i)));
buffWriter.write(",");
buffWriter.write(String.valueOf(ta.get(i)));
buffWriter.write("\n");
}
buffWriter.flush();
buffWriter.close();
}catch (IOException e){
e.printStackTrace();
}
}
在查看样本之间的时间差时,我注意到在记录数据一段时间后该时间有所增加。在下面的 link 中,您可以看到样本之间的时间差图(以秒为单位)。
为什么会出现录制一段时间后差异突然跳到50?
最终使用 Android 的 PowerManager 和 PARTIAL_WAKE_LOCK 解决了问题。它消耗更多电池,但我真的需要采样频率保持几乎恒定。