连接词识别的Level Building 算法。。。。。。
来源:互联网 发布:淘宝售前客服兼职 编辑:程序博客网 时间:2024/05/22 11:33
看了一篇论文,A Level Building Dynamic Time Warping Algorithm for Connected Word Recognition,IEEE TRANSACTIONS ON ACOUSTICS, SPEECH, AND SIGNAL PROCESSING, VOL. ASSP-29, NO. 2, APRIL 1981,上面描述了Level Building 算法用于连接词识别,还讲了该算法与 Two level DP 算法的联系。。。。而Two level Dp算法已经可以很好的实现出来,但Level Building 算法在操作的过程中遇到了一点点小问题。。。。。代码如下,希望大家能指出来。。。。。
N=size(T,2);%测试序列的帧数K=length(DataSet);%参考模板个数L=7;%连接词最大数目%Algorithm S2%Word level Matching %InitializeD=inf(N,N,K);for e=1:N %起点标号 for b=e-40+1:e-8+1 %终点 if b>0 for v=1:K dist=dtw(T(:,b:e), DataSet{v}.mfcc); D(b,e,v)=dist; end end endend%Initialize初始化 第一级F(1,1:N,1:K)=-1;for e=2:N mindstk=inf; v1=-1; %最优词索引 for v=1:K mindist=inf; k=-1; for b=1:e-1 if e-b+1>=8&e-b+1<=40 if D(b,e,v)<mindist mindist=D(b,e,v); k=e; %保存上一个结束点 end end end Dst(1,1,v)=inf; Dst(1,e,v)=mindist; F(1,e,v)=k; if Dst(1,e,v)<mindstk mindstk=Dst(1,e,v); v1=v; end end B(1,e)=mindstk; %第一级的最小距离 W(1,e)=v1; %保存第一级最优词序号 if v1>0 DF(1,e)=F(1,e,v1); % DF保存第一级最小路径测试序列对应的帧号 else DF(1,e)=0; end end% Start Phrase level Matching for l=2:L %层循环 for e=l+1:N %测试模板帧 mindstk=inf; v1=-1; %最优词索引 for v=1:K %所有的参考模板 mindist=inf; k=-1; for b=2:e-1 if e-b+1>=8&e-b+1<=40 if D(b,e,v)+B(l-1,b-1)<mindist mindist=D(b,e,v)+B(l-1,b-1); k=b-1; %保存上一个结束点 end end end Dst(l,e,v)=mindist; F(l,e,v)=k; if Dst(l,e,v)<mindstk mindstk=Dst(l,e,v); v1=v; end end B(l,e)=mindstk; %第l级的最小距离 W(l,e)=v1; %保存第l级最优词序号 if v1>0 DF(l,e)=F(l,e,v1); % DF保存第l级最小路径测试序列对应的帧号 else DF(l,e)=0; end endend%Find Best Length 省略。。Lr=7; %假设bset Length为7eL=N;words=[];while Lr>0 words=[W(Lr,eL) words]; eL=DF(Lr,eL); Lr=Lr-1;enddisp(words-1); %输出结果
用连续数字串:1344507.wav 做实验,识别输出的结果为:1 1 3 4 5 0 7
2012.12.18 修正的LevelBuilding 算法:
function [Pr,Br,Wr] = levelBuilding(hmms,O)% hmms:HMM模型集合% O:观测序列% 返回值: Pr:最佳累积距离;Br:最佳累积距离对应的帧;Wr:最佳词序列 T= size(O,1);%语音帧数,观测序列长度 K=length(hmms);%HMM模型个数 L=7; %最大层数,即词数%At level l=1%Initialization P=-inf(L,T,K); B=zeros(L,T,K); Pr=-inf(L,T); %保存最优概率 Br=zeros(L,T); Wr=zeros(L,T); delta=cell(1,K); fai=cell(1,K); %记录状态 init=cell(1,K); trans=cell(1,K); %初始化 for i=1:K hmm=hmms{i}.hmm; %第i个隐马尔可夫模型的状态数 delta{i}=zeros(T,hmm.N); %第i个模型的token %初始化第i个模型的第一个状态的概率,转换为对数形式 fai{i}= zeros(T,hmm.N); init{i}=hmm.init; trans{i}=hmm.trans; ind1 = find(init{i}>0); ind0 = find(init{i}<=0); init{i}(ind0) = -inf; init{i}(ind1) = log(init{i}(ind1)); %初始化第i个模型的的转移概率 ind1 = find(trans{i}>0); ind0 = find(trans{i}<=0); trans{i}(ind0) = -inf; trans{i}(ind1) = log(trans{i}(ind1)); end x = O(1,:); for k=1:K for i=1:hmms{k}.hmm.N %每个HMM的状态数 delta{k}(1,i) = init{k}(i) + log(mixture(hmms{k}.hmm.mix(i),x)); %初始化前向概率矩阵,初始状态概率乘以t=1时观测序列的输出概率 end end delta1=delta; %保存初始值,以免迭代覆盖 for t=2:T %从第二个观测序列开始 for k=1:K for j = 1:hmms{k}.hmm.N %对该模型的所有状态 [delta{k}(t,j), fai{k}(t,j)]= max(delta{k}(t-1,:) + trans{k}(:,j)');%找出t-1时刻所有状态最大的前向概率与转移的矩阵kk x = O(t,:); delta{k}(t,j) = delta{k}(t,j) + log(mixture(hmms{k}.hmm.mix(j),x)); %记录第k个词的最大距离 end P(1,t,k)=delta{k}(t,hmms{k}.hmm.N); B(1,t,k)=0; %保存帧号还是0?? end [pm,q]=max(P(1,t,1:K)); Pr(1,t)=pm; Br(1,t)=B(1,t,q); Wr(1,t)=q;end%%%%%%%%%%%%%%%%%%%%%%level=1 End%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%level=2 开始。。。。。%Initialization delta2(1,1:4)=0; belta(1,1:4)=0;for l=2:L for t=2:T %从第二个观测序列开始 temp=-inf; wi=0; for k=1:K if trans{k}(1,1)+delta2(t-1,1)>temp temp=trans{k}(1,1)+delta2(t-1,1); wi=k; end end %[pb,ind]=max(trans{1:K}(1,1)+delta2(t-1,1)); x=O(t,:); [va,ind]=max([Pr(l-1,t-1) temp]); delta2(t,1)=va+log(mixture(hmms{wi}.hmm.mix(1),x)); if ind==1 belta(t,1)=t-1; else belta(t,1)=belta(t-1,1); end %%递归 for k=1:K for j = 1:hmms{k}.hmm.N %对该模型的所有状态 [vm,vd]=max(delta2(t-1,:)+ trans{k}(:,j)'); x=O(t,:); delta2(t,j)=vm+log(mixture(hmms{k}.hmm.mix(j),x)); belta(t,j)=belta(t-1,vd); end P(l,t,k)=delta2(t,hmms{k}.hmm.N); B(l,t,k)=belta(t,hmms{k}.hmm.N); %保存帧号还是0?? end %%结束递归 end [pm,q]=max(P(l,t,1:K)); Pr(l,t)=pm; Br(l,t)=B(l,t,q); Wr(l,t)=q; end% disp(delta2);end
- 连接词识别的Level Building 算法。。。。。。
- 连接词识别
- 关于presentation 中连接词的 使用
- 英语连接词~很全的版本!!!
- MD5算法的识别
- SHA1算法的识别
- 英文连接词
- Building Coder(Revit 二次开发) - 缺少层(Level)属性的族实例
- 浅析字母识别的算法
- 技能分享 | 麦肯锡教给我的写作武器:连接词是文章通顺的灵魂
- 技能分享 | 麦肯锡教给我的写作武器:连接词是文章通顺的灵魂
- 融合车牌识别算法的PC端车牌识别SDK
- 移动前端识别的车牌识别SDK算法
- 移动端车牌识别前端识别算法的典型应用
- 连接词及其用法
- 雅思口语 万能连接词
- 英语作文连接词
- 英语连接词总结
- 使用C++和Directx开发GUI(二)
- spring3mvc如何把checkbox的值绑定到model对象的int数据类型
- 使用C++和Directx开发GUI(三)
- 使用navicat将QQ IP数据库导入到MySQL
- 今天迈出第一步,开始了解iphone开发
- 连接词识别的Level Building 算法。。。。。。
- 使用C++和DirectX开发GUI - 资源编辑器及其它
- C语言学习笔记(运算符)
- ubuntu中更改apache2中php的开发目录路径
- SQLSEVER系统数据库表
- 游戏引擎中的通用编程技术(一)
- DOM4J解析XML文档
- 游戏引擎剖析(一)
- 条款52:写了placement new也要写placement delete(Write placement delete if you write placement new.)