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

语音压缩

开发平台:

Unix_Linux

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