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

语音压缩

开发平台:

Unix_Linux

  1. c==========================================================================
  2. c
  3. c ROUTINE
  4. c               prefilt
  5. c
  6. c FUNCTION
  7. c                
  8. c               pitch prefilter
  9. c
  10. c SYNOPSIS
  11. c               subroutine prefilt(s, l, dpp)
  12. c
  13. c   formal 
  14. c
  15. c                       data    I/O
  16. c       name            type    type    function
  17. c       -------------------------------------------------------------------
  18. c       s real i/o speech input/postfiltered output
  19. c l int i subframe size
  20. c dpp real i/o filter memory
  21. c
  22. c==========================================================================
  23. c
  24. c DESCRIPTION
  25. c Note:  The pitch prefilter using a weighting factor 0.4 does not
  26. c alter the output speech quality (as determinted in blind listening 
  27. c tests) and therefore we do not use the prefilter.  However we are 
  28. c providing this code for research purposes.  Perhaps with other
  29. c enhancements or other conditions other than what we have tested,
  30. c the prefilter will enhance speech quality sufficiently to warrant
  31. c its extra computational burden.
  32. c
  33. c==========================================================================
  34. c
  35. c REFERENCES
  36. c Gerson, Ira A. and Mark A. Jasuik, "Vector Sum Excited Linear
  37. c Prediction (VSELP) Speech Coding at 8 kbps", Proceedings of ICASSP
  38. c '90, p. 461.
  39. c
  40. c==========================================================================
  41. c
  42. subroutine prefilt(s, l, dpp)
  43. implicit undefined(a-z)
  44. include 'ccsub.com'
  45. convex #include "ccsub.com"
  46. integer l, n
  47. real s(l), dpp(maxpa), tc, scale2, powerin, powerout
  48. parameter (tc = 0.01)
  49. c
  50. c *estimate input power
  51. powerin = 0.0
  52. do 10 n = 1, l
  53. ccc    powerin = (1.-tc)*powerin + tc*s(n)**2
  54.    powerin = powerin + s(n)**2
  55. 10 continue
  56. bb(3) = prewt * bb(3)
  57. call pitchvq(s, l, dpp, idb, bb,'short')
  58. c
  59. c *estimate output power
  60. powerout = 0.0
  61. do 20 n = 1, l
  62. ccc    powerout = (1.-tc)*powerout + tc*s(n)**2
  63.    powerout = powerout + s(n)**2
  64. 20 continue
  65. c
  66. c *block wise automatic gain control
  67. if (powerout .gt. 0.0) then
  68.    scale2 = sqrt(powerin/powerout)
  69.    do 30 n = 1, l
  70.       s(n) = scale2*s(n)
  71. 30    continue
  72. end if
  73. return
  74. end