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

准备文件:

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.s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值