卡尔曼滤波(kalman filter)对单时间序列平滑-python

本文介绍了如何使用Python中的pandas和numpy库实现卡尔曼滤波算法对CSV数据进行平滑处理,通过迭代计算预测和更新状态估计,以得到更平滑的滤波后数据。
摘要由CSDN通过智能技术生成

准备文件:

import pandas as pd
import numpy as np
import random

# 读取CSV文件
file_path = 'data02.csv'  # 替换为你的CSV文件路径
data = pd.read_csv(file_path)
x_data = data.iloc[:, 0].values  # 假设第一列是要平滑的数据

# 初始化卡尔曼滤波器参数
n_iter = len(x_data)  # 迭代次数
sz = (n_iter,)  # 数据尺寸
Q = 1e-5  # 过程噪声协方差
R = 0.005**2  # 观测噪声协方差

# 初始估计
xhat = np.zeros(sz)  # 状态估计
P = np.zeros(sz)  # 状态估计协方差
xhatminus = np.zeros(sz)  # 预测估计
Pminus = np.zeros(sz)  # 预测协方差
K = np.zeros(sz)  # 卡尔曼增益

# 初始状态
xhat[0] = 0.0
P[0] = 1.0

# 卡尔曼滤波迭代
for k in range(1, n_iter):
    # 预测
    xhatminus[k] = xhat[k-1]
    Pminus[k] = P[k-1] + Q

    # 更新
    K[k] = Pminus[k] / (Pminus[k] + R)
    xhat[k] = xhatminus[k] + K[k] * (x_data[k] - xhatminus[k])
    P[k] = (1 - K[k]) * Pminus[k]

# 使用 xhat 作为滤波后的数据
filtered_data = xhat

# 绘制原始数据和滤波后的数据进行对比
import matplotlib.pyplot as plt
plt.plot(x_data, label='Original Data')
plt.plot(filtered_data, label='Filtered Data', color='red')
plt.legend()
plt.show()


原始数据

266
145
183
119
180
168
231
224
192
122
336
185
194
149
210
273
191
287
226
303
289
421
264
342
339
440
315
439
401
437
575
407
682
475
581
646

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值