【情感识别】基于matlabKNN算法语音情感识别【含Matlab源码542期】

【情感识别】基于matlabKNN算法语⾳情感识别【含Matlab源码542期】⼀、 KNN算法简介骆家辉 李蒙
K最近邻(k-Nearest Neighbor,KNN)分类算法,是⼀个理论上⽐较成熟的⽅法,也是最简单的机器学习算法之⼀。该⽅法的思路是:如果⼀个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的⼤多数属于某⼀个类别,则该样本也属于这个类别。
1 定义
如果⼀个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的⼤多数属于某⼀个类别,则该样本也属于这个类别,即由你
的“邻居”来推断出你的类别.
2 距离公式
两个样本的距离可以通过如下公式计算,⼜叫欧式距离
3 KNN算法的步骤
(1)计算已知类别数据集中每个点与当前点的距离;
(2)选取与当前点距离最⼩的K个点;可吸入颗粒物
(3)统计前K个点中每个类别的样本出现的频率;
(4)返回前K个点出现频率最⾼的类别作为当前点的预测分类。
4 KNN原理
5 KNN的优缺点
6 KNN性能问题
NN的性能问题也是KNN的缺点之⼀。使⽤KNN,可以很容易的构造模型,但在对待分类样本进⾏分类时,为了获得K近邻,必须采⽤暴⼒搜索的⽅式,扫描全部训练样本并计算其与待分类样本之间的距离,系统开销很⼤。
⼆、部分源代码
clc
clear all;
close all;
%%载⼊各情感的特征向量矩阵
大河茶馆
load A_fear.mat;
load F_happiness.mat;
load F_happiness.mat;
load N_neutral.mat;
曾凡亚load T_sadness.mat;
load W_anger.mat;
NumberOfTrain=size(fearVec,2)/2;%⼀半测试⽤,⼀半训练⽤
trainVector=[fearVec(:,1:NumberOfTrain),hapVec(:,1:NumberOfTrain),neutralVec(:,1:NumberOfTrain),sadnessVec(:,1:NumberOfTrain),angerVec(:,1:Numb erOfTrain)];%构建训练样本集
testVector=[fearVec(:,(NumberOfTrain+1):size(fearVec,2)),hapVec(:,(NumberOfTrain+1):size(hapVec,2)),neutralVec(:,(NumberOfTrain+1):size(neutralVec, 2)),sadnessVec(:,(NumberOfTrain+1):size(sadnessVec,2)),angerVec(:,(NumberOfTrain+1):size(angerVec,2))];%构建测试样本集
k=9;%k 最近邻
distanceMatrix=zeros(size(trainVector,2),size(testVector,2));%每⼀列表⽰某个测试语⾳与所有训练集样本的距离
%%计算每个测试样本和训练样本集各样本的距离
for i=1:size(testVector,2)
for j=1:size(trainVector,2)
distanceMatrix(j,i)=norm(testVector(:,i)-trainVector(:,j));%计算欧⽒距离
end
end
%%统计分类结果(根据相应的特征向量在数组trainVector或testVector中所处的位置来辨别类型)
totalTestNumber=size(fearVec,2)-NumberOfTrain;
emtionCounter=zeros(1,5);
n1=NumberOfTrain;
n2=n1+NumberOfTrain;
n3=n2+NumberOfTrain;
n4=n3+NumberOfTrain;
n5=n4+NumberOfTrain;
p1=size(fearVec,2)-NumberOfTrain;
p2=p1+size(hapVec,2)-NumberOfTrain;
p3=p2+size(neutralVec,2)-NumberOfTrain;
p4=p3+size(sadnessVec,2)-NumberOfTrain;
p5=p4+size(angerVec,2)-NumberOfTrain;
if(n5~=size(trainVector,2)||p5~=size(testVector,2))
disp('data error')
return;
end
for i=1:size(distanceMatrix,2)
flag=zeros(1,5);
[sortVec,index]=sort(distanceMatrix(:,i));
%统计K个近邻中各类别的数量
for j=1:k
if(n1>=index(j)&&index(j)>=1)
flag(1)=flag(1)+1;
elseif(n2>=index(j)&&index(j)>n1)
flag(2)=flag(2)+1;
elseif(n3>=index(j)&&index(j)>n2)
flag(3)=flag(3)+1;
elseif(n4>=index(j)&&index(j)>n3)
flag(4)=flag(4)+1;
else
flag(5)=flag(5)+1;
end
无锡日报女记者章莹
end
[~,index1]=sort(flag);
%如果K个近邻中数量最多的类别与该样本实际的类别⼀致,则认为算法识别正确,相应counter加⼀。
if((p1>=i&&i>=1)&&index1(5)==1)
emtionCounter(index1(5))=emtionCounter(index1(5))+1;
elseif((p2>=i&&i>p1)&&index1(5)==2)
emtionCounter(index1(5))=emtionCounter(index1(5))+1;
elseif((p3>=i&&i>p2)&&index1(5)==3)
emtionCounter(index1(5))=emtionCounter(index1(5))+1;
elseif((p4>=i&&i>p3)&&index1(5)==4)
emtionCounter(index1(5))=emtionCounter(index1(5))+1;
elseif((p5>=i&&i>p4)&&index1(5)==5)
emtionCounter(index1(5))=emtionCounter(index1(5))+1;
end
end
function feature=featvector(filename)
[y,fs]=wavread(filename);
L=length(y);
ys=y;
for i=1:(length(y)-1)
if(abs(y(i))<1e-3)%剔除较⼩值,计算短时能量时使⽤%
ys(i)=ys(i+1);
L=L-1;
end
end
y1=ys(1:L);
s=enframe(y,hamming(256),128);%分帧加窗%
s1=enframe(y1,hamming(256),128);
[nframe,framesize]=size(s);
[nframe1,framesize1]=size(s1);
E=zeros(1,nframe1);
Z=zeros(1,nframe);
F=zeros(1,nframe);
for i=1:nframe
Z(i)=sum(abs(sign(s(i,framesize:2)-s(i,framesize-1:1))))/2;%过零率%
end
for i=1:nframe1
E(i)=sum(s1(i,:).*s1(i,:));%短时能量%
end
s1=x2-x1;s2=x3-x4;
E_Reg_coff=s1/s2;
x=0;
for i=1:nframe1
t=E(i)-(mean(E)-s1/s2*x4/nframe1)-s1/s2*i;
x=x+t^2/nframe1;
end
E_Sqr_Err=x;
feature(1:7,1)=[max(E);min(E);mean(E);var(E);E_shimmer;E_Reg_coff;E_Sqr_Err];%短时能量相关特征%
%能量⽐%
feature(8,1)=Eratio;
end
三、运⾏结果
四、matlab版本及参考⽂献
1 matlab版本
2014a
2 参考⽂献
[1]韩纪庆,张磊,郑铁然.语⾳信号处理(第3版)[M].清华⼤学出版社,2019.
mncc
[2]柳若边.深度学习:语⾳识别技术实践[M].清华⼤学出版社,2019.
[3]叶斌.基于HMM和PNN的语⾳情感识别研究.[J]青岛⼤学学报(⼯程技术版). 2011,26(04)

本文发布于:2024-09-21 18:31:10,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/326223.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:样本   类别   识别   分类   距离
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议