librosa库 【NLP】音频特征工程(1)( 四 )


Mel滤波器组
librosa.filters.mel(sr, n_fft, n_mels=128, fmin=0.0, fmax=None, htk=False, norm=1)参数:sr :输入信号的采样率n_fft :FFT组件数n_mels :产生的梅尔带数fmin :最低频率(Hz)fmax:最高频率(以Hz为单位) 。如果为None,则使用fmax = sr / 2.0norm:{None,1,np.inf} [标量]如果为1,则将三角mel权重除以mel带的宽度(区域归一化) 。否则,保留所有三角形的峰值为1.0返回:Mel变换矩阵
# Mel滤波器组def mel_filter_demo():melfb=librosa.filters.mel(22050, 2048)plt.figure()dd.specshow(melfb, x_axis='linear')plt.ylabel('Mel filter')plt.title('Mel filter bank')plt.colorbar()plt.tight_layout()plt.show()
Mel 频谱
librosa.feature.melspectrogram(y=None, sr=22050, S=None, n_fft=2048, hop_length=512, win_length=None, window='hann',center=True, pad_mode='reflect', power=2.0)如果提供了频谱图输入S,则通过mel_f.dot(S)将其直接映射到mel_f上 。如果提供了时间序列输入y,sr,则首先计算其幅值频谱S,然后通过mel_f.dot(S ** power)将其映射到mel scale上。默认情况下,power= 2在功率谱上运行 。参数:y :音频时间序列sr :采样率S :频谱n_fft :FFT窗口的长度hop_length :帧移win_length :窗口的长度为win_length,默认win_length = n_fftwindow :字符串,元组,数字,函数或shape =(n_fft, )窗口规范(字符串,元组或数字);看到scipy.signal.get_window窗口函数,例如 scipy.signal.hanning长度为n_fft的向量或数组center:bool如果为True,则填充信号y,以使帧 t以y [t * hop_length]为中心 。如果为False,则帧t从y [t * hop_length]开始power:幅度谱的指数 。例如1代表能量,2代表功率,等等n_mels:滤波器组的个数 1288fmax:最高频率返回:Mel频谱shape=(n_mels, t)
# Mel-Scaleddef mel_scaled_demo():y, sr = librosa.load(librosa.util.example_audio_file())# 方法一:使用时间序列求Mel频谱print(librosa.feature.melspectrogram(y=y, sr=sr))# array([[2.891e-07,2.548e-03, ...,8.116e-09,5.633e-09],#[1.986e-07,1.162e-02, ...,9.332e-08,6.716e-09],#...,#[3.668e-09,2.029e-08, ...,3.208e-09,2.864e-09],#[2.561e-10,2.096e-09, ...,7.543e-10,6.101e-10]])# 方法二:使用stft频谱求Mel频谱D = np.abs(librosa.stft(y)) ** 2# stft频谱S = librosa.feature.melspectrogram(S=D)# 使用stft频谱求Mel频谱plt.figure(figsize=(10, 4))dd.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 特征
由于CNN等图像神经网络的强势表现,音频信号的频谱特征使用甚至超过了MFCC
# Log Mel Spec.def log_mel_spec_demo():y, sr = librosa.load('audio/aud_1.mp3', sr=8000, duration=180)# 提取mel spec. featuremelspec=librosa.feature.melspectrogram(y, sr, n_fft=1024, hop_length=512, n_mels=128)logmelspec=librosa.amplitude_to_db(melspec)print(logmelspec.shape) #(128, 2813)
Log-Mel 特征是二维数组,128表示Mel频率维度(频域),2813为时间帧长度(时域),所以Log-Mel 特征是音频的视频特征,接口中
n_fft表示窗口大小
表示相邻窗口之间的距离
表示mel bands的数量
MFCC系数
MFCC特征是在自动语音识别和发言者识别中的广泛使用特征
librosa.feature.mfcc(y=None, sr=22050, S=None, n_mfcc=20, dct_type=2, norm='ortho', **kwargs)参数:y,音频数据sr,采样率S,np.ndarray,对数功能梅尔谱图n_mfcc,需要返回的MFCC数量dct_type,None, or {1, 2, 3} 离散余弦变换(DCT)类型,默认使用2型norm,None or 'ortho'规范,如果dct_type为2或3,设置norm='ortho'使用正交DCT基础,标准化不支持dct_type=1返回:M:MFCC序列