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

📄 lpcjisuan.txt

📁 LPC_durbin-durbin recursion(autocorrelations to lpc coef). description: compute predictor coeffici
💻 TXT
字号:
//////////////////////////////////////////////////////////////////////////////
//计算LPC系数,description:
//compute predictor coefficients from autocorrelations based on durbin recursion.
//Inputs:
//r-----autocorrelation vector(r[0...LPC_ORD])
//Outputs:
//a1----predictor parameters
//Returns:NULL
//LPC_ORD-----constant,predictive order
///*
void CSpeech::GetFrameLpc(double* r,double* a1)
{ 
        int i,m,n;
        double temp,alphap;
		
		double a[LPC_ORD+1][LPC_ORD+1];
		double k[LPC_ORD+1];
		for(i=0;i<=LPC_ORD;i++)
		{    k[i]=0;
		     for(n=0;n<=LPC_ORD;n++)
			 a[i][n]=0;
		}
        k[1]=-r[1]/r[0];
       a[1][1]=k[1];
       alphap=r[0]*(1-k[1]*k[1]);
       for(m=2;m<=LPC_ORD;m++)
      {   temp=0;
          for(i=1;i<m;i++)   temp+=a[m-1][i]*r[abs(i-m)];
          k[m]=-(r[m]+temp)/alphap;
         a[m][m]=k[m];
        for(i=1;i<m;i++)  a[m][i]=a[m-1][i]+k[m]*a[m-1][m-i];
        alphap=alphap*(1-k[m]*k[m]);
      }//m
    for(i=0;i<=LPC_ORD;i++)  a1[i]=a[LPC_ORD][i];
}



//////////////////////////////////////////////////////////////////
//计算1帧PLC_ORD+1阶自相关向量
void CSpeech::GetFrameR(double* pDataWin,      //输入加窗数据
						double* rf,           //存储自相关向量
						unsigned int nWinSize  //窗长
						
						)
					
{     unsigned int i,m;
	  
	
	
	  for(i=0;i<=LPC_ORD;i++)
	     
	      {  
	           for(m=0;m<=(nWinSize-i-1);m++)  rf[i]=rf[i]+pDataWin[m]*pDataWin[m+i];
			         
		               
			}			 
	       
	              
      
}

//////////////////////////////////////
//计算所有帧的LPC系数
void CSpeech::GetLpc(
					 double* pDataIn,            //输入加窗数据
					  double* aall,                //存储所有的LPC系数,最终结果
					 unsigned int nWinSize,
                      unsigned int nInLen		// 输入数据长度
					 )
{    
		unsigned  int i,m,f,nframe;
		unsigned  int offset=0;
		 
		 unsigned int offseta=0;
		  double* dataf=new double[nWinSize];
		  double* rf=new double[LPC_ORD+1];
		  double* af=new double[LPC_ORD+1];
		  for(i=0;i<=LPC_ORD;i++)
		  {rf[i]=0;
		  af[i]=0;
		  }
          
        nframe=nInLen/nWinSize;
		       for(f=1;f<=nframe;f++)
		            {  
			               for(i=0;i<=(nWinSize-1);i++)         dataf[i]=pDataIn[i+offset];
			            
				        CSpeech::GetFrameR(dataf,rf,nWinSize);

			            CSpeech::GetFrameLpc(rf,af);
				 
				 
				          for(m=0;m<=LPC_ORD;m++)          aall[offseta+m]=af[m];
				
			           offset=offset+nWinSize;
			            offseta=offseta+LPC_ORD+1;
		              }

 }//*/

⌨️ 快捷键说明

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