python3模块之librosa初体验
背景
librosa是python语音信号处理的第三方库。
初体验
DNN做声学模型时,一般用filterbank feature,不用mfcc,因为fbank信息更多 (mfcc是由mel fbank有损变换得到的)。
mfcc一般是GMM做声学模型时用的,因为通常GMM假设是diagonal协方差矩阵,而cepstral coefficient更符合这种假设。
linear spectrogram里面冗余信息太多了,维度也高,所以一般也不用。
提取Mel谱系数
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
# https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav
y, sr = librosa.load('./nls-sample-16k.wav', sr=16000)
# 方法一:使用时间序列求Mel频谱
print(librosa.feature.melspectrogram(y=y, sr=sr))
# 方法二:使用stft频谱求Mel频谱
# stft频谱
D = np.abs(librosa.stft(y)) ** 2
# 使用stft频谱求Mel频谱
S = librosa.feature.melspectrogram(S=D)
print(S)
# 打印结果
plt.figure(figsize=(10, 4))
librosa.display.specshow(librosa.power_to_db(S, ref=np.max),
y_axis='mel', fmax=8000, x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Mel spectrogram')
plt.tight_layout()
plt.show()
提取Log-Mel谱系数
Log-Mel Spectrogram特征是目前在语音识别和环境声音识别中很常用的一个特征,由于CNN在处理图像上展现了强大的能力,使得音频信号的频谱图特征的使用愈加广泛,甚至比MFCC使用的更多。
import librosa
# https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav
y, sr = librosa.load('./nls-sample-16k.wav', sr=16000)
# 提取 mel spectrogram feature
melspec = librosa.feature.melspectrogram(
y, sr, n_fft=1024, hop_length=512, n_mels=128)
# 转换到对数刻度
logmelspec = librosa.amplitude_to_db(melspec)
# 结果为一个 128 * 97的矩阵
print(logmelspec.shape) # (128, 97)
提取MFCC系数
MFCC特征是一种在自动语音识别和说话人识别中广泛使用的特征。
import librosa
# https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav
y, sr = librosa.load('./nls-sample-16k.wav', sr=16000)
# 提取 MFCC feature
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40)
# 结果为一个 40 * 97的矩阵
print(mfccs.shape) # (40, 97)