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

语音压缩

开发平台:

Unix_Linux

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. *               csub
  5. *
  6. * FUNCTION
  7. *               control routine to find optimal excitation 
  8. * (adaptive and stochastic code book searches)
  9. *
  10. * SYNOPSIS
  11. *               subroutine csub(s, v, l, lp)
  12. *
  13. *   formal
  14. *
  15. *                       data    I/O
  16. *       name            type    type    function
  17. *       -------------------------------------------------------------------
  18. *       s[l]            float i       speech or residual segment
  19. *       v[l]            float o       optimum excitation vector
  20. *       l               int i       stochastic analysis frame size
  21. * lp int i adaptive (pitch) analysis frame size
  22. *
  23. *   external
  24. *                       data    I/O
  25. *       name            type    type    function
  26. *       -------------------------------------------------------------------
  27. * idb int i
  28. * no int i
  29. * nseg int i
  30. * sg int i
  31. * e0[] float i/o
  32. * fndex_e0_vid int i
  33. * fndpp_e0_vid int i
  34. * mxsw int i modified excitation switch
  35. *
  36. ***************************************************************************
  37. *
  38. *  Global
  39. *
  40. * SPECTRUM VARIABLES:
  41. * d2a real memory 1/A(z)
  42. * d2b real memory 1/A(z)
  43. * d3a real memory A(z)
  44. * d3b real memory A(z)
  45. * d4a real memory 1/A(z/gamma)
  46. * d4b real memory 1/A(z/gamma)
  47. *
  48. * PITCH VARIABLES:
  49. * d1a real memory 1/P(z)
  50. * d1b real memory 1/P(z)
  51. ***************************************************************************
  52. *
  53. * CALLED BY
  54. *
  55. *       celp
  56. *
  57. * CALLS
  58. *
  59. *       confg   cbsearch   psearch   movefr   save_sg   setr
  60. *
  61. * mescite1   mexcite2
  62. *
  63. **************************************************************************/
  64. #include "ccsub.h"
  65. float d1a[MAXPA], d1b[MAXPA], d2a[MAXNO+1], d2b[MAXNO+1], d3a[MAXNO+1], d3b[MAXNO+1];
  66. float d4a[MAXNO+1], d4b[MAXNO+1];
  67. extern int idb, no, nseg, sg, mxsw;
  68. extern float e0[MAXLP];
  69. #ifdef SUNGRAPH
  70. extern int fndex_e0_vid, fndpp_e0_vid;
  71. #endif
  72. csub(s, v, l, lp)
  73. int l, lp;
  74. float s[], v[];
  75. {
  76.   /* *find the intial error without pitch VQ    */
  77.   setr(l, 0.0, e0);
  78.   confg(s, l, d1a, d2a, d3a, d4a, 0, 1, 1, 1);
  79.   movefr(no + 1, d2b, d2a);
  80.   movefr(no + 1, d3b, d3a);
  81.   movefr(no + 1, d4b, d4a);
  82.   /* *find impulse response (h) of perceptual weighting filter  */
  83.   impulse(l);
  84.   /* *norm of the first error signal for const. exc.  */
  85.   if (mxsw) 
  86.     mexcite1(l);
  87.   /* *pitch (adaptive code book) search  */
  88.   /* Get pp parameters every segment if lp = l. If lp <> l then  */
  89.   /* get pp parameters on odd segments.   */
  90.   if (lp == l)
  91.     psearch(l);
  92.   else if (nseg % 2 == 1)
  93.     psearch(lp);
  94. #ifdef SUNGRAPH
  95.     save_sg(fndpp_e0_vid, e0, l, "save fndpp_e0_vid");
  96. #endif
  97.   /* *find initial error with pitch VQ  */
  98.   setr(l, 0.0, e0);
  99.   confg(s, l, d1a, d2a, d3a, d4a, 1, 1, 1, 1);
  100. #ifdef SUNGRAPH
  101.     save_sg(fndex_e0_vid, e0, l, "save fndex_e0_vid");
  102. #endif
  103.   /* *norm of second error signal for const. exc.  */
  104.   if (mxsw)
  105.     mexcite2(l);
  106.   /* *stochastic code book search   */
  107.   cbsearch(l, v);
  108.   /* *update filter states   */
  109.   movefr(l, v, e0);
  110.   confg(s, l, d1b, d2b, d3b, d4b, 1, 1, 1, 1);
  111.   movefr(idb, d1b, d1a);
  112.   movefr(no + 1, d2b, d2a);
  113.   movefr(no + 1, d3b, d3a);
  114.   movefr(no + 1, d4b, d4a);
  115. }