梅尔频谱和梅尔倒谱的初次理解和使用

在音频的特征提取中,经常会用到梅尔频谱和梅尔倒谱
这里记录一下librosa.feature.melspectrogram和librosa.feature.mfcc的区别

首先这里给出两个API的官方定义

def 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,
    **kwargs,
):
y:输入时域下的音频信号。shape= (n,)
sr:采样频率
n_fft:FFT窗口个数,默认2048
hop_length:连续帧之间的采样数,默认512
window:使用加窗的类型,默认为汉宁窗
return:梅尔频谱


def mfcc(
    y=None, 
    sr=22050, 
    S=None, 
    n_mfcc=20, 
    dct_type=2, 
    norm="ortho", 
    lifter=0, 
    **kwargs
):
y:输入时域下的音频信号
sr:采样频率
n_mfcc:返回mfcc特征的数量
dct_type:DCT(离散余弦变换)的类型,默认为2
return:返回mfcc特征序列,这里主要设置sr和n_mfcc(你要提取特征的个数)

首先,返回不同,一个是梅尔频谱,一个是梅尔倒谱

输入语音信号->预加重->分针->加窗->FFT(傅里叶变换)->Mel滤波器->对数运算->DCT(离散预先变换)->MFCC

这是MFCC(梅尔倒谱)的提取过程,而梅尔频谱则是经过Mel滤波器就直接输出的一个结果

其实从mfcc()API可以看出来,mfcc是在melspectrogram基础上得来的

# -- Mel spectrogram and MFCCs -- #
def mfcc(y=None, sr=22050, S=None, n_mfcc=20, **kwargs):
    if S is None:
        S = logamplitude(melspectrogram(y=y, sr=sr, **kwargs))

    return np.dot(filters.dct(n_mfcc, S.shape[0]), S)

给定原始的音频信号,通过melspectrogram()函数提取梅尔频谱,然后通过DCT离散余弦变换得到梅尔倒谱系数。(总之一句话,在梅尔频谱上取对数,做DCT变换,就得到了梅尔倒谱

Mel滤波器对应了频率提高之后人耳会迟钝的客观规律,所以Mel滤波器在人声的信号处理上有着广泛的使用,但是如果应用到非人声上,就会丢失很多高频信息。

梅尔频谱和梅尔倒谱在使用上略有差别,特征提取还是需要仔细的研究他们之间的 不同。

你可能感兴趣的:(语音,信号处理,深度学习,python)