准备文件:
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

1万+

被折叠的 条评论
为什么被折叠?



