WSJT-X/map65/libm65/synctst2.f90

92 lines
2.2 KiB
Fortran

program synctst2
! Tests JT65B2 sync patterns
parameter (LAGMAX=20)
real ccf0(0:LAGMAX),ccf1(0:LAGMAX),ccf2(0:LAGMAX),ccf3(0:LAGMAX)
character arg*12,line*64
integer*8 n8
integer npr(126),np0(126),np1(126),npr1(126),npr2(126)
data npr/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, &
0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, &
0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, &
0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, &
1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, &
0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, &
1,1,1,1,1,1/
data npr2/1,0,0,1,2,0,0,0,2,1,1,2,2,2,0,2,0,2,0,0, &
0,1,0,2,1,0,0,1,0,0,0,2,1,1,0,0,1,1,2,2, &
0,2,2,0,2,1,1,1,0,0,0,1,2,0,1,0,2,0,1,1, &
0,0,2,2,0,1,0,1,0,2,0,0,2,0,0,0,0,0,0,1, &
1,0,0,0,0,0,0,0,1,2,0,2,0,0,2,0,2,1,0,1, &
0,2,0,1,0,0,2,2,0,0,1,0,0,2,0,0,0,0,1,1, &
1,2,1,2,1,2/
data n8/x'4314f4725bb357e0'/
write(*,1102) n8
write(line,1102) n8
1102 format(b63)
read(line,1104) npr1(1:63)
1104 format(63i1)
npr1(64:126)=npr1(1:63)
worst=0.
do lag=0,LAGMAX
nsum=0
do i=1,126-lag
nsum=nsum + npr(i)*npr(lag+i)
enddo
ccf0(lag)=2.0*nsum/(126.0-lag)
if(lag.ge.1 .and. ccf0(lag).gt.worst) worst=ccf0(lag)
enddo
worst1=0.
do lag=0,LAGMAX
nsum=0
do i=1,126-lag
nsum=nsum + npr1(i)*npr1(lag+i)
enddo
ccf1(lag)=(63.0/64.0)*2.0*nsum/(126.0-lag)
if(lag.ge.1 .and. ccf1(lag).gt.worst1) worst1=ccf1(lag)
enddo
ccf1=ccf1/ccf1(0)
worst1=worst1/ccf1(0)
np0=0
np1=0
n0=0
do i=1,126
if(npr2(i).eq.1) then
np0(i)=1
n0=n0+1
else if(npr2(i).eq.2) then
np1(i)=1
endif
enddo
worst2=0.
do lag=0,LAGMAX
nsum=0
do i=1,126-lag
nsum=nsum + np0(i)*np0(lag+i) + np1(i)*np1(lag+i)
enddo
ccf2(lag)=2.0*nsum/(126.0-lag)
if(lag.ge.1 .and. ccf2(lag).gt.worst2) then
worst2=ccf2(lag)
lagbad=lag
endif
enddo
do lag=0,LAGMAX
write(13,1100) lag,ccf0(lag),ccf1(lag),ccf2(lag)
1100 format(i3,3f10.3)
enddo
print*,worst,worst1,worst2,n0,lagbad
999 end program synctst2