1. 音频信号处理
对每个wav文件进行如下处理:
y, sr = librosa.load(file_path, sr=44100) # 指定采样率为44.1 kHz mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13) #
y
是音频信号的数组表示,其中每个值代表一个样本点的振幅。sr
是音频的采样率,这里将使用我们指定的 44.1 kHz。mfcc
是一个二维数组,每一列对应一个时间帧的 MFCC 特征。
在 librosa.feature.mfcc
函数中,一个时间帧的大小通常是通过参数 n_fft
来指定的,它代表进行快速傅里叶变换(FFT)的窗口大小。而连续帧之间的重叠部分是通过参数 hop_length
来指定的。如果未明确指定,librosa
默认的 n_fft
通常是 2048,而 hop_length
默认是 512,这意味着默认情况下每帧有 2048 个样本,并且每帧之间有 512 个样本的重叠。
帧的大小(n_fft
)和帧移(hop_length
)共同决定了 MFCC 特征的时间分辨率。较大的 n_fft
值会导致每帧的时长较长,从而得到较平滑的频谱,但时间分辨率较低;较小的 n_fft
值则相反。帧移(hop_length
)决定了帧与帧之间的重叠程度,较小的 hop_length
值会增加时间分辨率,但会减少频率分辨率。
例如,如果采样率 sr
是 44.1 kHz,那么一帧的长度(以秒为单位)可以这样计算:
- 帧长 =
n_fft
/sr
- 帧移 =
hop_length
/sr
对于默认值,帧长是 2048 / 44100
≈ 0.0465 秒(大约 46.5 毫秒),帧移是 512 / 44100
≈ 0.0116 秒(大约 11.6 毫秒)。这意味着每个 MFCC 特征向量大约覆盖 46.5 毫秒的音频,而每 11.6 毫秒就会生成一个新的特征向量。
常用设置为帧大小为 25 毫秒,frame_size = 0.025
,
步幅为 10 毫秒(重叠 15 毫秒)
np.ceil
是 NumPy 库中的一个函数,用于计算数组中每个元素的上限值
np.tile
是一个 NumPy 函数,它用于重复数组。这个函数将一个给定的数组沿着指定的轴重复指定的次数,从而创建一个新的、更大的数组。np.tile(A,(3,1)),表示将数组A,沿着一维重复3次,沿着2维重复1次。