|  | 
 
| 语音识别(Speech Recognition)是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的技术。 文中,通过采用DTW(Dynamic time warping, 动态时间伸缩)算法,对实现孤立词的识别进行了初步探讨和研究,实现了在MATLAB软件环境下孤立词语的语音识别,并针对DTW的主要特点及不足做出了总结。
 DTW算法基于动态规划(DP)的思想,解决了孤立词发音长短不一的模板匹配问题。文中还针对动态规划的不足提出了改进。
 
 
 
 复制代码clc,close all,clear all;
warning off
%% 选择训练样本
% geshi = { '*.wav','wav video (*.wav)';...
%        '*.bmp','Bitmap image (*.bmp)';...
%        '*.*','All Files (*.*)'};
% [FileName,FilePath] = uigetfile(geshi,'导入外部数据',...
% '*.wav','MultiSelect','on');% 选中所有的音频文件
% % 如果选择了音频文件,生成图片文件的完整路径,否则退出程序,不再运行后面命令
% if ~isequal([FileName,FilePath],[0,0]);
%     FileFullName = strcat(FilePath,FileName);
% else
%     return;
% end
% number_wavs = length(FileFullName);  % 选择的音频文件个数 ,全选
% save FileFullName.mat FileFullName number_wavs
load('FileFullName.mat')
disp('正在计算参考模板的参数...')
for i=1:number_wavs
        fname = audioread(FileFullName{i});
        x=fname;
        [x1,x2] = vad(x);
        m = mfcc(x);
        m = m(x1-2:x2-2,:);
        ref(i).mfcc = m;
   % soundview(x);
end
%% 选择测试样本
[fname, pname, index] = uigetfile( { '*.wav', '选择语音文件'} ) ;
filename = strcat( pname, fname ) ;
% [y, fs] = audioread(filename) ;  % 获取采样频率
disp('正在计算测试模板的参数...')
x=audioread(filename);
[x1,x2] = vad(x);
m = mfcc(x);
m = m(x1-2:x2-2,:);
test.mfcc = m;
disp('正在进行模板匹配...')
dist = zeros(1,number_wavs);
for j=1:number_wavs
    dist(1,j) = dtw(test.mfcc, ref(j).mfcc);
end
disp('正在计算匹配结果...')
for i=1:1
        [d,j] = min(dist(i,:));
        fprintf('测试模板 %d 的识别结果为:%d\n', i, j-1);
end
 
 
 
 参考链接:
 
 
 
 | 
 
x本帖子中包含更多资源您需要 登录 才可以下载或查看,没有帐号?立即注册  |