基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN
1.算法运行效果图预览
(完整程序运行后无水印)
1 2 3 4 5 6 7 8 9 10 | filePath = 'Test_data\悲伤1.wav' 类型:悲伤 识别置信度 Vmax = 0.9559 |
2.算法运行软件版本
matlab2022a
3.部分核心程序
(完整版代码包含详细中文注释和操作步骤视频)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | Labsn = []; % 遍历每种情绪 for i = 1: length (Em_kind) Labs0 = Em_kind( i ); % 当前情绪标签 trainfile = dir ([ 'train_data/' char (Labs0), '\*.wav' ]); % 获取当前情绪的所有 WAV 文件 Num_wav = length (trainfile( not ([trainfile. isdir ]))); % 计算有效 WAV 文件的数量 % 遍历每个 WAV 文件 for j = 1:Num_wav [ywav, Fs] = audioread([ 'train_data/' char (Labs0) '/' char ( lower (Labs0)) int2str ( j ) '.wav' ]); % 读取音频文件 % 计算 MFCC 特征 [Fmfcc, ~, ~, H] = func_MFCC(ywav, Fs, Lframe, LShift, Fpre, @hamming, [fre_min fre_max], Nch, Cep_coff + 1, Cep_Sine); % 将当前文件的 MFCC 特征添加到训练数据集中 Dat_trainset = [Dat_trainset; Fmfcc']; % 将当前文件的标签添加到标签集中 Labs = [Labs; repmat ( cellstr (Labs0), size (Fmfcc, 2), 1)]; Labsn= [Labsn; repmat ( i , size (Fmfcc, 2), 1)]; end end % 训练 KNN 模型 model1 = fitcknn(Dat_trainset, Labs); % 标准化数据并训练 KNN 模型 % 训练多类分类模型 model2 = fitcecoc(Dat_trainset, Labs); % 训练多类分类模型 %GRNN model3 = newgrnn(Dat_trainset ',Labsn' ,5); % 保存模型 save model.mat model1 model2 model3; % 将模型保存到文件中 179 |
4.算法理论概述
语音情绪识别是人工智能和信号处理领域中的一个重要研究方向。它旨在通过分析语音信号中的特征,识别出说话人的情绪状态,如高兴、悲伤、愤怒、恐惧等。随着人工智能技术的不断发展,语音情绪识别在人机交互、心理健康监测、客户服务等领域具有广泛的应用前景。
梅尔频率尺度:
人耳对声音的感知不是线性的,而是在频率上呈现出一种非线性的关系。梅尔频率尺度是一种基于人耳听觉特性的频率尺度,它将频率转换为梅尔频率,使得人耳对不同频率的声音具有相似的感知。
MFCC 特征提取过程:
预加重:对输入的语音信号进行预加重处理,以增强高频部分的能量。预加重可以通过以下公式实现:,其中为输入的语音信号,为预加重后的信号,为预加重系数,通常取。
分帧:将语音信号分成若干个短时段,称为帧。每一帧的长度通常为 20-40ms,相邻帧之间有一定的重叠。
加窗:对每一帧信号进行加窗处理,以减少帧边界处的不连续性。常用的窗函数有汉明窗、汉宁窗等。
快速傅里叶变换(FFT):对加窗后的每一帧信号进行快速傅里叶变换,得到其频谱。
计算梅尔滤波器组能量:将频谱通过一组梅尔滤波器组,得到每个滤波器的输出能量。梅尔滤波器组是一组在梅尔频率尺度上均匀分布的带通滤波器,其数量通常为 20-40 个。
对数运算:对每个滤波器的输出能量取对数,得到对数梅尔滤波器组能量。
离散余弦变换(DCT):对对数梅尔滤波器组能量进行离散余弦变换,得到 MFCC 系数。DCT 可以将信号从时域转换到频域,同时具有良好的能量压缩性能。
GRNN 广义回归网络原理
GRNN 是一种基于径向基函数(Radial Basis Function,RBF)网络的改进型神经网络。它由输入层、模式层、求和层和输出层组成。
输入层:接收输入向量,其中为输入向量的维度。
模式层:每个神经元对应一个训练样本,其输出为输入向量与训练样本之间的距离的函数。常用的距离函数有欧氏距离、曼哈顿距离等。
求和层:由两个神经元组成,分别计算模式层输出的加权和。一个神经元计算模式层输出的算术和,另一个神经元计算模式层输出的加权和。
输出层:输出为求和层输出的函数,通常为线性函数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具