Java 实现一维数组的Kalman滤波算法

一维数组的Kalman滤波适合对具有一定噪声的物联网传感器测量信息进行滤波。

根据笔者实际测试,可以实现噪声的过滤,并且保留异常值,且滤波效率很高。

实现的dome如下,大家可以根据自己的需要调整具体的参数:


public class KalmanFilter {
    private double q; // process noise covariance  过程噪声协方差
    private double r; // measurement noise covariance 测量噪声协方差
    private double x; // estimated value 估计值
    private double p; // estimation error covariance 估计误差协方差
    private double k; // adaptive Kalman filter gain 自适应Kalman滤波器增益

    public KalmanFilter(double q, double r, double p, double initialValue) {
        this.q = q;
        this.r = r;
        this.p = p;
        this.x = initialValue;
    }

    public double update(double measurement, double processNoise) {
        // prediction update
        x = x + processNoise;
        p = p + q;

        // measurement update
        k = p / (p + r);
        x = x + k * (measurement - x);
        p = (1 - k) * p;

        return x;
    }

    public static void main(String[] args) {
        // 设置Kalman滤波器参数
        double q = 0.01; // process noise covariance
        double r = 0.1; // measurement noise covariance
        double p = 1; // estimation error covariance
        double initialValue = 0; // initial estimated value

        // 创建Kalman滤波器对象
        KalmanFilter kalmanFilter = new KalmanFilter(q, r, p, initialValue);

        // 模拟测量数据,这里假设每秒更新一次测量值
        for (int i = 0; i < 100; i++) {
            double measurement = Math.tan(i / 10.0); // 模拟测量值,这里假设有一定的测量误差
            double processNoise = 0.1; // 过程噪声,这里假设有一定的随机干扰
            double filteredValue = kalmanFilter.update(measurement, processNoise); // 更新估计值和估计误差协方差
            System.out.println("Filtered value: " + filteredValue); // 输出滤波后的估计值
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值