import numpy as np
from filterpy.kalman import KalmanFilter
from scipy.signal import savgol_filter
import matplotlib.pyplot as plt
# 加载数据
data = np.loadtxt('D:\新建文件夹\data.txt', delimiter='\t')
# 初始化Kalman滤波器
kf = KalmanFilter(dim_x=2, dim_z=2)
kf.F = np.array([[1., 1.], [0., 1.]])
kf.H = np.array([[1., 0.], [0., 1.]])
kf.Q = np.diag([0.1, 0.1])
kf.R = np.diag([10., 10.])
kf.x = np.array([data[0, 0], 0.])
kf.P = np.diag([10., 10.])
# 对数据进行滤波
filtered_data = []
for i in range(data.shape[0]):
kf.predict()
kf.update(data[i, :2])
filtered_state = np.concatenate([kf.x, kf.P.diagonal()])
filtered_data.append(np.concatenate([filtered_state, data[i, 2:]]))
filtered_data = np.array(filtered_data)
# 保存滤波后的数据到文件
np.savetxt('filtered_data.txt', filtered_data, delimiter='\t')
# 绘制图表
fig, axs = plt.subplots(3, 1, figsize=(10, 10))
for i in range(3):
axs[i].plot(data[:, i], label='Raw Data')
axs[i].plot(np.array(filtered_data)[:, i], label='Filtered Data')
axs[i].legend()
axs[i].set_xlabel('Time')
axs[i].set_ylabel('Acceleration (g)')
axs[i].set_title(f'Acceleration in {["X", "Y", "Z"][i]} ')
plt.show()
我是想做三轴加速度的卡尔曼滤波,用chatgpt写的滤波器,然后我的z轴过滤出来的结果很奇怪,想问问这方面有了解的人是什么问题,还有就是我的滤波器能否还可以再改善