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

语音压缩

开发平台:

Unix_Linux

  1. c==========================================================================
  2. c
  3. c ROUTINE
  4. c               find
  5. c
  6. c FUNCTION
  7. c                
  8. c               computes filter coefficients, cepstral coefficients, and
  9. c filter coefficient autocorrelations
  10. c
  11. c SYNOPSIS
  12. c               subroutine find(m,nf,r,cep,ra,alpha,a,rc)
  13. c
  14. c   formal 
  15. c
  16. c                       data    I/O
  17. c       name            type    type    function
  18. c       -------------------------------------------------------------------
  19. c       m int i filter order
  20. c nf int i number of terms to be found for
  21. c the cepstrum
  22. c r real i auto correlation sequence
  23. c cep real o cepstral coefficients
  24. c ra real o filter autocorrelation sequence
  25. c a real o filter coefficients
  26. c rc real o reflection coefficients
  27. c
  28. c==========================================================================
  29. c
  30. c DESCRIPTION
  31. c
  32. c See references.  For use with dist.f
  33. c
  34. c==========================================================================
  35. c REFERENCES
  36. c
  37. c "Distance Measures for Speech Processing", A.H. Gray  
  38. c and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-24, 
  39. c no. 5, Oct. 1976
  40. c
  41. c "Quantization and Bit Allocation in Speech Processing",
  42. c A.H. Gray and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-24
  43. c no. 6, Dec. 1976
  44. c
  45. c "A Note on Quantization and Bit Allocation in Speech Processing",
  46. c A.H. Gray and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-25
  47. c no. 3, June 1977
  48. c
  49. c**************************************************************************
  50. c
  51. subroutine find(m,nf,r,cep,ra,alpha,a,rc)
  52. implicit undefined(a-z)
  53. include 'ccsub.h'
  54. convex #include "ccsub.h"
  55. integer j, jl, jm, k, kb, l, lb, m, mh, mp, nf
  56. real alpha, at, q
  57. real r(2*maxno+1),cep(maxl*6),ra(2*maxno+1)
  58. real a(2*maxno+1),rc(2*maxno+1)
  59. mp=m+1
  60. a(1)=1.
  61. if (r(1) .eq. 0) then
  62.    print *,' find:  r(1)=0, resetting to 1e-6'
  63.    r(1)=1e-6
  64. end if
  65. a(2)=-r(2)/r(1)
  66. rc(1)=a(2)
  67. alpha=r(1)*(1.-a(2)*a(2))
  68. do 450 j=2,m
  69.    mh=j/2
  70.    jm=j-1
  71.    q=r(j+1)
  72.    do 420 l=1,jm
  73.       lb=j+1-l
  74.       q=q+a(l+1)*r(lb)
  75. 420    continue
  76.    q=-q/alpha
  77.    rc(j)=q
  78.    do 430 k=1,mh
  79.       kb=j-k+1
  80.       at=a(k+1)+q*a(kb)
  81.       a(kb)=a(kb)+q*a(k+1)
  82.       a(k+1)=at
  83. 430    continue
  84.    a(j+1)=q
  85.    alpha=alpha*(1.-q*q)
  86. c    *kill job if unstable filter
  87.    if (alpha .le. 0.) then
  88.       stop ' find:  unstable filter'
  89.    end if
  90. 450 continue
  91. c
  92. c *** evaluation of cepstrum
  93. c
  94. cep(1)=a(2)
  95. do 455 j=2,m
  96.    cep(j)=float(j)*a(j+1)
  97.    jm=j-1
  98.    do 455 k=1,jm
  99.       kb=j-k+1
  100.       cep(j)=cep(j)-cep(k)*a(j-k+1)
  101. 455 continue
  102. if(nf .le. m) goto 480
  103. do 460 j=mp,nf
  104.    cep(j)=0.
  105.    do 460 k=1,m
  106.       cep(j)=cep(j)-cep(j-k)*a(k+1)
  107. 460 continue
  108. do 470 j=1,nf
  109.    cep(j)=-cep(j)/float(j)
  110. 470 continue
  111. c
  112. c *** evaluation of polynomial autocorrelation
  113. c
  114. 480 do 500 l=1,mp
  115. c *bug fix (see last reference)
  116. c    k=mp+l-1
  117.    k=mp-l+1
  118.    ra(l)=0.
  119.    do 500 j=1,k
  120.       jl=l+j-1
  121.       ra(l)=ra(l)+a(j)*a(jl)
  122. 500 continue
  123. c write(*,555)(rc(j),j=1,m)
  124. c555 format(4f10.6)
  125. return
  126. end