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

语音压缩

开发平台:

Unix_Linux

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