通过自定义特征参数向量,使用K-NN方法对说话人的5种不同情绪(恐惧、高兴、中
性、伤心、愤怒)做出分类。每种情绪有50段音频样本,其中25段用来K-NN的训练,
25段用于测试。音频文件已在wavs文件夹下。运行主程序可以得到K-NN对每种情绪的识 别正确率,可以尝试手动调整k值。
KnnRecognition.m (使用K-NN进行分类需要调用5组特征参数矩阵:A_fear.mat,
F_happiness.mat,N_neutral.mat,T_sadness.mat,W_anger.mat,通过【wavs】
文件夹下相应的.m文件可以生成得到,主程序文件夹下已经生成好)
featvector.m 语音情感特征提取函数,完整构造了自定义的特征参数向量,
用于K-NN的 识别分类。其调用的子函数可以在【wavs\特征通用提取函数】文件夹下找到。
%% 特征向量构成 %%
% 短时能量E %
dim_max=140; %大小要与.mat数据文件匹配
feature=zeros(dim_max,1);
x=0;t=0;
for i=1:(nframe1-1)
t=abs(E(i)-E(i+1))/(nframe1-1);
x=x+t;
end
E_shimmer=x/mean(E);
x1=0;x2=0;x3=0;x4=0;
for i=1:nframe1
t1=imean(E);t2=iE(i); t3=ii;t4=i;
x1=x1+t1;x2=x2+t2;x3=x3+t3;x4=x4+t4;
end
x4=x4x4/nframe1;
s1=x2-x1;s2=x3-x4;
E_Reg_coff=s1/s2;
x=0;
for i=1:nframe1
t=E(i)-(mean(E)-s1/s2x4/nframe1)-s1/s2i;
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;
%% knn分类主程序(利用采集的情感语音信号特征数据进行分类识别)
clc
clear all;
close all;
%% 载入各情感的特征向量矩阵
load A_fear.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:NumberOfTrain)]; % 构建训练样本集
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 最近邻