基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN

简介: 该语音情绪识别算法基于MATLAB 2022a开发,可识别如悲伤等情绪,置信度高达0.9559。核心程序含中文注释及操作视频。算法采用MFCC特征提取与GRNN广义回归网络,通过预加重、分帧、加窗、FFT、梅尔滤波器组、对数运算和DCT等步骤处理语音信号,实现高效的情绪分类。

1.算法运行效果图预览
(完整程序运行后无水印)
image.png

```filePath =

'Test_data\悲伤1.wav'

类型:悲伤
识别置信度

Vmax =

0.9559


2.算法运行软件版本
matlab2022a

3.部分核心程序
(完整版代码包含详细中文注释和操作步骤视频)
```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)网络的改进型神经网络。它由输入层、模式层、求和层和输出层组成。

输入层:接收输入向量,其中为输入向量的维度。

模式层:每个神经元对应一个训练样本,其输出为输入向量与训练样本之间的距离的函数。常用的距离函数有欧氏距离、曼哈顿距离等。

求和层:由两个神经元组成,分别计算模式层输出的加权和。一个神经元计算模式层输出的算术和,另一个神经元计算模式层输出的加权和。

输出层:输出为求和层输出的函数,通常为线性函数。
image.png

相关文章
|
算法 语音技术
基于MFCC特征提取和GMM训练的语音信号识别matlab仿真
基于MFCC特征提取和GMM训练的语音信号识别matlab仿真
|
13天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
7月前
|
机器学习/深度学习 算法 数据挖掘
【MATLAB】REMD_ MFE_SVM_LSTM 神经网络时序预测算法
【MATLAB】REMD_ MFE_SVM_LSTM 神经网络时序预测算法
106 5
|
6月前
|
机器学习/深度学习 算法 语音技术
基于语音信号MFCC特征提取和GRNN神经网络的人员身份检测算法matlab仿真
**语音识别算法概览** MATLAB2022a中实现,结合MFCC与GRNN技术进行说话人身份检测。MFCC利用人耳感知特性提取语音频谱特征,GRNN作为非线性映射工具,擅长序列学习,确保高效识别。预加重、分帧、加窗、FFT、滤波器组、IDCT构成MFCC步骤,GRNN以其快速学习与鲁棒性处理不稳定数据。适用于多种领域。
|
7月前
|
机器学习/深度学习 并行计算 算法
MATLAB|【免费】概率神经网络的分类预测--基于PNN的变压器故障诊断
MATLAB|【免费】概率神经网络的分类预测--基于PNN的变压器故障诊断
|
7月前
|
机器学习/深度学习 算法 数据挖掘
【MATLAB】MVMD_ MFE_SVM_LSTM 神经网络时序预测算法
【MATLAB】MVMD_ MFE_SVM_LSTM 神经网络时序预测算法
127 2
|
7月前
|
机器学习/深度学习 算法 数据挖掘
【MATLAB】SVMD_ MFE_SVM_LSTM 神经网络时序预测算法
【MATLAB】SVMD_ MFE_SVM_LSTM 神经网络时序预测算法
92 2
|
7月前
|
机器学习/深度学习 算法
【MATLAB】CEEMDAN_ MFE_SVM_LSTM 神经网络时序预测算法
【MATLAB】CEEMDAN_ MFE_SVM_LSTM 神经网络时序预测算法
70 4
|
7月前
|
机器学习/深度学习 算法 数据挖掘
【MATLAB】EWT_ MFE_SVM_LSTM 神经网络时序预测算法
【MATLAB】EWT_ MFE_SVM_LSTM 神经网络时序预测算法
114 1
|
7月前
|
机器学习/深度学习 算法
【MATLAB】ICEEMDAN_ MFE_SVM_LSTM 神经网络时序预测算法
【MATLAB】ICEEMDAN_ MFE_SVM_LSTM 神经网络时序预测算法
114 2