【VS开发】【智能语音处理】特定人语音识别算法—DTW算法
DTW(动态时间弯折)算法原理:基于动态规划(DP)的思想,解决发音长短不一的模板匹配问题。相比HMM模型算法,DTW算法的训练几乎不需要额外的计算。所以在孤立词语音识别中,DTW算法仍得到广泛的应用。
在训练和识别阶段,首先采用端点检测算法确定语音的起点和终点。对于参考模板{R(1),R(2),…,R(m),…,R(M)},R(m)为第m帧的语音特征矢量。对于测试模板{T(1),T(2),…,T(n),…,T(N)},T(n)为测试模板的第n帧的语音特征矢量。参考模板与测试模板一般采用类型的特征矢量、相同的帧长、相同的窗函数和相同的帧移。
对于测试和参考模板T和R,它们之间的相似度之间的距离D[T,R],距离越小则相似度越高。在DTW算法中通常采用欧氏距离表示。对于N和M不相同的情况,需要考虑T(n)和R(m)对齐。一般采用动态规划(DP)的方法将实现T到R的映射。
将测试模板的各个帧号n=1~N在一个二维直角坐标系中的横轴上标出,参考模板的各帧号m=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网格,网格中的每一个交叉点(n,m)表示测试模式中某一帧与训练模式中某一帧的交汇点。DP算法可以归结为寻找一条通过此网格中若干格点的路径,路径通过的格点即为测试和参考模板中进行距离计算的帧号。所选的路径必定是从左下角出发,在右上角结束。
为了使路径不至于过分倾斜,可以约束斜率在0.5~2的范围内,如果路径已通过格点
搜索路径的方法如下:搜索从点出发,计算每条路径达到
点时的总的积累距离,具有最小累积距离者即为最佳路径。若用
代表此格点,并将通过该格点之路径延伸而通过
,这些此路径的积累距离为:
这样就可以从=(1,1)出发搜索
,再搜索
,…..,对每个
都存储相应的前一格点
及相应的帧匹配距离
。搜索到
时,只保留一条最佳路径。如果有必要的话,通过逐点向前寻找就可以求得整条路径。这套DP算法便是DTW算法。
对0~9的数字语音进行测试和识别,识别结果如下:
正在进行模板匹配...
正在计算匹配结果...
测试模板1的识别结果为:1
测试模板2的识别结果为:8
测试模板3的识别结果为:3
测试模板4的识别结果为:4
测试模板5的识别结果为:5
测试模板6的识别结果为:6
测试模板7的识别结果为:7
测试模板8的识别结果为:8
测试模板9的识别结果为:9
测试模板10的识别结果为:10
由上可知,除测试模板2误判外,其它数字语音都能正确识别。
DTW算法的MATLAB程序:
function dist = dtw( t,r )
n=size(t,1);
m=size(r,1);
%%帧匹配距离距阵
d=zeros(n,m);
for i=1:n
for j=1:m
d(i,j)=sum((t(i,:)-r(j,:)).^2);
end
end
%%累积距离矩阵
D=ones(n,m)*realmax;
D(1,1)=d(1,1);
%%动态规划
for i=2:n
for j=1:m
D1=D(i-1,j);
if j>1
D2=D(i-1,j-1);
else
D2=realmax;
end
if j>2
D3=D(i-1,j-2);
else
D3=realmax;
end
D(i,j)=d(i,j)+min([D1,D2,D3]);
end
end
dist=D(n,m);
end
测试程序:
disp('正在计算参考模板的参数...')
for i=1:10
fname=sprintf('test1\\�.wav',i-1);
[x fs]=wavread(fname);
[x1 x2]=vad(x,fs);
m=mfcc(x);
m=m(x1-2:x2-2,:);
ref(i).mfcc=m;
end
disp('正在计算测试模板的参数...')
for i=1:10
fname=sprintf('train1\\�.wav',i-1);
[x fs]=wavread(fname);
[x1 x2]=vad(x,fs);
m=mfcc(x);
m=m(x1-2:x2-2,:);
test(i).mfcc=m;
end
disp('正在进行模板匹配...')
dist=zeros(10,10);
for i=1:10
for j=1:10
dist(i,j)=dtw(test(i).mfcc,ref(j).mfcc);
end
end
disp('正在计算匹配结果...')
for i=1:10
[d,j]=min(dist(i,:));
fprintf('测试模板%d的识别结果为:%d\n',i,j);
end
【VS开发】【智能语音处理】特定人语音识别算法—DTW算法的更多相关文章
- 【VS开发】【智能语音处理】DTW算法(语音识别)
DTW主要是应用在孤立词识别的算法,用来识别一些特定的指令比较好用,这个算法是基于DP(动态规划)的算法基础上发展而来的.这里介绍语音识别就先介绍下语音识别的框架,首先我们要有一个比对的模版声音,然后 ...
- 【VS开发】【智能语音处理】语音信号处理之(一)动态时间规整(DTW)
语音信号处理之(一)动态时间规整(DTW) zouxy09@qq.com http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课,快考试了,所以也要了解了 ...
- 基于Laravel+Swoole开发智能家居后端
基于Laravel+Swoole开发智能家居后端 在上一篇<Laravel如何优雅的使用Swoole>中我已经大概谈到了Laravel结合Swoole的用法. 今天,我参与的智能家居项目基 ...
- 【EatBook】-NO.2.EatBook.2.JavaArchitecture.1.001-《修炼Java开发技术在架构中体验设计模式和算法之美》-
1.0.0 Summary Tittle:[EatBook]-NO.2.EatBook.2.JavaArchitecture.1.001-<修炼Java开发技术在架构中体验设计模式和算法之美&g ...
- 《C++游戏开发》十六 游戏中的寻路算法(二):迷宫&A*算法基础
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/10289253 作者:七十一雾央 新浪微博:http: ...
- 以太坊系列之十一: 零起步使用remix开发智能合约
一步一步使用remix开发智能合约 最新版的remix(2017-8-3)只能使用在线开发了,已经没有离线版本了,并且好像在线版本要FQ才能访问(自行解决). 1.打开remix 注意地址如果是htt ...
- Android开发—智能家居系列】(二):用手机对WIFI模块进行配置
在实际开发中,我开发的这款APP是用来连接温控器,并对温控器进行控制的.有图为证,哈哈. 上一篇文章[Android开发—智能家居系列](一):智能家居原理的文末总结中写到: 手机APP控制智能温控器 ...
- 我的Java开发学习之旅------>Java经典排序算法之归并排序
一.归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是採用分治法(Divide and Conquer)的一个很典型的应用.将已有序的子序列合并,得到全然有序的序列.即先使每一个子序列 ...
- Let's Do 本地开发智能合约
上篇文章我们发了个币,有人抱怨在线(remix)写代码不爽,好吧,那就来看下怎么在本地开发智能合约? 一.安装开发环境 1.安装Node,Node v8.9.4或更高版本 我安装的是: 2.集成开发框 ...
随机推荐
- dlopen用法
1. 包含头文件 #include<dlfcn.h> 2. 函数定义 void * dlopen(const char* pathName, int mode); pathName 指的 ...
- H5实现手写功能
html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...
- STM32使用HAL库,使用延时卡死的问题。
之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题.发现我使用库里的延时程序HAL_Delay()时,会卡死在里面. 根据程序,进入到这个延时程序后 ,发现HAL_GetTick ...
- MaxCompute - ODPS重装上阵 第六弹 - User Defined Type
MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提 ...
- border-box与content-box的区别
㈠box-sizing 属性 ⑴box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素. ⑵语法:box-sizing: content-box|border-box|inherit; ...
- [JZOJ6244]【NOI2019模拟2019.7.1】Trominoes 【计数】
Description n,m<=10000 Solution 考虑暴力轮廓线DP,按顺序放骨牌 显然轮廓线长度为N+M 轮廓线也是单调的 1表示向上,0表示向右 N个1,M个0 只能放四种骨牌 ...
- Generalizing from a Few Examples: A Survey on Few-Shot Learning(从几个例子总结经验:少样本学习综述)
摘要:人工智能在数据密集型应用中取得了成功,但它缺乏从有限的示例中学习的能力.为了解决这一问题,提出了少镜头学习(FSL).利用先验知识,可以快速地从有限监督经验的新任务中归纳出来.为了全面了解FSL ...
- spring boot V部落 V人事项目
公司倒闭 1 年多了,而我在公司倒闭时候做的开源项目,最近却上了 GitHub Trending,看着这个数据,真是不胜唏嘘. 缘起 2017 年 11 月份的时候,松哥所在的公司因为经营不善要关门了 ...
- SSM三大框架整合配置详解
首先,导入框架所需要的全部jar包(此处省略...........) 第一步:先从mybatis框架开始 我们只需要在mybatis的核心配置文件sqlConfigXml里写上这么一段话,代表的是给p ...
- 【转】HLS视频点播&直播初探
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...