2011-02-11 227 views
13

我有兩個不同麥克風(例如,WAV格式)的相同信號的兩個音頻錄音,但其中一個錄音有延遲,例如幾秒鐘。兩個音頻信號之間的時間延遲估計

很容易直觀地識別某種波形查看器查看這些信號時,這樣的延遲 - 即剛剛察覺在每一個信號第一個可見的峯值,並確保它們是相同的形狀:

http://www.greycat.ru/temp/time-delay-peaks.png

但是,我該如何編程 - 找出這個延遲(t)是什麼?兩個數字化信號稍有不同(因爲麥克風不同,位於不同位置,由於ADC設置等原因)。

我已經挖了一下,發現這個問題通常被稱爲「時間延遲估計」,它有無數的方法 - 例如,one of them

但是,是否有任何簡單的現成解決方案,如命令行實用程序,庫或直接提供的算法?

結論:我發現沒有簡單的實現,並且自己做了一個簡單的命令行工具 - 可在https://bitbucket.org/GreyCat/calc-sound-delay(GPLv3許可)下使用。它實現了在Wikipedia中描述的非常簡單的最大搜索算法。

回答

14

您正在尋找的技術叫做cross correlation。這是一種非常簡單的計算密集型技術,可用於解決各種問題,包括測量兩個相似信號(信號不需要相同)之間的時間差異(也稱爲lag)。

如果您對滯後值有一個合理的理解(或者至少是預期的滯後值範圍),那麼您可以大大減少計算總量。同上,如果你可以對你需要的準確度有一個確定的限制。

+0

是的,互相關,正好。如果可以推測出一個好的起點,那麼可以減少提及計算的好處。 – Dan 2011-02-11 13:41:18

1

一個非常簡單的事情就是檢查峯值是否超過某個閾值,A線上的高峯與B線上的高峯之間的時間可能是您的延遲。試着稍微修改一下閾值,如果圖表通常和你發佈的圖片一樣清晰,那麼你應該沒問題。