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

语音压缩

开发平台:

Unix_Linux

  1. c==========================================================================
  2. c
  3. c ROUTINE
  4. c gainencode2
  5. c
  6. c FUNCTION
  7. c  
  8. c encode and quantize code book gain
  9. c
  10. c SYNOPSIS
  11. c subroutine gainencode2(numer, denom, bits, type, index)
  12. c
  13. c   formal 
  14. c
  15. c                       data    I/O
  16. c       name            type    type    function
  17. c       -------------------------------------------------------------------
  18. c numer i i code book gain numerator
  19. c denom i i code book gain denominator
  20. c bits i i # bits for encode
  21. c type c i type of quantization
  22. c index r o encoded code book gain ZERO BASED index
  23. c gainencode2 r f encoded code book gain
  24. c
  25. c==========================================================================
  26. c
  27. c DESCRIPTION
  28. c
  29. c   Fast nonuniform division for code book gain quantization to allow
  30. c practical quantization inside the code book search loop.  A binary
  31. c tree search with cross multiply quantization is implemented below.
  32. c
  33. C==========================================================================
  34. C INPUT FILES
  35. C cbgain.tbl code book gain coding
  36. C
  37. c**************************************************************************
  38. c
  39. real function gainencode2(numer, denom, bits, type, index)
  40. implicit undefined(a-z)
  41. c
  42. real numer, denom
  43. integer bits, index
  44. character*10 type
  45. c
  46. c Hard coded for 5 bit quantization to achieve high speed
  47. c
  48. integer bit, bitm1
  49. parameter (bit   = 5)
  50. parameter (bitm1 = bit-1)
  51. real gainlog5(2**bit), midpoints(2**bit-1)
  52. integer i, shift(bitm1)
  53. data shift/8, 4, 2, 1/
  54. c
  55. include './cbgain.tbl'
  56. convex #include "./cbgain.tbl"
  57. c
  58. ccc if (bits .ne. bit) stop ' gainencode2:  bad bits'
  59. c
  60. c *Binary tree search for closest gain
  61. c
  62. index = 2**bitm1
  63. do 69 i = 1, bitm1
  64.    if (numer .gt. denom*midpoints(index)) then
  65.       index = index + shift(i)
  66.    else
  67.       index = index - shift(i)
  68.    end if
  69. 69 continue
  70. if (numer .gt. denom*midpoints(index)) index = index + 1
  71. c
  72. c *Return quantized gain and ZERO based index
  73. c
  74. gainencode2= gainlog5(index)
  75. index      = index - 1
  76. return
  77. end