倒谱与梅尔频率

发布时间 2024-01-08 20:11:09作者: 倒地

梅尔倒频谱系数(MFCC,Mel Frequency Cepstral Coefficents)在人声领域(语音识别,说话人辨认)等领域应用广泛。

这个文章留下学习倒谱与梅尔频率的痕迹。

频谱

声音是一维时域信号。为了分析声音的频域规律,就要用到傅里叶变换,将信号从时域转换到频域。但频域信号失去了时域信息,无法看出频率分布随时间的变化。

对此,有短时傅里叶变换(STFT),即在短时间内对长信号进行傅里叶变换。将 STFT 获得的一系列频域信息按时间顺序叠放,就获得了频谱。

梅尔频谱(mel spectrogram)

人耳对音高的感知不是线性的。人耳对高频频率的变化很迟钝,对低频敏感。

梅尔频谱通过一个变换公式,将普通频率映射到更适合人类直觉的标准。

$$
mel(f)=2595\times \log_{10}(1+\frac{f}{700})
$$

其逆变换如下,

$$
f=700(10^{mel(f)/2595}-1)
$$

梅尔滤波器组

根据人耳的音高感知特点设计的滤波器组。低频处滤波器密集,高频则相反。梅尔滤波器组通常由 40 个三角滤波器组成。

第 $m$ 号滤波器的中心频率 $f(m)$ 满足:

$$
M(f(m))=M(f_{low})+m\frac{M(f_{high})-M(f_{low})}{N+1}
$$

  • $M(\cdot)$ 是频率映射到梅尔频率的运算
  • $f_{high}$、$f_{low}$ 是滤波器组的频率上下限
  • $N$ 是滤波器组的滤波器总数量

获得各个滤波器的中心频率 $f(m)$ 后,第 $m$ 个梅尔滤波器的增益公式如下:

$$
H_m(k)=
\begin{cases}
0& k<f(m-1)\
\frac{k-f(m-1)}{f(m)-f(m-1)}& f(m-1)\le k< f(m)\
1& k=f(m)\
\frac{f(m+1)-k}{f(m+1)-f(m)}& f(m)<k\le f(m+1)\
0& k>f(m+1)
\end{cases}
$$

这是获得等高梅尔滤波器(Mel-filter bank with same bank height)的方法。对应的还有等面积梅尔滤波器(Mel-filter bank with same bank area),后者更适合人声领域。

倒谱分析(Cepstrum Analysis)

频谱经过对数处理获得对数频谱,然后将对数频谱进行傅里叶逆变换,就获得了 倒谱 Cepstrum

获得倒谱并不难。信号 x 获得频谱 X = np.fft.fft(x),进行对数处理 X_log = np.log(X_magnitude),最后进行傅里叶逆变换 cepstrum = np.fft.ifft(X_log).real

倒谱的意义:通过取对数,那些难以察觉的频率分量变得容易观察。

梅尔频率倒谱

计算 MFCC 包括以下步骤:

  • 对信号进行傅立叶变换,得到频谱
  • 将频谱的频率从赫兹转换为梅尔频谱
  • 在梅尔频率上应用梅尔滤波器组
  • 对滤波器能量取对数
  • 进行离散余弦变换(DCT,类似于离散傅里叶变换但只使用实数),得到 MFCC

参考来源