static void lsp_to_lpc(float[] lsp, float[] lpc, int m)
{
int i,j,m2=m/2;
float[] O=new float[m2];
float[] E=new float[m2];
float A;
float[] Ae=new float[m2+1];
float[] Ao=new float[m2+1];
float B;
float[] Be=new float[m2];
float[] Bo=new float[m2];
float temp;
// even/odd roots setup
for(i=0;i<m2;i++)
{
O[i]=(float)(-2.0*Math.Cos(lsp[i*2]));
E[i]=(float)(-2.0*Math.Cos(lsp[i*2+1]));
}
// set up impulse response
for(j=0;j<m2;j++)
{
Ae[j]=0.0f;
Ao[j]=1.0f;
Be[j]=0.0f;
Bo[j]=1.0f;
}
Ao[j]=1.0f;
Ae[j]=1.0f;
// run impulse response
for(i=1;i<m+1;i++)
{
A=B=0.0f;
for(j=0;j<m2;j++)
{
temp=O[j]*Ao[j]+Ae[j];
Ae[j]=Ao[j];
Ao[j]=A;
A+=temp;
temp=E[j]*Bo[j]+Be[j];
Be[j]=Bo[j];
Bo[j]=B;
B+=temp;
}
lpc[i-1]=(A+Ao[j]+B-Ae[j])/2;
Ao[j]=A;
Ae[j]=B;
}
}