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

语音压缩

开发平台:

Unix_Linux

  1. c==========================================================================
  2. c
  3. c ROUTINE
  4. c dcodtau.f
  5. c
  6. c FUNCTION
  7. c  Decodes all pitch tau values values for a frame
  8. c
  9. c
  10. c SYNOPSIS
  11. c subroutine dcodtau(taubits,taudelta,bitsum1,bitsum2,bitpointer,nn,
  12. c                           stream,streambits,pddecode,pdtabi,taus)
  13. c
  14. c   formal 
  15. c
  16. c                       data    I/O
  17. c       name            type    type    function
  18. c       -------------------------------------------------------------------
  19. c taubits int i number of bits for quantization
  20. c taudelta int i number of bits for even frame delta
  21. c bitsum1 int i number of bits for odd subframes
  22. c bitsum2 int i number of bits for even subframes
  23. c bitpointer int i/o number of bits used
  24. c nn int i number of subframes/frame
  25. c stream int*2 i bit stream
  26. c streambits int i number of bits in stream
  27. c pddecode real i pitch delay permutation table
  28. c taus real o vector of pitch delays "taus"
  29. c
  30. c==========================================================================
  31. c
  32. c DESCRIPTION
  33. c This routine converts the pitch delay bits of the 
  34. c bitstream to actual delay values.  These delays are output
  35. c to the main routine in taus(i), one delay for each of four
  36. c subframes.
  37. c
  38. c==========================================================================
  39. c
  40. c REFERENCES
  41. c
  42. c
  43. c**************************************************************************
  44. c
  45. subroutine dcodtau(taubits,taudelta,bitsum1,bitsum2,bitpointer,nn,
  46.      &                      stream,streambits,pddecode,pdtabi,taus)
  47. implicit undefined(a-z)
  48. c
  49. c
  50. include 'ccsub.com'
  51. convex #include "ccsub.com"
  52. integer taubits,taudelta,bitsum1,bitsum2,bitpointer,nn,streambits
  53. integer*2 stream(streambits)
  54. integer i,pointer,tptr,lptr,mxptr,mnptr,pdtabi(0:maxpd-1)
  55. real taus(nn),pddecode(0:maxpd-1)
  56. c
  57. data lptr/1/
  58. save lptr
  59. c
  60. pointer=bitpointer
  61. do 10 i = 1, nn
  62.    if (mod(i,2) .ne. 0) then
  63.       call unpack(stream,taubits,streambits,tptr,pointer)
  64.       taus(i) = pddecode(tptr)
  65.       pointer = pointer+bitsum1-taubits
  66.    else
  67.       call unpack(stream,taudelta,streambits,tptr,pointer)
  68.       pointer = pointer+bitsum2-taudelta
  69.       mnptr = lptr - (plevel2/2-1)
  70.       mxptr = lptr + (plevel2/2)
  71.       if (mnptr .lt. 0) then
  72.          mnptr = 0
  73.       end if
  74.       if (mxptr .gt. plevel1-1) then
  75.          mnptr = plevel1 - plevel2
  76.       end if
  77.       taus(i) = pdelay(tptr+mnptr)
  78.    end if
  79. lptr = pdtabi(tptr)
  80. 10 continue
  81. bitpointer = bitpointer+taubits
  82. return
  83. end