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

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. *               zerofilt
  5. *
  6. * FUNCTION
  7. *               Direct form all-zero filter
  8. *
  9. * SYNOPSIS
  10. *               subroutine zerofilt(b, n, z, xy, len)
  11. *
  12. *   formal 
  13. *
  14. *                       data    I/O
  15. *       name            type    type    function
  16. *       -------------------------------------------------------------------
  17. * b real i N+1 filter coefficients
  18. * n int i Filter order 
  19. * z real i/o N+1 filter delay elements 
  20. * (maintained by the user)
  21. * xy real i/o Input/Output data array 
  22. * len int i Number of samples to filter
  23. *
  24. ***************************************************************************
  25. *       
  26. * DESCRIPTION
  27. *
  28. * Nonrecursive all-zero in-place time-domain filter.
  29. * The filter is implemented in a direct form realisation.
  30. *
  31. *               N       -i
  32. *       H(z) = SUM b(i)z
  33. *              i=0
  34. *
  35. *       x(t) ->---(z0)----- b0 >------+-----> y(t)
  36. *                  |                  |
  37. *                  z1------ b1 >------+
  38. *                  |                  |
  39. *                  z2------ b2 >------+
  40. *                  |                  |
  41. *                  :                  :
  42. *                  |                  |
  43. *                  zN------ bN >------+
  44. *
  45. ***************************************************************************
  46. *
  47. * CALLED BY
  48. *
  49. * celp confg postfilt
  50. *
  51. * CALLS
  52. *
  53. *
  54. *
  55. ***************************************************************************
  56. *
  57. * REFERENCES
  58. *
  59. * Oppenheim & Schafer, Digital Signal Processing, PH, 1975, p. 149.
  60. *
  61. **************************************************************************/
  62. zerofilt(b, n, z, xy, len)
  63. int n, len;
  64. float b[], z[], xy[];
  65. {
  66.   register float ar;
  67.   int t, j;
  68.   for (t = 0; t < len; t++)
  69.   {
  70.     z[0] = xy[t];
  71.     ar   = 0.0;
  72.     for (j = n; j > 0; j--)
  73.     {
  74.       ar  += z[j] * b[j];
  75.       z[j] = z[j-1];
  76.     }
  77.     xy[t] = ar + z[0] * b[0];
  78.   }
  79. }