声谱图,梅尔语谱,倒谱,梅尔倒谱系数

tech2022-11-04  141

语音特征提取。声音信号本是一维的时域信号,直观上很难看出频率变化规律。傅里叶变换可把它变到频域上,虽然可看出信号的频率分布,但是丢失了时域信息,无法看出频率分布随时间的变化。为了解决这个问题,很多时频分析手段应运而生,如短时傅里叶,小波,Wigner分布等都是常用的时频域分析方法。

声谱图 / 语谱图(spectrogram)

短时傅里叶变换(STFT)是最经典的时频域分析方法。所谓短时傅里叶变换,顾名思义,是对短时的信号做傅里叶变化。那么短时的信号怎么得到的? 是长时的信号分帧得来的。STFT的原理非常简单,把一段长信号分帧、加窗,再对每一帧做傅里叶变换(FFT),最后把每一帧的结果沿另一个维度(频域)堆叠起来(旋转90度),得到类似于一幅图的二维信号形式。然后把这些幅度映射到一个灰度级表示(也可以理解为将连续的幅度量化为256个量化值?),0表示黑,255表示白色。幅度值越大,相应的区域越黑。这样就得到了最右边的图。那为什么要这样呢?为的是增加时间这个维度,这样就可以显示一段语音而不是一帧语音的频谱,而且可以直观的看到静态和动态的信息。

如果原始信号是声音信号,那么通过STFT展开得到的二维信号就是所谓的声谱图。 语谱(spectrogram),实际上就是把每帧的频谱图向左旋转90度,用颜色的深浅表示幅度的大小,幅度越大颜色越深,然后把每帧的颜色信息按照时间(帧)的顺序列出来,所以,语谱的横坐标为时间(帧),纵坐标为频率,颜色为频率的幅度。 这个过程中,需要注意的有两点,一个是帧长,对于使用较短的帧,其具有较宽的频带(宽带语谱图),较高的时间分辨率和较低的频率分辨率,而对于较长的帧,则具有较窄的频带(窄带语谱图),较低的时间分辨率和较高的频率分辨率;另一点要注意的是为了是帧与帧之间的过渡更加平稳,采用了帧移的方法,即两帧之间有个重叠区域。

下图是宽带语谱图和窄带语谱图:

宽带语谱图(45Hz):良好的时间分辨率,能给出语音的共振峰频率及清辅音的能量汇聚区,共振峰呈现黑色条纹;窄带语谱图(300Hz):良好的频率分辨率,有利于显示基音频率和各次谐波,不利于观察共振峰(声道变化)。

语谱图的本质就是确定不同说话人声音的本性。横坐标为时间,纵坐标为频率。图中的条纹称之为“声纹”,它因人而异,即可利用声纹鉴别不同的说话人。有横杠(Bar),乱纹,和竖直条等花纹。

横杠是与时间轴平行的几条深黑色带纹,它们相应于短时谱中的几个凸点,也就是共振峰,从横杠对应的频率和带宽可以确定相应的共振峰频率和带宽。在一个语音段的语谱图中,是否有横杠出现是判断他是否是浊音的重要标志。竖直条(又叫冲直条),是与时间轴垂直的一条窄黑条,每个竖直条相当于一个基音,条纹的起点相当于声门脉冲的起点,条纹之间的距离代表基音周期,条纹越密说明基音频率越高。元音一般对应横杠,它代表共振峰的存在。清擦音在语谱图中表现为乱纹,乱纹的深浅,上下限反映了噪声能量在频域中的分布。

下图是一段语音的声谱图,很黑的地方就是频谱图中的峰值(共振峰formants) 声谱图优点: 音素(Phones)的属性可以更好的在这里面观察出来。 通过观察共振峰和它们的转变可以更好的识别声音。 隐马尔科夫模型(Hidden Markov Models)就是隐含地对声谱图进行建模以达到好的识别性能。还有一个作用就是它可以直观的评估TTS系统(text to speech)的好坏,直接对比合成的语音和自然的语音声谱图的匹配度即可。

梅尔频谱(Mel-spectrogram)

声谱图往往是很大的一张图,为了得到合适大小的声音特征,往往把它通过梅尔标度滤波器组(mel-scale filter banks),变换为梅尔频谱。 人耳听到的声音高低和实际(Hz)频率不呈线性关系,用Mel频率更符合人耳的听觉特性(这正是用Mel声谱图的一个动机,由人耳听力系统启发),即在1000Hz以下呈线性分布,1000Hz以上呈对数增长,Mel频率与Hz频率的关系为fmel=2595⋅lg(1+f700Hz)。 有另一种计算方式为fmel=1125⋅ln(1+f700Hz)。python中可以用librosa调包得到梅尔声谱图。 上图是HZ到Mel的映射关系图,由于二者为log关系,在频率较低时,Mel随HZ变化较快;当频率较高时,曲线斜率小,变化缓慢。

倒谱(cepsrum)

下面是一个语音的频谱图(FT)。峰值表示语音的主要频率成分,我们把这些峰值称为共振峰(formants),而共振峰就是携带了声音的辨识属性(就是个人身份证一样)。 提取共振峰:要提取的不仅仅是共振峰的位置,还得提取它们转变的过程。所以我们提取的是频谱的包络(Spectral Envelope)。这包络就是一条连接这些共振峰点的平滑曲线。 可以这么理解,将原始的频谱由两部分组成:包络和频谱的细节。这里用到的是对数频谱,所以单位是dB。那现在我们需要把这两部分分离开,这样我们就可以得到包络了。

那怎么把他们分离开呢?也就是,怎么在给定log X[k]的基础上,求得log H[k] 和 log E[k]以满足log X[k] = log H[k] + log E[k]呢? 即:同态信号处理。它的目的是将非线性问题转化为线性问题的处理方法。

1)将原语音信号经过傅里叶变换得到频谱:X[k]=H[k]E[k]; (时域卷积–频域乘积)只考虑幅度就是:|X[k] |=|H[k]||E[k] |;

2)我们在两边取对数:log||X[k] ||= log ||H[k] ||+ log ||E[k] ||。(乘性–加性)

3)再在两边取逆傅里叶变换得到:x[k]=h[k]+e[k]。 在对数频谱上面做IFFT就相当于在一个伪频率(pseudo-frequency)坐标轴上面描述信号。所以虽然是时域序列,但它们所处的离散时域显然不同,此时称为倒谱频域。

x[k]实际上就是倒谱Cepstrum。(这个是一个新造出来的词,把频谱的单词spectrum的前面四个字母顺序倒过来就是倒谱的单词了)。而我们所关心的h[k]就是倒谱的低频部分。h[k]描述了频谱的包络,它在语音识别中被广泛用于描述特征。

总结下,倒谱(cepstrum)就是一种信号的傅里叶变换经对数运算后再进行傅里叶反变换得到的谱。它的计算过程如下:

梅尔倒谱系数(Mel-Frequency Cepstral Coefficients)

我们将频谱通过一组Mel滤波器就得到Mel频谱。公式表述就是: log X[k] = log (Mel-Spectrum)。这时候我们在log X[k]上进行倒谱分析:

1)取对数:log X[k] = log H[k] + log E[k]。

2)进行逆变换:x[k] = h[k] + e[k]。

在Mel频谱上面获得的倒谱系数h[k]就称为Mel频率倒谱系数,简称MFCC。

完整的MFCC及其动态特征提取过程:

总结

1.频谱:时域信号(一维)傅里叶变换后的频域信号(一维)。

2.声谱图/语谱图:时域信号(一维)短时傅里叶变换后的时频信号(二维)。

3.倒谱:也叫做倒频谱,二次谱,对数功率谱等。对声谱图取对数后,再DFT变回时域,此时不是完全意义上的时域,应叫做倒谱域。

4.MFCC:对线性声谱图应用mel滤波器后,取log,得到log梅尔声谱图,然后对log滤波能量(log梅尔声谱)做DCT离散余弦变换(傅里叶变换的一种),然后保留第2到第13个系数,得到的这12个系数就是MFCC。

附加: 1.能量谱:也叫做能量密度谱。是原信号傅里叶变化的平方。用于描述时间序列的能量随频率的分布。 2.功率谱:功率谱密度(PSD)的简称。定义为单位频带内的吸纳后功率。其推导公式较为复杂,但维纳-辛欣定理证明了:一段信号的功率谱等于 这段信号自相关函数的傅里叶变换。 注:信号分为确定和随机,确定信号又分为能量和功率,随机信号一定是功率信号。语音信号是随机信号。

最新回复(0)