ptcode.c
上传用户:tsjrly
上传日期:2021-02-19
资源大小:107k
文件大小:3k
源码类别:

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. * pitchencode
  5. *
  6. * FUNCTION
  7. *
  8. * encode and quantize pitch gain (bb(3)) for various
  9. * quantizer types.
  10. *
  11. * SYNOPSIS
  12. * subroutine pitchencode(input, index)
  13. *
  14. *   formal
  15. *
  16. *                       data    I/O
  17. *       name            type    type    function
  18. *       -------------------------------------------------------------------
  19. * input int i pitch gain input (true value)
  20. * index float o encoded pitch gain index
  21. * pitchencode float fun encoded pitch gain
  22. *
  23. ***************************************************************************
  24. *
  25. * DESCRIPTION
  26. *
  27. * This funtion uses output level data obtained by Max's minimum
  28. * distortion quantization priciples and quantizes to the nearest
  29. * level (L1 norm).  (Using level data only was found superior to
  30. * using both of Max's level and boundry data.)
  31. *
  32. ***************************************************************************
  33. *
  34. * CALLED BY
  35. *
  36. * psearch
  37. *
  38. * CALLS
  39. *
  40. *
  41. ***************************************************************************
  42. *
  43. * REFERENCES
  44. *
  45. * Quantizing for Minimum Distorion
  46. * J. Max
  47. * IRE Trans. Inform. Theory, vol. IT-6, pp.7-12, Mar. 1960
  48. *
  49. ***************************************************************************
  50. *
  51. * The data used in the table generation is from 3m3f.spd.
  52. *
  53. **************************************************************************/
  54. #include <math.h>
  55. static float pitch2max5[32] =
  56. {
  57.   -0.993, -0.831, -0.693, -0.555, -0.414, -0.229,    0.0,  0.139,
  58.    0.255,  0.368,  0.457,  0.531,  0.601,  0.653,  0.702,  0.745,
  59.    0.780,  0.816,  0.850,  0.881,  0.915,  0.948,  0.983,  1.020, 
  60.    1.062,  1.117,  1.193,  1.289,  1.394,  1.540,  1.765,  1.991
  61. };
  62. float
  63. pitchencode(input, index)
  64. int *index;
  65. float input;
  66. {
  67.   int i;
  68.   float dist, low;
  69.   
  70.   low = dist = fabs(input - *pitch2max5);
  71.   *index = 0;
  72.   for (i = 1; i < 32; i++)
  73.   {
  74.     dist = fabs(input - pitch2max5[i]);
  75.     if (dist < low)
  76.     {
  77.       low = dist;
  78.       *index = i;
  79.     }
  80.   }
  81.   return (pitch2max5[*index]);
  82. }
  83. /**************************************************************************
  84. *
  85. * ROUTINE
  86. * pitchdecode
  87. *
  88. * FUNCTION
  89. *
  90. * decode pitch gain (bb(3)) from pitch index and bit
  91. * index (bits)
  92. *
  93. * SYNOPSIS
  94. * subroutine pitchdecode(pindex, pitch)
  95. *
  96. *   formal
  97. *
  98. *                       data    I/O
  99. *       name            type    type    function
  100. *       -------------------------------------------------------------------
  101. * pindex int i pitch index value
  102. * pitch float o pitch gain decoded
  103. *
  104. ***************************************************************************
  105. *
  106. * DESCRIPTION
  107. *
  108. *
  109. ***************************************************************************
  110. *
  111. * CALLED BY
  112. *
  113. * dcodpg
  114. *
  115. * CALLS
  116. *
  117. *
  118. ***************************************************************************
  119. *
  120. * The data used in the table generation is from 3m3f.spd.
  121. *
  122. ***************************************************************************
  123. *
  124. * REFERENCES
  125. *
  126. * Quantizing for Minimum Distorion
  127. * J. Max
  128. * IRE Trans. Inform. Theory, vol. IT-6, pp.7-12, Mar. 1960
  129. *
  130. ***************************************************************************
  131. *
  132. * The data used in the table generation is from 3m3f.spd.
  133. *
  134. **************************************************************************/
  135. pitchdecode(pindex, pitch)
  136. int pindex;
  137. float *pitch;
  138. {
  139.   *pitch = pitch2max5[pindex];
  140. }