波形文件的自相关



我在玩音频信号处理。为此,我在这里使用一个单通道波形文件。

我的第一个实验是通过下面的代码来观察信号的自相关。

from scipy.io import wavfile
from scipy import signal
import numpy as np
sample_rate_a, data_a = wavfile.read('sounds/CantinaBand3.wav')
corr = signal.correlate(data_a, data_a)
lags = signal.correlation_lags(len(data_a), len(data_a))
corr = corr / np.max(corr)
lag = lags[np.argmax(corr)]
print(lag, np.max(corr))

假设这是一个自相关,我本希望在滞后0时看到1.0的峰值(因为我对相关矩阵进行了归一化(。

然而,该程序在滞后-36141时输出1.0的峰值。在滞后0时,相关性为-0.3526826588536898。

目前,我对这种行为没有任何解释。我对相关性或滞后的计算有错误吗?

当您读取wav文件时,data_a是一个int16数组。相关性也将使用int16数据类型进行计算,这将导致大量溢出。要获得有意义的结果,可以将其转换为浮点数组。

from scipy.io import wavfile
from scipy import signal
import numpy as np
_, data_a = wavfile.read('./CantinaBand3.wav')
data_a = np.float32(data_a)
corr = signal.correlate(data_a, data_a)
lags = signal.correlation_lags(len(data_a), len(data_a))
corr = corr / np.max(corr)
lag = lags[np.argmax(corr)]
print(lag, np.max(corr))

最新更新