我有两个时间序列,我怀疑它们之间有一个时间偏移,我想估计一下这个时间偏移。
这个问题以前在: Find phase difference between two (inharmonic) waves和find time shift between two similar waveforms但是在我的例子中,时间偏移小于数据的分辨率。例如,数据的分辨率为每小时一次,而时间偏移仅为几分钟(见图)。
原因是用于测量其中一个系列的数据记录器的时间有几分钟的偏移。
有没有哪种算法可以估计这种偏移,最好不用插值?
你提供的其中一个链接有正确的想法(事实上我在这里做的几乎是相同的事情)
它具有以下输出:
可能有必要检查一下
注意,相关性的argmax()表示对齐的位置,它必须按
b-a = 10-0 = 10
和N的长度缩放才能得到实际值。检查correlateSource的源代码从sigtools导入的函数的行为并不十分明显。对于大型数据集,循环相关(通过快速傅立叶变换)比直接向前方法快得多。我怀疑这是sigtools中实现的,但我不能肯定。在python2.7文件夹中搜索该文件时,只返回编译后的C pyd文件。
这是一个非常有趣的问题。最初,我打算提出一个类似于用户948652的基于互相关的解决方案。但是,从您的问题描述来看,该解决方案有两个问题:
由于这两个问题,我认为直接应用互相关解决方案可能实际上会增加您的时间偏移,特别是在预测值和测量值之间相关性非常低的日子。
在我上面的评论中,我问你在这两个时间序列中是否发生过任何事件,你说你没有。但是,根据你的领域,我认为你实际上有两个:
即使信号的其余部分相关性很差,日出和日落也应该具有一定的相关性,因为它们从/减少到夜间基线将单调地增加。所以这里有一个潜在的解决方案,基于这两个事件,这两个都应该最小化所需的插值,而不是依赖于低相关信号的互相关。
1。寻找大致的日出/日落
这应该很简单,只需取第一个和最后一个数据点,这些数据点高于夜间平面线,并将它们标记为日出和日落的近似值。然后,我将重点关注这些数据,以及任何一边的点,即:
有几种方法可以实现} ,以特定的值设置阈值,并取该值之上的第一个和最后一个点。您还可以从大量文件中读取夜间数据,计算平均值和标准偏差,并查找超过夜间数据的第一个和最后一个数据点,例如
get_sunrise()
和get_sunset()
,这取决于您的分析需要多严格。我将使用^{0.5 * st_dev
。您还可以进行某种基于集群的模板匹配,特别是如果一天中的不同类别(即晴天与部分阴天与非常阴天)具有非常典型的日出/日落事件。2。重新采样数据
我认为没有插值就没有办法解决这个问题。我将使用重采样的数据,以更高的采样率比移位。如果轮班时间在分钟范围内,则向上取样至1分或30秒。
或者,我们可以使用三次样条插值数据(参见here)。
3。高斯卷积
因为有一些插值,所以我们不知道实际的日出和日落是如何精确预测的。所以,我们可以用高斯函数来卷积信号,来表示这种不确定性。
4。互相关
使用用户948652答案中的互相关方法获得时间偏移。
在这种方法中,有很多未回答的问题需要对数据进行检查和实验,以便更具体地确定,例如识别日出/日落的最佳方法是什么、高斯窗口应该有多宽等等,但这是我将如何开始解决问题的。 祝你好运!
这是一个很有趣的问题。这是一个尝试,在一个部分解决使用傅立叶变换。这依赖于适度周期性的数据。我不确定它是否适用于你的数据(端点的导数似乎不匹配)。
对打印输出的快速检查表明 幂(N=1,N=2)给出了合理的估计,如果你看 绝对值(np.absolute),尽管我无法解释为什么会这样。
也许更熟悉数学的人可以从这里得到更好的答案。。。
相关问题 更多 >
编程相关推荐