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

语音压缩

开发平台:

Unix_Linux

  1. C==========================================================================
  2. C
  3. C ROUTINE
  4. C               cli (Will not work with DOS)
  5. C
  6. C FUNCTION
  7. C               UNIX Command line interface.
  8. C Read and check the UNIX command line.
  9. C Report and log job characteristics and performance.
  10. C SYNOPSIS
  11. C subroutine cli (ifile, ofile, l, ll, lp, np, scale, descale, 
  12. C    +                 ber, mask, stype, eccbits, sbits)
  13. C
  14. C   formal 
  15. C
  16. C data I/O
  17. C name type type function
  18. C       -------------------------------------------------------------------
  19. C ifile char o input file name
  20. C ofile char o output file name
  21. C l i i/o Code word length
  22. C ll i i/o LPC analysis frame size
  23. C lp i i/o Pitch analysis frame size
  24. C np i i/o Pitch order
  25. C scale i i/o Input speech scaling factor
  26. C descale i i/o Output speech scaling factor
  27. C ber r i/o % bit error rate
  28. C mask i o Error mask
  29. C stype char i/o Spectrum quantizer type
  30. C sbits i i/o Spectrum bit allocation
  31. C eccbits i i/o Error control bits/frame
  32. C ssum i i/o Sum of spectrum bit allocation
  33. C
  34. C   global common 
  35. C                       data    I/O
  36. C       name            type    type    function
  37. C       -------------------------------------------------------------------
  38. C  /ccsub/       see description include file
  39. C ncsize
  40. C no
  41. C gamma
  42. C
  43. C==========================================================================
  44. c CELP COMMAND
  45. cNAME:
  46. c     celp - execute the CELP coder
  47. c
  48. c     The celp command generates a code-excited-linear-prediction
  49. c     processed output file from an input file.
  50. c
  51. cSYNOPSIS:
  52. c     celp [-i ifile] [-c chan] [-o ofile] 
  53. c                [-p pfile] [-q qfile] [-m mfile] [-l lfile]
  54. c
  55. cARGUMENTS:
  56. c     -i      Input file i*2 direct access format (unformatted, consecutive
  57. c             16-bit signed samples).
  58. c             For defaults, see celp.f data statements.
  59. c     -c      Input channel file (.chan) hexadecimal format.  Channel
  60. c       files generated from previous analysis runs are used as
  61. c       inputs to a "synthesis only" run.  During this mode, the
  62. c       -i switch is invalid.  
  63. c
  64. c     -o      Speech output file (.spd) i*2 direct access format
  65. c             (unformatted, consecutive 16-bit signed samples) and
  66. c             bit stream channel file (.chan) hexadecimal format.
  67. c             For defaults, see celp.f data statements.
  68. c
  69. c     -p      Parameter file specifying celp characteristics.
  70. c             For defaults, see celp.f data statements.
  71. c             Parameters are stored in a ascii text file in the order below
  72. c             with one number per line i.e.,:
  73. c
  74. c 512       [ncsize  = Code book size]
  75. c 60        [l       = Code word length]
  76. c 240       [ll      = LPC analysis frame size]
  77. c 10        [no      = LPC filter order]
  78. c 60        [lp      = Pitch analysis frame size]
  79. c 1         [np      = Pitch order]
  80. c 0.8       [gamma   = Noise weighting factor]
  81. c 1.0       [scale   = Input speech scaling factor]
  82. c 1.0       [descale = Output speech scaling factor]
  83. c 0.0       [ber     = % bit error rate]
  84. c 1   [mxsw    = modified excitation switch (1=ON)]
  85. c 0.0       [prewt   = prefilter logical switch]
  86. c hier      [pstype  = type of fractional pitch search]
  87. c
  88. c     -q      Quantization characteristics file.
  89. c             For defaults, see celp.f data statements.
  90. c             The file has 3 sections: cbgain, pitch, and spectrum.
  91. c             Each section type is followed by a quantization type,
  92. c             which can be one of the following:  "max", "uniform", "vq",
  93. c             "log", "opt", or "none".  If the quantization type is not 
  94. c       "none", then the next line is the bit allocation; i.e.:
  95. c
  96. c             cbgain
  97. c             none [unquantized cbgain]
  98. c             pitch
  99. c             max [Max quantization]
  100. c             8 6 5 [8 bit delay, 6 bit delta delay, 5 bit gain]
  101. c             spectrum
  102. c             kang [Kang's quantization]
  103. c             3 4 4 4 4 3 3 3 3 3 [lsp1=3,...,lsp10=3]
  104. c
  105. c     -m      Mask file specifying bit protection when introducing bit
  106. c       errors to the unpermuted bit stream.  (Note, this protection
  107. c       is separate from the Hamming FEC.)  Each line of the mfile
  108. c       corresponds to a bit (i.e., 144 lines) where each line is a
  109. c       1 (protected) or 0 (not protected).
  110. c       See description in biterror.f.  
  111. c
  112. c     -l      Log file output containing run time information.
  113. c             Defaults to appending to a file called "celp.log".
  114. c             If the file name "none" is specified, no log file
  115. c             is generated.
  116. c
  117. cEXAMPLES:
  118. c
  119. c     celp
  120. c             This causes celp to process ifile.spd into ofile.spd (and a
  121. c             nonpostfiltered output in ofilenpf.spd) using the defaults 
  122. c             specified by the FORTRAN data statements in celp.f,
  123. c             writes the bit stream file ofile.chan and generates a log
  124. c             appended to the file "celp.log".  (If SUNGRAPH is enabled,
  125. c             a set of files, with .sg_data extension, as defined in
  126. c             sungraph_open.com is generated.)
  127. c
  128. c     celp -i speech/dam27.spd -o dam27_48 -p celp48.p -q celp48.q -l log
  129. c
  130. c             celp processes speech/dam27.spd into the normal, highpassed
  131. c             and nonpostfiltered output, dam27_48.spd,dam27_48hpf.spd
  132. c             and dam27_48npf.spd, respectively, writes the bit 
  133. c             stream file dam27_48.chan and appends log information to
  134. c             a file called log.  The celp parameters specified by
  135. c             celp48.p and quantization characteristics of celp48.q are
  136. c             used.  (If SUNGRAPH is enabled, a set of files, with .sg_data
  137. c             extension, as defined in sungraph_open.com is generated.)
  138. c
  139. c     celp -c speech/512_dam27.chan -o 512_dam27b
  140. c
  141. c             celp synthesizes speech/512_dam27.chan channel file into
  142. c       the normal, highpassed and nonpostfiltered output,
  143. c       512_dam27b.spd, 512_dam27bhpf.spd and 512_dam27bnpf.spd,
  144. c       respectively.
  145. c
  146. C**************************************************************************
  147. C*-
  148. subroutine cli (ifile, ofile, l, ll, lp, np, scale, descale,
  149.      +              ber, mask, stype, sbits, eccbits, ssum, analy)
  150. c
  151. c note:  ncsize, no, and gamma are passed through common
  152. c
  153. implicit undefined(a-z)
  154. include 'ccsub.com'
  155. convex  #include "ccsub.com"
  156. character*80 ifile, ofile, stype*10
  157. integer l, ll, lp, np, mask(172), sbits(maxno), eccbits, ssum
  158. logical analy
  159. real scale, descale, ber
  160. c
  161. real etime, time, t(2), realerror, sumsnr, sumdm(10), sumdm2(10)
  162. integer framesnr, framedm, framedm2, statb(12), lnblnk
  163. integer psum, rate, bits, rate2, i, j, mxsw2
  164. integer iargc, maxarg, maxtype, maxqtype
  165. parameter (maxarg = 14)
  166. parameter (maxtype = 3)
  167. parameter (maxqtype = 5)
  168. character*80 arg(maxarg), type(maxtype), qtype(maxqtype)
  169. character*80 pfile, qfile, lfile, prog, dir, mfile
  170. character*10 getlog, host, temp, fdate*24, ctime*24
  171. character*2  switch(maxarg/2)
  172. logical flag, qflag
  173. c
  174. data switch /'-i','-o', '-p', '-q', '-m', '-l', '-c'/
  175. data pfile /''/, qfile /''/, mfile /''/, lfile /'celp.log'/
  176. data type /'cbgain', 'pitch', 'spectrum'/
  177. data qtype /'kang','log','max2','arcsin','none'/
  178. c
  179. c *** parse the command line:
  180. c celp [-i ifile] [-c chan] [-o ofile] 
  181. c      [-p pfile] [-q qfile] [-m mfile] [-l lfile] 
  182. c
  183. if (iargc() .gt. maxarg) then
  184.    print *, ' cli:  Too many arguments',iargc()
  185.    stop 'celp [-i ifile] [-c chan] [-o ofile] [-p pfile]
  186.      +      [-q qfile][-m mfile] [-l lfile]'
  187. end if
  188. if (iargc() .gt. 1) then
  189.    if (mod(iargc(), 2) .eq. 1) then
  190.       print *, ' cli:  Odd number of arguments',iargc()
  191.       stop 'celp [-i ifile] [-c chan] [-o ofile] [-p pfile]
  192.      +         [-q qfile] [-m mfile] [-l lfile]'
  193.    end if
  194. end if
  195. call getarg(0, prog)
  196. do 100 i = 1, iargc()
  197.    call getarg(i, arg(i))
  198. 100 continue
  199. do 200 i = 1, iargc(), 2
  200.    flag = .true.
  201.    do 110 j = 1, maxarg/2
  202.       if (arg(i) .eq. switch(j)) then
  203.          flag = .false.
  204.          if (j .eq. 1) ifile = arg(i+1)
  205.          if (j .eq. 2) ofile = arg(i+1)
  206.          if (j .eq. 3) pfile = arg(i+1)
  207.          if (j .eq. 4) qfile = arg(i+1)
  208.          if (j .eq. 5) mfile = arg(i+1)
  209.          if (j .eq. 6) lfile = arg(i+1)
  210.          if (j .eq. 7) then
  211.            ifile = arg(i+1)
  212.            analy = .false.
  213.          endif
  214.       end if
  215. 110    continue
  216.       if (flag) then
  217.          print *, ' cli:  Bad switch',arg(i)
  218.          stop 'celp [-i ifile] [-c chan] [-o ofile] [-p pfile]
  219.      +            [-q qfile][-m mfile] [-l lfile]'
  220.       end if
  221. 200 continue
  222. c
  223. c *** read input parameter file if requested
  224. c           (all parameters are required)
  225. c
  226. if (pfile .ne. '') then
  227.    open(unit=69, file=pfile)
  228.    read(69, *) ncsize 
  229.    read(69, *) l
  230.    read(69, *) ll
  231.    read(69, *) no
  232.    read(69, *) lp
  233.    read(69, *) np
  234.    read(69, *) gamma
  235.    read(69, *) scale
  236.    read(69, *) descale
  237.    read(69, *) ber
  238.    read(69, *) mxsw2
  239. c
  240. c *for compatibility with 3.2C par files:
  241.    if (mxsw2 .ne. 1) mxsw = .false.
  242. c
  243.    read(69, *) prewt
  244.    read(69, *) pstype
  245.    close(unit=69)
  246. end if
  247. c
  248. c *** read quantization characteristics file if requested
  249. c           (not all parameters are required)
  250. c
  251. if (qfile .ne. '') then
  252.    open(unit=70, file=qfile)
  253.    do 300 i = 1, maxtype
  254.       read(70, 69) temp
  255. 69       format(a)
  256.       if (temp .eq. type(i)) then
  257.          if (i .eq. 1) then
  258.             read(70, 69) cbgtype
  259.             if (cbgtype .ne. 'none') read(70,  *) cbgbits
  260.          else if (i .eq. 2) then
  261.             read(70, 69) ptype
  262.             if (ptype .ne. 'none')
  263.      +              read(70,  *) (pbits(j), j = 1, np+2)
  264.          else if (i .eq. 3) then
  265.             read(70, 69) stype
  266.             if (stype .ne. 'none' .and. stype .ne. 'opt')
  267.      +              read(70,  *) (sbits(j), j = 1, no)
  268.          end if
  269.       end if
  270. 300    continue
  271.    close(unit=70)
  272. end if
  273. c
  274. c *** calculate data rate if fully quantized
  275. c
  276. c     (assuming spectrum update rate (ll) = spectrum analysis rate)
  277. c     (assuming pitch update rate (lp) = pitch analysis rate)
  278. c     (assuming 8kHz sampling rate)
  279. c
  280. qflag = .false.
  281. if (cbgtype.ne.'none'.and.ptype.ne.'none'.and.stype.ne.'none') then
  282.    qflag = .true.
  283.    psum = 2*(pbits(1)+pbits(2))
  284.    psum = psum + 4*(pbits(3))
  285.    ssum = 0
  286.    do 401 i = 1, no
  287.       ssum = ssum + sbits(i)
  288. 401    continue
  289.    bits = nint((ll/l)*log10(float(ncsize))/log10(2.)
  290.      +                + (ll/l)*cbgbits + psum + ssum + eccbits)
  291.    rate = nint(bits*8000./ll)
  292. c
  293. c    1 bit for sync:
  294. c
  295.    rate2 = rate + nint(1.*8000./ll)
  296. end if
  297. c
  298. c *** read bit error characteristics file if requested
  299. c
  300. if (mfile .ne. '') then
  301.    open(unit=72, file=mfile)
  302.    do 74 i = 1, bits
  303.       read(72, 73) mask(i)
  304. 73       format(i1)
  305. 74    continue
  306.    close(unit=72)
  307. end if    
  308. C
  309. C *** echo out parameters
  310. C
  311. call hostnm(host)
  312. call getcwd(dir)
  313. call stat (prog, statb)
  314. print *, getlog(), host, fdate()
  315. print *,'          Program: '//prog(1:lnblnk(prog))
  316. print *,'         Modified: '//ctime(statb(10))
  317. print *,'        Directory: '//dir(1:lnblnk(dir))
  318. if (.not.analy) then
  319. print *,'     Channel file: '//ifile(1:lnblnk(ifile))
  320. print *,'      Output file: '//ofile(1:lnblnk(ofile))
  321.         else
  322.         print *,'       Input file: '//ifile(1:lnblnk(ifile))
  323. print *,'      Output file: '//ofile(1:lnblnk(ofile))
  324. print *,'   Parameter file: '//pfile(1:max(1,lnblnk(pfile)))
  325. print *,'Quantization file: '//qfile(1:max(1,lnblnk(qfile)))
  326. print *,'BER and mask file: '//mfile(1:max(1,lnblnk(mfile)))
  327. print *,'         Log file: '//lfile(1:lnblnk(lfile))
  328. print *,'            Code book size (ncsize)=',ncsize
  329. print *,'               Code word length (l)=',l
  330. print *,'       LPC analysis frame size (ll)=',ll
  331. print *,'              LPC filter order (no)=',no
  332. print *,'     Pitch analysis frame size (lp)=',lp
  333. print *,'          Pitch analysis order (np)=',np
  334. print *,'  Modified Excitation switch (mxsw)=',mxsw
  335. print *,' Fractional pitch analysis (pstype)= ',pstype
  336. print *,' Prefilter weighting factor (prewt)=',prewt
  337. print *,'     Noise weighting factor (gamma)=',gamma
  338. print *,'       Input scaling factor (scale)=',scale
  339. print *,'    Output scaling factor (descale)=',descale
  340. print *,'             % bit error rate (BER)=',ber
  341. if (cbgtype .ne. 'none') print 80, cbgtype, cbgbits
  342. 80 format('  CB Gain:  ',a8,'quantizer, bit allocation;',i2)
  343. if (ptype .ne. 'none') print 81, ptype, (pbits(j),j=1,np+2)
  344. 81 format('    Pitch:  ',a8,'quantizer, bit allocation;',4(i2))
  345. if (stype .ne. 'none') print 82, stype, (sbits(j),j=1,no)
  346. 82 format(' Spectrum:  ',a8,'quantizer, bit allocation;',10(i2))
  347. if (qflag) print 83, rate, bits, rate2
  348. 83 format(' Data rate = ',i4, ' bps ',i3,' bpf',' (',
  349.      1  i4,' bps with 1 bit sync)')
  350. c
  351. c *** verify parameters
  352. c
  353. if (ncsize .gt. maxncsize) stop 'Error:  ncsize too big'
  354. if (l .gt. maxl)           stop 'Error:  l too big'
  355. if (ll .gt. maxll)         stop 'Error:  ll too big'
  356. if (no .gt. maxno)         stop 'Error:  no too big'
  357. if (lp .gt. maxlp)         stop 'Error:  lp too big'
  358. if (np .gt. maxnp)         stop 'Error:  np too big'
  359. if (gamma .gt. 1.0)        stop 'Error:  gamma > 1'
  360. if (scale .lt. 0.0)        stop 'Error:  scale < 0'
  361. if (ber .lt. 0.0)    stop 'Error:  ber < 0'
  362. if (mod(ll, l) .ne. 0)
  363.      +  stop '*** Error:  ll & l are inconsistent'
  364. if (mod(ll, lp) .ne. 0)
  365.      +  stop '*** Error:  ll & lp are inconsistent'
  366. if (cbgbits .lt. 5 .or. cbgbits .gt. 7)
  367.      +  stop 'Error:  bad cbgbits (not implemented)'
  368. if (pbits(1) .gt. 8)
  369.      +  stop '*** Error:  bad pbits(1) (not implemented)'
  370. if (pbits(2).gt.7 .or. pbits(2).lt.3)
  371.      +  stop '*** Error:  bad pbits(2) (not implemented)'
  372. do 500 i = 3, np+2
  373.    if (pbits(i) .lt. 3 .or. pbits(i) .gt. 5)
  374.      +     stop '*** Error:  bad pbits (not implemented)'
  375. 500 continue
  376. flag = .true.
  377. do 501 j = 1, maxqtype
  378.    if (cbgtype .eq. qtype(j)) flag = .false.
  379. 501 continue
  380. if (flag) stop '*** Error:  bad cbgain quantizer type'
  381. flag = .true.
  382. do 502 j = 1, maxqtype
  383.    if (ptype .eq. qtype(j)) flag = .false.
  384. 502 continue
  385. if (flag) stop '*** Error:  bad pitch quantizer type'
  386. flag = .true.
  387. do 503 j = 1, maxqtype
  388.    if (stype .eq. qtype(j)) flag = .false.
  389. 503 continue
  390. if (flag) stop '*** Error:  bad spectrum quantizer type'
  391. c
  392. c *** generate log file if requested
  393. c
  394. if (lfile .ne. 'none') then  
  395.    if (lfile .eq. 'celp.log') then
  396. cvax       open(unit=71, file=lfile, access='append')
  397.       open(unit=71, file=lfile)
  398. 601       read(71, 69, end=602) temp
  399.       goto 601
  400. 602       continue
  401.    else
  402.       open(unit=71, file=lfile)
  403.    end if
  404.    write(71, *) getlog(), host, fdate()
  405.    write(71, *)'          Program: '//prog(1:lnblnk(prog))
  406.    write(71, *)'         Modified: '//ctime(statb(10))
  407.    write(71, *)'        Directory: '//dir(1:lnblnk(dir))
  408.    write(71, *)'       Input file: '//ifile(1:lnblnk(ifile))
  409.    write(71, *)'      Output file: '//ofile(1:lnblnk(ofile))
  410.    write(71, *)'   Parameter file: '//pfile(1:max(1,lnblnk(pfile)))
  411.    write(71, *)'Quantization file: '//qfile(1:max(1,lnblnk(qfile)))
  412.    write(71, *)'BER and mask file: '//mfile(1:max(1,lnblnk(mfile)))
  413.    write(71, *)'         Log file: '//lfile(1:lnblnk(lfile))
  414.    write(71, *)'            Code book size (ncsize)=',ncsize
  415.    write(71, *)'               Code word length (l)=',l
  416.    write(71, *)'       LPC analysis frame size (ll)=',ll
  417.    write(71, *)'              LPC filter order (no)=',no
  418.    write(71, *)'     Pitch analysis frame size (lp)=',lp
  419.    write(71, *)'          Pitch analysis order (np)=',np
  420.    write(71, *)'  Modified Excitation switch (mxsw)=',mxsw
  421.    write(71, *)' Fractional pitch analysis (pstype)= ',pstype
  422.    write(71, *)' Prefilter weighting factor (prewt)=',prewt
  423.    write(71, *)'     Noise weighting factor (gamma)=',gamma
  424.    write(71, *)'       Input scaling factor (scale)=',scale
  425.    write(71, *)'    Output scaling factor (descale)=',descale
  426.    write(71, *)'             % bit error rate (BER)=',ber
  427.    if (cbgtype .ne. 'none') write(71, 80) cbgtype, cbgbits
  428.    if (ptype .ne. 'none') write(71, 81)ptype,(pbits(j),j=1,np+2)
  429.    if (stype .ne. 'none') write(71, 82)stype,(sbits(j),j=1,no)
  430.    if (qflag) write(71, 83) rate, bits, rate2
  431. end if
  432. endif
  433. return
  434. C==========================================================================
  435. C
  436. C ROUTINE
  437. C               cliend
  438. C
  439. C FUNCTION
  440. C               End of command line interface entry.
  441. C Report and log job characteristics and performance.
  442. C SYNOPSIS
  443. c
  444. c entry cliend(frame, sumsnr, framesnr, realerror,
  445. c     &             sumdm, framedm, sumdm2, framedm2)
  446. C
  447. C   formal 
  448. C
  449. C data I/O
  450. C name type type function
  451. C       -------------------------------------------------------------------
  452. c frame i i frame counter
  453. c  (=total frames processed at end)
  454. c sumsnr i r sum of segmental signal-to-noise
  455. c framesnr i i count of frames used for snr sum
  456. c realerror i r bit error rate
  457. c sumdm i r sum of speech distortion measures
  458. c (see dist.f)
  459. c framedm i i count of frames used for sumdm
  460. c sumdm2 i r sum of spectral distortion measures
  461. c (see dist.f)
  462. c framedm2 i i count of frames used for sumdm2
  463. C
  464. C==========================================================================
  465. c
  466. entry cliend(sumsnr, framesnr, realerror,
  467.      +             sumdm, framedm, sumdm2, framedm2, analy)
  468. c
  469. c *calculate run time, print time & date
  470. time = etime(t)
  471. print 90, frame, fdate()
  472. c
  473. c *actual bit error rate
  474.         if (analy) then
  475. print 92, realerror
  476. c
  477. c *average segmental signal-to-noise
  478. if (framesnr .le. 0) framesnr=1
  479. if (sumsnr/framesnr .gt. 0.) then
  480.    print 93, 10*log10(sumsnr/framesnr),framesnr
  481. else 
  482.    print 94,sumsnr/framesnr,framesnr
  483. end if
  484. c
  485. c *speech distortion
  486. if (framedm .ne. 0.0) print 95, (sumdm(i)/framedm, i = 1, 10)
  487. print 96, framedm
  488. c
  489. c *spectral distortion
  490. if (framedm2 .ne. 0.0) print 97, (sumdm2(i)/framedm2, i = 1, 10)
  491. print 98, framedm2
  492. endif
  493. c
  494. c *print runtime, etc. (& ring bell)
  495. print 91, t(1), t(2), time, char(7)
  496. c
  497. c *write above to log file
  498.         if (analy) then
  499. if (lfile .ne. 'none') then
  500.    write(71, 90) frame, fdate()
  501.    write(71, 92) realerror
  502.    if (sumsnr/framesnr .gt. 0) then
  503.       write(71, 93) 10*log10(sumsnr/framesnr),framesnr
  504.    else
  505.       write(71, 94) sumsnr/framesnr,framesnr
  506.    end if
  507.    if (framedm.ne.0.0) write(71, 95) (sumdm(i)/framedm, i=1,10)
  508.    write(71, 96) framedm
  509.    if (framedm2.ne.0.0) write(71, 97) (sumdm2(i)/framedm2, i=1,10)
  510.    write(71, 98) framedm2
  511.    write(71, 91) t(1), t(2), time
  512.    write(71, 99)
  513. 99    format(1x, 70('.'))
  514.    close(unit=71)
  515. end if
  516. endif
  517. 90 format(' Finished processing', i8, ' frames of data on ', a)
  518. 92 format(' Overall bit error rate =',f8.4,' %')
  519. 93 format(' Segmental SNR =',f8.4,' dB (',i6,
  520.      +  ' subframes averaged for SNR)')
  521. 94 format(' Segmental SNR =',f8.4,'    (',i6,
  522.      +  ' subframes averaged for SNR)')
  523. 95 format(' Speech distortion:',/,
  524.      +  ' likelihood measures   ',2f11.4,/,
  525.      +  ' cosh measures      dB ',4f11.4,/,
  526.      +  ' cepstral distance  dB ',3f11.4,/,
  527.      +  ' average distance   dB ',f11.4)
  528. 96 format(i6,' subframes averaged for distance measures')
  529. 97 format(' Spectral distortion:',/,
  530.      +  ' likelihood measures   ',2f11.4,/,
  531.      +  ' cosh measures      dB ',4f11.4,/,
  532.      +  ' cepstral distance  dB ',3f11.4,/,
  533.      +  ' average distance   dB ',f11.4)
  534. 98 format(i6,' subframes averaged for distance measures')
  535. 91 format(' Elapsed times (s):', f9.1, ' user,',
  536.      +  f5.1,' system,', f9.1, ' total', a)
  537. return
  538. end