rctopc.c
上传用户:szhypcb168
上传日期:2007-01-06
资源大小:2187k
文件大小:2k
源码类别:

语音压缩

开发平台:

Unix_Linux

  1. /**************************************************************************
  2. *
  3. * NAME
  4. * rctopc
  5. *
  6. * FUNCTION
  7. *
  8. * convert reflection coefficients into lpc coefficients
  9. *
  10. * BEWARE:  This code does not use memory efficiently.
  11. *
  12. * SYNOPSIS
  13. *
  14. * subroutine rctopc(k, pc, p)
  15. *
  16. *   formal 
  17. *                       data I/O
  18. * name type type function
  19. * -------------------------------------------------------------------
  20. * k float i reflection coefficients (m)
  21. * pc float o predictor parameters (m+1: a(1)=1.0)
  22. * p int i predictor order
  23. *
  24. ***************************************************************************
  25. *
  26. * DESCRIPTION
  27. *
  28. * Converts reflection coefficients into lpc coefficients.
  29. *
  30. * CELP's LPC predictor coefficient convention is:
  31. *              p+1         -(i-1)
  32. *       A(z) = SUM   a   z          where a  = +1.0
  33. *              i=1    i                    1
  34. *
  35. *
  36. ***************************************************************************
  37. *
  38. * CALLED BY
  39. *
  40. * autohf   celp
  41. *
  42. * CALLS
  43. *
  44. *
  45. ***************************************************************************
  46. *
  47. * REFERENCES
  48. *
  49. * Rabiner & Schafer, Digital Processing of Speech Signals,
  50. * Prentice-Hall, 1978, p. 443, equations 8.131a&b&c.
  51. *
  52. **************************************************************************/
  53. #include "ccsub.h"
  54. rctopc(k, pc, p)
  55. int p;
  56. float k[], pc[];
  57. {
  58.   int i, j;
  59.   float a[MAXNO+1][MAXNO+1];
  60.   /* *intialize the array  */
  61.   for (i = 0; i <= p; i++)
  62.   {
  63.     for (j = 0; j <= p; j++)
  64.     {
  65.       a[j][i] = 0.0;
  66.     }
  67.   }
  68.   /* *convert reflection coefficients  */
  69.   for (i = 1; i <= p; i++)
  70.   {
  71.     a[i][i] = k[i-1];
  72.     for (j = 1; j <= i-1; j++)
  73.       a[j][i] = a[j][i-1] - k[i-1] * a[i-j][i-1];
  74.   }
  75.   pc[0] = 1.0;
  76.   for (j = 1; j <= p; j++)
  77.     pc[j] = -a[j][p];
  78. }