博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【语音识别】DTW的0-9数字语音识别matlab源码
阅读量:282 次
发布时间:2019-03-01

本文共 10515 字,大约阅读时间需要 35 分钟。

 一、简介

1 DTW原理
动态时间规整DTW是一个典型的优化问题,它用满足一定条件的的时间规整函数W(n)描述测试模板和参考模板的时间对应关系,求解两模板匹配时累计距离最小所对应的规整函数。

假设我们有两个时间序列Q和C,他们的长度分别是n和m:(实际语音匹配运用中,一个序列为参考模板,一个序列为测试模板,序列中的每个点的值为语音序列中每一帧的特征值。例如语音序列Q共有n帧,第i帧的特征值(一个数或者一个向量)是qi。至于取什么特征,在这里不影响DTW的讨论。我们需要的是匹配这两个语音序列的相似性,以达到识别我们的测试语音是哪个词)

Q = q1, q2,…,qi,…, qn ;

C = c1, c2,…, cj,…, cm ;

如果n=m,那么就用不着折腾了,直接计算两个序列的距离就好了。但如果n不等于m我 们就需要对齐。最简单的对齐方式就是线性缩放了。把短的序列线性放大到和长序列一样的长度再比较,或者把长的线性缩短到和短序列一样的长度再比较。但是这 样的计算没有考虑到语音中各个段在不同情况下的持续时间会产生或长或短的变化,因此识别效果不可能最佳。因此更多的是采用动态规划(dynamic programming)的方法。

为了对齐这两个序列,我们需要构造一个n x m的矩阵网格,矩阵元素(i, j)表示qi和cj两个点的距离d(qi, cj)(也就是序列Q的每一个点和C的每一个点之间的相似度,距离越小则相似度越高。这里先不管顺序),一般采用欧式距离,d(qi, cj)= (qi-cj)2(也可以理解为失真度)。每一个矩阵元素(i, j)表示点qi和cj的对齐。DP算法可以归结为寻找一条通过此网格中若干格点的路径,路径通过的格点即为两个序列进行计算的对齐的点。

注明:先把模板序列和测试序列的每个点相对应的距离算出来,构成一个m xn的矩阵。然后根据每个元素的代价计算一条最短路径。这里的计算要符合以上三个约束。即,一个点的代价=这个点的值+来自min{下、左、斜下这三个方向的值}。下、左、斜下这三个方向的值可以依次递归求得,直到(1,1)点。
2 一般要求规整函数满足如下约束:
 

二、源代码

```c

function varargout = main(varargin)

% MAIN MATLAB code for main.fig
%      MAIN, by itself, creates a new MAIN or raises the existing
%      singleton*.
%
%      H = MAIN returns the handle to a new MAIN or the handle to
%      the existing singleton*.
%
%      MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MAIN.M with the given input arguments.
%
%      MAIN('Property','Value',...) creates a new MAIN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before main_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to main_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help main

% Last Modified by GUIDE v2.5 30-Mar-2016 14:29:41

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @main_OpeningFcn, ...
                   'gui_OutputFcn',  @main_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout

    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before main is made visible.
function main_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to main (see VARARGIN)

% Choose default command line output for main

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes main wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = main_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

function edit1_Callback(hObject, eventdata, handles)

% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
file_path = get( hObject , 'String' ) ;
handles.file_path = file_path ;
guidata( hObject , handles ) ;

% Hints: get(hObject,'String') returns contents of edit1 as text

%        str2double(get(hObject,'String')) returns contents of edit1 as a double

% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in pushbutton1.
%%选择识别样本
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global file1 pathname
[file1,pathname]=uigetfile('*.wav','请选择要识别的样本');%跳出对话框
fname=fullfile(pathname,file1);
[k,fs]=wavread(fname);
    sound(k,fs); %播放声音
set(handles.edit3,'string','识别结果'); 

% --- Executes on button press in pushbutton2.

%%开始训练按钮
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
warning off
file_path = get( handles.edit1 , 'String' ) ;
T=0;
h = waitbar(0,'正在训练,请稍等...');
for i=0:9
    fname=fullfile(file_path,sprintf('%d0.wav',i));
    [k,fs]=wavread(fname);
    [StartPoint,EndPoint]=vad(k,fs);
    cc=mfcc(k);
    cc=cc(StartPoint-2:EndPoint-2,:);
    ref(i+1).StartPoint=StartPoint;
    ref(i+1).EndPoint=EndPoint;
    ref(i+1).mfcc=cc;
    waitbar( i/9 ) ;
end

```

 三、运行结果

四、备注

完整代码或者代写添加QQ 1564658423
往期回顾>>>>>>
[【信号处理】基于matlab HMM的睡眠状态检测【含Matlab源码 050期】](https://blog.csdn.net/TIQCmatlab/article/details/113088677)
[【信号处理】基于matlab CDR噪声和混响抑制【含Matlab源码 051期】](https://blog.csdn.net/TIQCmatlab/article/details/112215173)
[【信号处理】基于matlab最小二乘法解决稀疏信号恢复问题【含Matlab源码 052期】](https://blog.csdn.net/TIQCmatlab/article/details/112215325)
[【信号处理】基于matlab小波变换的音频水印嵌入提取【含Matlab源码 053期】](https://blog.csdn.net/TIQCmatlab/article/details/113088823)
[【信号处理】基于matlab ICA算法信号分离【含Matlab源码 054期】](https://blog.csdn.net/TIQCmatlab/article/details/113088961)
[【信号处理】基于matlab GUI界面的脉搏信号之脉率存档【含Matlab源码 237期】](https://blog.csdn.net/TIQCmatlab/article/details/113724954)
[【信号处理】基于matlab GUI界面的虚拟信号发生器(各种波形)【含Matlab源码 271期】](https://blog.csdn.net/TIQCmatlab/article/details/113775611)
[【信号处理】基于matlab GUI界面信号发生器之电子琴【含Matlab源码 272期】](https://blog.csdn.net/TIQCmatlab/article/details/113775611)
[【信号处理】基于matlab的数字电子琴设计与实现【含Matlab源码 273期】](https://blog.csdn.net/TIQCmatlab/article/details/113775686)
[【雷达通信】基于matlab的雷达数字信号处理【含Matlab源码 281期】](https://blog.csdn.net/TIQCmatlab/article/details/113794899)
[【雷达通信】基于matlab线性调频(LFM)脉冲压缩雷达仿真【含Matlab源码 283期】](https://blog.csdn.net/TIQCmatlab/article/details/113794928)
[【雷达通信】基于mtatlab距离多普勒(RD)、CS、RM算法的机载雷达成像【含Matlab源码 284期】](https://blog.csdn.net/TIQCmatlab/article/details/113794999)
[【雷达通信】《现代雷达系统分析与设计》大作业【含Matlab源码 285期】](https://blog.csdn.net/TIQCmatlab/article/details/113795060)
[【信号处理】基于matlab GUI语音信号综合处理平台【含Matlab源码 290期】](https://blog.csdn.net/TIQCmatlab/article/details/113800676)
[【信号处理】基于matlab GUI语音信号采集【含Matlab源码 291期】](https://blog.csdn.net/TIQCmatlab/article/details/113800708)
[【信号处理】基于matlab GUI语音幅度调制【含Matlab源码 292期】](https://blog.csdn.net/TIQCmatlab/article/details/113800767)
[【信号处理】基于matlab GUI语音合成【含Matlab源码 293期】](https://blog.csdn.net/TIQCmatlab/article/details/113800825)
[【信号处理】基于matlab GUI语音基频识别【含Matlab源码 294期】](https://blog.csdn.net/TIQCmatlab/article/details/113800838)
[【信号处理】基于matlab GUI语音信号加密解密【含Matlab源码 295期】](https://blog.csdn.net/TIQCmatlab/article/details/113800874)
[【信号处理】基于matlab小波变换的语音增强【含Matlab源码 296期】](https://blog.csdn.net/TIQCmatlab/article/details/113800896)
[【信号处理】基于matlab GUI语音傅立叶变换降噪混频【含Matlab源码 297期】](https://blog.csdn.net/TIQCmatlab/article/details/113800926)
[【信号处理】基于matlab GUI维纳滤波之语音增强【含Matlab源码 298期】](https://blog.csdn.net/TIQCmatlab/article/details/113800943)
[【音频处理】基于matlab GUI语音信号处理2【含Matlab源码 299期】](https://blog.csdn.net/TIQCmatlab/article/details/113800964)
[【雷达通信】基于matlab GUI雷达定位【含Matlab源码 302期】](https://blog.csdn.net/TIQCmatlab/article/details/113812250)
[【雷达通信】基于matlab GUI雷达脉冲压缩【含Matlab源码 303期】](https://blog.csdn.net/TIQCmatlab/article/details/113812275)
[【雷达通信】基于matlab GUI雷达定位模拟【含Matlab源码 304期】](https://blog.csdn.net/TIQCmatlab/article/details/113812309)
[【雷达通信】基于matlab SVM识别雷达数据【含Matlab源码 305期】](https://blog.csdn.net/TIQCmatlab/article/details/113812325)
[【雷达图像】SAR合成孔径雷达成像及处理【含Matlab源码 307期】](https://blog.csdn.net/TIQCmatlab/article/details/113824675)
[【信息处理】基于GUI数字波束的算法库【含Matlab源码 313期】](https://blog.csdn.net/TIQCmatlab/article/details/113824971)
[【通信】基于matlab的OFDM-MIMO通信建模与仿真【含Matlab源码 314期】](https://blog.csdn.net/TIQCmatlab/article/details/113837600)
[【通信】基于matlab的OFDM仿真【含Matlab源码 315期】](https://blog.csdn.net/TIQCmatlab/article/details/113837657)
[【信号处理】基于matlab窗函数法的FIR数字滤波器设计【含Matlab源码 316期】](https://blog.csdn.net/TIQCmatlab/article/details/113837688)
[【通信】基于matlab FIR低通数字滤波器设计【含Matlab源码 323期】](https://blog.csdn.net/TIQCmatlab/article/details/113843276)
[【通信】基于matlab FIR IIR数字滤波器设计【含Matlab源码 324期】](https://blog.csdn.net/TIQCmatlab/article/details/113843445)
[【信号处理】基于matlab的语音信号频谱分析仪【含Matlab源码 325期】](https://blog.csdn.net/TIQCmatlab/article/details/113851023)
[【调制信号】基于matlab GUI数字调制信号仿真【含Matlab源码 336期】](https://blog.csdn.net/TIQCmatlab/article/details/113872255)
[【通信】基于matlab的扩频通信系统设计【含Matlab源码 337期】](https://blog.csdn.net/TIQCmatlab/article/details/113872346)
[【通信】基于matlab多径衰落信道的仿真【含Matlab源码 338期】](https://blog.csdn.net/TIQCmatlab/article/details/113872443)
[【语音识别】基于matlab BP神经网络的语音情感识别【含Matlab源码 349期】](https://blog.csdn.net/TIQCmatlab/article/details/113892143)
[【信号处理】基于matlab音频水印嵌入与提取【含Matlab源码 350期】](https://blog.csdn.net/TIQCmatlab/article/details/113892320)
[【音频水印】基于matlab小波变换的量化音频数字水印【含Matlab源码 351期】](https://blog.csdn.net/TIQCmatlab/article/details/113892692)
[【语音去噪】基于matlab低通和自适应滤波去噪【含Matlab源码 352期】](https://blog.csdn.net/TIQCmatlab/article/details/113892914)
[【信号处理】基于matlab 8级m序列【含Matlab源码 353期】](https://blog.csdn.net/TIQCmatlab/article/details/113893509)
[【情感识别】基于matlab GUI语音情感分类识别【含Matlab源码 354期】](https://blog.csdn.net/TIQCmatlab/article/details/113922259)
[【信号处理】基于matlab FIR与IIR滤波器低通、高通、带通设计【含Matlab源码 360期】](https://blog.csdn.net/TIQCmatlab/article/details/113924808)
[【语音处理】基于matlab语音信号的预处理【含Matlab源码 364期】](https://blog.csdn.net/TIQCmatlab/article/details/113942991)
[【语音识别】基于matlab 傅立叶变换0-9的数字语音识别【含Matlab源码 384期】](https://blog.csdn.net/TIQCmatlab/article/details/114021259)

 

四、备注

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

你可能感兴趣的文章