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

语音压缩

开发平台:

Unix_Linux

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. * autohf
  5. *
  6. * FUNCTION
  7. * LPC autocorrelation analysis with high frequency compensation
  8. *
  9. *
  10. * SYNOPSIS
  11. * subroutine autohf(si, w, n, p, omega, a, rc)
  12. *
  13. *   formal 
  14. *                       data    I/O
  15. *       name            type    type    function
  16. *       -------------------------------------------------------------------
  17. * si(n) float i signal input
  18. * w(n) float i window (i.e., Hamming)
  19. * n int i length of input sequence
  20. * p int i order of LPC polynomial
  21. * omega float i bandwidth expansion factor
  22. * a float o LPC coefficients (1 to m+1)
  23. * rc float o reflection coefficients (1 to m)
  24. * (voiced-> +rc1)
  25. *
  26. *   external 
  27. *                       data    I/O
  28. *       name            type    type    function
  29. *       -------------------------------------------------------------------
  30. * frame int i
  31. *
  32. ***************************************************************************
  33. *
  34. * DESCRIPTION
  35. *
  36. *   Subroutine to perform HF corrected autocorrelation LPC analysis.
  37. * First, autocorrelation coefficients are calculated and high
  38. * frequency corrected to partially compensate for the analog
  39. * antialiasing filter*.  (Traditionally, this technique has only been
  40. * applied to covariance analysis, but it applies to autocorrelation
  41. * analysis as well).  Next, the autocorrelation function is converted
  42. * to reflection coefficients by the Schur recursion (aka LeRoux &
  43. * Guegen).  Then, the reflection coefficients are converted to LPC
  44. * predictor coefficients.  Finally, the predictors are bandwidth
  45. * expanded by omega.
  46. *
  47. * CELP's LPC predictor coefficient convention is:
  48. *              p+1         -(i-1)
  49. *       A(z) = SUM   a   z          where a  = +1.0
  50. *              i=1    i                    1
  51. *
  52. * The sign convention used defines the first reflection coefficient
  53. * as the normalized first autocorrelation coefficient, which results
  54. * in positive values of rc(1) for voiced speech.
  55. *
  56. ***************************************************************************
  57. *
  58. * CALLED BY
  59. *
  60. * celp
  61. *
  62. * CALLS
  63. *
  64. * actorc bwexp cor pctorc rctopc
  65. *
  66. ***************************************************************************
  67. *
  68. * REFERENCES
  69. *
  70. * *Atal & Schroeder, Predictive Coding of Speech Signals
  71. *  and Subjective Error Criteria, IEEE TASSP, June 1979.
  72. *
  73. **************************************************************************/
  74. #define TRUE 1
  75. #define FALSE 0
  76. #include <math.h>
  77. #include <stdio.h>
  78. #include "ccsub.h"
  79. extern int frame;
  80. autohf(si, w, n, p, omega, a, rc)
  81. int n, p;
  82. float si[], w[], omega, a[], rc[];
  83. {
  84.   int i, unstable;
  85.   float c0, c[MAXNO], atemp[MAXNO+1], s[MAXLL];
  86.   
  87.   setr(MAXNO+1, 0.0, atemp);
  88.   for (i = 0;  i < n ; i++)
  89.     s[i] = si[i] * w[i]; /* apply window */
  90.   unstable = FALSE;
  91.   cor(s, n, p, &c0, c); /* calculate autocorrelations */
  92.   if (c0 < 0.0) 
  93.     unstable = TRUE;
  94.   atemp[0] = 1.0; /* convert autocorrelations to pc's  */
  95.   durbin(c0, c, &atemp[1], p);
  96.   bwexp(omega, atemp, a, p); /* expand corrected pc's */
  97.   pctorc(a, rc, p); /* match rc's to expanded pc's */
  98.    /* and test for stability */
  99.   for (i = 0; i < p ; i++)
  100.   {
  101.     if (fabs(rc[i]) > 1.0)
  102.       unstable = TRUE;
  103.   }
  104.   if (unstable)
  105.   {
  106.     printf("autohf:  unstable lpc analysis at frame %dn",frame);
  107.     for (i = 0; i < p; i++)
  108.     {
  109.       a[i+1] = 0.0;
  110.       rc[i] = 0.0;
  111.     }
  112.   }
  113. }