標(biāo)題:
lpc語(yǔ)音識(shí)別源碼
[打印本頁(yè)]
作者:
titan7149
時(shí)間:
2017-4-29 14:43
標(biāo)題:
lpc語(yǔ)音識(shí)別源碼
lpc語(yǔ)音識(shí)別源碼,這是我根據(jù)趙力那本“語(yǔ)音信號(hào)處理”后面的源代碼寫的LPC美爾倒譜特征的C源代碼,基本上沒做什么修改,需要的朋友就可以不用自己再錄入了。
程序調(diào)試通過,可以直接用。
由于這段代碼是我一個(gè)程序的一部分,我轉(zhuǎn)過來可能會(huì)少一些定義什么的,所以并不是非常完整。
//Calculate LPC coefficients coefficients based on autocorrelation
void corref(int ip,float cor[],float alf[])
{
int i,j;
float refi,alfsave,resid;
alf[1]=(-cor[1]);
alf[0]=1;
resid=1-cor[1]*cor[1];
for(i=2;i<=ip;i++)
{
refi=cor[i];
for(j=1;j<i;j++)
refi+=alf[j]*cor[i-j];
refi/=resid;
alf[i]=(-refi);
for(j=1;2*j<=i;j++)
{
alfsave=alf[j];
alf[j]=alfsave-refi*alf[i-j];
if(2*j!=i)
alf[i-j]-=refi*alfsave;
}
}
}
//Calculate LPC cepstrum based on alf
void alfcep(int ip,float alf[],float cep[],int n)
{
int m,i;
float ss;
m=0;
goto start;
next:
m+=1;
ss=0;
i=0;
goto step3;
step2:
ss-=alf[i]*cep[m-i];
step3:
i+=1;
if(i>ip) goto step4;
if(i<m) goto step2;
ss-=alf[m]*m;
step4:
cep[m]=ss;
start:
if(m<n) goto next;
for(m=2;m<=n;m++)
cep[m]/=m;
}
//Calculate mel-warped LPC cepstrum
void cepmel(float cep[],float mel[])
{
int k,n;
float u0[ORDER+2],u1[ORDER+2];
float alpha=ALPHA;
//Calculation mel[0]*
u0[ORDER+1]=0;
for(n=ORDER;n>=0;--n)
u0[n]=cep[n]+alpha*u0[n+1];
//mel[0]=u0[0];
//Calculation mel[1]*
u1[ORDER+1]=0;
for(n=ORDER;n>=0;--n)
u1[n]=((1-alpha*alpha)*u0[n+1]+alpha*u1[n+1]);
mel[1]=u1[0];
//Calculation mel[2],mel[3],......,mel[ORDER] *
for(k=2;k<=ORDER;++k)
{
for(n=0;n<=ORDER+1;++n)
u0[n]=u1[n];
for(n=ORDER;n>=0;--n)
u1[n]=u0[n+1]+alpha*(u1[n+1]-u0[n]);
mel[k]=u1[0];
}
}
main()
{
int rad[][]; //端點(diǎn)檢測(cè)后的語(yǔ)音數(shù)據(jù)
float cor[ORDER+1]; //autocorrelation coefficients ORDER=14
float alf[ORDER+1]; //LPC
float cep[ORDER+1]; //LPC cepstrum
float mel[ORDER+1];
float mel_data[length][ORDER];
//mel-warped LPC cepstrum,length為端點(diǎn)檢測(cè)后的每個(gè)語(yǔ)音數(shù)據(jù)的幀長(zhǎng)
int mel_v=0;
//Auto-Correlation Calculation
correl(rad[count],cor,W_SIZE,ORDER);
//LPC Analysis Program
corref(ORDER,cor,alf);
//LPC Cepstrum Coefficient Calculation
alfcep(ORDER,alf,cep,ORDER);
alf[0]=cep[0]=cor[0]; //cor[0] is power
//MEL Cepstrum Coefficient Calculation
cepmel(cep,mel);
//printf("\n Frame %d :",count);
for(i=0;i<ORDER;i++)
{
mel_data[mel_v][i]=mel[i+1];
//printf("\nFrame %d: Mel[%d][%d]= %g",count,mel_v,i,mel_data[mel_v][i]);
}
}
復(fù)制代碼
下載:
00063058lpc.rar
(1.54 KB, 下載次數(shù): 13)
2017-4-29 14:43 上傳
點(diǎn)擊文件名下載附件
lpc
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1