您的位置:首页 > 编程语言 > MATLAB

基于matlab的语音识别系统设计

2011-11-08 21:32 519 查看
这是上学期跟老师做的一个创新实验项目,当时老师给我推荐了一本书好像叫“matlab扩展编程”,看了真是受益匪浅啊。

花了大半个月做出了这么个小东西,识别出语音命令,执行相应操作,比较幼稚,但识别率是相当高的,识别0到9九个数字

时除了2和8有时分不清外,其他都很好,识别开灯关灯之类的命令几乎没有错过。共享给大家参考参考吧。

这个是begin.m,必须先运行它,用来启动串口,我是用串口通过单片机控制灯亮灭的。

begin.m:

g=serial('com6');
g.InputBufferSize=4096;
g.timeout=0.6;
g.BaudRate=9600;
g.Parity='none';
g.StopBits=1;
g.Terminator='LF';
f.FlowControl='hardware';
fopen(g);串口要选和单片机相连的口,我这是6。
还有语音命令录制文件

luzhi.m:

fs=8000;
mingling=('关灯开灯闪烁快闪狂闪脉冲');
display('即将录制参考模板语音,请做好准备。')
i=wavrecord(fs,fs);
help vad
help mfcc
clc
for i=1:6
fprintf('请说出"%s%s"……', mingling(i*2-1),mingling(i*2));
yuyin=wavrecord(fs*2,fs,'int16');
fprintf('正在计算%d的参数……',i-1)
x = yuyin;
[x1 x2] = vad(x);
m = mfcc(x);
m = m(x1-2:x2-2,:);
ref(i).mfcc = m;
clear yuyin x x1 x2
fprintf('计算完成。\n')
end
clear i m x1 x2
save muban.mat
clear
根据屏幕提示做就行了,注意时间。

然后就可以进行语音识别了,运行shibie.m说出你刚才说的命令就可以了。

shibie.m:

load muban.mat
disp('请发出一个命令:');
x=wavrecord(fs*2,fs,'int16');
[x1 x2] = vad(x);
m = mfcc(x);
m = m(x1-2:x2-2,:);
xcanshu = m;
disp('录音结束');
disp('正在进行模板匹配...');
dist = zeros(1,6);
for j=1:6
dist(1,j) = dtw(xcanshu, ref(j).mfcc);
end
disp('正在计算匹配结果...')
[d,j] = min(dist(1,:));
fprintf('语音输入的识别结果为:%s%s\n',mingling(2*j-1),mingling(2*j));
fwrite(g,47+j); %发送命令
fwrite(g,47+j); %发送命令
%out=fread(g,5,'uint8') %接受5个数
fprintf('命令已发出');

玩够了别忘了把串口关掉。
tingzhi.m:

fclose(g);
delete(g);
clear


注意里面用到了一些voicebox工具箱的文件,分别是:dwt.m(动态弯折算法),enframe.m(分帧用的),melbank.m(好像是分段用的,我也忘了),mfcc.m(这个是核心文件,马尔科夫模型就在这里面),vad.m(这个好像是显示吧)。
voicebox工具箱网上都有的,我就不上传了,大家自己找找吧,很好找的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息