mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-25 05:38:46 -05:00
196 lines
4.8 KiB
Fortran
196 lines
4.8 KiB
Fortran
program m65
|
|
|
|
! Decoder for map65. Can run stand-alone, reading data from *.tf2 files;
|
|
! or as the back end of map65, with data placed in a shared memory region.
|
|
|
|
! Fortran logical units
|
|
!
|
|
! 10 binary input data, *.tf2 files
|
|
! 11 prefixes.txt
|
|
! 12
|
|
! 13 map65.log
|
|
! 14
|
|
! 15
|
|
! 16 tquick log
|
|
! 17 saved *.tf2 files
|
|
! 18 test file to be transmitted (wsjtgen.f90)
|
|
! 19 livecq.txt
|
|
! 20
|
|
! 21 map65_rx.log
|
|
! 22
|
|
! 23 CALL3.TXT
|
|
! 24
|
|
! 25
|
|
! 26 tmp26.txt
|
|
|
|
use timer_module, only: timer
|
|
use timer_impl, only: init_timer, fini_timer
|
|
|
|
include 'njunk.f90'
|
|
parameter (NFFT=32768)
|
|
parameter (NSMAX=60*96000)
|
|
parameter (NREAD=2048)
|
|
integer*2 i2(NREAD)
|
|
real*8 hsym
|
|
real*4 ssz5a(NFFT)
|
|
logical*1 lstrong(0:1023),ldecoded,eof
|
|
real*8 fc0,fcenter
|
|
character*80 arg,infile
|
|
character mycall*12,hiscall*12,mygrid*6,hisgrid*6,datetime*20
|
|
common/datcom/dd(4,5760000),ss(4,322,NFFT),savg(4,NFFT),fc0,nutc0,junk(NJUNK)
|
|
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
|
|
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
|
|
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
|
|
nfast,nsave,max_drift,nhsym,mycall,mygrid,hiscall,hisgrid,datetime
|
|
common/early/nhsym1,nhsym2,ldecoded(32768)
|
|
|
|
nargs=iargc()
|
|
if(nargs.ne.1 .and. nargs.lt.5) then
|
|
print*,'Usage: m65 Jsub Qsub Xpol <95238|96000> file1 [file2 ...]'
|
|
print*,'Examples: m65 B A X 96000 *.tf2'
|
|
print*,' m65 C C N 96000 *.iq'
|
|
print*,''
|
|
print*,' m65 -s'
|
|
print*,' (Gets data from MAP65, via shared memory region.)'
|
|
go to 999
|
|
endif
|
|
nstandalone=1
|
|
nhsym1=280
|
|
nhsym2=302
|
|
call getarg(1,arg)
|
|
if(arg(1:2).eq.'-s') then
|
|
call m65a
|
|
go to 999
|
|
endif
|
|
n=1
|
|
if(arg(1:1).eq.'0') n=0
|
|
if(arg(1:1).eq.'A') n=1
|
|
if(arg(1:1).eq.'B') n=2
|
|
if(arg(1:1).eq.'C') n=3
|
|
|
|
call getarg(2,arg)
|
|
m=1
|
|
if(arg(1:1).eq.'0') m=0
|
|
if(arg(1:1).eq.'A') m=1
|
|
if(arg(1:1).eq.'B') m=2
|
|
if(arg(1:1).eq.'C') m=3
|
|
if(arg(1:1).eq.'D') m=4
|
|
if(arg(1:1).eq.'E') m=5
|
|
nmode=10*m + n
|
|
|
|
call getarg(3,arg)
|
|
nxpol=0
|
|
if(arg(1:1).eq.'X') nxpol=1
|
|
|
|
call getarg(4,arg)
|
|
nfsample=96000
|
|
if(arg.eq.'95238') nfsample=95238
|
|
|
|
ifile1=5
|
|
|
|
! Some default parameters for command-line execution, in early testing.
|
|
mycall='K1JT'
|
|
mygrid='FN20QI'
|
|
hiscall='K9AN'
|
|
hisgrid='EN50'
|
|
nfa=100 !144.100
|
|
nfb=162 !144.162
|
|
ntol=100
|
|
nkeep=10 !???
|
|
mousefqso=140 !For IK4WLV in 210220_1814.tf2
|
|
mousedf=0
|
|
nfcal=0
|
|
nkhz_center=125
|
|
|
|
if(nxpol.eq.0) then
|
|
nfa=55 !For KA1GT files
|
|
nfb=143
|
|
mousefqso=69 !W2HRO signal
|
|
nkhz_center=100
|
|
endif
|
|
|
|
call ftninit('.')
|
|
call init_timer('timer.out')
|
|
call timer('m65 ',0)
|
|
|
|
do ifile=ifile1,nargs
|
|
call getarg(ifile,infile)
|
|
open(10,file=infile,access='stream',status='old',err=998)
|
|
i1=index(infile,'.tf2')
|
|
if(i1.lt.1) i1=index(infile,'.iq')
|
|
read(infile(i1-4:i1-1),*,err=1) nutc0
|
|
go to 2
|
|
1 nutc0=0
|
|
2 hsym=2048.d0*96000.d0/11025.d0 !Samples per half symbol
|
|
read(10) fcenter
|
|
newdat=1
|
|
nhsym0=-999
|
|
k=0
|
|
|
|
nch=2
|
|
if(nxpol.eq.1) nch=4
|
|
eof=.false.
|
|
do irec=1,9999999
|
|
if(.not.eof) read(10,end=4) i2
|
|
go to 6
|
|
4 eof=.true.
|
|
6 if(eof) i2=0
|
|
do i=1,NREAD,nch
|
|
k=k+1
|
|
if(k.gt.60*96000) exit
|
|
dd(1,k)=i2(i)
|
|
dd(2,k)=i2(i+1)
|
|
if(nxpol.eq.1) then
|
|
dd(3,k)=i2(i+2)
|
|
dd(4,k)=i2(i+3)
|
|
endif
|
|
enddo
|
|
nhsym=(k-2048)/hsym
|
|
if(nhsym.ge.1 .and. nhsym.ne.nhsym0) then
|
|
ndiskdat=1
|
|
nb=0
|
|
! Emit signal readyForFFT
|
|
fgreen=-13.0
|
|
iqadjust=0
|
|
iqapply=0
|
|
nbslider=100
|
|
gainx=0.9962
|
|
gainy=1.0265
|
|
phasex=0.01426
|
|
phasey=-0.01195
|
|
call timer('symspec ',0)
|
|
call symspec(k,nxpol,ndiskdat,nb,nbslider,idphi,nfsample, &
|
|
fgreen,iqadjust,iqapply,gainx,gainy,phasex,phasey,rejectx, &
|
|
rejecty,pxdb,pydb,ssz5a,nkhz,ihsym,nzap,slimit,lstrong)
|
|
call timer('symspec ',1)
|
|
nhsym0=nhsym
|
|
|
|
nutc=nutc0
|
|
if(nhsym.eq.nhsym1) call decode0(dd,ss,savg,nstandalone)
|
|
if(nhsym.eq.nhsym2) then
|
|
call decode0(dd,ss,savg,nstandalone)
|
|
exit
|
|
endif
|
|
endif
|
|
enddo ! irec
|
|
|
|
if(iqadjust.ne.0) write(*,3002) rejectx,rejecty
|
|
3002 format('Image rejection:',2f7.1,' dB')
|
|
enddo ! ifile
|
|
|
|
call timer('m65 ',1)
|
|
call timer('m65 ',101)
|
|
go to 999
|
|
|
|
998 print*,'Cannot open file:'
|
|
print*,infile
|
|
|
|
999 call fini_timer()
|
|
if(arg(1:2).eq.'-s') then
|
|
write(21,1999) datetime(:17)
|
|
1999 format('Subprocess m65 terminated normally at UTC ',a17)
|
|
close(21)
|
|
endif
|
|
|
|
end program m65
|