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

语音压缩

开发平台:

Unix_Linux

  1. program submultiple
  2. implicit undefined(a-z)
  3. c
  4. real pitch(256),quarter,third,half,minpitch
  5. integer i,j,submult(256,4)
  6. open (unit=10, file='pdelay.h')
  7. open (unit=11, status='new', file='submult.h')
  8. c
  9. c *read in pitch table pdelay.h
  10. read (10,*) pitch(1:256)
  11. c
  12. minpitch=pitch(1)
  13. c
  14. c *look for pitch submultiples
  15. do 400 i=256,1,-1
  16. c
  17. c *look for quarters
  18.    if (pitch(i)/4 .ge. minpitch) then
  19.       quarter=pitch(i)/4.
  20.       do 100 j=2,256
  21.  if (pitch(j) .gt. quarter) then
  22.     submult(i,1)=submult(i,1)+1
  23.     if (pitch(j)-quarter .le. quarter-pitch(j-1)) then
  24.        submult(i,4)=j
  25.     else
  26.        submult(i,4)=j-1
  27.     end if
  28.     goto 101
  29.  end if
  30. 100       continue
  31. 101    endif
  32. c
  33. c *look for thirds
  34.    if(pitch(i)/3 .ge. minpitch) then
  35.       third=pitch(i)/3.
  36.       do 200 j=2,256
  37.  if (pitch(j) .gt. third) then
  38.     submult(i,1)=submult(i,1)+1
  39.     if (pitch(j)-third .le. third-pitch(j-1)) then
  40.        submult(i,3)=j
  41.     else
  42.        submult(i,3)=j-1
  43.     end if
  44.     goto 201
  45.  end if
  46. 200       continue
  47. 201    endif
  48. c
  49. c *look for halves
  50.    if(pitch(i)/2 .ge. minpitch) then
  51.       half=pitch(i)/2.
  52.       do 300 j=2,256
  53.  if (pitch(j) .gt. half) then
  54.     submult(i,1)=submult(i,1)+1
  55.     if (pitch(j)-half .le. half-pitch(j-1)) then
  56.        submult(i,2)=j
  57.     else
  58.        submult(i,2)=j-1
  59.     end if
  60.     goto 301
  61.  end if
  62. 300       continue
  63. 301    endif
  64. print *,'index',i,'pitch',pitch(i),'has',submult(i,1),'submultiples'
  65. print *,'indicies',submult(i,2),submult(i,3),submult(i,4)
  66. print *,'multiples',pitch(submult(i,2)),pitch(submult(i,3)),
  67.      &           pitch(submult(i,4))
  68. print *,'----------------------------------------------------------'
  69. 400 continue
  70. do 500 i=1,256
  71.    submult(i,2) = submult(i,2) - 1
  72.    submult(i,3) = submult(i,3) - 1
  73.    submult(i,4) = submult(i,4) - 1
  74.    write (11,69)submult(i,1:4)
  75. 69    format (4i5)
  76. 500 continue
  77. close(10)
  78. close(11)
  79. stop
  80. end