mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-06-24 22:25:17 -04:00
First working code that uses wider detection bandwidths for submodes JT65B,C.
Still needs work! git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6507 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
e7f3a10fa2
commit
eb076718f2
@ -1,6 +1,6 @@
|
|||||||
subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, &
|
subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, &
|
||||||
naggressive,ndepth,mycall,hiscall,hisgrid,nexp_decode,sync2, &
|
naggressive,ndepth,mycall,hiscall,hisgrid,nexp_decode,sync2, &
|
||||||
a,dt,nft,qual,nhist,decoded)
|
a,dt,nft,qual,nhist,nsmo,decoded)
|
||||||
|
|
||||||
! Apply AFC corrections to a candidate JT65 signal, then decode it.
|
! Apply AFC corrections to a candidate JT65 signal, then decode it.
|
||||||
|
|
||||||
@ -12,6 +12,7 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, &
|
|||||||
complex cx1(NMAX/8) !Data at 1378.125 sps, offset by 355.3 Hz
|
complex cx1(NMAX/8) !Data at 1378.125 sps, offset by 355.3 Hz
|
||||||
complex c5x(NMAX/32) !Data at 344.53125 Hz
|
complex c5x(NMAX/32) !Data at 344.53125 Hz
|
||||||
complex c5a(512)
|
complex c5a(512)
|
||||||
|
real s1(-255:256,126)
|
||||||
real s2(66,126)
|
real s2(66,126)
|
||||||
real a(5)
|
real a(5)
|
||||||
logical first
|
logical first
|
||||||
@ -60,8 +61,8 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, &
|
|||||||
df=1378.125/nfft
|
df=1378.125/nfft
|
||||||
j=int(dtbest*1378.125)
|
j=int(dtbest*1378.125)
|
||||||
|
|
||||||
c5a=cmplx(0.0,0.0)
|
|
||||||
call timer('sh_ffts ',0)
|
call timer('sh_ffts ',0)
|
||||||
|
c5a=cmplx(0.0,0.0)
|
||||||
do k=1,nsym
|
do k=1,nsym
|
||||||
do i=1,nfft
|
do i=1,nfft
|
||||||
j=j+1
|
j=j+1
|
||||||
@ -72,23 +73,44 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, &
|
|||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
call four2a(c5a,nfft,1,1,1)
|
call four2a(c5a,nfft,1,1,1)
|
||||||
do i=1,66
|
do i=1,512
|
||||||
jj=i
|
jj=i
|
||||||
if(mode65.eq.2) jj=2*i-1
|
if(i.gt.256) jj=i-512
|
||||||
if(mode65.eq.4) then
|
s1(jj,k)=real(c5a(i))**2 + aimag(c5a(i))**2
|
||||||
! jj=4*i-3
|
|
||||||
ff=4*(i-1)*df - 355.297852
|
|
||||||
jj=nint(ff/df)+1
|
|
||||||
if(jj.lt.1) jj=jj+512
|
|
||||||
endif
|
|
||||||
s2(i,k)=real(c5a(jj))**2 + aimag(c5a(jj))**2
|
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
call timer('sh_ffts ',1)
|
call timer('sh_ffts ',1)
|
||||||
|
|
||||||
call timer('dec65b ',0)
|
call timer('dec65b ',0)
|
||||||
|
maxsmo=0
|
||||||
|
if(mode65.eq.2) maxsmo=2
|
||||||
|
if(mode65.eq.4) maxsmo=5
|
||||||
|
do ismo=0,maxsmo
|
||||||
|
if(ismo.gt.0) then
|
||||||
|
do j=1,126
|
||||||
|
call smo121(s1(-255,j),512)
|
||||||
|
enddo
|
||||||
|
endif
|
||||||
|
|
||||||
|
do i=1,66
|
||||||
|
jj=i
|
||||||
|
if(mode65.eq.2) jj=2*i-1
|
||||||
|
if(mode65.eq.4) then
|
||||||
|
ff=4*(i-1)*df - 355.297852
|
||||||
|
jj=nint(ff/df)+1
|
||||||
|
endif
|
||||||
|
s2(i,1:126)=s1(jj,1:126)
|
||||||
|
enddo
|
||||||
|
|
||||||
call decode65b(s2,nflip,mode65,ntrials,naggressive,ndepth, &
|
call decode65b(s2,nflip,mode65,ntrials,naggressive,ndepth, &
|
||||||
mycall,hiscall,hisgrid,nexp_decode,nqd,nft,qual,nhist,decoded)
|
mycall,hiscall,hisgrid,nexp_decode,nqd,nft,qual,nhist,decoded)
|
||||||
|
if(nft.eq.1) then
|
||||||
|
!### Should also deal with nft=2 solutions, if no nft=1.
|
||||||
|
nsmo=ismo
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
|
||||||
call timer('dec65b ',1)
|
call timer('dec65b ',1)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -215,16 +215,23 @@ contains
|
|||||||
integer, intent(in) :: hard_min
|
integer, intent(in) :: hard_min
|
||||||
integer, intent(in) :: aggression
|
integer, intent(in) :: aggression
|
||||||
|
|
||||||
integer param(0:8)
|
integer param(0:9)
|
||||||
|
integer nsmo
|
||||||
real rtt
|
real rtt
|
||||||
common/test000/param !### TEST ONLY ###
|
common/test000/param !### TEST ONLY ###
|
||||||
|
|
||||||
rtt=0.001*param(4)
|
rtt=0.001*param(4)
|
||||||
|
nsmo=param(9)
|
||||||
|
|
||||||
!$omp critical(decode_results)
|
!$omp critical(decode_results)
|
||||||
|
if(ft.eq.2 .or. nsmo.gt.0) then
|
||||||
|
write(*,1010) utc,snr,dt,freq,decoded,ft,nsmo
|
||||||
|
else
|
||||||
write(*,1010) utc,snr,dt,freq,decoded
|
write(*,1010) utc,snr,dt,freq,decoded
|
||||||
1010 format(i4.4,i4,f5.1,i5,1x,'#',1x,a22)
|
1010 format(i4.4,i4,f5.1,i5,1x,'#',1x,a22,i4,i2)
|
||||||
write(13,1012) utc,nint(sync),snr,dt,float(freq),drift,decoded,ft
|
endif
|
||||||
1012 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT65',i4)
|
write(13,1012) utc,nint(sync),snr,dt,float(freq),drift,decoded,ft,nsmo
|
||||||
|
1012 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT65',i4,i2)
|
||||||
call flush(6)
|
call flush(6)
|
||||||
! write(79,3001) utc,sync,snr,dt,freq,candidates, &
|
! write(79,3001) utc,sync,snr,dt,freq,candidates, &
|
||||||
! hard_min,total_min,rtt,tries,ft,min(qual,99),decoded
|
! hard_min,total_min,rtt,tries,ft,min(qual,99),decoded
|
||||||
|
@ -24,7 +24,7 @@ subroutine extract(s3,nadd,ntrials,naggressive,ndepth,mycall_12, &
|
|||||||
integer dat4(12)
|
integer dat4(12)
|
||||||
integer mrsym(63),mr2sym(63),mrprob(63),mr2prob(63)
|
integer mrsym(63),mr2sym(63),mrprob(63),mr2prob(63)
|
||||||
integer correct(63),tmp(63)
|
integer correct(63),tmp(63)
|
||||||
integer param(0:8)
|
integer param(0:9)
|
||||||
logical ltext
|
logical ltext
|
||||||
common/chansyms65/correct
|
common/chansyms65/correct
|
||||||
common/test000/param !### TEST ONLY ###
|
common/test000/param !### TEST ONLY ###
|
||||||
@ -72,8 +72,6 @@ subroutine extract(s3,nadd,ntrials,naggressive,ndepth,mycall_12, &
|
|||||||
call interleave63(mr2sym,-1) !from second-most-reliable symbols
|
call interleave63(mr2sym,-1) !from second-most-reliable symbols
|
||||||
call interleave63(mr2prob,-1)
|
call interleave63(mr2prob,-1)
|
||||||
ntry=0
|
ntry=0
|
||||||
iftest=0
|
|
||||||
if(iftest.eq.2) go to 10
|
|
||||||
|
|
||||||
call timer('ftrsd ',0)
|
call timer('ftrsd ',0)
|
||||||
param=0
|
param=0
|
||||||
@ -93,9 +91,8 @@ subroutine extract(s3,nadd,ntrials,naggressive,ndepth,mycall_12, &
|
|||||||
r0=0.90
|
r0=0.90
|
||||||
endif
|
endif
|
||||||
if(ntotal.le.nd0 .and. rtt.le.r0) nft=1
|
if(ntotal.le.nd0 .and. rtt.le.r0) nft=1
|
||||||
if(iftest.eq.1) nft=1 !### TEST ONLY ###
|
|
||||||
|
|
||||||
10 if(iftest.eq.2 .or. (nft.eq.0 .and. ndepth.ge.5)) then
|
if(nft.eq.0 .and. ndepth.ge.5) then
|
||||||
mode65=1
|
mode65=1
|
||||||
flip=1.0
|
flip=1.0
|
||||||
qmin=1.0
|
qmin=1.0
|
||||||
|
@ -81,7 +81,7 @@ contains
|
|||||||
common/decstats/ntry65a,ntry65b,n65a,n65b,num9,numfano
|
common/decstats/ntry65a,ntry65b,n65a,n65b,num9,numfano
|
||||||
common/steve/thresh0
|
common/steve/thresh0
|
||||||
common/test000/ncandidates,nhard_min,nsoft_min,nera_best,nrtt1000, &
|
common/test000/ncandidates,nhard_min,nsoft_min,nera_best,nrtt1000, &
|
||||||
ntotal_min,ntry,nq1000,npp1 !### TEST ONLY ###
|
ntotal_min,ntry,nq1000,npp1,nsmo !### TEST ONLY ###
|
||||||
|
|
||||||
! 0 1 2 3 4 5 6 7 8 9 10 11
|
! 0 1 2 3 4 5 6 7 8 9 10 11
|
||||||
data h0/41,42,43,43,44,45,46,47,48,48,49,49/
|
data h0/41,42,43,43,44,45,46,47,48,48,49,49/
|
||||||
@ -161,7 +161,7 @@ contains
|
|||||||
call timer('decod65a',0)
|
call timer('decod65a',0)
|
||||||
call decode65a(dd,npts,first_time,nqd,freq,nflip,mode65,nvec, &
|
call decode65a(dd,npts,first_time,nqd,freq,nflip,mode65,nvec, &
|
||||||
naggressive,ndepth,mycall,hiscall,hisgrid,nexp_decode, &
|
naggressive,ndepth,mycall,hiscall,hisgrid,nexp_decode, &
|
||||||
sync2,a,dtx,nft,qual,nhist,decoded)
|
sync2,a,dtx,nft,qual,nhist,nsmo,decoded)
|
||||||
call timer('decod65a',1)
|
call timer('decod65a',1)
|
||||||
n=naggressive
|
n=naggressive
|
||||||
rtt=0.001*nrtt1000
|
rtt=0.001*nrtt1000
|
||||||
|
@ -19,8 +19,9 @@ program jt9
|
|||||||
character c
|
character c
|
||||||
character(len=500) optarg, infile
|
character(len=500) optarg, infile
|
||||||
character wisfile*80
|
character wisfile*80
|
||||||
|
!### ndepth was defined as 60001. Why???
|
||||||
integer :: arglen,stat,offset,remain,mode=0,flow=200,fsplit=2700, &
|
integer :: arglen,stat,offset,remain,mode=0,flow=200,fsplit=2700, &
|
||||||
fhigh=4000,nrxfreq=1500,ntrperiod=1,ndepth=60001,nexp_decode=0
|
fhigh=4000,nrxfreq=1500,ntrperiod=1,ndepth=1,nexp_decode=0
|
||||||
logical :: read_files = .true., tx9 = .false., display_help = .false.
|
logical :: read_files = .true., tx9 = .false., display_help = .false.
|
||||||
type (option) :: long_options(23) = [ &
|
type (option) :: long_options(23) = [ &
|
||||||
option ('help', .false., 'h', 'Display this help message', ''), &
|
option ('help', .false., 'h', 'Display this help message', ''), &
|
||||||
|
Loading…
x
Reference in New Issue
Block a user