csvorbis.Floor0.lsp_to_lpc C# (CSharp) Method

lsp_to_lpc() static private method

static private lsp_to_lpc ( float lsp, float lpc, int m ) : void
lsp float
lpc float
m int
return void
        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;
            }
        }