diff --git a/lib/fst280/fst280d.f90 b/lib/fst280/fst280d.f90 index edfee81f7..7ec778727 100644 --- a/lib/fst280/fst280d.f90 +++ b/lib/fst280/fst280d.f90 @@ -19,21 +19,21 @@ program fst280d real llr(280),llra(280),llrb(280),llrc(280),llrd(280) real candidates(100,3) real bitmetrics(328,4) - integer ihdr(11) + integer hmod,ihdr(11) integer*2, allocatable :: iwave(:) integer*1 apmask(280),cw(280) integer*1 hbits(328) integer*1 message101(101),message74(74) logical badsync,unpk77_success - hmod=1.0 + hmod=1 Keff=91 ndeep=3 iwspr=0 nargs=iargc() if(nargs.lt.1) then - print*,'Usage: fst280d [-a ] [-f fMHz] [-h hmod] [-k Keff] file1 [file2 ...]' + print*,'Usage: fst280d [-a ] [-f fMHz] [-h hmod] [-k Keff] [-d depth] [-t t/r type] file1 [file2 ...]' go to 999 endif iarg=1 @@ -53,8 +53,8 @@ program fst280d if(arg(1:2).eq.'-h') then call getarg(iarg+1,arg) read(arg,*) hmod - if(hmod.ne.1.and.hmod.ne.2.and.hmod.ne.4) then - print*,'invalid modulation index. h must be 1, 2, or 4' + if(hmod.ne.1.and.hmod.ne.2.and.hmod.ne.4.and.hmod.ne.8) then + print*,'invalid modulation index. h must be 1, 2, 4, or 8' goto 999 endif iarg=iarg+2 @@ -84,25 +84,27 @@ program fst280d case('A') nsps=800 nmax=15*12000 - ndown=32/hmod + ndown=20/hmod + if(hmod.eq.8) ndown=2 case('B') nsps=1680 nmax=30*12000 - ndown=70/hmod - if(hmod.eq.4) ndown=15 + ndown=42/hmod ! 40 Sa/symbol + if(hmod.eq.4) ndown=10 + if(hmod.eq.8) ndown=5 case('C') nsps=4000 nmax=60*12000 - ndown=160/hmod + ndown=100/hmod ! 40 Sa/symbol + if(hmod.eq.8) ndown=16 case('D') nsps=8400 nmax=120*12000 - ndown=350/hmod - if(hmod.eq.4) ndown=84 + ndown=200/hmod case('E') nsps=21504 nmax=300*12000 - ndown=896/hmod + ndown=512/hmod end select nss=nsps/ndown fs=12000.0 !Sample rate @@ -122,12 +124,12 @@ program fst280d allocate( cframe(0:164*nss-1) ) allocate( iwave(nmax) ) -!write(*,*) 'nsps: ',nsps -!write(*,*) 'nmax: ',nmax -!write(*,*) 'nss : ',nss -!write(*,*) 'nspsec: ',fs2 -!write(*,*) 'nfft1 : ',nfft1 -!write(*,*) 'nfft2 : ',nfft2 +write(*,*) 'nsps: ',nsps +write(*,*) 'nmax: ',nmax +write(*,*) 'nss : ',nss +write(*,*) 'nspsec: ',fs2 +write(*,*) 'nfft1 : ',nfft1 +write(*,*) 'nfft2 : ',nfft2 ngood=0 ngoodsync=0 @@ -229,20 +231,19 @@ program fst280d fc2=fc21 isbest=isbest1 ntmax=4 - if(hmod .gt. 1.0) ntmax=1 + if(hmod .gt. 1) ntmax=1 ntmin=1 njitter=2 else fc2=fc28 isbest=isbest8 ntmax=4 - if(hmod .gt. 1.0) ntmax=1 + if(hmod .gt. 1) ntmax=1 ntmin=1 njitter=2 endif fc_synced = fc0 + fc2 dt_synced = (isbest-fs2)*dt2 !nominal dt is 1 second so frame starts at sample fs2 - call fst280_downsample(c_bigfft,nfft1,ndown,fc_synced,c2) if(abs((isbest-fs2)/nss) .lt. 0.2 .and. abs(fc_synced-1500.0).lt.0.4) then @@ -251,8 +252,8 @@ program fst280d do ijitter=0,2 if(ijitter.eq.0) ioffset=0 - if(ijitter.eq.1) ioffset=2 - if(ijitter.eq.2) ioffset=-2 + if(ijitter.eq.1) ioffset=1 + if(ijitter.eq.2) ioffset=-1 is0=isbest+ioffset if(is0.lt.0) cycle cframe=c2(is0:is0+164*nss-1) @@ -344,6 +345,7 @@ subroutine sync_fst280(cd0,i0,f0,hmod,ncoh,np,nss,fs,sync) complex z1,z2,z3 logical first integer isyncword(0:7) + integer hmod real f0save data isyncword/0,1,3,2,1,0,2,3/ data first/.true./ @@ -429,6 +431,7 @@ end subroutine fst280_downsample subroutine get_candidates_fst280(c_bigfft,nfft1,nsps,hmod,fs,fa,fb,ncand,candidates) complex c_bigfft(0:nfft1/2) + integer hmod real candidates(100,3) real s(18000) real s2(18000) diff --git a/lib/fst280/fst280sim.f90 b/lib/fst280/fst280sim.f90 index 72026344b..55c673854 100644 --- a/lib/fst280/fst280sim.f90 +++ b/lib/fst280/fst280sim.f90 @@ -12,6 +12,7 @@ program fst280sim complex, allocatable :: c0(:) complex, allocatable :: c(:) real, allocatable :: wave(:) + integer hmod integer itone(NN) integer*1 msgbits(101) integer*2, allocatable :: iwave(:) !Generated full-length waveform @@ -19,6 +20,7 @@ program fst280sim ! Get command-line argument(s) nargs=iargc() if(nargs.ne.9) then + print*,'Need 9 arguments, got ',nargs print*,'Usage: fst280sim "message" type f0 DT h fdop del nfiles snr' print*,'Examples: fst280sim "K1JT K9AN EN50" C 1500 0.0 1.0 0.1 1.0 10 -15' print*,'A: 15 sec' @@ -89,7 +91,7 @@ program fst280sim write(*,*) write(*,'(a9,a37)') 'Message: ',msgsent37 write(*,1000) f0,xdt,hmod,txt,snrdb -1000 format('f0:',f9.3,' DT:',f6.2,' hmod:',f6.3,' TxT:',f6.1,' SNR:',f6.1) +1000 format('f0:',f9.3,' DT:',f6.2,' hmod:',i6,' TxT:',f6.1,' SNR:',f6.1) write(*,*) if(i3.eq.1) then write(*,*) ' mycall hiscall hisgrid' diff --git a/lib/fst280/gen_fst280wave.f90 b/lib/fst280/gen_fst280wave.f90 index dcf11ff4d..7905544ef 100644 --- a/lib/fst280/gen_fst280wave.f90 +++ b/lib/fst280/gen_fst280wave.f90 @@ -4,6 +4,7 @@ subroutine gen_fst280wave(itone,nsym,nsps,nwave,fsample,hmod,f0,icmplx,cwave,wav complex cwave(nwave) real, allocatable, save :: pulse(:) real, allocatable :: dphi(:) + integer hmod integer itone(nsym) logical first data first/.true./ diff --git a/lib/fst280/get_fst280_bitmetrics.f90 b/lib/fst280/get_fst280_bitmetrics.f90 index a50088f66..639230fa7 100644 --- a/lib/fst280/get_fst280_bitmetrics.f90 +++ b/lib/fst280/get_fst280_bitmetrics.f90 @@ -10,6 +10,7 @@ subroutine get_fst280_bitmetrics(cd,nss,hmod,bitmetrics,badsync) integer icos8(0:7) integer graymap(0:3) integer ip(1) + integer hmod logical one(0:65535,0:15) ! 65536 8-symbol sequences, 16 bits logical first logical badsync