语音情感分析开发者必读之作,一定带来一个解决新方案

一、概述
这是最近学习《Using Deep
and
》时所做的笔记和代码实现
论文使用卷积神经网络和时域金字塔匹配来提取和识别语音信号中的情感特征 。主要思路如下:对音频信号提取其梅尔谱图,在时域上有重叠地切割成64*64的图像块;将其送入结构的CNN中进行分类,提取到特征向量X XX;对同一个音频样本的向量集 text node: '&;' text node: '&;'{
?
∣i=1,2,?,n}应用时域金字塔特征池化方法,得到描述整个音频样本的定长特征向量;使用SVM加以分类,完成情感识别 。
二、数据集介绍
实验采用的数据集是EMO-DB语音情感数据集,下载地址是。音频的采样频率16kHz,每一个点用16bit的长度存储 。数据集不大,只有535条语音数据,情感的标签在文件名的倒数第二位记录着 。如下图,‘F’,‘N’,'W’都是不同的情感标签 。
每一条音频文件打开之后,将每点幅值画出来,就是下图 。
详细的标签对照如下表,数据集都是以德语单词的首字母标记
的,也就是下表的右两列 。
()()
A anger W ?rger
BL
DE Ekel
F /fear A Angst
HF
ST
NN
三、梅尔谱图提取
声谱图(语谱图)、梅尔谱图(Mel )、梅尔倒谱(MFCC)是语音信号处理时常用的特征提取手段,在深度学习没有得到应用之前,MFCC等特征和隐马尔科夫模型等传统机器学习模型的结合是语音识别、语音情感识别的常用手段 。
声谱图的生成主要用到短时傅里叶变换(STFT,Short Time) 。假设有一段时域上的语音信号s(t) s(t)s(t),在时域上将其分割成重叠或不重叠的i ii个片段s′(t),t∈[ti,ti+1] s'(t),t\in [t_i,t_{i+1}]s

(t),t∈[t
i
?
,t
i+1
?
],在每个片段s′(t) s'(t)s

(t)上做傅里叶变换,得到频域信号S(jω) S(j\omega)S(jω) 。对S(jω) S(j\omega)S(jω)划分为N NN段量化,就得到一个N NN维向量,对应到数字图像上,就是用敏感不同的一列像素点来表示s′(t) s'(t)s

(t)的幅频响应了 。
将i ii个片段的N NN维向量沿时域拼接起来,就得到了整段音频的声谱图 。声谱图的横向表示时间维度,纵向表示频率维度,体现了视频分析的思想,从图中就能读出什么时间声音的高频分量多,什么时候音频的低频段强度高 。
梅尔谱图是在声谱图的基础上用一组符合人类听觉系统频响特性的滤波器组进行滤波处理 。这组滤波器就叫梅尔滤波器组,这组滤波器在频域上呈现低频段密集(滤波器多),高频段稀疏(滤波器少),低频段幅频响应大,高频
段幅频响应小 。人类的听觉系统也符合这样的特性,低频段灵敏,高频段不灵敏 。用这样的滤波器组对声谱图作进一步处理,是将“客观存在”的声音形式转换成“人耳听到”的声音形式,因为不论是语音识别还是语音情感识别都是以人类的认知系统为基准的,在信号处理的过程中自然也就要做到和人的感知相似 。
在处理其他声音(比如鸟语)时,就需要
登高滤波器组而不是等面积滤波器组 。即滤波器组中的各个滤波器的幅频响应强度是一样的,但是滤波器涵盖的频率不一致,即三角形的底边不一样长 。如下图 。
利用实现对语音信号的梅尔谱图的提取非常方便 。只需要调用如下程序 。
# sr=None表示读取音频文件时不指定采样率,按照文件本身的采样率去读取
y, sr = .load(,sr=None) # y是数字音频信号序列,sr= rate
# 设置滤波器组有64个滤波器,傅里叶变换点数为400,窗函数宽度为401
ps = ..(y, sr=sr, =64,n_fft=400,=401)