簡體   English   中英

在Matlab中,加快互相關

[英]In matlab, speed up cross correlation

我有一個很長的時間序列,其中包含一些重復且類似的信號(不完全是周期性的)。 時間序列的長度約為60000個樣本。 為了識別信號,我取出其中一個信號,長度約為1000個樣本,並將其沿我的時間序列數據樣本逐個移動,並計算互相關系數(在Matlab中為corrcoef)。 如果該值高於某個閾值,則存在匹配項。 但這非常慢(使用“ for循環”移動窗口)。 有沒有一種方法可以加快速度,或者在Matlab中已經有某種機制可以加快速度?

非常感謝

編輯:添加了有關使用'xcorr'的信息:

如果我使用“ xcorr”或至少使用它的方式,則會得到錯誤的圖像。 查看數據(第一個圖),有兩種類型的重復信號。 一個由紅色矩形標記,而另一個具有大得多的幅度(這是相干噪聲)則由黑色矩形標記。 我對第一種類型感興趣。 第二個圖顯示了我正在尋找的信號,被炸毀。 如果我使用“ xcorr”,則會得到第三個情節。 如您所見,“ xcorr”給我的信號是錯誤的(實際上我的信號和相干噪聲之間存在很高的互相關性)。 但是,使用“ corrcoef”並移動窗口,我得到的是正確的最后一個圖。使用“ xcorr”時可能存在歸一化的問題,但我不知道。

在此處輸入圖片說明

我可以想到兩種加快處理速度的方法。

1)使模板的元素長為1024。 突然之間,可以使用FFT進行相關,它比DFT或每個位置的逐元素乘法快得多。

2)問問自己,您真正關心的模板形狀是什么。 您是否真的需要非常高的頻率,還是真的需要較低的頻率? 如果您可以重新采樣模板和信號,使其不再包含您不關心的任何頻率,則可以大大加快處理速度。 采取的步驟將包括

  • 確定您關心的最高頻率
  • 過濾數據,以便阻止更高的頻率
  • 以較低的采樣頻率重新采樣結果數據

現在將其與大小為2的冪的模板組合

您可能會發現此鏈接很有趣。

讓我們知道以上任何一種幫助!

您的問題似乎像是互相關的教科書示例。 因此,沒有充分的理由使用xcorr以外的任何解決方案。 一些技術評論:

  1. xcorr假定均值已從兩個互相關的信號中刪除。 此外,默認情況下,它不會縮放信號的標准偏差。 這兩個問題都可以通過對兩個信號進行z評分來解決: c=xcorr(zscore(longSig,1),zscore(shortSig,1)); c=c/n; c=xcorr(zscore(longSig,1),zscore(shortSig,1)); c=c/n; 其中n是較短信號的長度,應產生與滑動窗口方法等效的結果。

  2. xcorr的輸出根據滯后進行排序,該滯后可以在第二個輸出參數中獲得( [c,lags]=xcorr(.. )。請始終通過plot(lags,c)繪制xcorr結果。我建議嘗試使用合成信號進行驗證您了解如何解釋此圖表。

  3. xcorr的實現已經使用了Discere Fourier變換,因此,除非您有特殊情況,否則再次編碼頻域互相關將浪費時間。

最后,關於術語的評論:將兩個信號之間的相應時間點關聯起來就是簡單的相關性。 這就是corrcoef所做的(它的名稱代表相關系數,在這里沒有“互相關”)。 互相關是移位信號之一並計算每個滯后的相關系數的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM