android传感器数据线性化(加速计)
我正在研究如何使用安卓手机上的传感器准确检测用户的脚步。我主要使用加速计传感器来检测脚踩。我使用了一种方法来获取加速度计数据,并寻找一种方法来消除加速度计数据中不必要的噪声。我发现数据线性化是一种很好的方法。但我不太清楚该怎么做。我认为这是一种中值。所以我没有找到一种实时获取中值的方法。有谁能给我推荐一种更好的去噪方法来消除加速度计数据的噪声吗 这是我的代码。(我使用NChart库在图表中绘制加速度计数据。)android传感器数据线性化(加速计),android,Android,我正在研究如何使用安卓手机上的传感器准确检测用户的脚步。我主要使用加速计传感器来检测脚踩。我使用了一种方法来获取加速度计数据,并寻找一种方法来消除加速度计数据中不必要的噪声。我发现数据线性化是一种很好的方法。但我不太清楚该怎么做。我认为这是一种中值。所以我没有找到一种实时获取中值的方法。有谁能给我推荐一种更好的去噪方法来消除加速度计数据的噪声吗 这是我的代码。(我使用NChart库在图表中绘制加速度计数据。) 有各种算法可以去除数据中的噪声,需要进行一些实验来找出哪种算法最好。当我最后一次不得不
有各种算法可以去除数据中的噪声,需要进行一些实验来找出哪种算法最好。当我最后一次不得不处理遥测数据时,我让Android将其放入CSV中,然后使用R进行分析。然而,如果你一直在使用Java,我会看一看,特别是他们的。例如:
// discrete time interval
double dt = 0.1d;
// position measurement noise (meter)
double measurementNoise = 10d;
// acceleration noise (meter/sec^2)
double accelNoise = 0.2d;
// A = [ 1 dt ]
// [ 0 1 ]
RealMatrix A = new Array2DRowRealMatrix(new double[][] { { 1, dt }, { 0, 1 } });
// B = [ dt^2/2 ]
// [ dt ]
RealMatrix B = new Array2DRowRealMatrix(
new double[][] { { Math.pow(dt, 2d) / 2d }, { dt } });
// H = [ 1 0 ]
RealMatrix H = new Array2DRowRealMatrix(new double[][] { { 1d, 0d } });
// x = [ 0 0 ]
RealVector x = new ArrayRealVector(new double[] { 0, 0 });
RealMatrix tmp = new Array2DRowRealMatrix(
new double[][] { { Math.pow(dt, 4d) / 4d, Math.pow(dt, 3d) / 2d },
{ Math.pow(dt, 3d) / 2d, Math.pow(dt, 2d) } });
// Q = [ dt^4/4 dt^3/2 ]
// [ dt^3/2 dt^2 ]
RealMatrix Q = tmp.scalarMultiply(Math.pow(accelNoise, 2));
// P0 = [ 1 1 ]
// [ 1 1 ]
RealMatrix P0 = new Array2DRowRealMatrix(new double[][] { { 1, 1 }, { 1, 1 } });
// R = [ measurementNoise^2 ]
RealMatrix R = new Array2DRowRealMatrix(
new double[] { Math.pow(measurementNoise, 2) });
// constant control input, increase velocity by 0.1 m/s per cycle
RealVector u = new ArrayRealVector(new double[] { 0.1d });
ProcessModel pm = new DefaultProcessModel(A, B, Q, x, P0);
MeasurementModel mm = new DefaultMeasurementModel(H, R);
KalmanFilter filter = new KalmanFilter(pm, mm);
希望这有帮助。如果您需要进一步的帮助,请随时发表评论。这是否使用了任何库?如何将其用于我的编码?很抱歉我是android新手。这是我学院的一项研究。
// discrete time interval
double dt = 0.1d;
// position measurement noise (meter)
double measurementNoise = 10d;
// acceleration noise (meter/sec^2)
double accelNoise = 0.2d;
// A = [ 1 dt ]
// [ 0 1 ]
RealMatrix A = new Array2DRowRealMatrix(new double[][] { { 1, dt }, { 0, 1 } });
// B = [ dt^2/2 ]
// [ dt ]
RealMatrix B = new Array2DRowRealMatrix(
new double[][] { { Math.pow(dt, 2d) / 2d }, { dt } });
// H = [ 1 0 ]
RealMatrix H = new Array2DRowRealMatrix(new double[][] { { 1d, 0d } });
// x = [ 0 0 ]
RealVector x = new ArrayRealVector(new double[] { 0, 0 });
RealMatrix tmp = new Array2DRowRealMatrix(
new double[][] { { Math.pow(dt, 4d) / 4d, Math.pow(dt, 3d) / 2d },
{ Math.pow(dt, 3d) / 2d, Math.pow(dt, 2d) } });
// Q = [ dt^4/4 dt^3/2 ]
// [ dt^3/2 dt^2 ]
RealMatrix Q = tmp.scalarMultiply(Math.pow(accelNoise, 2));
// P0 = [ 1 1 ]
// [ 1 1 ]
RealMatrix P0 = new Array2DRowRealMatrix(new double[][] { { 1, 1 }, { 1, 1 } });
// R = [ measurementNoise^2 ]
RealMatrix R = new Array2DRowRealMatrix(
new double[] { Math.pow(measurementNoise, 2) });
// constant control input, increase velocity by 0.1 m/s per cycle
RealVector u = new ArrayRealVector(new double[] { 0.1d });
ProcessModel pm = new DefaultProcessModel(A, B, Q, x, P0);
MeasurementModel mm = new DefaultMeasurementModel(H, R);
KalmanFilter filter = new KalmanFilter(pm, mm);