Python中的信号拟合模型

3

我有一个数据集,可以在以下链接中找到:

https://drive.google.com/open?id=0B2Iv8dfU4fTUSV8wMmUwVGMyRE0

estimated_data.csv文件进行简单绘图会生成以下图表。

enter image description here

并且对实际数据actual_data.csv(我的基准)进行简单绘图会生成以下图表

enter image description here

当我们将实际信号和估计信号一起绘制时,得到的结果如下

enter image description here

我想要找到估计信号和实际信号的最接近模式。 我尝试使用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)

最终生成以下图案。

enter image description here

然而,当我将其与我的实际数据(actual_data.csv的图)进行比较时,感觉这个图案还不够接近。我们如何应用过滤模型(例如Kalman Filter)来找到这样一个信号的图案?


1
使用此示例作为路线图。http://scipy-cookbook.readthedocs.io/items/KalmanFiltering.html - Scott Boston
好的,Scott,我会仔细阅读并感谢您。 - Desta Haileselassie Hagos
1个回答

1
卡尔曼滤波器适用于输入数据中真实均值加上高斯噪声的情况。您测量或以其他方式知道随机噪声的方差,并将其作为测量噪声提供给算法。您的输入数据(称为“估计信号”)平均而言不具有实际信号的值。它似乎存在误差,导致它经常测量接近零,并且很少高于实际值。它仅在要出现实际值急剧下降的警告时似乎超过实际值。
在这种情况下,卡尔曼滤波器不太可能对您有所帮助,因为其对输入数据的假设与此数据集强烈违反。最好的选择是改善您的输入数据(例如,在此情况下,错误可能是由传感器中的缺陷引起的)。如果不可能,那么对数据的自己的直觉(取滚动最大值)比KF更符合行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接