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

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. *               segsnr
  5. *
  6. * FUNCTION
  7. *                
  8. *               calculate average segmental SNR 
  9. *
  10. * SYNOPSIS
  11. *               subroutine segsnr(s, ts, sumsnr, framesnr, snrflag)
  12. *
  13. *   formal 
  14. *
  15. *                       data    I/O
  16. *       name            type    type    function
  17. *       -------------------------------------------------------------------
  18. *       s float i "reference" speech input
  19. * ts short i "test" speech input
  20. * l int i number of samples
  21. * sumsnr float o average snr
  22. * framesnr int o number of calculations averaged
  23. * snrflag int o flag for valid snr value
  24. *
  25. ***************************************************************************
  26. *
  27. * DESCRIPTION
  28. *
  29. *
  30. ***************************************************************************
  31. *
  32. * CALLED BY
  33. *
  34. *       celp
  35. *
  36. * CALLS
  37. *
  38. *       
  39. *
  40. **************************************************************************/
  41. #include <math.h>
  42. #define TRUE 1
  43. #define FALSE 0
  44. segsnr(s, ts, l, sumsnr, framesnr, snrflag)
  45. int l, *framesnr, *snrflag;
  46. short ts[];
  47. float s[], *sumsnr;
  48. {
  49.   int j;
  50.   float seng = 0.0, neng = 0.0, snr;
  51.   *snrflag = FALSE;
  52.   for (j = 0; j < l; j++)
  53.   {
  54.     seng += s[j] * s[j];
  55.     neng += (s[j] - ts[j]) * (s[j] - ts[j]);
  56.   }
  57.   if (neng > 0.0)
  58.   {
  59.     snr = seng / neng;
  60.     if (snr > 0.0)
  61.     {
  62.     /*  *only include segments whose snr is between -10 dB and 64 dB */
  63.       if (10*log10(snr) > -10. && 10*log10(snr) < 64.)
  64.       {
  65.         *snrflag = TRUE;
  66.         *sumsnr += snr;
  67.         (*framesnr)++;
  68.       }
  69.     }
  70.   }
  71. }