⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sound1lpc.c

📁 该函数(线性预测)主要应用于声音处理与分析
💻 C
字号:
/**********************************
语音线性预测分析子程序
输入:*original 待语音样点
输出: a        线性预测系数

注:Framelen   --200 帧长(对应采样率为8Hz,帧长为
25ms)
    Fshift     --100 帧移
    alpha      --0.93预加重系数
*************************************/

void lpc(int *original,int a)
{
/*预加重*/
float  *data;
int j;
for(j=0;j<Framelen;j++)
   data[j]=original[j]-alpha*original[j-1];


/*乘窗长*/
MultiHamming(data);



/*自相关分析*/
AutoCorrel(Framelen,data,10,a,1);


void MultiHamming(int *data)
{register int i;
for(i=0;i<Framelen;i++)
   data[i]=0.54-0.46*cos(2*PI*i/(Framelen-1));
}



/*******************************************
FUNCTION  自相关

输入:n  NO.OF POINTS  IN EVERY FRAME 
      m  ORDER OF FILTER (M<21, DEE NOTE *l)
      sl[n] INPUT POINTS SEWENCE IN EVERY FRAME
输出:a[n]  FILTER  COFFICIECE
注:  r     TIME --DOMAIN AUTOCORRELATION COFFICENCE
      e     RESIDUAL "ENERGY"
      PROGRAME LIMITED M<21 BECAUSE OF DIMENSIONS OF R[.]
**********************************************/
int AutoCorrelate(int n,int *sl,int m,float *a,int mark)
{
   register int i,j;
   float r[21],e[21],k[21],aa[22][21],sum;
for(i=0;i<21;i++)
{
  r[i]=0;  e[i]=0; k[i]=0;
}
for(i=0;i<21;i++)
    for(j=0;j<21;j++)
        aa[i][j]=0;
for(j=0;j<=m;j++)
{
  r[j]=0;
  for(i=0;i<n-j;i++)
    r[j]+=(float)sl[i]*sl[i+j];
}

if(mark==1)
e[0]=r[0];
aa[1][1]=r[1]/(r[0]+0.00001);
k[1]=r[1]/(e[0]+0.00001)  ;
e[1]=(1-k[1]*k[1]*e[0];

for(i=2;i<=m;i++)
{
  sum=0.0;
  for(j=1;j<=i-1;j++)
        sum+=aa[i-1][j]*r[i-1];

  if(e[i-1]==0.0)  return(-1);
  k[i]=(r[i]-sum)/e[i-1];
  aa[i][i]=k[i];
  for(j=1;j<=i-1;j++)
     aa[i][j]=aa[i-1][j]-k[i]*aa[i-1][i-j];
  e[i]=(1.0-k[i]*k[i]*e[i-1];
}
for(j=1;j<=m;j++)
  a[j]=aa[m][j];
return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -