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

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. *               confg
  5. *
  6. * FUNCTION
  7. *               computes initial states (direct form filters)
  8. *
  9. * SYNOPSIS
  10. *
  11. *       subroutine confg(s,l,d1,d2,d3,d4,isw1,isw2,isw3,isw4)
  12. *
  13. *   formal 
  14. *
  15. *                       data    I/O
  16. *       name            type    type    function
  17. *       -------------------------------------------------------------------
  18. * s(l) float i speech or residual segment
  19. * l int i segment size
  20. * d1 float i/o memory 1/P(z)
  21. * d2 float i/o memory 1/A(z)
  22. * d3 float i/o memory A(z)
  23. * d4 float i/o memory 1/A(z/gamma)
  24. * isw1 int i = 1 enable 1/P(z)
  25. * isw2 int i = 1 enable 1/A(z)
  26. * isw3 int i = 1 enable A(z)
  27. * isw4 int i = 1 enable 1/A(z/gamma)
  28. *
  29. *   external 
  30. *                       data    I/O
  31. *       name            type    type    function
  32. *       -------------------------------------------------------------------
  33. * idb i
  34. * no i
  35. * bb[] i
  36. * e0[] i/o
  37. * fc[] i
  38. * gamma2 i
  39. *
  40. ***************************************************************************
  41. *
  42. * CALLED BY
  43. *
  44. * csub fndpp
  45. *
  46. * CALLS
  47. *
  48. * bwexp zerofilt polefilt pitchvq
  49. *
  50. **************************************************************************/
  51. #include "ccsub.h"
  52. extern int idb, no;
  53. extern float bb[MAXNP+1], e0[MAXLP], fc[MAXNO+1], gamma2;
  54. confg(s,l,d1,d2,d3,d4,isw1,isw2,isw3,isw4)
  55. int l, isw1, isw2, isw3, isw4;
  56. float s[], d1[],d2[],d3[],d4[];
  57. {
  58.   float fctemp[MAXNO+1];
  59.   int i;
  60.   setr(MAXNO+1, 0.0, fctemp);
  61.   if (isw1 != 0)
  62.     pitchvq(e0, l, d1, idb, bb, "long");
  63.   if (isw2 != 0)
  64.     polefilt(fc, no, d2, e0, l);
  65.   for (i = 0; i < l; i++)
  66.     e0[i] = s[i] - e0[i];
  67.   if (isw3 != 0)
  68.     zerofilt(fc,no,d3,e0,l);
  69.   if (isw4 != 0)
  70.   {
  71.     bwexp(gamma2, fc, fctemp, no);
  72.     polefilt(fctemp, no, d4, e0, l);
  73.   }
  74. }