ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python中的信号拟合模型

2019-10-02 04:56:20  阅读:311  来源: 互联网

标签:kalman-filter python pandas numpy python-3-x


我在以下链接中共享了一个数据集:

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

estimate_data.csv文件的简单绘图生成以下图表.

enter image description here

并且一个简单的actual_data.csv图(这是我的基本事实)生成以下图

enter image description here

当我们将实际信号和估计信号一起绘制时,这就是我们得到的

enter image description here

我想找到最接近估计和实际信号的模式.我试图通过将数据加载到DataFrame中并使用pandas.rolling_max()找到最接近的模式,然后计算滚动最大值然后转向整个系列并向后计算窗口.下面是我的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的情节)进行比较时,我并不认为这种模式足够接近.我们如何应用像卡尔曼滤波器这样的滤波模型来找到这种signal的模式?

解决方法:

卡尔曼滤波器对于具有加上高斯噪声的真实平均值的输入数据是有用的.您可以测量或以其他方式知道随机噪声的方差,并将其作为测量噪声提供给算法.您的输入数据(您称之为“估计信号”)不具有(平均)实际信号的值.它似乎有一个错误,导致它经常测量接近零,并且很少高于实际值.它似乎只是超过实际值作为警告,实际值即将急剧下降.

在这种情况下,卡尔曼滤波器不太可能对您有所帮助,因为该数据集严重违反了对输入数据的假设.您最好的选择是改善您的输入数据(例如,在这种情况下,错误可能是由于传感器中的缺陷造成的).如果这是不可能的,那么你自己对数据的直觉(采取滚动最大值)与行为的关系比KF更为一致.

标签:kalman-filter,python,pandas,numpy,python-3-x
来源: https://codeday.me/bug/20191002/1841281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有