资源简介
基于DTW的孤立词语音识别代码,在VC6下编译可用
代码片段和文件信息
#include “dtw.h“
double distance[DTWMAXNUM][DTWMAXNUM]; /*保存距离*/
//double dtwpath[DTWMAXNUM][DTWMAXNUM]; /*保存路径*/
#define SQUARE(x) x*x
/*****************************************************************************/
/* DTWDistance,求两个数组之间的匹配距离
/* AB分别为第一第二个数组,I,J为其数组长度,r为匹配窗口的大小
/* r的大小一般取为数组长度的1/10到1/30
/* 返回两个数组之间的匹配距离如果返回-1.0,表明数组长度太大了
/*****************************************************************************/
double DTWDistanceFun(double *Aint Idouble *Bint Jint r)
{
int ij;
double dist;
int istartimax;
int r2=r+ABS(I-J);/*匹配距离*/
double g1g2g3;
int pathsig=1;/*路径的标志*/
/*检查参数的有效性*/
if(I>DTWMAXNUM||J>DTWMAXNUM){
//printf(“Too big number\n“);
return -1.0;
}
/*进行一些必要的初始化*/
for(i=0;i for(j=0;j //dtwpath[i][j]=0;
distance[i][j]=DTWVERYBIG;
}
}
/*动态规划求最小距离*/
/*这里我采用的路径是 -------
. |
. |
. |
. |
*/
distance[0][0]=(double)2*ABS(A[0]-B[0]);
for(i=1;i<=r2;i++){
distance[i][0]=distance[i-1][0]+ABS(A[i]-B[0]);
}
for(j=1;j<=r2;j++){
distance[0][j]=distance[0][j-1]+ABS(A[0]-B[j]);
}
for(j=1;j istart=j-r2;
if(j<=r2)
istart=1;
imax=j+r2;
if(imax>=I)
imax=I-1;
for(i=istart;i<=imax;i++){
g1=distance[i-1][j]+ABS(A[i]-B[j]);
g2=distance[i-1][j-1]+2*ABS(A[i]-B[j]);
g3=distance[i][j-1]+ABS(A[i]-B[j]);
g2=MIN(g1g2);
g3=MIN(g2g3);
distance[i][j]=g3;
}
}
dist=distance[I-1][J-1]/((double)(I+J));
return dist;
}/*end DTWDistance*/
///method 2////////////////////////////////////////////////////////////////////
/*****************************************************************************/
/* VectorDistance用于求两个向量之间的距离,欧氏距离
/* A和B是待求距离的两个向量
/*****************************************************************************/
double VectorDistance(double *vec1double *vec2int dim)
{
double total = 0.0;
double temp;
int i;
for(i = 0; i < dim; i++)
{
temp = vec1[i] - vec2[i];
total += SQUARE(temp);
}
total /= dim;
total = (double)sqrt(total);
return total;
}
double VDTWDistanceFun(double *Aint Idouble *Bint Jint rint dim)
{
int ij;
double dist;
int istartimax;
double g1g2g3;
int pathsig=1;/*路径的标志*/
int r2=r+ABS(I-J);/*匹配距离*/
if((r2>I-1)||(r2>J-1)){
return 2.0;//return -1.0;
}
/*检查参数的有效性*/
if(I>DTWMAXNUM||J>DTWMAXNUM){
//printf(“Too big number\n“);
return -1.0;
}
/*进行一些必要的初始化*/
for(i=0;i for(j=0;j //dtwpath[i][j]=0;
distance[i][j]=DTWVERYBIG;
}
}
/*动态规划求最小距离*/
/*这里我采用的路径是 -------
. |
. |
. |
. |
有可能有更好的前进路径,我没有细加论证,不过算法的数量级是一样的
*/
distance[0][0]=(double)2*VectorDistance(&A[0]&B[0]dim);
for(i=1;i<=r2;i++){
dis
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2260 2008-07-23 20:22 CVadMfccDtw\common.h
文件 4862 2008-05-16 14:57 CVadMfccDtw\CVadMfccDtw.dsp
文件 530 2008-05-28 10:35 CVadMfccDtw\CVadMfccDtw.dsw
文件 58368 2008-07-23 20:22 CVadMfccDtw\CVadMfccDtw.ncb
文件 50688 2008-07-23 20:22 CVadMfccDtw\CVadMfccDtw.opt
文件 256 2008-07-23 20:10 CVadMfccDtw\CVadMfccDtw.plg
文件 2560 2008-06-07 22:57 CVadMfccDtw\CVadMfccDtw.suo
文件 7046 2008-06-07 22:56 CVadMfccDtw\CVadMfccDtw.vcproj
文件 1427 2008-06-07 22:56 CVadMfccDtw\CVadMfccDtw.vcproj.8164481424F346B.Administrator.user
文件 3907 2008-05-19 23:07 CVadMfccDtw\dtw.c
文件 420 2008-05-19 23:27 CVadMfccDtw\dtw.h
文件 880 2007-11-14 14:13 CVadMfccDtw\Init.c
文件 172 2007-11-12 17:12 CVadMfccDtw\Init.h
文件 15418 2008-05-29 13:49 CVadMfccDtw\ku\1.wav
文件 8464 2008-05-28 10:53 CVadMfccDtw\ku\b.wav
文件 20804 2008-05-19 23:11 CVadMfccDtw\ku\beijiaoda.wav
文件 9826 2008-05-19 15:20 CVadMfccDtw\ku\beijing.wav
文件 9642 2008-05-20 15:32 CVadMfccDtw\ku\china.wav
文件 11494 2008-05-20 15:42 CVadMfccDtw\ku\computer.wav
文件 24718 2008-05-19 23:28 CVadMfccDtw\ku\moai.wav
文件 10914 2008-05-20 15:31 CVadMfccDtw\ku\M_china.wav
文件 10560 2008-05-20 15:42 CVadMfccDtw\ku\M_computer.wav
文件 11904 2008-05-20 15:33 CVadMfccDtw\ku\M_shanghai.wav
文件 10698 2008-05-20 15:35 CVadMfccDtw\ku\M_xian.wav
文件 26920 2008-05-20 15:27 CVadMfccDtw\ku\M_zhonghua.wav
文件 65868 2008-05-20 15:42 CVadMfccDtw\ku\para.dat
文件 8494 2008-05-20 15:40 CVadMfccDtw\ku\shanghai.wav
文件 25018 2008-05-28 11:01 CVadMfccDtw\ku\w.wav
文件 10386 2008-05-20 15:35 CVadMfccDtw\ku\xian.wav
文件 18064 2008-05-19 23:13 CVadMfccDtw\ku\yuyin.wav
............此处省略23个文件信息
- 上一篇:C++制作的简单工厂模式计算器
- 下一篇:MFC实现文件传输
评论
共有 条评论