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

语音压缩

开发平台:

Unix_Linux

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. * dcodtau
  5. *
  6. * FUNCTION
  7. *  Decodes all pitch tau values for a frame
  8. *
  9. *
  10. * SYNOPSIS
  11. * subroutine dcodtau(taubits,taudelta,bitsum1,bitsum2,bitpointer,
  12. *    nn,stream,pddecode,pdtabi,taus)
  13. *
  14. *   formal
  15. *
  16. *                       data    I/O
  17. *       name            type    type    function
  18. *       -------------------------------------------------------------------
  19. * taubits int i number of bits for quantization
  20. * taudelta int i number of bits for even frame delta
  21. * bitsum1 int i number of bits for odd subframes
  22. * bitsum2 int i number of bits for even subframes
  23. * bitpointer int i/o number of bits used
  24. * nn int i number of subframes/frame
  25. * stream short i bit stream
  26. * pddecode real i pitch delay permutation table
  27. * pdtabi int i pitch delay table index
  28. * taus float o vector of pitch delays "taus"
  29. *
  30. *   external
  31. *
  32. *       name            type    type    function
  33. *       -------------------------------------------------------------------
  34. *
  35. * plevel1 int number of full search pitch delays
  36. * plevel2 int number of delta search pitch delays
  37. * pdelay[] float pitch delay coding table
  38. *
  39. ***************************************************************************
  40. *
  41. * DESCRIPTION
  42. *
  43. * This routine converts the pitch delay bits of the 
  44. * bitstream to actual delay values.  These delays are output
  45. * to the main routine in taus(i), one delay for each of four
  46. * subframes.
  47. *
  48. ***************************************************************************
  49. *
  50. * CALLED BY
  51. *
  52. *       celp
  53. *
  54. * CALLS
  55. *
  56. *       unpack
  57. *
  58. ***************************************************************************
  59. *
  60. * REFERENCES
  61. *
  62. *
  63. **************************************************************************/
  64. #include "ccsub.h"
  65. extern int plevel1, plevel2;
  66. extern float pdelay[MAXPD];
  67. dcodtau(taubits, taudelta, bitsum1, bitsum2, bitpointer, nn, stream,
  68.          pddecode, pdtabi, taus)
  69. int taubits, taudelta, bitsum1, bitsum2, *bitpointer;
  70. int pdtabi[], nn;
  71. short stream[];
  72. float pddecode[], taus[];
  73. {
  74.   int i, pointer, tptr, mxptr, mnptr;
  75.   static int lptr = 0;
  76.   pointer = *bitpointer;
  77.   for (i = 0; i < nn; i++)
  78.   {
  79.     if (((i + 1) % 2) != 0)
  80.     {
  81.       unpack(stream, taubits, &tptr, &pointer);
  82.       taus[i] = pddecode[tptr];
  83.       pointer += bitsum1 - taubits;
  84.     }
  85.     else
  86.     {
  87.       unpack(stream, taudelta, &tptr, &pointer);
  88.       pointer += bitsum2 - taudelta;
  89.       mnptr = lptr - (plevel2 / 2 - 1);
  90.       mxptr = lptr + (plevel2 / 2);
  91.       if (mnptr < 0)
  92.         mnptr = 0;
  93.       if (mxptr > plevel1 - 1)
  94.         mnptr = plevel1 - plevel2;
  95.       taus[i] = pdelay[tptr + mnptr];
  96.     }
  97.     lptr = pdtabi[tptr];
  98.   }
  99.   *bitpointer += taubits;
  100. }