mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2026-07-28 13:04:25 -04:00
Further speed improvements for MSK144 RT decoding. Fiz what I broke in the "click-on-CQ-message" logic.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7144 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
@@ -11,22 +11,21 @@ subroutine msk144_freq_search(cdat,fc,if1,if2,delf,nframes,navmask,cb, &
|
||||
complex cc(0:NSPM-1)
|
||||
real xcc(0:NSPM-1)
|
||||
real xccs(0:NSPM-1)
|
||||
integer navmask(nframes) ! defines which frames to average
|
||||
integer navmask(nframes) !Tells which frames to average
|
||||
|
||||
navg=sum(navmask)
|
||||
n=nframes*NSPM
|
||||
fac=1.0/(48.0*sqrt(float(navg)))
|
||||
|
||||
do ifr=if1,if2 !Find freq that maximizes sync
|
||||
do ifr=if1,if2 !Find freq that maximizes sync
|
||||
ferr=ifr*delf
|
||||
call tweak1(cdat,n,-(fc+ferr),cdat2)
|
||||
c=0
|
||||
sumw=0.
|
||||
do i=1,nframes
|
||||
ib=(i-1)*NSPM+1
|
||||
ie=ib+NSPM-1
|
||||
if( navmask(i) .eq. 1 ) then
|
||||
c(1:NSPM)=c(1:NSPM)+cdat2(ib:ie)
|
||||
endif
|
||||
if(navmask(i).eq.1) c=c + cdat2(ib:ie)
|
||||
enddo
|
||||
|
||||
cc=0
|
||||
@@ -47,8 +46,5 @@ subroutine msk144_freq_search(cdat,fc,if1,if2,delf,nframes,navmask,cb, &
|
||||
endif
|
||||
enddo
|
||||
|
||||
! write(71,3001) fc,delf,if1,if2,nframes,bestf,xmax
|
||||
!3001 format(2f8.3,3i5,2f8.3)
|
||||
|
||||
return
|
||||
end subroutine msk144_freq_search
|
||||
|
||||
+2
-1
@@ -166,7 +166,8 @@ subroutine msk144spd(cbig,n,ntol,nsuccess,msgreceived,fc,fret,tret)
|
||||
fo=fc+ferrs(icand)
|
||||
do iav=1,NPATTERNS
|
||||
navmask=navpatterns(1:3,iav)
|
||||
call msk144sync(cdat,3,ntol0,deltaf,navmask,npeaks,fo,fest,npkloc,nsyncsuccess,c)
|
||||
call msk144sync(cdat,3,ntol0,deltaf,navmask,npeaks,fo,fest,npkloc, &
|
||||
nsyncsuccess,xmax,c)
|
||||
|
||||
if( nsyncsuccess .eq. 0 ) cycle
|
||||
|
||||
|
||||
+3
-15
@@ -1,5 +1,5 @@
|
||||
subroutine msk144sync(cdat,nframes,ntol,delf,navmask,npeaks,fc,fest, &
|
||||
npklocs,nsuccess,c)
|
||||
npklocs,nsuccess,xmax,c)
|
||||
|
||||
!$ use omp_lib
|
||||
|
||||
@@ -10,7 +10,6 @@ subroutine msk144sync(cdat,nframes,ntol,delf,navmask,npeaks,fc,fest, &
|
||||
complex cs(NSPM,8)
|
||||
complex cb(42) !Complex waveform for sync word
|
||||
|
||||
! integer*8 count0,count1,clkfreq
|
||||
integer s8(8)
|
||||
integer iloc(1)
|
||||
integer npklocs(npeaks)
|
||||
@@ -28,7 +27,6 @@ subroutine msk144sync(cdat,nframes,ntol,delf,navmask,npeaks,fc,fest, &
|
||||
data s8/0,1,1,1,0,0,1,0/
|
||||
save first,cb,fs,pi,twopi,dt,s8,pp
|
||||
|
||||
! call system_clock(count0,clkfreq)
|
||||
if(first) then
|
||||
pi=4.0*atan(1.0)
|
||||
twopi=8.0*atan(1.0)
|
||||
@@ -70,8 +68,6 @@ subroutine msk144sync(cdat,nframes,ntol,delf,navmask,npeaks,fc,fest, &
|
||||
if(id.eq.nthreads) if2=nint(ntol/delf)
|
||||
call msk144_freq_search(cdat,fc,if1,if2,delf,nframes,navmask,cb, &
|
||||
cdat2(1,id),xm(id),bf(id),cs(1,id),xccs(1,id))
|
||||
! write(73,3002) id,if1,if2,nfreqs,nthreads,bf(id),xm(id)
|
||||
!3002 format(5i5,2f10.3)
|
||||
!$OMP END PARALLEL
|
||||
|
||||
xmax=xm(1)
|
||||
@@ -98,16 +94,8 @@ subroutine msk144sync(cdat,nframes,ntol,delf,navmask,npeaks,fc,fest, &
|
||||
xcc(max(0,ic2-7):min(NSPM-1,ic2+7))=0.0
|
||||
enddo
|
||||
|
||||
if( xmax .lt. 0.7 ) then
|
||||
nsuccess=0
|
||||
else
|
||||
nsuccess=1
|
||||
endif
|
||||
|
||||
! call system_clock(count1,clkfreq)
|
||||
! t=float(count1-count0)/clkfreq
|
||||
! write(72,3001) nfreqs,OMP_GET_MAX_THREADS(),nthreads,t
|
||||
!3001 format(3i6,f8.3)
|
||||
nsuccess=0
|
||||
if(xmax.ge.1.3) nsuccess=1
|
||||
|
||||
return
|
||||
end subroutine msk144sync
|
||||
|
||||
+8
-6
@@ -88,6 +88,8 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,line)
|
||||
if( nsuccess .eq. 1 ) then
|
||||
tdec=tsec+tdec
|
||||
decsym=' & '
|
||||
ipk=0
|
||||
is=0
|
||||
goto 900
|
||||
endif
|
||||
|
||||
@@ -101,10 +103,10 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,line)
|
||||
do iavg=1,npat
|
||||
iavmask=iavpatterns(1:8,iavg)
|
||||
navg=sum(iavmask)
|
||||
deltaf=7.0/real(navg) ! search increment for frequency sync
|
||||
deltaf=10.0/real(navg) ! search increment for frequency sync
|
||||
npeaks=2
|
||||
call msk144sync(cdat(1:8*NSPM),8,ntol,deltaf,iavmask,npeaks,fc, &
|
||||
fest,npkloc,nsyncsuccess,c)
|
||||
fest,npkloc,nsyncsuccess,xmax,c)
|
||||
if( nsyncsuccess .eq. 0 ) cycle
|
||||
|
||||
do ipk=1,npeaks
|
||||
@@ -115,9 +117,9 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,line)
|
||||
ct=cshift(c,ic0-1)
|
||||
call msk144decodeframe(ct,msgreceived,ndecodesuccess)
|
||||
if(ndecodesuccess .gt. 0) then
|
||||
tdec=tsec+xmc(iavg)*tframe
|
||||
decsym=' ^ '
|
||||
goto 900
|
||||
tdec=tsec+xmc(iavg)*tframe
|
||||
decsym=' ^ '
|
||||
goto 900
|
||||
endif
|
||||
enddo !Slicer dither
|
||||
enddo !Peak loop
|
||||
@@ -136,7 +138,7 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,line)
|
||||
go to 999
|
||||
|
||||
900 continue
|
||||
! successful decode - estimate snr !!! noise estimate needs work
|
||||
! Successful decode - estimate snr !!! noise estimate needs work
|
||||
if( pnoise .gt. 0.0 ) then
|
||||
snr0=10.0*log10(pmax/pnoise-1.0)
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user