基础知识

音频信号

音频信号是本质上是一种波,是空气等介质受挤压振动而产生的。和其他类型的波一样,声波也可以使用振动曲线图进行表示,横坐标是时间,纵坐标是振幅。

采样

音频型号是连续的,但是计算机只能处理离散的数据,因此需要对其进行采样。

sin(ωt)=sin(2πf0t)sin(ωt)=sin(2πf_0t)表示一个正弦波的振动幅度变化,设采样间隔为tst_s,则离散信号可表示为:
x(n)=sin(2πf0nts)x(n) = sin(2πf_0nt_s)

其中,n=0,1,2…表示采样点序号

奈奎斯特采样定律

采样频率大于信号中最大频率的两倍,才能恢复原始信号:

fs>2fmaxf_s > 2 * f_{max}

即一个周期内至少有两个采样点

离散傅里叶变换

将时域信号转换到频率域

定义

给定一个长度为N的时域离散信号x(n), 对应的离散频域序列X(m)

X(m)=n=0N1x(n)ej2πnm/N,m=0,1,2,...N1X(m) = \sum_{n=0}^{N-1} x(n) e^{-j2\pi nm/N} , m = 0,1,2,...N-1

其中,j=1j=\sqrt{-1},m是频率索引,X(m) 为DFT的第m个输出

性质

性质1:

X(m)=X(Nm)X(m) = X^{*}(N − m)

性质2:

X(m)表示的是“谱密度”,如果对一个幅度为A的实正弦波进行N点DFT,则经过DFT之后,该正弦波频率上的幅度M和A之间的关系为:

M=A2N=AN2M=\frac{A}{\frac{2}{N}}=\frac{AN}{2}

性质3:

DFT的线性,即如果xsum(n)=x1(n)+x2(n)x_{sum}(n) = x_1(n) + x_2(n),则Xsum(m)=X1(m)+X2(m)X_{sum}(m) = X_1(m) + X_2(m)

性质4:

时移性,对x(n)x(n)左移k个采样点,得到xshift(n)=x(nk)x_{shift}(n) = x(n − k),对xshift(n)x_{shift}(n)进行DFT,有:

Xshift(m)=ej2πkm/NX(m)X_{shift}(m) = e^{j2πkm/N} X(m)

Fbank和MFCC特征提取

预加重

预加重是指增强原始音频信号的高频部分,因为在音频的传播过程中,高频部分容易衰减,而高频部分往往蕴含对识别有帮助的信息。

公式

y[n]=x[n]ax[n1]y[n] = x[n] - ax[n-1]

其中,a取值是0.9-1

直观解释

低频信号的变化慢,将相邻的两个采样点信息两两相减之后,幅度值将明显降低;而高频信号变化快,相邻采样点相减的结果依然较大,因此就起到了“放大”高频信号能量的作用。

分帧加窗

分帧:分帧的目的是为了截取到一段相对平稳的音频信号,进行傅里叶变换。因为语音信号从长期来看是非平稳的,但是在一个音素发声过程中,信号是平稳的,所以可以通过将一段语音信号划分为多个短时的信号,得到一个个帧,再分别对其进行傅里叶变换。

加窗:加窗的目的是将一帧信号两端的幅度降低,这样做的好处是后续进行傅里叶变换时,可以使得到的频谱更细,方便辨别(减轻频谱泄露)。
加窗的公式通常写为:

y[n]=w[n]x[n]y[n] = w[n]x[n]

其中,w[n]表示窗函数,常用的窗函数有矩形窗、高斯窗、汉明窗等。


加窗的代价是导致信号两侧的信息被削弱了,可能造成信息丢失。解决这个问题的办法是在分帧的过程中,相邻帧之间重合一定的范围,前一帧与后一帧的距离称为“帧移”,通常将帧移设置为帧长的一半或者更少。

对于采样率为16kHz的信号,帧长、帧移一般为25ms、10ms。

傅里叶变换

一段连续的语音经过分帧加窗后,得到若干个语音帧,对他们分别进行傅里叶变换的操作,将时域信息转化为频域信息,取DFT系数的模,得到谱特征。

第t帧信号的DFT系数可表示为:Xt(m),m=0,1,...,NX_t(m) , m=0,1,...,N
将每一帧的DFT系数按时间依次排列成一个矩阵YCTNY\in C^{T*N},且Y[t,m]=Xt(m)Y[t,m]=X_t(m)。绘制该矩阵,并用渐变色表示DFT系数的大小,就得到了语谱图

梅尔滤波器组和对数操作

人耳对频率的感觉不是线性变化的,人耳对低频信号的敏感度比高频信号大,近似服从对数关系。为了使用梅尔滤波器进行处理,先将频率由线性域转化到梅尔域:

mel(f)=2595log10(1+f700)mel(f) = 2595*log_{10}(1 + \frac{f}{700})

梅尔滤波器在频谱图上显示为一个三角形,公式为:

其中,f(m-1)、f(m)、f(m+1)分别表示该滤波器的起始频率、中间频率、终止频率。

梅尔滤波器的生成方式

根据梅尔滤波器的个数P和梅尔频率范围,等间隔的计算各个梅尔滤波器的起始频率、中间频率、以及终止频率,并且保证当前滤波器的中间频率是下一个滤波器的起始频率。

Fbank特征

使用P个梅尔滤波器(如128个),对经过DFT后的每个语谱特征进行滤波,得到P个滤波器组能量,进行log操作,得到Fbank特征。

倒谱分析

对于经过DFT后,获得的频谱图,可以看到有若干个能量较高的峰,他们是用于识别该语音的关键特征。一个频谱图可以被分解为“谱包络”和“谱细节”两个成分,使用分解后的“谱包络”成分有助于获得更丰富的特征信息。

具体的分解方式上,思路是对频谱图再做一次傅里叶变换。在频率域做傅里叶变换,又被称为“逆傅里叶变换”(IDFT)

使用数学符号表示,就是对于频谱X[k],将其写作两个部分的乘积,并取对数:

X[k]=H[k]E[k]logX[k]=logH[k]+logE[k]X[k] = H[k]E[k] \\ log X[k] = log H[k] + log E[k]

将log X[k]进行逆傅里叶变换(IDFT),获得

x[k]=h[k]+e[k]x[k] = h[k] + e[k]

则可以从变换后的结果中,提取低频部分(如低12维),获得h[k],称为倒谱系数(Cepstral coefficients)。

MFCC特征

MFCC特征是将经过梅尔滤波器组滤波后的特征,进行倒谱分析,获得的倒谱系数。

除了计算每一帧的MFCC特征外,通常还要计算MFCC特征的变化情况,以及能量信息,计算方法为:

MFCC动态特征

一阶差分(Delta, Δ),类比速度

Δt=c(t+1)c(t1)2\Delta t = \frac{c(t + 1) − c(t − 1)}{2}

二阶差分(Delta, Δ),类比加速度

ΔΔt=Δ(t+1)Δ(t1)2\Delta \Delta t = \frac{\Delta(t + 1) − \Delta(t − 1)}{2}

能量信息

e=x2[n]e = \sum x^2 [n]

一般常用的MFCC特征,包含39维,包括:

  • 12维原始MFCC
  • 12维Δ
  • 12维Δ Δ
  • 1维能量
  • 1维能量Δe
  • 1维能量Δ Δ

MFCC特征一般用于对角GMM训练,各维度之间相关性小
Fbank特征一般用于DNN训练