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

语音压缩

开发平台:

Unix_Linux

  1. /**************************************************************************
  2. *
  3. * NAME
  4. * actorc 
  5. *
  6. * FUNCTION
  7. *
  8. * Schur recursion to do autocorrelation analysis.
  9. * Converts autocorrelation sequence to reflection coefficients.
  10. *
  11. * SYNOPSIS
  12. *
  13. * subroutine actorc (c0, c, rc, n, err)
  14. *
  15. *   formal 
  16. *                       data    I/O
  17. *       name            type    type    function
  18. *       -------------------------------------------------------------------
  19. *       c0              float   i       c(0)
  20. * c(n) float i auto-correlation coefficients
  21. *       rc(n) float   o       reflection coefficients (voiced-> +rc1)
  22. *       n               int     i       number of reflection coefficients
  23. * err float i/o normalized prediction error
  24. *       
  25. ***************************************************************************
  26. *       
  27. * DESCRIPTION
  28. *
  29. *       This performs the classical Schur recursion (rediscovered by
  30. * LeRoux & Guegen) on the correlation sequence c0, c(1), c(2) . . .
  31. * to obtain n reflection coefficients (rc).  The recursion can be
  32. * performed entirely in fractional arithemetic because the
  33. * correlation sequence is normalized by c0, so all the quantities
  34. * in the recursion are less than unity magnitude (except c0).
  35. *
  36. * The sign convention used defines the first reflection coefficient
  37. * as the normalized first autocorrelation coefficient, which results
  38. * in positive values of rc(1) for voiced speech.
  39. *
  40. ***************************************************************************
  41. *
  42. * CALLED BY
  43. *
  44. * autohf
  45. *
  46. * CALLS
  47. *
  48. *
  49. *
  50. ***************************************************************************
  51. *       
  52. * REFERENCES
  53. *
  54. * Parsons, Voice and Speech Processing, McGraw-hill, 1987, p.160&378.
  55. *
  56. ***************************************************************************
  57. *       
  58. * EXAMPLES
  59. *
  60. * call cor(data,np,c0,c,n)
  61. * call actorc(c0,c,rc,n)
  62. ***************************************************************************
  63. *
  64. * PROCESS DESCRIPTION
  65. *
  66. *       Name    Type    Function
  67. *
  68. *       d       float      Recursion sequence (dim n)
  69. *       g       float      Recursion sequence (dim n)
  70. *       p       int        Orderindex recursion
  71. *       err     float      Backward error
  72. *       err0    float      Backward error of order 0
  73. **************************************************************************/
  74. #include "ccsub.h"
  75. actorc(c0, c, rc, n, err)
  76. int n;
  77. float c0, c[], rc[], *err;
  78. {
  79.   float d[MAXNO], g[MAXNO], rch;
  80.   int i, p;
  81.   if (c0 <= 0.0)  /* If zero energy, set rc's to zero & return */
  82.   {
  83.     for (i = 0; i < n; i++)
  84.       rc[i] = 0.0;
  85.     return;
  86.   }
  87.   for (i = 0; i < n; i++)
  88.     g[i] = d[i] = c[i] / c0;
  89.   rch = g[0];
  90.   rc[0] = rch;
  91.   *err = 1. - rch * rch;
  92.   for (p = 1; p < n; p++)
  93.   {
  94.     for (i = 0; i < n - p; i++)
  95.     {
  96.       g[i] = g[i+1] - rch * d[i];
  97.       d[i] = d[i] - rch * g[i+1];
  98.     }
  99.     rch = g[0] / *err; /* Extract the reflection coefficient */
  100.     rc[p] = rch;
  101.     *err = *err * (1. - rch * rch); /* The mean squares error recursion */
  102.   }
  103. }