mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-14 16:11:50 -05:00
57 lines
1.6 KiB
Fortran
57 lines
1.6 KiB
Fortran
|
subroutine lenmsk(r,npts,msglen)
|
||
|
|
||
|
! Determine length of the user message in a JTMS ping.
|
||
|
|
||
|
real r(60000)
|
||
|
real acf(4872)
|
||
|
integer np(9)
|
||
|
data np/5,7,9,11,13,17,19,23,29/ !Permissible message lengths
|
||
|
save acf !Why necessary? (But don't remove!)
|
||
|
|
||
|
msglen=0 !Use ACF to find msg length
|
||
|
if(npts.ge.8*168) then
|
||
|
r=r-sum(r(1:npts))/npts
|
||
|
acfmax=0.
|
||
|
acf0=dot_product(r(1:npts),r(1:npts))
|
||
|
kz=min(nint(0.75*npts),29*168)
|
||
|
do k=8,kz
|
||
|
fac=float(npts)/(npts-k)
|
||
|
acf(k)=fac*dot_product(r(1:npts),r(1+k:npts+k))/acf0
|
||
|
enddo
|
||
|
call hipass(acf(8),kz-7,50)
|
||
|
|
||
|
do k=8,kz !Find acfmax, kpk
|
||
|
if(acf(k).gt.acfmax) then
|
||
|
acfmax=acf(k)
|
||
|
kpk=k
|
||
|
endif
|
||
|
enddo
|
||
|
|
||
|
sumsq=0.
|
||
|
n=0
|
||
|
do k=8,kz !Find rms, skipping around kpk
|
||
|
if(abs(k-kpk).gt.10) then
|
||
|
sumsq=sumsq+acf(k)**2
|
||
|
n=n+1
|
||
|
endif
|
||
|
enddo
|
||
|
rms=sqrt(sumsq/n)
|
||
|
acf=acf/rms !Normalize the acf
|
||
|
|
||
|
amax2=0.
|
||
|
acflim=3.5
|
||
|
do i=1,9
|
||
|
k=168*np(i) !Check only the permitted lengths
|
||
|
if(k.gt.kz) go to 10
|
||
|
if(acf(k).gt.acflim .and. acf(k).gt.amax2) then
|
||
|
amax2=acf(k) !Save best value >3.5 sigma
|
||
|
msglen=np(i) !Save message length
|
||
|
kpk2=k
|
||
|
endif
|
||
|
enddo
|
||
|
10 continue
|
||
|
endif
|
||
|
|
||
|
return
|
||
|
end subroutine lenmsk
|