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

语音压缩

开发平台:

Unix_Linux

  1. c==========================================================================
  2. c
  3. c NAME
  4. c rctoac 
  5. c
  6. c FUNCTION
  7. c
  8. c convert reflection coefficients to autocorrelation coefficients
  9. c
  10. c SYNOPSIS
  11. c
  12. c subroutine rctoac(rc, r, m)
  13. c
  14. c   formal 
  15. c                       data I/O
  16. c name type type function
  17. c -------------------------------------------------------------------
  18. c rc(m) real i reflection coefficients
  19. c r(m+1) real o normalized autocorrelation coeff.
  20. c m int i filter order
  21. c
  22. c==========================================================================
  23. c
  24. c DESCRIPTION
  25. c
  26. c Convert reflection coefficients to autocorrelation coefficients.
  27. c Where the sign convention is:
  28. c first reflection coefficient = +(normalized autocorrelation coef)
  29. c
  30. c==========================================================================
  31. c
  32. c REFERENCES
  33. c
  34. c Atal & Hanauer, "Speech Analysis and Synthesis by Linear
  35. c Prediction of the Speech Wave," JASA, Vol 50 (2), 1971.
  36. c
  37. c**************************************************************************
  38. c-
  39. subroutine rctoac(rc, r, m)
  40. implicit undefined(a-z)
  41. integer m
  42. real rc(m), r(m+1)
  43. real t(26), tj, tkj
  44. integer k, kk, lm, kl, jl, j, kj, kll
  45. c
  46. c array r contains the autocorrelation coefficients
  47. c
  48. r(1) = 1.0
  49. do 10 k = 1, m
  50.    kk    = k + 1
  51.    r(kk) = rc(k)
  52. 10 continue
  53. c
  54. c compute predictor poly of diff deg and store in t
  55. c compute autocorrelation function and store into r
  56. c
  57. t(1) = 1.0
  58. t(2) = -r(2)
  59. lm = m + 1
  60. if (lm .lt. 3) goto 110
  61. do 15 k = 3, lm
  62.    kl = k - 1
  63.    jl = kl/2
  64.    do 22 j = 1, jl
  65.       kj  = k - j
  66.       tj  = t(j+1) - r(k)*t(kj)
  67.       tkj = t(kj) - r(k)*t(j+1)
  68.       t(j+1) = tj
  69.       t(kj)  = tkj
  70. 22    continue
  71.    t(k) = -r(k)
  72.    kll  = kl - 1
  73.    do 30 j = 1, kll
  74.       kj   = k - j
  75.       r(k) = r(k) - r(kj)*t(j+1)
  76. 30    continue
  77. 15 continue
  78. 110 continue
  79. return
  80. end