2016-04-24 9 views
0

私は、長時間(平均8時間)の加速度計データの記録にSony Smartwatch 3を使用してきました。以下は主要なコードブロックです:ax、ay、azはセンサ値を格納するためのarraylistsで、taは対応するタイムスタンプを持つarraylistです。Androidスマートウォッチサンプリング周波数

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(); 
    } 

} 

サンプルの時間差を見てみると、データを記録してからしばらく時間がかかることがわかりました。下のリンクには、サンプル間の時間差のプロットが秒単位で表示されます。 enter image description here

何時に録音した後に差が急激に50にジャンプするのはなぜですか?

答えて

2

AndroidのPowerManagerとPARTIAL_WAKE_LOCKを使用して問題を解決しました。それはより多くのバッテリーを消費しますが、実際にはサンプリング周波数をほぼ一定に保つ必要があります。