subroutine average_sd(flag,smv,smn,sme,buf1,buf2,buf3,nf, # n_win,sv,sn,se,nfft,jmin,jmax,ierr) c c FLAG = 0 c arithmetic mean and standard deviation of smoothed Fourier spectra c FLAG = 1 c geometric mean and standard deviation of smoothed H/V ratio c c output : buf1 buf2 buf3 -> average of smv smn sme c sv sn sn -> standard deviation of smv smn sme c c a.tento 05/03 v.1.0. c c implicit none c real sv, sn, se, smv, smn, sme, buf1, buf2, buf3 integer ierr, jmin, jmax, nf, n_win, nfft, flag dimension sv(nfft), sn(nfft), se(nfft), # buf1(nf), buf2(nf), buf3(nf), # smv(nf,n_win), smn(nf,n_win), sme(nf,n_win) c integer i, j real enne, bb c c do 1 i = jmin, jmax sv(i) = 0.0 sn(i) = 0.0 se(i) = 0.0 buf1(i) = 0.0 buf2(i) = 0.0 buf3(i) = 0.0 1 continue c c FLAG = 0 c if ( flag .eq. 0 ) then do 3 j = 1, n_win do 2 i = jmin, jmax buf1(i) = buf1(i) + smv(i,j) buf2(i) = buf2(i) + smn(i,j) buf3(i) = buf3(i) + sme(i,j) 2 continue 3 continue c enne=float(n_win) do 4 i = jmin, jmax buf1(i) = buf1(i) / enne buf2(i) = buf2(i) / enne buf3(i) = buf3(i) / enne 4 continue c c if ( n_win .ge. 2 ) then do 6 j = 1, n_win do 5 i = jmin, jmax bb = smv(i,j) - buf1(i) sv(i) = sv(i) + bb*bb bb = smn(i,j) - buf2(i) sn(i) = sn(i) + bb*bb bb = sme(i,j) - buf3(i) se(i) = se(i) + bb*bb 5 continue 6 continue c enne=float(n_win-1) do 7 i = jmin, jmax sv(i) = sqrt(sv(i) / enne) sn(i) = sqrt(sn(i) / enne) se(i) = sqrt(se(i) / enne) 7 continue c endif c else c c FLAG = 1 c do 13 j = 1, n_win do 12 i = jmin, jmax buf1(i) = buf1(i) + alog(smv(i,j)) buf2(i) = buf2(i) + alog(smn(i,j)) buf3(i) = buf3(i) + alog(sme(i,j)) 12 continue 13 continue c enne=float(n_win) do 14 i = jmin, jmax buf1(i) = buf1(i) / enne buf2(i) = buf2(i) / enne buf3(i) = buf3(i) / enne 14 continue c c if ( n_win .ge. 2 ) then do 16 j = 1, n_win do 15 i = jmin, jmax bb = alog(smv(i,j)) - buf1(i) sv(i) = sv(i) + bb*bb bb = alog(smn(i,j)) - buf2(i) sn(i) = sn(i) + bb*bb bb = alog(sme(i,j)) - buf3(i) se(i) = se(i) + bb*bb 15 continue 16 continue c enne=float(n_win-1) do 17 i = jmin, jmax sv(i) = exp(sqrt(sv(i) / enne)) sn(i) = exp(sqrt(sn(i) / enne)) se(i) = exp(sqrt(se(i) / enne)) buf1(i) = exp(buf1(i)) buf2(i) = exp(buf2(i)) buf3(i) = exp(buf3(i)) 17 continue c else c do 18 i = jmin, jmax sv(i) = 1.0 sn(i) = 1.0 se(i) = 1.0 buf1(i) = exp(buf1(i)) buf2(i) = exp(buf2(i)) buf3(i) = exp(buf3(i)) 18 continue endif c endif c ierr = 0 return c c end