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

语音压缩

开发平台:

Unix_Linux

  1. c==========================================================================
  2. c
  3. c ROUTINE
  4. c               dist
  5. c
  6. c FUNCTION
  7. c                
  8. c               computes distance measures and the likelihood ratio
  9. c
  10. c SYNOPSIS
  11. c               subroutine dist(m,l,r,rp,dm,sumdm,iframedm)
  12. c
  13. c   formal 
  14. c
  15. c                       data    I/O
  16. c       name            type    type    function
  17. c       -------------------------------------------------------------------
  18. c       m int i filter order
  19. c l int i number of terms used in cepstral
  20. c distance measure
  21. c r int i ifile autocorrelation sequence
  22. c rp int i ofile autocorrelation sequence
  23. c dm real o distances array (subframe)
  24. c sumdm real o distances array (current sum)
  25. c iframedm int o number of subframes  
  26. c
  27. c==========================================================================
  28. c
  29. c DESCRIPTION
  30. c
  31. c See references.
  32. c
  33. c==========================================================================
  34. c REFERENCES
  35. c
  36. c "Distance Measures for Speech Processing", A.H. Gray and J.D. Markel,
  37. c IEEE Trans. on ASSP, Vol. ASSP-24, no. 5, Oct. 1976
  38. c
  39. c "Quantization and Bit Allocation in Speech Processing",
  40. c A.H. Gray and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-24
  41. c no. 6, Dec. 1976
  42. c
  43. c "A Note on Quantization and Bit Allocation in Speech Processing",
  44. c A.H. Gray and J.D. Markel,IEEE Trans. on ASSP, Vol. ASSP-25
  45. c no. 3, June 1977
  46. c
  47. c**************************************************************************
  48. c
  49. subroutine dist(m,l,r,rp,dm,sumdm,iframedm)
  50. implicit undefined(a-z)
  51. include 'ccsub.h'
  52. convex #include "ccsub.h"
  53. integer l, k, j, iframedm, m, mp
  54. real dbfac, z, alp, alpp, del, delp
  55. real q, q1, q2, sum, fin
  56. real r(maxno+1),rp(maxno+1),dm(9),sumdm(10)
  57. real c(maxl*6),cp(maxl*6),ra(2*maxno+1),rap(2*maxno+1)
  58. real a(2*maxno+1),ap(2*maxno+1),rc(2*maxno+1),rcp(2*maxno+1)
  59. logical qflag
  60. data dbfac/4.342944819/
  61. data qflag/.true./
  62. fin(z)=dbfac*alog(1.+z+sqrt(z*(2.+z)))
  63. call find(m,l,r,c,ra,alp,a,rc)
  64. call find(m,l,rp,cp,rap,alpp,ap,rcp)
  65. mp=m+1
  66. del=r(1)*rap(1)
  67. delp=rp(1)*ra(1)
  68. do 90 j=2,mp
  69.    del=del+2.*r(j)*rap(j)
  70.    delp=delp+2.*rp(j)*ra(j)
  71. 90 continue
  72. dm(1)=del/alp
  73. dm(2)=delp/alpp
  74. q=(dm(1)+dm(2))/2.-1.
  75. if (q .lt. 0.) qflag = .false.
  76. if (qflag) dm(3)=fin(q)
  77. q1=alpp*r(1)/(alp*rp(1))
  78. q=(dm(1)/q1+dm(2)*q1)*.5-1.
  79. if (q .lt. 0.) qflag = .false.
  80. if (qflag) dm(4)=fin(q)
  81. q2=alpp/alp
  82. q=(dm(1)/q2+dm(2)*q2)*.5-1.
  83. if (q .lt. 0.) qflag = .false.
  84. if (qflag) dm(5)=fin(q)
  85. q=sqrt(dm(1)*dm(2))-1.
  86. if (q .lt. 0.) qflag = .false.
  87. if (qflag) dm(6)=fin(q)
  88. sum=0.
  89. do 110 k=1,l
  90.    q=c(k)-cp(k)
  91.    sum=sum+q*q
  92. 110 continue
  93. sum=sum+sum
  94. if (sum .ge. 0.) then
  95.    dm(7)=dbfac*sqrt(sum)
  96.    q=alog(q1)
  97.    dm(8)=dbfac*sqrt(sum+q*q)
  98.    q=alog(q2)
  99.    dm(9)=dbfac*sqrt(sum+q*q)
  100. else
  101.    qflag = .false.
  102. end if
  103. if(qflag) then
  104.    do 120 j=1,9
  105.       sumdm(j)=sumdm(j)+dm(j)
  106. 120    continue
  107.    do 130 j=3,9
  108.       sumdm(10)=sumdm(10)+dm(j)/7.
  109. 130    continue
  110.    iframedm=iframedm+1
  111. end if
  112. qflag = .true.
  113. return
  114. end