Я работаю над своими исследованиями, чтобы точно определить шаг пользователя, используя датчики в телефоне android. В основном я использовал датчик акселерометра для определения ступни ноги. Я использовал метод для получения данных акселерометра и поиска метода удаления нежелательных шумов данных акселерометра. Я обнаружил, что линеаризация данных является хорошим методом. Но я не знаю, как это сделать. Я думаю, что он получает медианную ценность. Поэтому я не нашел способ получить медианное значение в режиме реального времени. Может ли кто-нибудь предложить мне лучший метод lenearization для удаления шума данных акселерометра.Линеаризация данных датчика андроида (акселерометр)
вот мой код. (Я использовал библиотеку NChart рисовать свои данные акселерометра на диаграмме.)
package com.android.gait;
import org.achartengine.GraphicalView;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends Activity implements SensorEventListener{
private int count=0;
private static GraphicalView view;
private LineGraph line = new LineGraph();
private static Thread thread;
private SensorManager mSensorManager;
private Sensor mAccelerometer;
TextView title,tv,tv1,tv2;
RelativeLayout layout;
private static Point p;
static float m = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//get the sensor service
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//get the accelerometer sensor
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//get layout
layout = (RelativeLayout)findViewById(R.id.relative);
LinearLayout layout = (LinearLayout) findViewById(R.id.layoutC);
view= line.getView(this);
layout.addView(view);
//get textviews
title=(TextView)findViewById(R.id.name);
tv=(TextView)findViewById(R.id.xval);
tv1=(TextView)findViewById(R.id.yval);
tv2=(TextView)findViewById(R.id.zval);
thread = new Thread(){
int iniX=0;
public void run()
{
while(true)
{
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
iniX=+1;
line.addNewPoint(iniX,m);
view.repaint();
}
}
};
thread.start();
}
public final void onAccuracyChanged(Sensor sensor, int accuracy)
{
// Do something here if sensor accuracy changes.
}
@Override
public final void onSensorChanged(SensorEvent event)
{
count=+1;
// Many sensors return 3 values, one for each axis.
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
//get merged value
m = (float) Math.sqrt(x*x+y*y+z*z);
// p =MockData.getDataFromReceiver(count, m);
//display values using TextView
title.setText(R.string.app_name);
tv.setText("X axis" +"\t\t"+x);
tv1.setText("Y axis" + "\t\t" +y);
tv2.setText("Z axis" +"\t\t" +z);
}
@Override
protected void onResume()
{
super.onResume();
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause()
{
super.onPause();
mSensorManager.unregisterListener(this);
}
public void LineGraphHandler(View view){
}
}
Можно ли использовать любую библиотеку? Как я могу использовать это с моей кодировкой? Сожалею. Im новое для android. Это исследование в моем колледже. – dit1679