请基于python写一份导入CSV文件后基于卡尔曼滤波的数据去噪代码
时间: 2024-05-14 20:17:23 浏览: 139
好的,下面给出一份基于python的导入CSV文件后基于卡尔曼滤波的数据去噪代码。代码中用到了numpy和pandas这两个库。
```python
import numpy as np
import pandas as pd
# 读取CSV文件
df = pd.read_csv('data.csv')
# 定义卡尔曼滤波器
class KalmanFilter:
def __init__(self, n_dim_obs, n_dim_state):
self.n_dim_obs = n_dim_obs # 观测值维度
self.n_dim_state = n_dim_state # 状态维度
self.x = np.zeros((n_dim_state, 1)) # 状态向量
self.P = np.eye(n_dim_state) # 状态向量协方差矩阵
self.F = np.eye(n_dim_state) # 状态转移矩阵
self.H = np.zeros((n_dim_obs, n_dim_state)) # 观测矩阵
self.R = np.eye(n_dim_obs) # 观测噪声协方差矩阵
self.Q = np.eye(n_dim_state) # 状态噪声协方差矩阵
def predict(self):
self.x = np.dot(self.F, self.x)
self.P = np.dot(self.F, np.dot(self.P, self.F.T)) + self.Q
def update(self, z):
y = z - np.dot(self.H, self.x)
K = np.dot(self.P, np.dot(self.H.T, np.linalg.inv(np.dot(self.H, np.dot(self.P, self.H.T)) + self.R)))
self.x += np.dot(K, y)
self.P = self.P - np.dot(K, np.dot(self.H, self.P))
# 数据去噪
def data_filter(data):
n_dim_obs = 1 # 观测值维度
n_dim_state = 2 # 状态维度
kf = KalmanFilter(n_dim_obs, n_dim_state) # 初始化卡尔曼滤波器
filtered_data = [] # 存储去噪后的数据
for obs in data:
kf.predict() # 预测下一个状态
kf.update(obs) # 更新状态
filtered_data.append(kf.x[0]) # 第一个状态值即为去噪后的数据
return np.array(filtered_data)
# 测试代码
if __name__ == '__main__':
data = df['data'].values # 获取数据列
filtered_data = data_filter(data) # 去噪
df['filtered_data'] = filtered_data # 将去噪后的数据添加到原数据DataFrame中
df.to_csv('filtered_data.csv', index=False) # 将去噪后的数据保存到CSV文件中
```
以上代码实现了从CSV文件中读取数据,然后基于卡尔曼滤波对数据进行去噪,并将去噪后的数据添加到原数据DataFrame中,最后将去噪后的数据保存到CSV文件中。
阅读全文