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

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. *               specdist
  5. *
  6. * FUNCTION
  7. *
  8. *               Computes spectral distorion caused by quantization of
  9. * line spectral frequencies.
  10. *
  11. * SYNOPSIS
  12. *
  13. * subroutine specdist(unqfreq, newfreq, dm, sumdm, iframedm)
  14. *
  15. *   formal
  16. *
  17. *                       data    I/O
  18. *       name            type    type    function
  19. *       -------------------------------------------------------------------
  20. * unqfreq float i unquantized line spectral frequencies
  21. * newfreq float i quantized line spectral frequencies
  22. * dm float o distortion array (subframe)
  23. * sumdm float o distortion array (current sum)
  24. * iframedm int o number of subframes
  25. *
  26. *   external
  27. *                       data    I/O
  28. *       name            type    type    function
  29. *       -------------------------------------------------------------------
  30. *       no int     i
  31. *
  32. ***************************************************************************
  33. *
  34. * DESCRIPTION
  35. *
  36. * Calculate distortions/distances (log spectral error, etc.).
  37. * See the first reference below for a complete description.  A
  38. * "reference" system is compared against a "test" system.  Because
  39. * of the nonsymetric nature of the Itakura-Saito measure which some
  40. * of these distortion measures are based, poorer measures will be
  41. * obtained if the "reference" and "test" systems are reversed.
  42. * Because of gain uncertainties, a few measures are reported.
  43. * (Peter Kroon generally uses the measure DM(4).)
  44. *
  45. ***************************************************************************
  46. *
  47. * CALLED BY
  48. *
  49. * celp
  50. *
  51. * CALLS
  52. *
  53. * dist   lsptopc   pctorc   rctoac
  54. *
  55. ***************************************************************************
  56. *
  57. * REFERENCES
  58. *
  59. * "Distance Measures for Speech Processing", A.h. Gray and J.D. Markel,
  60. * IEEE Trans. on ASSP, Vol. ASSP-24, no. 5, Oct. 1976
  61. *
  62. * "Quantization and Bit Allocation in Speech Processing",
  63. * A.h. Gray and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-24
  64. * no. 6, Dec. 1976
  65. *
  66. * "A Note on Quantization and Bit Allocation in Speech Processing",
  67. * A.h. Gray and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-25
  68. * no. 3, June 1977
  69. *
  70. **************************************************************************/
  71. #include "ccsub.h"
  72. extern int no;
  73. specdist(unqfreq, newfreq, dm, sumdm, iframedm)
  74. float unqfreq[], newfreq[], dm[], sumdm[];
  75. int *iframedm;
  76. {
  77.   float unqpc[MAXNO + 1], newpc[MAXNO + 1], unqac[MAXNO + 1];
  78.   float newac[MAXNO + 1], unqrc[MAXNO], newrc[MAXNO];
  79.   /* Convert LSP's to autocorrelation coefficients for input to "dist"   */
  80.   lsptopc(unqfreq, unqpc);
  81.   lsptopc(newfreq, newpc);
  82.   pctorc(unqpc, unqrc, no);
  83.   pctorc(newpc, newrc, no);
  84.   rctoac(unqrc, unqac, no);
  85.   rctoac(newrc, newac, no);
  86.   /* find distances between the ac sequences   */
  87.   dist(no, 4 * no, unqac, newac, dm, sumdm, iframedm);
  88. }