python3模块之librosa初体验

  |   0 评论   |   0 浏览

背景

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)

参考