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

语音压缩

开发平台:

Unix_Linux

  1. C==========================================================================
  2. C
  3. C ROUTINE
  4. C polefilt
  5. C
  6. C FUNCTION
  7. C Direct form all-pole filter
  8. C
  9. C SYNOPSIS
  10. C subroutine polefilt(a, n, z, xy, len)
  11. C
  12. C   formal 
  13. C
  14. C                       data    I/O
  15. C       name            type    type    function
  16. C       -------------------------------------------------------------------
  17. C a real i N+1 filter coefficients
  18. C n int i Filter order 
  19. C z real i N+1 filter delay elements
  20. C (maintained by the user)
  21. C (z(0) is a dummy delay)
  22. C xy real i/o Input/Output data array 
  23. C len int i Number of samples to filter
  24. C
  25. C==========================================================================
  26. C       
  27. C DESCRIPTION
  28. C
  29. C Recursive all-pole in-place time-domain filter.
  30. C The transfer function 1/A(z) is implemented
  31. C in a direct form realisation.
  32. C                   N       -i
  33. C       H(z) = 1 / SUM a(i)z         with a(0) = +1.0
  34. C                  i=0
  35. C
  36. C NOTE:  a(0) is not used for the actual computing,
  37. C as can easily be seen in the following flow graph.
  38. C
  39. C       x(t) ->---+------->--------(z0)-----> y(t)
  40. C                 |                  |
  41. C                 +-------< -a1 ----z1
  42. C                 |                  |
  43. C                 +-------< -a2 ----z2
  44. C                 |                  |
  45. C                 :                  :
  46. C                 |                  |
  47. C                 +-------< -aN ----zN
  48. C
  49. C==========================================================================
  50. C
  51. C CALLED BY
  52. C
  53. C celp confg impulse postfilt
  54. C
  55. C CALLS
  56. C
  57. C
  58. C
  59. C==========================================================================
  60. C
  61. C REFERENCES
  62. C
  63. C Oppenheim & Schafer, Digital Signal Processing, PH, 1975, p. 149.
  64. C
  65. C**************************************************************************
  66. C*-
  67. subroutine polefilt(a, n, z, xy, len)
  68. implicit undefined(a-z)
  69. integer n, len
  70. real a(0:n), z(0:n), xy(len)
  71. integer t, j
  72. c
  73. if (a(0) .ne. 1.0) stop 'polefilt:  bad coefficients'
  74. c
  75. do 69 t = 1, len
  76.    z(0) = xy(t)
  77.    do 10 j = n, 1, -1
  78.       z(0) = z(0) - a(j)*z(j)
  79.       z(j) = z(j-1)
  80. 10    continue
  81.    xy(t) = z(0)
  82. 69 continue
  83. return
  84. end