まず加速度センサーのリスナーを実装します。
class SENSOR_EVENT_LISTENER implements SensorEventListener {
float[] accelerometer_data = new float[3];
float[] gravity = new float[3];
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
final float alpha = 0.8f;
// Isolate the force of gravity with the low-pass filter.
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
accelerometer_data[0] = event.values[0] - gravity[0];
accelerometer_data[1] = event.values[1] - gravity[1];
accelerometer_data[2] = event.values[2] - gravity[2];
break;
default:
return;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
は、その後、あなたの受信機を登録します。
final SensorManager sensor_manager = (SensorManager) m_context.getSystemService(Context.SENSOR_SERVICE);
listener = new SENSOR_EVENT_LISTENER();
final List<Sensor> sensors = sensor_manager.getSensorList(Sensor.TYPE_ACCELEROMETER);
if(sensors.size() > 0) {
sensor = sensor_manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensor_manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}
チェック値振動の前や振動時に。振動中の値には目に見える変化があります。
マイクについてはわかりませんが、リスニング用の加速度計だけで振動を測定するのには十分です。マイクのヘルプが必要な場合は、コードを更新できます。
これが役に立ちます。
マイクも含めることができますか?また、加速度計データ(x、y、z)を使用して振動周波数を見つけるにはどうすればよいですか?私は高速フーリエ変換を使用していますか? – Zik
デバイスが静止しているので安定した表面上では、加速度計の値はより小さな間隔で変化し、ピークは小さくなります。デバイスが振動している間は、絶対ピーク値がさらに高くなることがわかります。どのように振動を検出することができます。マイクコードには、実装する時間が必要です –
私は研究しており、加速度計、周波数、ノイズレベル(dB)の概念を実際に把握することはできません。はい、dBとHzが必要です。 dBのグラフはy軸、Hzのグラフはx軸です。 – Zik