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

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. *               distortion
  5. *
  6. * FUNCTION
  7. *                
  8. *               computes distortion/distance measures and likelihood ratio
  9. *
  10. * SYNOPSIS
  11. *
  12. * subroutine distortion(s, ts, ws, l, no, dm, sumdm, framedm)
  13. *
  14. *   formal 
  15. *
  16. *                       data    I/O
  17. *       name            type    type    function
  18. *       -------------------------------------------------------------------
  19. * s float i "reference" speech input
  20. * ts short i "test" speech input
  21. * ws float i Hamming window, length l
  22. * l int i length of comparison
  23. * no int i filter order
  24. * dm float o distances array (subframe)
  25. * sumdm float o distances array (current sum)
  26. * framedm int o number of subframes  
  27. *
  28. ***************************************************************************
  29. *
  30. * DESCRIPTION
  31. *
  32. * Calculate distortions/distances (log spectral error, etc.).
  33. * See the first reference below for a complete description.  A
  34. * "reference" system is compared against a "test" system.  Because
  35. * of the nonsymetric nature of the Itakura-Saito measure which some
  36. * of these distortion measures are based, poorer measures will be
  37. * obtained if the "reference" and "test" systems are reversed.
  38. * Because of gain uncertainties, a few measures are reported.
  39. * (Peter Kroon generally uses the measure DM(4).)
  40. *
  41. ***************************************************************************
  42. *
  43. * CALLED BY
  44. *
  45. * celp
  46. *
  47. * CALLS
  48. *
  49. * cor   dist
  50. *
  51. ***************************************************************************
  52. * REFERENCES
  53. *
  54. * "Distance Measures for Speech Processing", A.H. Gray and J.D. Markel,
  55. * IEEE Trans. on ASSP, Vol. ASSP-24, no. 5, Oct. 1976
  56. *
  57. * "Quantization and Bit Allocation in Speech Processing",
  58. * A.H. Gray and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-24
  59. * no. 6, Dec. 1976
  60. *
  61. * "A Note on Quantization and Bit Allocation in Speech Processing",
  62. * A.H. Gray and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-25
  63. * no. 3, June 1977
  64. *
  65. **************************************************************************/
  66. #include "ccsub.h"
  67. distortion(s, ts, ws, l, no, dm, sumdm, framedm)
  68. int l, no, *framedm;
  69. short ts[];
  70. float s[], ws[], dm[], sumdm[];
  71. {
  72.   float tsw[MAXL], ssw[MAXL], c0hp, chp[MAXNO+1], c0tsw, ctsw[MAXNO+1];
  73.   int j;
  74. /* *apply Hamming window */
  75.   for (j = 0; j < l; j++)
  76.   {
  77.     ssw[j] = ws[j] * s[j];
  78.     tsw[j] = ws[j] * (float)ts[j];
  79.   }
  80.   /* *calculate autocorrelation sequences */
  81.   cor(ssw, l, no, &c0hp, chp);
  82.   cor(tsw, l, no, &c0tsw, ctsw);
  83.   /* *rearrange arrays for dist */
  84.   for (j = no; j > 0; j--)
  85.   {
  86.     chp[j] = chp[j-1];
  87.     ctsw[j] = ctsw[j-1];
  88.   }
  89.   chp[0] = c0hp;
  90.   ctsw[0] = c0tsw;
  91.   /* *find distances */
  92.   if (chp[0] != 0.0 && ctsw[0] != 0.0)
  93.   {
  94.     j = no * 4;
  95.     dist(no, j, chp, ctsw, dm, sumdm, framedm);
  96.   }
  97. }