Android卡尔曼滤波

最近研究使用卡尔曼滤波处理蓝牙RSS原始数据,参考了几篇优秀的博文,终有所获!

//初始化卡尔曼滤波参数
 private void initial() {
        //dynam_params:测量矢量维数,measure_params:状态矢量维数
        try {
            mFilter = new JKalman(1,1);
            double x =0;
            mPredictValue = new Matrix(1,1);
            mCorrectedValue = new Matrix(1,1);
            mMeasurementValue = new Matrix(1,1);
            mMeasurementValue.set(0,0,x);     //初始状态(随便设置,不会影响后面的结果)

            double[][] tr = {{1}};   //转移矩阵
            mFilter.setTransition_matrix(new Matrix(tr));
            
            double[][] Q = {{0.00002}};
            mFilter.setProcess_noise_cov(new Matrix(Q));  //预测噪声协方差矩阵

            double[][] P = {{0.0004}};
            mFilter.setMeasurement_noise_cov(new Matrix(P));  //测量噪声协方差矩阵
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

//返回预测修正后的数据
public int KalmanFilter(int oldValue){
        mPredictValue = mFilter.Predict();
        mMeasurementValue.set(0,0,oldValue);
        mCorrectedValue = mFilter.Correct(mMeasurementValue);
        int newValue = (int) mCorrectedValue.get(0,0);
        return newValue;
    }

卡尔曼滤波结果
上图中的深蓝色是原始蓝牙RSS数据,浅蓝色是Android卡尔曼滤波结果(结果取整了),红色是matlab上的结果(数组),Q与R的参数一样。两个结果一样,且验证了Jkalman。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
扩展卡尔曼滤波(Extended Kalman Filter,EKF)和卡尔曼滤波(Kalman Filter,KF)是两种常用的滤波算法,它们在处理非线性系统时有所不同。 卡尔曼滤波是一种递归滤波算法,用于估计线性系统的状态。它基于系统的动力学模型和观测模型,通过最小化预测状态与观测值之间的误差来估计系统的状态。卡尔曼滤波假设系统的噪声是高斯分布的,并且系统的动力学模型和观测模型都是线性的。因此,卡尔曼滤波在处理线性系统时表现良好。 扩展卡尔曼滤波是对卡尔曼滤波的扩展,用于处理非线性系统。与卡尔曼滤波不同,扩展卡尔曼滤波通过线性化非线性系统的动力学模型和观测模型来近似处理非线性问题。具体而言,扩展卡尔曼滤波使用泰勒级数展开来近似非线性函数,并通过线性卡尔曼滤波来处理近似后的线性系统。这样,扩展卡尔曼滤波可以在一定程度上处理非线性系统,但由于线性化的误差,其性能可能不如卡尔曼滤波在处理线性系统时的表现。 总结一下: - 卡尔曼滤波适用于线性系统,扩展卡尔曼滤波适用于非线性系统。 - 卡尔曼滤波假设系统的动力学模型和观测模型都是线性的,扩展卡尔曼滤波通过线性化非线性系统来近似处理非线性问题。 - 扩展卡尔曼滤波的性能可能不如卡尔曼滤波在处理线性系统时的表现,因为线性化的误差会影响估计结果的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值