Есть много вопросов об удалении шума из данных акселерометра, данных других датчиков, расчете пространственного -временного состояния и использовании фильтра Калмана в Android и других устройствах.
Судя по всему, самый простой способ сделать это — реализовать фильтр JKalman на Android для стабильно движущихся устройств, например для автомобилей.
Но глядя на пример реализации в пакете кода JKalman, он мало что говорит и на самом деле сильно отличается от других реализаций Kalman.
Они создают экземпляр класса Калмана следующим образом:
JKalman kalman = new JKalman(4, 2);
Где по определению
public JKalman(int dynam_params, int measure_params) throws Exception {
this(dynam_params, measure_params, 0);
}
dynam_params
"количество измерений вектора измерения" и measure_params
это "количество измерений вектора состояния" .
Как данные датчика, считанные в Android, должны быть сопоставлены с ними?
Ниже приведены данные с акселерометра, которые отбираются каждые 500 мс. В других слушателях есть данные с гироскопа и компаса. Как мне преобразовать эти данные для ввода в Калман?
@Override
public void onSensorChanged(SensorEvent event) {
actualTime = System.currentTimeMillis();
if(actualTime - lastUpdateAcc < 500)
return;
else{
lastUpdateAcc = actualTime;
//update myPosition
TextView tv = (TextView)findViewById(R.id.textView3);
tv.setText(String.format("X: %8.4f -- Y: %8.4f -- Z: %8.4f",
event.values[0], event.values[1], event.values[2]));
//draw on the screen
//draw new path, if one exists
}
}