【语⾳信号处理】1语⾳信号可视化——时域、频域、语谱图、MFCC详细思路
与计算、差分
基本语⾳信号处理操作⼊门
1. 数据获取
数据集来⾃:
1. ——共包括四个专业最佳⼈,六种情绪⽣⽓(怒),⾼兴(⾼兴) ),害怕(fear),悲伤(sad),其他(surprise)和中性
(neutral),共9600句不同最佳。其中300句是相同⽂本的,也就是说对相同的⽂本赋以不同的情感来阅读,这些语料可以利⽤对⽐分析不同的情感状态下的声学和韵律表现;另外100句是不同⽂本的,这些⽂本从字⾯意思就可以修剪其情感归属,以便录⾳⼈更准确地表现出情感,但完整的CASIA数据集是收费的,因此只到了1200句残缺数据集,压缩包共58.2MB
2. ——该数据集为好未来⽼师上课⾳频,共包含4541条⾳频,总时长12.5⼩时。录⾳在安静的室内环境中录制,每条⾳频只有⼀个说
话⼈。标注包括愉悦度(Pleasure)和激情度(Arousal)两个维度,每个⾳频⽚段对应⼀个P值和A值,范围都在[-3,3]之间,值越⼤表⽰愉悦度或激情度越⾼。⾳频长度:10s,采样率:16kHz
3. ⼀个多模态英⽂数据集,在申请获得许可,《Multimodal Language Analysis in the Wild_ CMU-MOSEI Dataset and
Interpretable Dynamic Fusion Graph》数据集
4. 《CH-SIMS: A Chinese Multimodal Sentiment Analysis Dataset with Fine-grained Annotations of Modality》–【中⽂多模
态情绪】,Github,
2. 语⾳信号可视化
参考⼀⽂,MFCC特征提取与神经⽹络可见此⽂:,以及有个专栏,其中有很多关于,还有这个
2.1 时域特征
使⽤wave模块读取wav⾳频⽂件,画图时域图像:
在这⾥插⼊图⽚描述
2.2 频域特征
numpy模块⾃带了快速傅⾥叶变换的函数,对上⾯的⾳频数据进⾏傅⾥叶变换:
在这⾥插⼊图⽚描述
2.3 语谱图
语⾳信号⽤频谱向量序列表⽰
语⾳的时域分析和频域分析是语⾳分析的两种重要⽅法,但是都存在着局限性。时域分析对语⾳信号的频率特性没有直观的了解,频域特性中⼜没有语⾳信号随时间的变化关系。语谱图的原理如下:
在这⾥插⼊图⽚描述
语⾳被分为很多帧,每帧语⾳都对应于⼀个频谱(通过短时FFT计算),频谱表⽰频率与能量的关系。在实际使⽤中,频谱图有三种,即线性振幅谱、对数振幅谱、⾃功率谱(对数振幅谱中各谱线的振幅都作了对数计算,所以其纵坐标的单位是dB(分贝)。这个变换的⽬的是使那些振幅较低的成分相对⾼振幅成分得以拉⾼,以便观察掩盖在低幅噪声中的周期信号)
在这⾥插⼊图⽚描述
将其中⼀帧语⾳的频谱通过坐标表⽰出来,如上图左。现在我们将左边的频谱旋转90度。得到中间的图。然后把这些幅度映射到⼀个灰度级表⽰,0表⽰⿊,255表⽰⽩⾊。幅度值越⼤,相应的区域越⿊。这样就得到了最右边的图。那为什么要这样呢?为的是增加时间这个维度,这样就可以显⽰⼀段语⾳⽽不是⼀帧语⾳的频谱,⽽且可以直观的看到静态和动态的信息
这样会得到⼀个随着时间变化的频谱图,这个就是描述语⾳信号的spectrogram语谱图或声谱图:
在这⾥插⼊图⽚描述
语谱图综合了时域和频域的优点,明显的显⽰出了语⾳频谱随时间的变化情况、语谱图的横轴为时间,纵轴为频率,任意给定频率成分在给定时刻的强弱⽤颜⾊深浅来表⽰。颜⾊深的,频谱值⼤,颜⾊浅的,频谱值⼩。语谱图上不同的⿊⽩程度形成不同的纹路,称之为声纹,不同讲话者的声纹是不⼀样的,可⽤作声纹识别。
语谱图分为功率谱,幅度谱,相位谱。使⽤matplotlib可以直接获得语谱图:
在这⾥插⼊图⽚描述
具体函数的参数可见
语谱图分为窄带和宽带语谱图。“窄带”,顾名思义,带宽⼩,则时宽⼤,则短时窗长,窄带语谱图就是长窗条件下画出的语谱图。“宽带”,正好相反。⾄于“横竖条纹”,窄带语谱图的带宽窄,那么在频率上就“分得开”,即能将语⾳各次谐波“看得很清楚”,即表现为“横线”。“横”就体现出了频率分辨率⾼。分辨率可以直观的看做“分开能⼒”。“频率分辨率”⾼就是在频率上将各次谐波分开的能⼒⾼,表现为能分辨出各次谐波的能⼒⾼,频率分辨率越⾼,越容易分辨各次谐波。类似的,宽带语谱图的时宽窄,那么在时间上就“分得开”,即能将语⾳在时间上重复的部分“看得很清楚”,即表现为“竖线”。“竖”就体现出了时间分辨率⾼。时间分辨率越⾼,谱图上的竖线看得越清楚。图1和图2分别⽰出了⼀条语⾳句⼦的窄带语谱图和宽带语谱图。短时窗长度分别是20ms和2ms
在这⾥插⼊图⽚描述
我们为什么要为语谱图⽽烦恼?在语谱图中可以更好地观察到⾳素Phone及其特性,通过声母和它们的转换可以更好地识别声⾳,隐马尔可夫模型对这些谱图进⾏隐性建模,以进⾏语⾳识别
语谱图的作⽤:
语⾳信号的时间-频率表⽰⽅法
语谱图是研究语⾳(⾳素Phone)的⼯具
语⾳学家对⾳素Phone及其特性进⾏直观研究
隐马尔科夫模型隐含了语⾳到⽂本系统的语谱图模型
有助于评估⽂本到语⾳系统——⼀个⾼质量的⽂本到语⾳系统应该产⽣合成语⾳,其频谱图应该与⾃然句⼦⼏乎⼀致
3. 倒谱分析
Cepstral Analysis
,以及对应的写的很好
语⾳频谱样本:
在这⾥插⼊图⽚描述
峰值表⽰语⾳信号中的主导频率成分
峰值被称为共振峰(formants)
共振峰带有声⾳的特征
我们要提取什么?-语⾳频谱包络
共振峰和连接它们的平滑曲线
这种平滑曲线被称为频谱包络线
在这⾥插⼊图⽚描述
log X[k] = log H[k] + log E[k]
1. 我们的⽬标:我们希望将频谱包络和频谱细节从频谱中分离出来
2. 即给定对数X[k],得到对数H[k]和对数E[k],使对数X[k]=对数H[k]+对数E[k]
在这⾥插⼊图⽚描述
怎么实现这个分离?
技巧:取频谱的FFT!
频谱上的FFT被称为反向FFT(IFFT)
注:我们处理的是对数域的频谱(部分技巧)
对数频谱的IFFT将在伪频轴上表⽰信号
在这⾥插⼊图⽚描述
在这⾥插⼊图⽚描述
在实际操作中,你所能接触到的只有对数X[k],因此你可以得到x[k]
如果知道x[k] 过滤低频区域,得到h[k]
x[k]简称为Cepstrum
h[k]是通过考虑x[k]的低频区域得到的
h[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]
专业的名字叫做同态信号处理。它的⽬的是将⾮线性问题转化为线性问题的处理⽅法。对应上⾯,原来的语⾳信号实际上是⼀个卷性信号(声道相当于⼀个线性时不变系统,声⾳的产⽣可以理解为⼀个激励通过这个系统),第⼀步通过卷积将其变成了乘性信号(时域的卷积相当于频域的乘积)。第⼆步通过取对数将乘性信号转化为加性信号,第三步进⾏逆变换,使其恢复为卷性信号。这时候,虽然前后均是时域序列,但它们所处的离散时域显然不同,所以后者称为倒谱频域
总结下,倒谱(cepstrum)就是⼀种信号的傅⾥叶变换经对数运算后再进⾏傅⾥叶反变换得到的谱。它的计算过程如下:
在这⾥插⼊图⽚描述
4. 梅尔系数
4.1 梅尔频率倒谱系数
,,这关于MFCC的计算过程很详细
⼈的听觉系统是⼀个特殊的⾮线性系统,它响应不同频率信号的灵敏度是不同的。在语⾳特征的提取上,⼈类听觉系统做得⾮常好,它不仅能提取出语义信息, ⽽且能提取出说话⼈的个⼈特征,这些都是现有的语⾳识别系统所望尘莫及的。如果在语⾳识别系统中能模拟⼈类听觉感知处理特点,就有可能提⾼语⾳的识别率
梅尔频率倒谱系数(Mel Frequency Cepstrum Coefficient, MFCC)考虑到了⼈类的听觉特征,先将线性频谱映射到基于听觉感知的Mel⾮线性频谱中,然后转换到倒谱上
我们将频谱通过⼀组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
matlab傅里叶变换的幅度谱和相位谱4.2 Mel滤波器原理
将普通频率转化到Mel频率的公式是:
由下图可以看到,它可以将不统⼀的频率转化为统⼀的频率,也就是统⼀的滤波器组
import math
import matplotlib .pyplot as plt
plt .rcParams ['font.sans-serif'] = ['SimHei'] # 显⽰中⽂标签
plt .rcParams ['axes.unicode_minus'] = False
x = list (range (5500)) # [300, 8000]
y = [2595 * math .log ((1 + i /700), 10) for i in x ] # [401.9705861630035, 2840.0230467083184]
y = [1125 * math .log (1 + i /700) for i in x ] # [401.25931193107397, 2834.997715799179]
plt .plot (x ,y )
plt .xlim (0,)
plt .ylim (0,)
plt .xlabel ('普通频率(HZ)',fontsize =12)
plt .ylabel ('Mel 频率(HZ)',fontsize =12)
plt .show ()
在这⾥插⼊图⽚描述
在Mel频谱上⾯获得的倒谱系数h[k]就称为Mel频率倒谱系数,简称MFCC
4.3 MFCC 特征提取思路
有详细的计算
(梅尔语谱图)
提取MFCC特征的过程:
1. 预加重:减⼩噪声的⾼频分量,但是对噪声并没有影响,因此可有效提⾼输出信噪⽐
2. 波形图分帧
3. 对每⼀帧进⾏加窗:例如使⽤汉明窗(hamming window)对信号进⾏加窗处理
4. 对每⼀帧进⾏离散傅⾥叶变化(DFT)
5. 计算功率谱
6. 计算Mel-spaced filterbank
7. 对上述128维的mel功率谱取log,得到128维的 log-mel filer bank energies
具体的,我们从⼀个语⾳信号开始,我们假设采样频率为16kHz:
mel(f )=2595∗log (1+10f /700)
1. 将信号框成20-40ms的帧。25ms是标准的。这意味着16kHz信号的帧长是0.025*16000=400个采样。帧步长通常是
10ms(160个样本)这样的东西,这允许帧有⼀些重叠。第⼀个400个采样帧从0号采样开始,下⼀个400个采样帧从160号采样开始,等等,直到到达语⾳⽂件的终点。如果语⾳⽂件没有被分成偶数帧,就⽤0垫起来,这样就可以了
接下来的步骤应⽤于每⼀个单帧,每帧提取⼀组12个MFCC系数。⼀个简短的旁⽩符号:我们称我们的时域信号为 。⼀旦它被定格,我们有其中n范围在1-400(如果我们的帧是400个样本)和范围超过帧数。当我们计算复数DFT时,我们得到–其中表⽰对应于时域帧的帧数,那么就是帧的功率谱
2. 要对帧进⾏离散傅⾥叶变换,请执⾏以下操作:
其中是⼀个样本长为N的分析窗⼝(例如hamming window),K是DFT的长度,基于周期图的语⾳帧功率谱估计⽅法:
这就是所谓的功率谱的周期图估计。我们取复数傅⾥叶变换的绝对值,并将结果平⽅。我们⼀般会执⾏512个点的FFT,只保留前257个系数
3. 计算Mel间隔滤波库。这是⼀组20-40(26是标准的)三⾓滤波器,我们将其应⽤于步骤2中的周期图功率谱估计。我们的滤波库是
以26个长度为257的向量的形式出现的(假设FFT设置为第2步)。每个向量⼤部分都是零,但在某段频谱中是⾮零。为了计算滤波组的能量,我们将每个滤波组与功率谱相乘,然后将系数相加。⼀旦这样做,我们就会得到26个数字,这些数字可以让我们知道每个
4. 取步骤3中26个能量的对数。这样我们就有26个对数滤波库(filterbank)能量
5. 对26个对数滤波库能量进⾏离散余弦变换(DCT),得到26个表观系数。对于ASR,只保留26个系数中较低的12-13个
6. 由此产⽣的特征(每帧12个数字)称为Mel频率倒数系数
4.4 计算Mel filterbank
在本节中,本例将使⽤10个filterbanks,因为它更容易显⽰,在现实中你会使⽤26-40个过滤库
为了得到图(a)所⽰的滤波库filterbanks,我们⾸先要选择⼀个下频和上频。好的值是下限频率为300Hz,上限频率为8000Hz。当然如果语⾳的采样频率为8000Hz,我们的上频就会被限制在4000Hz。然后按照以下步骤进⾏:
1. 使⽤从频率到梅尔⾳阶的转换公式为:
将上、下频率转换为Mels。在我们的例⼦中,300Hz是401.25 Mels,8000Hz是2834.99 Mels
2. 在这个例⼦中,我们将做10个滤波库,为此我们需要12个点。这意味着我们需要在401.25和2834.99之间再增加10个点的线性间
隔。这就得出了:
[ 401.25931193 622.50825774 843.75720354 1065.00614935 1286.25509516 1507.50404096 1728.75298677 1950.00193257 2171.25087838 2392.49982419 2613.74876999 2834.9977158 ]
3. 现在⽤公式:
把这些换算回赫兹,注意到,我们的起始点和终点都在我们想要的频率上:s (n )s (n )i i S (k )i i P (k )i i S (k )=i s (n )h (n )e 1≤n =1∑N i −j 2πkn /N k ≤K
h (n )s (n )i P (k )=i S (k )N 1∣i ∣
2M (f )=1125ln(1+f /700)
M (m )=−1700(exp(m /1125)−1)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论