資源簡介
基于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? {
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實現文件傳輸
評論
共有 條評論