All pastes #123694 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-08-09 14:34 UTC
rendered paste body
/*

 * Get_lsp_pol

 *

 *

 * Parameters:

 *    lsp               I: line spectral frequencies

 *    f                 O: polynomial F1(z) or F2(z)

 *

 * Function:

 *    Find the polynomial F1(z) or F2(z) from the LSPs.

 *

 *    F1(z) = product ( 1 - 2 lsp[i] z^-1 + z^-2 )

 *             i=0,2,4,6,8

 *    F2(z) = product   ( 1 - 2 lsp[i] z^-1 + z^-2 )

 *             i=1,3,5,7,9

 *

 *    where lsp[] is the LSP vector in the cosine domain.

 *

 *    The expansion is performed using the following recursion:

 *

 *    f[0] = 1

 *    b = -2.0 * lsp[0]

 *    f[1] = b

 *    for i=2 to 5 do

 *       b = -2.0 * lsp[2*i-2];

 *       f[i] = b*f[i-1] + 2.0*f[i-2];

 *       for j=i-1 down to 2 do

 *          f[j] = f[j] + b*f[j-1] + f[j-2];

 *       f[1] = f[1] + b;

 *

 * Returns:

 *    void

 */

static void Get_lsp_pol( Word32 *lsp, Word32 *f )

{

   volatile Word32 f0, f1, f2, f3, f4, f5;

   Word32 l1, l2, l3, l4;





   /* f[0] = 1.0; */

   f0 = 16777216L;



   /* f1 = *lsp * -1024; */

   f1 = -lsp[0] << 10;

   l1 = lsp[2];

   l2 = lsp[4];

   l3 = lsp[6];

   l4 = lsp[8];

   f2 = f0 << 1;

   f2 -= ( ( ( f1 >> 16 ) * l1 ) + ( ( ( f1 & 0xFFFE ) * l1 ) >> 16 ) ) << 2;

   f1 -= l1 << 10;

   f3 = f1 << 1;

   f3 -= ( ( ( f2 >> 16 ) * l2 ) + ( ( ( f2 & 0xFFFE ) * l2 ) >> 16 ) ) << 2;

   f2 += f0;

   f2 -= ( ( ( f1 >> 16 ) * l2 ) + ( ( ( f1 & 0xFFFE ) * l2 ) >> 16 ) ) << 2;

   f1 -= l2 << 10;

   f4 = f2 << 1;

   f4 -= ( ( ( f3 >> 16 ) * l3 ) + ( ( ( f3 & 0xFFFE ) * l3 ) >> 16 ) ) << 2;

   f3 += f1;

   f3 -= ( ( ( f2 >> 16 ) * l3 ) + ( ( ( f2 & 0xFFFE ) * l3 ) >> 16 ) ) << 2;

   f2 += f0;

   f2 -= ( ( ( f1 >> 16 ) * l3 ) + ( ( ( f1 & 0xFFFE ) * l3 ) >> 16 ) ) << 2;

   f1 -= l3 << 10;

   f5 = f3 << 1;

   f5 -= ( ( ( f4 >> 16 ) * l4 ) + ( ( ( f4 & 0xFFFE ) * l4 ) >> 16 ) ) << 2;

   f4 += f2;

   f4 -= ( ( ( f3 >> 16 ) * l4 ) + ( ( ( f3 & 0xFFFE ) * l4 ) >> 16 ) ) << 2;

   f3 += f1;

   f3 -= ( ( ( f2 >> 16 ) * l4 ) + ( ( ( f2 & 0xFFFE ) * l4 ) >> 16 ) ) << 2;

   f2 += f0;

   f2 -= ( ( ( f1 >> 16 ) * l4 ) + ( ( ( f1 & 0xFFFE ) * l4 ) >> 16 ) ) << 2;

   f1 -= l4 << 10;

   f[0] = f0;

   f[1] = f1;

   f[2] = f2;

   f[3] = f3;

   f[4] = f4;

   f[5] = f5;

   return;

}