【情感识别】PNN概率神经网络语音情感识别【含Matlab源码 544期】-程序员宅基地

技术标签: matlab  Matlab语音处理(进阶版)  

博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
个人主页:海神之光
代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

一、PNN概率神经网络语音情感识别简介

1 语音情感识别系统
在语音情感识别系统中,录制的语料包含5个演员的5种不同情感,即高兴、害怕、悲伤、愤怒和中性,同时语料又被分成训练集和测试集。语音情感识别系统的设计如图1所示。首先对语音信号进行特征提取,采用 HMM 的训练算法(分段 K 均值算法)对 HMM 进行训练,得到各单词的 HMM 参数;其 次,利用该参数求出语音信号的最佳状态时间序 列;再 次,根 据 每 个 HMM 状态对应的若干帧语音倒谱矢量,可以看作是特性相近的语音事件(如音素、音节等),将这些长短不一的具有同一状态的倒谱矢量语音信号应用时间进行规整,使其成为具有相同维数的语音特征矢量;最后用 PNN 神经网络进行语音识别。
在这里插入图片描述
图1 语音情感识别系统

1.1 语音参数特征提取
常用的语音情感识别特征参数主要从时间结、能量、基音、共振峰等结构方面考虑。系统选用平均振幅、最大振幅、语速、语句发音持续时间、平均基音频率、最大基音频率、基音变化率、最大第一共振峰、第一共振峰均值及第一共振峰变化率作为情感特征参数。

1.2 基于PNN的语音情感识别模型
PNN是基于统计原理设计的神经网络模型,见图2所示。用类条件概率密度作为模式划分的依据,网络由输入层、特征层、总和层和输出层构成。输入、输出层由线性神经元组成;特征层为动态概率层,包含 P个神经元,P在网络 训 练 中 动 态 变 化;总 和 层 节 点 是 高 斯 核 函数,该核函数能对输入产生局部响应,从而将输入空间划分成若干小的局部区间,以达到分类和函数逼近的目的;输出层包含 K 个神经元,每个神经元分别对应一个要识别的 语 音 基 元 (实 验 中 取 K =10)。 与 多 层 感 知 器(multi-layerperception,MLP)相比,网络结构在系统面临外界环境因素改变时,仅须对新进的分类数据定义权值,而无须像其他类型的网络结构那样加入新的分类
数据和改变全部的网络权值,同时,该网络学习速度很快,其学习所需的时间为零,因为其网络连结权值只是直接从训练范例中加载所需数据,无迭代过程。当模式矢量维数较高时,PNN 具有良好的分类性能和更快的训练速度。
在这里插入图片描述
图2 PNN结构图

二、部分源代码

lc
close all
clear all
load A_fear fearVec;
load F_happiness hapVec;
load N_neutral neutralVec;
load T_sadness sadnessVec;
load W_anger angerVec;
trainsample(1:30,1:140)=angerVec(:,1:30)‘;
trainsample(31:60,1:140)=hapVec(:,1:30)’;
trainsample(61:90,1:140)=neutralVec(:,1:30)‘;
trainsample(91:120,1:140)=sadnessVec(:,1:30)’;
trainsample(121:150,1:140)=fearVec(:,1:30)‘;
trainsample(1:30,141)=1;
trainsample(31:60,141)=2;
trainsample(61:90,141)=3;
trainsample(91:120,141)=4;
trainsample(121:150,141)=5;
testsample(1:20,1:140)=angerVec(:,31:50)’;
testsample(21:40,1:140)=hapVec(:,31:50)‘;
testsample(41:60,1:140)=neutralVec(:,31:50)’;
testsample(61:80,1:140)=sadnessVec(:,31:50)‘;
testsample(81:100,1:140)=fearVec(:,31:50)’;
testsample(1:20,141)=1;
testsample(21:40,141)=2;
testsample(41:60,141)=3;
testsample(61:80,141)=4;
testsample(81:100,141)=5;
class=trainsample(:,141);
sum=bpnn(trainsample,testsample,class);
figure(1)
bar(sum,0.5);
set(gca,‘XTickLabel’,{‘生气’,‘高兴’,‘中性’,‘悲伤’,‘害怕’});
ylabel(‘识别率’);
xlabel(‘五种基本情感’);

p_train=trainsample(:,1:140)‘;
t_train=trainsample(:,141)’;
p_test=testsample(:,1:140)‘;
t_test=testsample(:,141)’;
sumpnn=pnn(p_train,t_train,p_test,t_test);
figure(2)
bar(sumpnn,0.5);
set(gca,‘XTickLabel’,{‘生气’,‘高兴’,‘中性’,‘悲伤’,‘害怕’});
ylabel(‘识别率’);
xlabel(‘五种基本情感’);
sumlvq=lvq(trainsample,testsample,class);
function sum=bpnn(trainsample,testsample,class)
%输入参数:trainsample是训练样本,testsample是测试样本,class表示训练样本的类别,与trainsample中数据对应
%sum:五种基本情感的识别率
for i=1:140
feature(:,i)= trainsample(:,i);
end
%特征值归一化
[input,minI,maxI] = premnmx( feature’) ;

%构造输出矩阵
s = length( class ) ;
output = zeros( s , 5 ) ;
for i = 1 : s
output( i , class( i ) ) = 1 ;
end

%创建神经网络
net = newff( minmax(input) , [10 5] , { ‘logsig’ ‘purelin’ } , ‘traingdx’ ) ; %创建前馈神经网络

%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 150 ;
net.trainparam.goal = 0.1 ;
net.trainParam.lr = 0.05 ;

%开始训练
net = train( net, input , output’ ) ;

%读取测试数据
for i=1:140
featuretest(:,i)= testsample(:,i);
end
c=testsample(:,141);
%测试数据归一化
testInput = tramnmx(featuretest’ , minI, maxI ) ;

%仿真
Y = sim( net , testInput )
sum=[0 0 0 0 0]; %每类情感正确识别个数
%统计识别正确样本数
for i=1:20
if Y(1,i)>Y(2,i)&&Y(1,i)>Y(3,i)&&Y(1,i)>Y(4,i)&&Y(1,i)>Y(5,i)
sum(1)=sum(1)+1;
end
function sumlvq=lvq(trainsample,testsample,class)
P=trainsample(:,1:140)‘;
C=class’;
T=ind2vec;
net=newlvq(minmax§,20,[0.2 0.2 0.2 0.2 0.2],0.1); %创建lvq网络
w1=net.IW{1};
net.trainParam.epochs=100;
net=train(net,P,T);
y=sim(net,testsample(:,1:140)');
y3c=vec2ind(y);
sumlvq=[0 0 0 0 0]; %每类情感正确识别个数
%统计识别正确样本数
for i=1:20
if y3c(i)==1
sumlvq(1)=sumlvq(1)+1;
end
end
for i=21:40
if y3c(i)==2
sumlvq(2)=sumlvq(2)+1;
end
end
for i=41:60
if y3c(i)==3
sumlvq(3)=sumlvq(3)+1;
end
end
for i=61:80
if y3c(i)==4
sumlvq(4)=sumlvq(4)+1;
end
end
for i=81:100
end

三、运行结果

在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]叶斌.基于HMM和PNN的语音情感识别研究.[J]青岛大学学报(工程技术版). 2011,26(04)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/KeepingMatlab/article/details/135042332

智能推荐

servlet处理请求的方式_servlet中哪个方法用于请求业务的处理-程序员宅基地

文章浏览阅读5.8k次。_servlet中哪个方法用于请求业务的处理

chatgpt赋能python:合并重叠区间的Python实现:优雅解决数据整理问题_python 不规则区域的重叠算法-程序员宅基地

文章浏览阅读256次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 不规则区域的重叠算法

2023年八款优质替代Microsoft Project的选择(免费和付费)_projectlibre portable-程序员宅基地

文章浏览阅读668次。过去,许多公司在没有预算或预算紧张的情况下都依赖MicrosoftProject来进行项目资源规划。然而许多用户期望从他们的商业软件中获得的许多最先进的项目管理功能但Microsoft工具并没有提供。小公司如何平衡预算现实与软件需求?项目管理软件领域已经飞速发展,即使对于想要免费和开源选项的用户也是如此。无论您是需要更好的系统来管理项目工作流和任务的个人、小型企业还是大型组织,这些MicrosoftProject替代方案都是满足各种预算和需求的绝佳选择。_projectlibre portable

AD20实用小技巧_ad怎么改封装-程序员宅基地

文章浏览阅读2k次。快捷键:大写G 看左下角。_ad怎么改封装

[Ptrace]Linux内存替换(六)动态链接库函数替换_使用ptrace向已运行进程中注入.so并执行相关函数-程序员宅基地

文章浏览阅读3.6k次。本文在 Linux内存替换(四)代码注入 的基础上,介绍了代码注入替换运行程序加载的动态链接库中指定函数的方法。 网上的一种思路是利用在被注入程序中申请空间存放待注入代码,然后通过修改GOT表函数地址指针实现函数替换;本文介绍的方法利用预先构造好的函数Shellcode直接覆盖动态链接库中指定函数代码实现函数替换。_使用ptrace向已运行进程中注入.so并执行相关函数

升级Xcode10 报错redefinition of module 'CommonCrypto'_xcode commoncrypto-程序员宅基地

文章浏览阅读2.7k次。升级Xcode10 报错redefinition of module ‘CommonCrypto’选中CommonCrypto关联的第三方库的target–Build Settings–Packaging–Module Map File,清空当中的内容即可._xcode commoncrypto

随便推点

Java身份证、手机号码用*隐藏中间几位_java隐藏电话号码 6789位-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏4次。Java身份证、手机号码用*隐藏中间几位_java隐藏电话号码 6789位

Netcat/nc 备忘_subprocess.popen启动netcat进行监听-程序员宅基地

文章浏览阅读261次。win:https://eternallybored.org/misc/netcat/linux: yum install nc -y常用参数:-l 开启监听-p 指定一个端口-v 显示详细输出-e 指定对应的应用程序-n nc不要DNS反向查询IP的域名-z 连接成功后立即关闭连接-u 指定nc使用UDP协议,默认为TCP-w 超时秒数,后面跟数字服务端:nc -lvp 8888 -e /bin/bash # Linuxnc -lvp ..._subprocess.popen启动netcat进行监听

Paper Reading||Distance-aware Quantization-程序员宅基地

文章浏览阅读3.4k次。1. 使用 STE,虽然使得Round操作处处可导(梯度为1),但会引入梯度不匹配、不合理的问题。2. 软量化器(Soft Quantizer)方法虽然能有效改进梯度不匹配问题,但从软量化器直接“跳变”为硬量化器会带来 Quantizer Gap 问题。3. 在软量化器中引入能够逐渐增大的 Temperature 参数,虽然能缓解 Quantizer Gap 问题,但又会导致梯度流变得不稳定。_distance-aware quantization

dashboard_pod/dashboard-metrics-scraper-5cb4f4bb9c-r59q7 0/1-程序员宅基地

文章浏览阅读1.2k次。dashboard安装web页面访问k8s集群将软件包上传到master上[root@ecs-proxy ~]# cd 5/kubernetes/v1.17.6/[root@ecs-proxy v1.17.6]# scp -r dashboard/ 192.168.1.21:/root[root@master ~]# cd dashboard/[root@master dashboard]# docker load -i dashboard.tar.gz 导入镜像69e42300_pod/dashboard-metrics-scraper-5cb4f4bb9c-r59q7 0/1 imagepullbackoff 0 14s po

用java组件纠偏出租车gps采集点_gps轨迹纠偏算法java-程序员宅基地

文章浏览阅读2k次。用Java组件对出租车GPS采集点进行纠偏随着技术发展,如今对出租车的运营管理也非常精准,运营公司后台通过实时接收出租车的位置信息,对出租车进行运营调度及安全管理。在位置信息数据的处理方面就离不开gis数据基础处理功能与空间分析功能。本文对位置数据的前期预处理做一个详细的讲解。数据准备:原始上海出租车位置信息数据Taxi_105作为示例,依次为出租车id,采集时间,经度,纬度,速度,..._gps轨迹纠偏算法java

6-5 列表推导生成随机数矩阵_编写一个python函数,生成一个m行n列的元素值不大于20的随机数矩阵(二维列表)。 提-程序员宅基地

文章浏览阅读210次。m: 行数,int, 1 < m < 100;n: 列数, int, 1 < n < 100._编写一个python函数,生成一个m行n列的元素值不大于20的随机数矩阵(二维列表)。 提

推荐文章

热门文章

相关标签