Python中的信号拟合模型
我在以下链接中共享了一个数据集:Python中的信号拟合模型,python,python-3.x,pandas,numpy,kalman-filter,Python,Python 3.x,Pandas,Numpy,Kalman Filter,我在以下链接中共享了一个数据集: 估算的_data.csv文件的简单绘图生成以下绘图 一个简单的actual_data.csv(这是我的基本事实)绘图生成以下绘图 当我们将实际信号和估计信号一起绘制时,这就是我们得到的结果 我想找到估计信号和实际信号最接近的模式。我尝试使用pandas.rolling_max()找到最接近的模式,方法是将数据加载到DataFrame中,计算滚动最大值,然后翻转整个系列并向后计算窗口。下面是我的Python脚本 import numpy as np imp
估算的_data.csv
文件的简单绘图生成以下绘图
一个简单的actual_data.csv
(这是我的基本事实)绘图生成以下绘图
当我们将实际信号和估计信号一起绘制时,这就是我们得到的结果
我想找到估计信号和实际信号最接近的模式。我尝试使用pandas.rolling_max()
找到最接近的模式,方法是将数据加载到DataFrame
中,计算滚动最大值,然后翻转整个系列并向后计算窗口。下面是我的Python
脚本
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.ion()
df = pd.read_csv('estimated.csv', names=('x','y'))
df['rolling_max'] = df['y'].rolling(8500).max()
df['rolling_max_backwards'] = df['y'][::-1].rolling(850).max()
df.rolling_max.fillna(df.rolling_max_backwards, inplace=True)
plt.figure()
plt.plot(df['x'], df['rolling_max'], label = 'rolling')
plt.legend()
plt.title('Pattern')
plt.xlim(0,10)
plt.ylim(0,700)
plt.xlabel('Time [Seconds]')
plt.ylabel('Segments')
plt.grid()
plt.show(block=True)
最终生成以下模式
然而,当我将其与我的基本事实(实际数据.csv的绘图)进行比较时,我觉得这个模式不够接近。我们如何应用滤波模型,如
Kalman-Filter
,找到这样一种模式 卡尔曼滤波器适用于输入数据,该数据具有加上高斯噪声的真实平均值。您可以测量或以其他方式知道随机噪声的方差,并将其作为测量噪声提供给算法。您的输入数据(您称之为“估计信号”)没有(平均)实际信号的值。它似乎有一个错误,导致它经常接近零测量,很少高于实际值。它似乎只会超过实际值,作为实际值即将急剧下降的警告
在这种情况下,卡尔曼滤波器不太可能帮助您,因为它对输入数据的假设被该数据集严重违反。最好的办法是改进输入数据(例如,在这种情况下,错误可能是由于传感器中存在缺陷)。如果不可能,您自己对数据的直觉(采用滚动最大值)比KF更符合行为。将此示例用作路线图。好的,斯科特,我会看一遍,谢谢。