完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
识别出语音命令,执行相应操作,比较幼稚,但识别率是相当高的,识别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%sn',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工具箱网上都有的,我就不上传了,大家自己找找吧,很好找的。 |
|
相关推荐
|
|
256 浏览 0 评论
200圆!求助大佬给一份VSG并网和离网模式的simulink仿真
1426 浏览 0 评论
MATLAB(3)--矩阵的引用(sub2ind、ind2sub、reshape函数使用)
2232 浏览 0 评论
2580 浏览 0 评论
4074 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 16:35 , Processed in 0.603889 second(s), Total 46, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号