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

语音压缩

开发平台:

Unix_Linux

  1. #define TC 0.01
  2. /**************************************************************************
  3. *
  4. * NAME
  5. * prefilt
  6. *
  7. * FUNCTION
  8. *
  9. * pitch prefilter
  10. *
  11. * SYNOPSIS
  12. * subroutine prefilt(s, l, dpp)
  13. *
  14. *   formal 
  15. *                       data    I/O
  16. *       name            type    type    function
  17. *       -------------------------------------------------------------------
  18. * s float i/o speech input/postfiltered output
  19. * l int i subframe size
  20. * dpp float i/o filter memory
  21. *
  22. *
  23. *   external
  24. *                       data    I/O
  25. *       name            type    type    function
  26. *       -------------------------------------------------------------------
  27. * bb[] float i/o
  28. * prewt real i
  29. * idb int i
  30. *
  31. ***************************************************************************
  32. *
  33. * DESCRIPTION
  34. * Note:  The pitch prefilter using a weighting factor 0.4 does not
  35. *       alter the output speech quality (as determinted in blind listening 
  36. *       tests) and therefore we do not use the prefilter.  However we are 
  37. *       providing this code for research purposes.  Perhaps with other
  38. *       enhancements or other conditions other than what we have tested,
  39. *       the prefilter will enhance speech quality sufficiently to warrant
  40. *       its extra computational burden.*
  41. *
  42. ***************************************************************************
  43. *
  44. * REFERENCES
  45. * Gerson, Ira A. and Mark A. Jasuik, "Vector Sum Excited Linear
  46. * Prediction (VSELP) Speech Coding at 8 kbps", Proceedings of ICASSP
  47. * '90, p. 461.
  48. *
  49. ***************************************************************************
  50. *
  51. * CALLED BY
  52. *
  53. * celp
  54. *
  55. * CALLS
  56. *
  57. * pitchvq
  58. *
  59. ***************************************************************************/
  60. #include "ccsub.h"
  61. #include <math.h>
  62. #include <stdio.h>
  63. extern float bb[MAXNP+1], prewt;
  64. extern int idb;
  65. prefilt(s, l, dpp)
  66. float s[], dpp[];
  67. int l;
  68. {
  69.   float scale2, powerin, powerout;
  70.   int i;
  71.   /* estimate input power */
  72.   powerin = 0.0;
  73.   for (i = 0; i < l; i++)
  74.     powerin += s[i] * s[i];
  75.     /* powerin = (1.0 - TC) * powerin + TC * (s[i] * s[i]); */
  76.   bb[2] = prewt * bb[2];
  77.   pitchvq(s, l, dpp, idb, bb, "short");
  78.   /* estimate output power  */
  79.   powerout = 0.0;
  80.   for (i = 0; i < l; i++)
  81.     powerout += s[i] * s[i];
  82.     /* powerout = (1.0 - TC) * powerout + TC * (s[i] * s[i]); */
  83.   if (powerout > 0.0) 
  84.   {
  85.     scale2 = sqrt(powerin / powerout);
  86.     for (i = 0; i < l; i++)
  87.       s[i] = scale2 * s[i];
  88.   }
  89. }