波形文件的自相关
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))
我正在研究音频信号处理。 为此,我使用了来自 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))