資源簡介
基于神經網絡的語音識別 MATLAB代碼

代碼片段和文件信息
%%?清空環境變量
clc
clear
%%?訓練數據預測數據提取及歸一化
%下載四類語音信號
load?data1?c1
load?data2?c2
load?data3?c3
load?data4?c4
%四個特征信號矩陣合成一個矩陣
data(1:500:)=c1(1:500:);
data(501:1000:)=c2(1:500:);
data(1001:1500:)=c3(1:500:);
data(1501:2000:)=c4(1:500:);
%從1到2000間隨機排序
k=rand(12000);
[mn]=sort(k);
%輸入輸出數據
input=data(:2:25);
output1?=data(:1);
%把輸出從1維變成4維
for?i=1:2000
????switch?output1(i)
????????case?1
????????????output(i:)=[1?0?0?0];
????????case?2
????????????output(i:)=[0?1?0?0];
????????case?3
????????????output(i:)=[0?0?1?0];
????????case?4
????????????output(i:)=[0?0?0?1];
????end
end
%隨機提取1500個樣本為訓練樣本,500個樣本為預測樣本
input_train=input(n(1:1500):)‘;
output_train=output(n(1:1500):)‘;
input_test=input(n(1501:2000):)‘;
output_test=output(n(1501:2000):)‘;
%輸入數據歸一化
[inputninputps]=mapminmax(input_train);
%%?網絡結構初始化
innum=24;
midnum=25;
outnum=4;
?
%權值初始化
w1=rands(midnuminnum);
b1=rands(midnum1);
w2=rands(midnumoutnum);
b2=rands(outnum1);
w2_1=w2;w2_2=w2_1;
w1_1=w1;w1_2=w1_1;
b1_1=b1;b1_2=b1_1;
b2_1=b2;b2_2=b2_1;
%學習率
xite=0.1
alfa=0.01;
%%?網絡訓練
for?ii=1:10
????E(ii)=0;
????for?i=1:1:1500
???????%%?網絡預測輸出?
????????x=inputn(:i);
????????%?隱含層輸出
????????for?j=1:1:midnum
????????????I(j)=inputn(:i)‘*w1(j:)‘+b1(j);
????????????Iout(j)=1/(1+exp(-I(j)));
????????end
????????%?輸出層輸出
????????yn=w2‘*Iout‘+b2;
????????
???????%%?權值閥值修正
????????%計算誤差
????????e=output_train(:i)-yn;?????
????????E(ii)=E(ii)+sum(abs(e));
????????
????????%計算權值變化率
????????dw2=e*Iout;
????????db2=e‘;
????????
????????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(kj)=FI(j)*x(k)*(e(1)*w2(j1)+e(2)*w2(j2)+e(3)*w2(j3)+e(4)*w2(j4));
????????????????db1(j)=FI(j)*(e(1)*w2(j1)+e(2)*w2(j2)+e(3)*w2(j3)+e(4)*w2(j4));
????????????end
????????end
???????????
????????w1=w1_1+xite*dw1‘;
????????b1=b1_1+xite*db1‘;
????????w2=w2_1+xite*dw2‘;
????????b2=b2_1+xite*db2‘;
????????
????????w1_2=w1_1;w1_1=w1;
????????w2_2=w2_1;w2_1=w2;
????????b1_2=b1_1;b1_1=b1;
????????b2_2=b2_1;b2_1=b2;
????end
end
?
%%?語音特征信號分類
inputn_test=mapminmax(‘apply‘input_testinputps);
for?ii=1:1
????for?i=1:500%1500
????????%隱含層輸出
????????for?j=1:1:midnum
????????????I(j)=inputn_test(:i)‘*w1(j:)‘+b1(j);
????????????Iout(j)=1/(1+exp(-I(j)));
????????end
????????
????????fore(:i)=w2‘*Iout‘+b2;
????end
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‘r‘)
hold?on
plot(output1(n(1501:2000))‘‘b‘)
legend(‘預測語音類別‘‘實際語音類別‘)
%畫出誤差圖
figure(2)
plot(error)
title(‘BP網絡分類誤差‘‘fontsize‘12)
xlabel(‘語音信號‘‘fontsize‘12)
ylabel(‘分類誤差‘‘fontsize‘12)
%print?-dtiff?-r600?1-4
k=zeros(14);??
%找出判斷錯誤的分類屬于哪一類
for?i=1:500
????if?error(i)~=0
????????[bc]=max(output_test(:i));
????????switch?c
????????????case?1?
????????????????k(1)=k(1)+1;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3778??2013-06-20?10:29??案例1?BP神經網絡的數據分類-語音特征信號分類\BP.m
?????文件???????3905??2010-01-30?20:21??案例1?BP神經網絡的數據分類-語音特征信號分類\BPDLX.m
?????文件??????93015??2009-08-29?16:54??案例1?BP神經網絡的數據分類-語音特征信號分類\data1.mat
?????文件??????92845??2009-08-29?16:54??案例1?BP神經網絡的數據分類-語音特征信號分類\data2.mat
?????文件??????92937??2009-08-29?16:54??案例1?BP神經網絡的數據分類-語音特征信號分類\data3.mat
?????文件??????93438??2009-08-29?16:54??案例1?BP神經網絡的數據分類-語音特征信號分類\data4.mat
?????文件????2169163??2013-06-20?10:19??案例1?BP神經網絡的數據分類-語音特征信號分類\M.mat
?????文件????2066576??2013-06-20?10:12??案例1?BP神經網絡的數據分類-語音特征信號分類\y.mat
?????目錄??????????0??2013-06-20?10:19??案例1?BP神經網絡的數據分類-語音特征信號分類
-----------?---------??----------?-----??----
??????????????4615657????????????????????9
評論
共有 條評論