lpc語音識別源碼,這是我根據趙力那本“語音信號處理”后面的源代碼寫的LPC美爾倒譜特征的C源代碼,基本上沒做什么修改,需要的朋友就可以不用自己再錄入了。
程序調試通過,可以直接用。
由于這段代碼是我一個程序的一部分,我轉過來可能會少一些定義什么的,所以并不是非常完整。
- //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[][]; //端點檢測后的語音數據
- 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為端點檢測后的每個語音數據的幀長
- 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]);
- }
- }
-
復制代碼
下載:
00063058lpc.rar
(1.54 KB, 下載次數: 13)
2017-4-29 14:43 上傳
點擊文件名下載附件
lpc 下載積分: 黑幣 -5
|