forked from SixByNine/sigproc
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbaseline.f
62 lines (55 loc) · 1.58 KB
/
baseline.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
c==============================================================================
subroutine baseline(llog)
c==============================================================================
c
c Subtracts a SLOPING baseline from the time series contained in the
c array series(ntim). Writes out the mean which is then subtracted
c The time series is then normalized so that the rms is unity.
c
c 22/03/98 ([email protected])
c
c==============================================================================
implicit none
include 'time.inc'
integer llog,i,j,nrun,nrav
parameter(nrav=32)
real mean,sums,sumd,rssq(nrav),rsum(nrav),var,mea,msq,rms
real x(nrav),y(nrav),z(nrav),e(nrav),slope,inter,eslo,eint
sumd=0.0
do i=1,nrav
rsum(i)=0.0
rssq(i)=0.0
enddo
nrun=ntim/nrav
do i=1,ntim
j=min(nrav,i/nrun+1)
rsum(j)=rsum(j)+series(i)
rssq(j)=rssq(j)+series(i)*series(i)
sumd=sumd+series(i)
enddo
mean=sumd/real(ntim)
do i=1,nrav
mea=rsum(i)/real(nrun)
msq=rssq(i)/real(nrun)
var=sqrt(msq-mea*mea)
j=nrun/2+(i-1)*nrun
x(i)=i
y(i)=mea
e(i)=var/sqrt(real(nrun))
enddo
call slfit(x,y,z,nrav,e,.false.,inter,slope,eint,eslo)
write(llog,*) 'Subtracting mean from function:',inter,slope
do i=1,ntim
mean=inter+slope*real(i)*real(nrav)/real(ntim)
series(i)=series(i)-mean
enddo
sums=0.0
do i=1,ntim
sums=sums+series(i)*series(i)
enddo
rms=sqrt(sums/real(ntim))
do i=1,ntim
series(i)=series(i)/rms
enddo
write(llog,*) 'Time series now has zero mean and unit rms...'
end