波形文件的自相关

Autocorrelation of a wave file

我正在研究音频信号处理。 为此,我使用了来自 here.

的单通道波形文件

我的第一个实验是通过以下代码查看信号的自相关。

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))