pctorc.c
上传用户:tsjrly
上传日期:2021-02-19
资源大小:107k
文件大小:2k
源码类别:

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * NAME
  4. * pctorc 
  5. *
  6. * FUNCTION
  7. *
  8. * Convert from lp-polynomial to reflection coefficients.
  9. *
  10. * BEWARE: This code does not use memory efficiently.
  11. *
  12. * SYNOPSIS
  13. *
  14. * subroutine pctorc(lpc, rc, n)
  15. *
  16. *   formal 
  17. *                       data    I/O
  18. *       name            type    type    function
  19. *       -------------------------------------------------------------------
  20. *       lpc(n+1)        float   i       Array of n+1 coefficients
  21. *                                       a(0)+a(1)z**(-1) + a(2)Z**(-2) +
  22. *                                       .... + a(n)z**(-n)
  23. *       rc(n)           float   i/o       reflection coefficients (voiced-> +rc1)
  24. *       n               int     i       Order of polynomial
  25. *     
  26. ***************************************************************************
  27. *       
  28. * DESCRIPTION
  29. *
  30. *       This routine uses the Levinson recursion to compute reflection
  31. *       coefficients from the LPC coefficients.  The first LPC
  32. * coefficient is assumed to be 1, and although it is passed
  33. * to the routine, it is not used in the calculations.
  34. *       Note:  the dimension of the internal array t limits the value
  35. * of the maximum order.
  36. *
  37. * CELP's LPC predictor coefficient convention is:
  38. *              p+1         -(i-1)
  39. *       A(z) = SUM   a   z          where a  = +1.0
  40. *              i=1    i                    1
  41. *
  42. * The sign convention used defines the first reflection coefficient
  43. * as the normalized first autocorrelation coefficient, which results
  44. * in positive values of rc(1) for voiced speech.
  45. *
  46. ***************************************************************************
  47. *
  48. * CALLED BY
  49. *
  50. * autohf postfilter  specdist celp  intsynth
  51. *
  52. * CALLS
  53. *
  54. *
  55. *
  56. **************************************************************************/
  57. #include "ccsub.h"
  58. pctorc(lpc, rc, n)
  59. int n;
  60. float lpc[], rc[];
  61. {
  62.   float t[MAXNO+1], a[MAXNO+1];
  63.   int i, j;
  64.   
  65.   for (i = 0; i <= n; i++)
  66.     a[i] = lpc[i];
  67.   for (i = n; i > 1; i--)
  68.   {
  69.     rc[i-1] = -a[i];
  70.     for (j = 1; j < i; j++)
  71.       t[i-j] = (a[i-j] + rc[i-1] * a[j]) / (1.0 - rc[i-1] * rc[i-1]);
  72.     for (j = 1; j < i; j++)
  73.       a[j] = t[j];
  74.   }
  75.   rc[0] = -a[1];
  76. }