%将语音数据导入matlab软件中
load data1 
load data2 
load data3 
load data4 
%为了方便后续神经网络的训练,将语音数据统一合在一个数组中。此时data为2000行,25列的矩阵
data(1:500,:)=c1(1:500,:);
data(501:1000,:)=c2(1:500,:);
data(1001:1500,:)=c3(1:500,:);
data(1501:2000,:)=c4(1:500,:);
%将输入、输出数据单独提取出来
input=data(:,2:25);
output1=data(:,1);
%将输出变换为矩阵形式
for i=1:2000    %将输出变换为矩阵形式,便于区分和算法计算
    if data(i,1)==1
        output(i,1:4)=[1 0 0 0];
    end
    if data(i,1)==2
        output(i,1:4)=[0 1 0 0];
    end
    if data(i,1)==3
        output(i,1:4)=[0 0 1 0];
    end
    if data(i,1)==4
        output(i,1:4)=[0 0 0 1];
    end
end
%将训练数据和测试数据分离出来
k=rand(1,2000);
[m,n]=sort(k);  %对列进行升序排序
%n中的元素是对应m中已经排序好元素在原矩阵k中的位置,例如:k中最小的元素是第1789个,值为0.0001;那么m第一个元素为0.0001,n中第一个元素为1789
%也就是说,n中的元素是随机排列的位置,n(1:1500)就变成了1500个随机数(范围是1-2000),input(n(1:1500),:)就变成了input矩阵中的数据位置随机分布
%从而使得四种音乐的数据得到随机分布,使得训练更加精确。
input_train=input(n(1:1500),:)';    %input_train是24行,1500列的矩阵
input_test=input(n(1501:2000),:)';   
output_train=output(n(1:1500),:)';  %output_train是1行,1500列的矩阵
output_test=output(n(1501:2000),:)';
%将数据归一化
[inputn,inputps]=mapminmax(input_train);    %最大最小值方式归一化
%%神经网络结构初始化
innum=size(input,2);    %根据矩阵提取输入自变量数24,  size(2)对应的是行
midnum=25;              %隐含层节点个数25
outnum=size(output,2);  %输出因变量个数4
%权值阈值初始化
w1=rand(midnum,innum); %输入层与隐含层权值系数初始化
w2=rand(midnum,outnum);%输出层与隐含层权值系数初始化
b1=rand(midnum,1);     %隐含层阈值初始化
b2=rand(outnum,1);     %输出层阈值初始化

w2_1=w2;
w1_1=w1;
b1_1=b1;
b2_1=b2;
%学习率
xite=0.1;
alfa=0.01;
%%
%BP神经网络训练,根据输出误差不断调整权值和阈值
maxgen=50;  %训练次数
for ii=1:maxgen
    error(ii)=0;
    for i=1:1:1500
        x=inputn(:,i);
        for j=1:1:midnum
            I(j)=w1(j,:)*inputn(:,i)+b1(j);  %输入数据乘以权值加阈值得到隐含层节点的输入值
            Iout(j)=1/(1+exp(-(I(j)))); %神经网络训练的激励函数,得到隐含层节点的输出值。
        end
        yn=w2'*Iout'+b2;    %此行代码的意思是每个节点的输出乘以对应的权值加阈值得到最后输出层的输出。由于b2是行向量,所以w2*Iout也需要转化为行向量,因此加了转置。
                            %由于上面部分需要计算每个节点的函数值,所以用了for循环,而此行代码直接是对应矩阵数据相乘。所以未使用for循环。
        %预测误差
        e=output_train(:,i)-yn;     %e是矩阵而不是数值,所以用了sum及abs函数,error(ii)为误差绝对值之和
        error(ii)=error(ii)+sum(abs(e));
        %根据误差计算w2、b2调整量
        dw2=e*Iout; %行向量
        db2=e'; %行向量
        %根据误差计算w1、b1调整量
        for j=1:1:midnum
            S=1/(1+exp(-(I(j))));
            FI(j)=S*(1-S);
        end
        for k=1:1:innum
            for j=1:1:midnum
                dw1(k,j)=FI(j)*x(k)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));
                db1(j)=FI(j)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));
            end
        end
        %权值阈值更新
        w1=w1_1+xite*dw1';
        w2=w2_1+xite*dw2';
        b1=b1_1+xite*db1';
        b2=b2_1+xite*db2';
        
        w2_1=w2;
        w1_1=w1;
        b1_1=b1;
        b2_1=b2;
    end
end
%%
%神经网络测试
inputn_test=mapminmax('apply',input_test,inputps);  %数据归一化
%神经网络根据输入值进行预测
for i=1:500
    for j=1:1:midnum
        I(j)=w1(j,:)*inputn_test(:,i)+b1(j); 
        Iout(j)=1/(1+exp(-(I(j))));
    end
    %预测结果
    fore(:,i)=w2'*Iout'+b2;
end
%%
%结果分析
for i=1:500
    output_fore(i)=find(fore(:,i)==max(fore(:,i)));
end
%BP网络预测误差
error=output_fore-output1(n(1501:2000))';
%画出预测语音种类和实际语音种类的分类图
figure(1)
plot(output_fore,'ro')
hold on
% figure(2)
plot(output1(n(1501:2000))','b*')
legend('预测语音类别','实际语音类别')

%画出误差图
figure(3)
plot(error,'b*')
title('BP网络分类误差','fontsize',12)
xlabel('语音信号','fontsize',12)
ylabel('分类误差','fontsize',12)

k=zeros(1,4);  
%找出判断错误的分类属于哪一类
for i=1:500
    if error(i)~=0
        [b,c]=max(output_test(:,i));
        switch c
            case 1 
                k(1)=k(1)+1;
            case 2 
                k(2)=k(2)+1;
            case 3 
                k(3)=k(3)+1;
            case 4 
                k(4)=k(4)+1;
        end
    end
end
%找出每类的个体和
kk=zeros(1,4);
for i=1:500
    [b,c]=max(output_test(:,i));
    switch c
        case 1
            kk(1)=kk(1)+1;
        case 2
            kk(2)=kk(2)+1;
        case 3
            kk(3)=kk(3)+1;
        case 4
            kk(4)=kk(4)+1;
    end
end
%正确率
rightridio=(kk-k)./kk

详细的“BP神经网络数据分类—语音特征信号分类”代码相关推荐

  1. 基于MATLAB的BP神经网络进行语音特征信号分类

    1.内容简介 略 467-可以交流.咨询.答疑 2.内容说明 略 3.仿真分析 %% 该代码为基于BP网络的语言识别 %% 清空环境变量 clc clear %% 训练数据预测数据提取及归一化 %下载 ...

  2. 【语音识别】基于BP神经网络实现语音特征信号分类附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  3. 基于Matlab的BP神经网络在语音特征信号识别中的应用

    本微信图文详细介绍了BP神经网络在语音特征信号中的应用,并给出了Matlab源码.

  4. 语音特征信号分类---BP神经网络---MATLAB实现

    语音特征信号识别是语音识别研究领域中的一个重要方面,一般采用模式匹配的原理解决.语音识别的运算过程为: 首先,待识别语音转化为电信号后输入识别系统,经过预处理后用数学方法提取语音特征信号,提取出的语音 ...

  5. Matlab神经网络语音增强,基于BP神经网络的语音增强研究

    曰髯? 分类号: 论文编号:2丛坦丝旦生丛 密级:公开 贵州大学 2009届硕士研究生学位论文 基于即神经网络的语音增强研究 学科专业:电路与系统 研究方向:模式识别 导师:刘宇红教授 研究生:周元芬 ...

  6. 基于果蝇优化的BP神经网络(分类应用) - 附代码

    基于果蝇优化的BP神经网络(分类应用) - 附代码 文章目录 基于果蝇优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.果蝇优化BP神经网络 3.1 BP神经 ...

  7. 基于布谷鸟优化的BP神经网络(分类应用) - 附代码

    基于布谷鸟优化的BP神经网络(分类应用) - 附代码 文章目录 基于布谷鸟优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.布谷鸟优化BP神经网络 3.1 B ...

  8. 基于人工蜂群优化的BP神经网络(分类应用) - 附代码

    基于人工蜂群优化的BP神经网络(分类应用) - 附代码 文章目录 基于人工蜂群优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.人工蜂群优化BP神经网络 3. ...

  9. 基于哈里斯鹰优化的BP神经网络(分类应用) - 附代码

    基于哈里斯鹰优化的BP神经网络(分类应用) - 附代码 文章目录 基于哈里斯鹰优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.哈里斯鹰优化BP神经网络 3. ...

最新文章

  1. Windows 服务器开机自启动
  2. 有关于java的final修饰符
  3. 《码出高效:Java开发手册》背后的故事
  4. P3258 [JLOI2014]松鼠的新家(树上点查分)
  5. 二维的完整形式是什么?
  6. python增量爬虫_python增量爬虫pyspider
  7. 数据结构Java版之基数排序(四)
  8. 利用request库请求api
  9. MySQL 日期时间类型
  10. 布林通道参数用20还是26_这样设置均线参数
  11. 2010版EXCEL下方sheet工作表隐藏了
  12. CentOS6.8下安装xz命令
  13. mysql 事务_详解mysql如何做事务
  14. 35 shell脚本
  15. 《Blender权威指南》
  16. 通用的电子商务商城后台管理界面模板(可下载)
  17. 泰戈尔《园丁集》选段
  18. 解决——》feign文件下载时报错feign.codec.EncodeException: not in non blocking mode
  19. C语言度化为度分秒的方法,一句话转换度:分:秒格式为度.度度度
  20. 风控决策引擎——决策流构建实战

热门文章

  1. JAVA语言语法_流程控制(part3)
  2. VB--. 和 ! ?
  3. QT中connect、disconnect和信号槽实现原理
  4. 任正非说打出和平,说出了芯片行业的真谛,竞争才能带来好处
  5. JAVA多线程模仿站台三个窗口同时出售20张票
  6. 揭秘登上2021春晚舞台的黑科技-XR技术
  7. JS实现一天不同时段问候语
  8. 【毕设参考】“摸鱼”神器,用 ESP32 + HaaS Python DIY一款全功能鱼缸 控温、过滤、换水一键执行
  9. 手写一个垂直领域的搜索引擎
  10. JS实现QQ面板-拖曳效果