ChatGPT实战之实现卡尔曼滤波

我有一组数据想看看卡尔曼滤波后的效果如何,便用chatgpt写了一分代码,经过调试发现,效果还是可以的,上图看看滤波效果:

可见chatgpt写的代码还是可以用的,具体代码附在下边:

import numpy as np
import matplotlib.pyplot as plt
import xlrd#导入xlrd库
file='自己的.xlsx'#文件路径
wb=xlrd.open_workbook(filename=file)#用方法打开该文件路径下的文件
ws=wb.sheet_by_name("Sheet1")#打开该表格里的表单
dataset=[]
for r in range(ws.nrows):#遍历行
    col=[]
    for l in range(ws.ncols):#遍历列
        col.append((ws.cell(r, l).value))#将单元格中的值加入到列表中(r,l)相当于坐标系,cell()为单元格,value为单元格的值
    dataset.append(col)



# 状态转移矩阵A
A = np.array([[1, 1], [0, 1]])
# 状态噪声矩阵Q
Q = np.array([[0.01, 0], [0, 0.01]])
# 观测矩阵H
H = np.array([[1, 0]])
# 观测噪声矩阵R
R = np.array([[5]])
# 初始状态值
x0 = np.array([[90], [0]])
P0 = np.eye(2) * 10
def kalman_filter(data):
    n = len(data)
    x = np.zeros((2, n))
    x[:, 0] = x0.flatten()
    P = np.zeros((2, 2, n))
    P[:, :, 0] = P0
    for i in range(1, n):
        # 预测状态向量和协方差矩阵
        x[:, i] = np.dot(A, x[:, i-1])
        P[:, :, i] = np.dot(np.dot(A, P[:, :, i-1]), A.T) + Q
        # 计算卡尔曼增益
        K = np.dot(np.dot(P[:, :, i], H.T), np.linalg.inv(np.dot(np.dot(H, P[:, :, i]), H.T) + R))
        # 更新状态向量和协方差矩阵
        x[:, i] = x[:, i] + np.dot(K, (data[i] - np.dot(H, x[:, i])))
        P[:, :, i] = np.dot((np.eye(2) - np.dot(K, H)), P[:, :, i])

    return x[0, :], P[0, 0, :]
# 生成带噪声的角度数据
t = np.arange(0, 200, 1)
data = np.sin(t) + np.random.randn(len(t)) * 0.1
# 使用卡尔曼滤波对角度数据进行平滑处理
smooth_data, var_data = kalman_filter(data)
# 绘制原始数据、滤波后的数据以及方差曲线
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure(figsize=(12, 6))
plt.plot(t, data, label='原始数据')
plt.plot(t, smooth_data, label='滤波数据')
plt.fill_between(t, smooth_data - np.sqrt(var_data), smooth_data + np.sqrt(var_data), alpha=0.5, label='方差')
plt.legend()
plt.xlabel('读取次数')
plt.ylabel('距离')
plt.title('数据')
plt.show()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白嫖怪阿七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值