Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的信号拟合模型_Python_Python 3.x_Pandas_Numpy_Kalman Filter - Fatal编程技术网

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更符合行为。

将此示例用作路线图。好的,斯科特,我会看一遍,谢谢。