【发布时间】:2014-04-19 14:54:14
【问题描述】:
我有一个很长的时间序列,其中包含一些重复和相似的信号(不完全是周期性的)。时间序列的长度约为 60000 个样本。为了识别信号,我取出其中一个,长度约为 1000 个样本,并将其沿我的时间序列数据逐个样本移动,并计算互相关系数(在 Matlab 中:corrcoef)。如果该值高于某个阈值,则存在匹配。 但这非常慢(使用“for循环”移动窗口)。 有没有办法加快速度,或者 Matlab 中已经有一些机制?
非常感谢
已编辑:添加了有关使用“xcorr”的信息:
如果我使用“xcorr”,或者至少是我使用它的方式,我会得到错误的图片。查看数据(第一个图),有两种类型的重复信号。一个用红色矩形标记,而另一个振幅更大(这是相干噪声)用黑色矩形标记。我对第一种类型感兴趣。第二个图显示了我正在寻找的信号,被炸毁了。 如果我使用“xcorr”,我会得到第三个情节。如您所见,“xcorr”给了我错误的信号(实际上我的信号和相干噪声之间存在高度互相关)。 但是使用“'corrcoef' 并移动窗口,我得到了最后一个正确的图。 使用“xcorr”时可能存在标准化问题,但我不知道。
【问题讨论】:
-
为什么不
xcorr?还是conv?这些功能会自动移动窗口。但是,结果没有像corrcoef那样标准化。但是您可以对此进行纠正 -
您是否尝试过使用
normxcorr2?它适用于 2D 数据,但我想它也应该适用于时间序列。
标签: performance matlab cross-correlation