kalman滤波python实现——基于维纳退化模型

文章介绍了如何使用改进的kalman滤波算法处理维纳过程模型,通过状态空间方程详细解释了kalman滤波的步骤,包括预测和校正过程,并提供了Python代码实例。
摘要由CSDN通过智能技术生成

维纳过程模型:

  • 退化模型:

X(t)=\lambda t+\sigma B(t)

其中,\lambda为drift coef,\sigma为diffusion coef ,B(\cdot)为标准布朗运动

  • 状态空间方程:

\begin{aligned}\lambda_i&=\lambda_{i-1}+\eta,\quad \eta\sim N(0,Q) \x_i&=x_{i-1}+\lambda_{i-1}(t_i-t_{i-1})+\sigma\varepsilon_i, \quad \varepsilon_i\sim N(0,t_i-t_{i-1}) \end{aligned}

kalman滤波

  • 算法细节:

  • 代码实现 :
import matplotlib.pyplot as plt
from math import pi
import numpy as np
from numpy import log, exp, sqrt
from numpy.random import normal, randn

def kalman_filter_for_weiner_process(t, X):
    ''''X is an array'''
    n_samples = len(X)
    _size = n_samples + 5
    sigma2 = 10                           # difussion coef
    Q = 10                                # drift noise variation
    K = np.zeros(_size)
    P = np.ones([_size,_size])  # P0 = 1

    λ_hat = np.zeros(_size) # a0 = 1
    y_pred = np.zeros(_size)

    for i in np.arange(0, n_samples):
        if i == 0:
            y_pred[i] = X[i]
        else:    
           # Prediction (expectation)
            P[i][i-1] = P[i-1][i-1] + Q 
            K[i] = (t[i] - t[i-1])**2 * P[i][i-1] + sigma2 * (t[i] - t[i-1]) # kalman 增益
            λ_hat[i] = λ_hat[i-1] + P[i][i-1] * (t[i] - t[i-1]) * (X[i] - X[i-1] - λ_hat[i-1] * (t[i] - t[i-1])) / K[i]

            # Correction (variance)
            P[i][i] = P[i][i-1] - P[i][i-1] * (t[i] - t[i-1])**2 / K[i] * P[i][i-1]

            # 基于更新后的λ_hat进行下一步的预测
            y_pred[i] = y_pred[i-1] + λ_hat[i] * (t[i] - t[i-1])
            
        print(f"λ_hat:{λ_hat[i]},P:{P[i][i]}")

    plt.scatter(t,X, color = 'blue')
    plt.plot(t,X, color = 'blue', label = 'actual')
    plt.plot(t, y_pred[:len(t)], color = 'red', label='kalman')
    plt.scatter(t, y_pred[:len(t)], color = 'red')
    print(y_pred)
    print(λ_hat)
    print(X)
    plt.legend()
    

# data
t = np.arange(1,15)
X = np.sin(np.arange(1,15))  * 100
kalman_filter_for_weiner_process(t, X)
  • 输出结果:​​​​​​​​​​​​​​

改进的kalman滤波

  • 算法细节:

  • 代码实现:
import matplotlib.pyplot as plt
from math import pi
import numpy as np
from numpy import log, exp, sqrt
from numpy.random import normal, randn

def strong_tracking_kalman_filter_for_weiner_process(t, X):
    ''''X is an array'''
    n_samples = len(t)
    _size = n_samples + 5 
    print("n_samples:", n_samples)
    sigma2 = 10                           # difussion coef


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/156afa94da35b3d5278dcc9419558d89.png)
![img](https://img-blog.csdnimg.cn/img_convert/8b2fa8807a651d57ce78d76953776340.png)
![](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)
![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)
![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png) 
![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)**
![img](https://img-blog.csdnimg.cn/img_convert/89a72dba3292a7145389474df6968429.png)



### 最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~  

给大家准备的学习资料包括但不限于:  

Python 环境、pycharm编辑器/永久激活/翻译插件  

python 零基础视频教程  

Python 界面开发实战教程  

Python 爬虫实战教程  

Python 数据分析实战教程  

python 游戏开发实战教程  

Python 电子书100本  

Python 学习路线规划

![](https://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)




7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值