mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-03-31 16:38:35 -04:00
WIP on q65 decoder. A good place to commit, for now.
This commit is contained in:
parent
0bf8193601
commit
5ea9296944
@ -138,11 +138,12 @@ subroutine q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
|||||||
if(nsps.ge.7200) j0=1.0/dtstep !Nominal start-signal index
|
if(nsps.ge.7200) j0=1.0/dtstep !Nominal start-signal index
|
||||||
|
|
||||||
s3=0.
|
s3=0.
|
||||||
if(iavg.eq.0) then
|
if(iavg.eq.0 .and. lnewdat) then
|
||||||
call timer('q65_syms',0)
|
call timer('q65_syms',0)
|
||||||
! Compute symbol spectra with NSTEP time bins per symbol
|
! Compute symbol spectra with NSTEP time bins per symbol
|
||||||
call q65_symspec(iwave,ntrperiod*12000,iz,jz,s1)
|
call q65_symspec(iwave,ntrperiod*12000,iz,jz,s1)
|
||||||
call timer('q65_syms',1)
|
call timer('q65_syms',1)
|
||||||
|
lnewdat=.false.
|
||||||
else
|
else
|
||||||
s1=s1a(:,:,iseq)
|
s1=s1a(:,:,iseq)
|
||||||
endif
|
endif
|
||||||
@ -492,14 +493,12 @@ subroutine q65_ccf_22(s1,iz,jz,nfqso,ntol,ndepth,ntrperiod,iavg,ipk,jpk, &
|
|||||||
real ccf2(iz) !Orange sync curve
|
real ccf2(iz) !Orange sync curve
|
||||||
real, allocatable :: xdt2(:)
|
real, allocatable :: xdt2(:)
|
||||||
real, allocatable :: s1avg(:)
|
real, allocatable :: s1avg(:)
|
||||||
real, allocatable :: ccf_lag(:)
|
|
||||||
integer, allocatable :: indx(:)
|
integer, allocatable :: indx(:)
|
||||||
integer ipk1(1)
|
integer ipk1(1)
|
||||||
|
|
||||||
allocate(xdt2(iz))
|
allocate(xdt2(iz))
|
||||||
allocate(s1avg(iz))
|
allocate(s1avg(iz))
|
||||||
allocate(indx(iz))
|
allocate(indx(iz))
|
||||||
allocate(ccf_lag(lag1:lag2))
|
|
||||||
|
|
||||||
ia=max(nfa,100)/df
|
ia=max(nfa,100)/df
|
||||||
ib=min(nfb,4900)/df
|
ib=min(nfb,4900)/df
|
||||||
@ -519,14 +518,8 @@ subroutine q65_ccf_22(s1,iz,jz,nfqso,ntol,ndepth,ntrperiod,iavg,ipk,jpk, &
|
|||||||
lagpk=0
|
lagpk=0
|
||||||
lagbest=0
|
lagbest=0
|
||||||
idrift_best=0
|
idrift_best=0
|
||||||
stest_min=1.4
|
|
||||||
|
|
||||||
! Special case for Q65W:
|
|
||||||
if(nfa.eq.990 .and. nfb.eq.1010 .and. nfqso.eq.1000) stest_min=0.0
|
|
||||||
|
|
||||||
do i=ia,ib
|
do i=ia,ib
|
||||||
stest=s1avg(i)/base0
|
|
||||||
if(stest.lt.stest_min) cycle
|
|
||||||
ccfmax=0.
|
ccfmax=0.
|
||||||
do lag=lag1,lag2
|
do lag=lag1,lag2
|
||||||
do idrift=-max_drift,max_drift
|
do idrift=-max_drift,max_drift
|
||||||
@ -548,43 +541,12 @@ subroutine q65_ccf_22(s1,iz,jz,nfqso,ntol,ndepth,ntrperiod,iavg,ipk,jpk, &
|
|||||||
enddo ! idrift
|
enddo ! idrift
|
||||||
enddo ! lag
|
enddo ! lag
|
||||||
|
|
||||||
! Look at SNR on the "blue curve"
|
|
||||||
idrift=idrift_max
|
|
||||||
do lag=lag1,lag2
|
|
||||||
ccft=0.
|
|
||||||
do kk=1,22
|
|
||||||
k=isync(kk)
|
|
||||||
ii=i + nint(idrift*(k-43)/85.0)
|
|
||||||
if(ii.lt.1 .or. ii.gt.iz) cycle
|
|
||||||
n=NSTEP*(k-1) + 1
|
|
||||||
j=n+lag+j0
|
|
||||||
if(j.ge.1 .and. j.le.jz) ccft=ccft + s1(ii,j)
|
|
||||||
enddo ! kk
|
|
||||||
ccf_lag(lag)=ccft - (22.0/jz)*s1avg(i)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
pk=maxval(ccf_lag)
|
|
||||||
ipk1=maxloc(ccf_lag)
|
|
||||||
lag0=ipk1(1)-1+lag1
|
|
||||||
xsum=0.
|
|
||||||
sq=0.
|
|
||||||
nsum=0
|
|
||||||
do j=lag1,lag2
|
|
||||||
if(abs(j-lag0).gt.7) then
|
|
||||||
xsum=xsum+ccf_lag(j)
|
|
||||||
sq=sq+ccf_lag(j)**2
|
|
||||||
nsum=nsum+1
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
ave=xsum/nsum
|
|
||||||
rms=sqrt(sq/nsum - ave*ave)
|
|
||||||
snr=(pk-ave)/rms
|
|
||||||
if(snr.lt.5.0) cycle !Blue SNR must be at least 5
|
|
||||||
|
|
||||||
ccf2(i)=ccfmax
|
ccf2(i)=ccfmax
|
||||||
xdt2(i)=lagpk*dtstep
|
xdt2(i)=lagpk*dtstep
|
||||||
|
|
||||||
if(ccfmax.gt.ccfbest .and. abs(i*df-nfqso).le.ftol) then
|
if(ccfmax.gt.ccfbest .and. abs(i*df-nfqso).le.ftol) then
|
||||||
ccfbest=ccfmax
|
ccfbest=ccfmax
|
||||||
|
snrbest=snr
|
||||||
ibest=i
|
ibest=i
|
||||||
lagbest=lagpk
|
lagbest=lagpk
|
||||||
idrift_best=idrift_max
|
idrift_best=idrift_max
|
||||||
@ -730,7 +692,7 @@ subroutine q65_write_red(iz,xdt,ccf2_avg,ccf2)
|
|||||||
y1=g_avg*(ccf2_avg(i)-y0_avg)
|
y1=g_avg*(ccf2_avg(i)-y0_avg)
|
||||||
y2=g*(ccf2(i)-y0)
|
y2=g*(ccf2(i)-y0)
|
||||||
write(17,1000) freq,y1,y2
|
write(17,1000) freq,y1,y2
|
||||||
1000 format(3f10.3)
|
1000 format(f10.3,2f15.6)
|
||||||
enddo
|
enddo
|
||||||
flush(17)
|
flush(17)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user