首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速度传感器的移动平均法

加速度传感器的移动平均法
EN

Stack Overflow用户
提问于 2017-01-27 11:08:40
回答 1查看 997关注 0票数 0

我试着为TotalAccelerate.做简单的移动平均简单地说,移动平均值应该获取4个样本的TotalAccelerate向量,并在运行时对它们进行平均。然后移动一个样本,然后平均下四个样本,以此类推。我写的代码不管用。它坠毁的原因我不知道。我是否应该使用单独的线程来进行计算?如果你能写个伪代码我会很感激的。

代码语言:javascript
复制
double TotalAccelerate;
ArrayList<Double> listPeaks;
//for Accelermeter
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensorText = (TextView) findViewById(R.id.sensor);
accelermeter = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sm.registerListener(this, accelermeter, SensorManager.SENSOR_DELAY_NORMAL);
mDetector = new GestureDetectorCompat(this, new MyGestureListener());

  @Override
public final void onSensorChanged(SensorEvent event) {
    // The light sensor returns a single value.
    // Many sensors return 3 values, one for each axis.

      //If my ToggleButton Ischecked and isListening=true.(at Oncreate method)
    if (isListening) {
        double xx = event.values[0];
        double yy = event.values[1];
        double zz = event.values[2];
         //The result will be one vector of array
        TotalAccelerate = Math.round(Math.sqrt(Math.pow(xx, 2)
                + Math.pow(yy, 2)
                + Math.pow(zz, 2)));
        Log.i(DEBUG, "Accelerometer = " + TotalAccelerate);

        listPeaks.add(TotalAccelerate);
        //findPeaks(listPeaks);

        Log.i(DEBUG, "list values " + listPeaks);
        //Find moving average - window size= 4
        MovingAverage ma = new MovingAverage(4);
        ma.newNum(TotalAccelerate);
        float valueAfterMovingAverage = (float) ma.getAvg();
        sensorText.setText((int) valueAfterMovingAverage);
    }

}

public Queue<Double> window = new LinkedList<Double>();
public int p;
public double sum;

///Moving Average class.
public class MovingAverage {
    public MovingAverage(int period) {
        assert period > 0 : "Period must be a positive integer";
        p = period;
    }

    public void newNum(double num) {
        sum += num;
        window.add(num);
        if (window.size() > p) {
            sum -= window.remove();
        }
    }

    public double getAvg() {
        if (window.isEmpty()) return 0; // technically the average is undefined
        return sum / window.size();
    }

}

这就是我遇到的错误:

代码语言:javascript
复制
at android.content.res.Resources.getText(Resources.java:275)
                                                                          at android.widget.TextView.setText(TextView.java:4264)
                                                                          at com.example.arduinosensors.MainActivity.onSensorChanged(MainActivity.java:230)
                                                                          at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:436)
                                                                          at android.os.MessageQueue.nativePollOnce(Native Method)
                                                                          at android.os.MessageQueue.next(MessageQueue.java:143)
                                                                          at android.os.Looper.loop(Looper.java:122)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5354)
                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                          at java.lang.reflect.Method.invoke(Method.java:372)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-27 11:50:28

更改这一行:

代码语言:javascript
复制
sensorText.setText((int) valueAfterMovingAverage);

至:

代码语言:javascript
复制
sensorText.setText(String.valueOf((int) valueAfterMovingAverage));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41892556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档