美文网首页
基于Fbank的语音数据特征提取

基于Fbank的语音数据特征提取

作者: 静一下1 | 来源:发表于2021-01-17 23:07 被阅读0次

    Fbank是需要语音特征参数提取方法之一,因其独特的基于倒谱的提取方式,更加的符合人类的听觉原理,因而也是最为普遍、最有效的语音特征提取算法。基于滤波器组的特征 Fbank(Filter bank), Fbank 特征提取方法就是相当 于 MFCC 去掉最后一步的离散余弦变换(有损变换),跟 MFCC 特征, Fbank 特征保留了更多的原始语音数据。

    MFCC语音特征的提取过程,如下图:

    需要对语音信号进行预加重、分帧、加窗等等处理,而这些处理的方式均是为了能够最大化语音信号的某些信息,以达到最好特征参数的提取。

    语音读取及可视化:

    结果:

    1.预加重

    预加重其实就是将语音信号通过一个高通滤波器,来增强语音信号中的高频部分,并保持在低频到高频的整个频段中,能够使用同样的信噪比求频谱。在本实验中,选取的高通滤波器传递函数为:

                                                  y(n)=x(n)-a*x(n-1)   预加重系数  a=0.97

    式中a的值介于0.9-1.0之间,我们通常取0.97。同时,预加重也是为了消除发生过程中声带和嘴唇的效应,来补偿语音信号受到发音系统所抑制的高频部分,也为了突出高频的共振峰。

    结果:

    2.分帧

    分帧是指在跟定的音频样本文件中,按照某一个固定的时间长度分割,分割后的每一片样本,称之为一帧,这里需要区分时域波形中的帧,分割后的一帧是分析提取Fbank的样本,而时域波形中的帧是时域尺度上对音频的采样而取到的样本。

    分帧是先将N个采样点集合成一个观测单位,也就是分割后的帧。通常情况下N的取值为512或256,涵盖的时间约为20-30ms。也可以根据特定的需要进行N值和窗口间隔的调整。为了避免相邻两帧的变化过大,会让两相邻帧之间有一段重叠区域,此重叠区域包含了M个取样点,一般M的值约为N的1/2或1/3。

    语音识别中所采用的信号采样频率一般为8kHz或16kHz。以8kHz来说,若帧长度为256个采样点,则对应的时间长度是256/8000×1000=32ms。本次实验中所使用的采样率(Frames Per Second)16kHz,窗长25ms(400个采样点),窗间隔为10ms(160个采样点)。

    结果:

    3.加窗

    在对音频进行分帧之后,需要对每一帧进行加窗,以增加帧左端和右端的连续性,减少频谱泄漏。在提取Fbank的时候,比较常用的窗口函数为Hamming窗。

    假设分帧后的信号为 S(n),n=0,1,2…,N-1,其中N为帧的大小,那么进行加窗的处理则为:

    S^{\cdot}(n)=S(n) \times W(n)

    W(n)的形式如下:

    不同的a值会产生不同的汉明窗,一般情况下a取值0.46。进行值替换后,W(n)则为:

                                      W(n)=0.54-0.46cos(\frac{2 \pi n}{N-1})  , 0<<n<<N-1

    对应的汉明窗时域波形类似下图:

    结果:

    4.对信号进行离散傅立叶变换 (DFT)

    由于信号在时域上的变换通常很难看出信号的特性,所有通常将它转换为频域上的能量分布来观察,不同的能量分布,代表不同语音的特性。所以在进行了加窗处理后,还需要再经过离散傅里叶变换以得到频谱上的能量分布。对分帧加窗后的各帧信号进行快速傅里叶变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。设语音信号的DFT为: 

                                  s(k)=DFT[S(n)]=\sum_{n=0}^NS(n)e^{-j \frac{2 \pi kn}{N}}, 0<<k<<N-1

    能量的分布为:

                                                                   p(k)=\frac{1}{N}|s(k)|^2

    下图是有频谱到功率谱的转换结果示意图:

    结果:

    5. 应用梅尔滤波器 (Mel Filterbank)

    Fbank考虑到了人类的听觉特征,先将线性频谱映射到基于听觉感知的Mel非线性频谱中,然后转换到倒谱上。 在Mel频域内,人对音调的感知度为线性关系。举例来说,如果两段语音的Mel频率相差两倍,则人耳听起来两者的音调也相差两倍。Mel滤波器的本质其实是一个尺度规则,通常是将能量通过一组Mel尺度的三角形滤波器组,如定义有M个滤波器的滤波器组,采用的滤波器为三角滤波器,中心频率为 f(m),m=1,2…M,M通常取22-26。f(m)之间的间隔随着m值的减小而缩小,随着m值的增大而增宽,如图所示:

    从频率到Mel频率的转换公式为:

    其中 f 为语音信号的频率,单位赫兹(Hz)。

    假如有10个Mel滤波器(在实际应用中通常一组Mel滤波器组有26个滤波器。),首先要选择一个最高频率和最低频率,通常最高频率为8000Hz,最低频率为300Hz。使用从频率转换为Mel频率的公式将300Hz转换为401.25Mels,8000Hz转换为2834.99Mels,由于有10个滤波器,每个滤波器针对两个频率的样点,样点之间会进行重叠处理,因此需要12个点,意味着需要在401.25和2834.99之间再线性间隔出10个附加点,如:

    m(i) = 401.25,622.50,843.75,1065.00,1286.25,1507.50, 1728.74,1949.99,2171.24,2392.49,2613.74,2834.99

    现在使用从Mel频率转换为频率的公式将它们转换回赫兹:

    h(i) = 300,517.33,781.90,1103.97,1496.04,1973.32,2554.33, 3261.62,4122.63,5170.76,6446.70,8000

    将频率映射到最接近的DFT频率:f(i)=\lfloor (257+1)*h(i)/8000\rfloor

    于是,我们得到了一个由10个Mel滤波器构成的Mel滤波器组。

    相关文章

      网友评论

          本文标题:基于Fbank的语音数据特征提取

          本文链接:https://www.haomeiwen.com/subject/habaaktx.html