誰かが私に怒鳴る前に、私はこの質問が何度も尋ねられたことを完全に理解します。既存の質問と回答をすべて読んだことは間違いありませんが、問題の一部についてはまだ混乱しています。
閉鎖的な環境で音楽を再生する音源(A)があります。Aの録音に使用しているマイクがあります。同じ特性と長さ(サンプル数)を共有する2つのwavファイルが残ります。
私の目標は、Aがマイクに到達するのにかかった時間を計算することです。
相互相関(numpy)を使用して計算を実行しようとしています:
# Delay estimation
corr = numpy.convolve(original_audio, recorded_audio, 'full')
delay = int(len(corr)/2) - numpy.argmax(corr)
distance = delay / sample_rate * 343 # sample_rate == 22050, m/s = speed of sound
print("Distance full: %.2f cm" % (distance * 100))
300,000 cmの範囲の値を一貫して取得します。スピーカーとマイクの間の距離は約2フィートです。
これはすべて私にとってはまったく新しいことなので、明らかな何かが欠けていると確信しています。
前もって感謝します。
PeterKはおそらく正しいです。最初に入力の1つを時間反転および共役させることにより、畳み込みを介して相関を実装できることに注意してください。これにより、相関に高速のたたみ込みアルゴリズム(overlap-saveなど)を使用できます。
—
Jason R
numpy.correlate
代わりに使用してはいけませんnumpy.convolve
か?遅延を推定するには、信号を畳み込むのではなく、相互相関させる必要があります。たたみ込みにより、はるかに大きな遅延が生じる可能性があります。