Merge branch 'develop' of bitbucket.org:k1jt/wsjtx into develop

This commit is contained in:
Joe Taylor 2024-09-24 10:07:30 -04:00
commit 33637034af
8 changed files with 2115 additions and 1922 deletions

View File

@ -612,6 +612,7 @@ set (wsjt_FSRCS
lib/superfox/sfox_demod.f90
lib/superfox/sfox_pack.f90
lib/superfox/sfox_remove_ft8.f90
lib/superfox/sfox_remove_tone.f90
lib/superfox/sfox_unpack.f90
lib/superfox/sfox_wave.f90
lib/superfox/sfox_wave_gfsk.f90

View File

@ -11,6 +11,92 @@
Copyright 2001 - 2024 by Joe Taylor, K1JT, and the WSJT Development Team
Release: WSJT-X 2.7.0-rc7
September 30, 2024
-------------------------
WSJT-X 2.7.0 Release Candidate 7 brings significant improvements for
the new SuperFox mode. It introduces a new verification system which
replaces the previous one, and works for both the SuperFox mode and
for old-style Fox and Hound operation.
IMPORTANT: OpenSSL v1.1.1 or higher is now required.
Enhancements to the SuperFox decoder:
- The performance of the SuperFox decoder has been further improved.
- Users can now set individual FTol values and tune the decoder to
the exact sync frequency of the SuperFox signal if it is not exactly
750 Hz. Both result in a better decodability in certain situations.
- Important: The Rx frequency must now always be set to the sync
frequency +- FTol (i.e. usually to 750 +-50 Hz).
Introduction of a new Fox verification system:
- The new Fox verification system uses one time passwords (OTPs), and
works for the SuperFox mode as well as for old-style Fox and Hound
operation. It can be enabled by the new OTP checkbox on the Advanced
tab of the Settings dialog.
- Fox or SuperFox stations send individual OTPs via radio. Hounds
automatically check the validity of the received OTPs in real time
from a server when there is an internet connection. Otherwise, the
validity can also be queried manually later. OTP verifications can
only be retrieved once the transmission has already taken place.
- Displaying the OTP verification messages can be switched off.
Verfication then runs fully automatically in the background.
- If the verification was successful, the background color of the Hound
or Super Hound label switches to green.
- Theoretically, DXpeditions can set up their own OTP server, however,
we recommend using the server at https://www.9dx.cc.
- Use of the new Fox verification system requires an OTP key. The system
uses open source code and standard encryption technology. Non-verified
SuperFox transmissions are now possible without a key.
Improvements to SuperFox/Hound operation:
- SuperHounds must now first receive the SuperFox before they can call.
A QSO can only be started by double-clicking on a SuperFox signal.
Note that calling the Fox blindly not only leads to unnecessary band
utilization, but can also significantly reduce the QSO rate due to
unanswered (Super)Fox replies.
- Switching to SuperHound mode automatically sets the Rx frequency to
750 Hz. The previously selected frequency is saved and restored
afterwards.
- Old-style Fox stations can now also transmit free text messages of
up to 13 characters.
- Some enhancements useful for Fox operators: Active Station Window now
shows band activity. Hound callsigns can be highlighted via UDP API, and
assigned a score for sorting via UDP API. Fox Tx frequency is preserved
when switching in/out of Fox mode.
- UDP Status Update messages now include information on how many callsigns
have highlighting applied, and how many callsigns have a score assigned.
Other enhancements and fixes:
- In FT8 mode, the Settings dialog no longer resets the VFO frequency
to band/mode default unless really needed.
- Fixed a flaw which resulted in sub-optimal QSO rates in SuperFox
mode.
- Several code improvements for macOS.
- Updated CTY.DAT and Hamlib.
Release: WSJT-X 2.7.0-rc6
July 19, 2024
-------------------------

3751
cty.dat

File diff suppressed because it is too large Load Diff

View File

@ -94,8 +94,8 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
:sourceforge-jtsdk: https://sourceforge.net/projects/jtsdk[SourceForge JTSDK]
:ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice]
:win_openssl_packages: https://slproweb.com/products/Win32OpenSSL.html[Windows OpenSSL Packages]
:win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_1_1s.msi[Win32 OpenSSL Light Package]
:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_1s.msi[Win64 OpenSSL Light Package]
:win32_openssl: https://sourceforge.net/projects/wsjt-x-improved/files/Additional%20Files/OpenSSL/Win32OpenSSL_Light-1_1_1a.msi/download[Win32 OpenSSL Light Package]
:win64_openssl: https://sourceforge.net/projects/wsjt-x-improved/files/Additional%20Files/OpenSSL/Win64OpenSSL_Light-1_1_1a.msi[Win64 OpenSSL Light Package]
:writelog: https://writelog.com/[Writelog]
:wsjtx_group: https://groups.io/g/wsjtgroup[WSJT GROUP User Forum]
:wsjtx_group2: https://groups.io/g/wsjtgroup/join[join the group]

View File

@ -148,95 +148,3 @@ subroutine smo121a(x,nz,a,b)
return
end subroutine smo121a
subroutine remove_tone(c0,fsync)
parameter (NMAX=15*12000)
parameter (NFILT=8000)
complex c0(NMAX)
complex cwindow(15*12000)
complex cref(NMAX)
complex cfilt(NMAX)
real window(-NFILT/2:NFILT/2)
! real endcorrection(NFILT/2+1)
real s(NMAX/4)
integer ipk(1)
logical first
data first/.true./
save cwindow,first,pi
if(first) then
pi=4.0*atan(1.0)
fac=1.0/float(NMAX)
sumw=0.0
do j=-NFILT/2,NFILT/2
window(j)=cos(pi*j/NFILT)**2
sumw=sumw+window(j)
enddo
cwindow=0.
cwindow(1:NFILT+1)=window/sumw
cwindow=cshift(cwindow,NFILT/2+1)
call four2a(cwindow,NMAX,1,-1,1)
cwindow=cwindow*fac ! frequency domain smoothing filter
first=.false.
endif
fsample=12000.0
df=fsample/NMAX
fac=1.0/NMAX
cfilt=fac*c0
call four2a(cfilt,NMAX,1,-1,1) ! fourier transform of input data
iz=NMAX/4
do i=1,iz
s(i)=real(cfilt(i))**2 + aimag(cfilt(i))**2
enddo
ia=nint((fsync-100.0)/df)
ib=nint((fsync+100.0)/df)
ipk=maxloc(s(ia:ib))
i0=ipk(1) + ia - 1
i10=nint(10.0/df)
ia=i0-i10
ib=i0+i10
s0=0.0
s1=0.0
s2=0.0
do i=ia,ib
s0=s0+s(i)
s1=s1+(i-i0)*s(i)
enddo
delta=s1/s0
i0=nint(i0+delta)
f2=i0*df
ia=i0-i10
ib=i0+i10
do i=ia,ib
s2=s2 + s(i)*(i-i0)**2
enddo
sigma=sqrt(s2/s0)*df
! write(*,*) 'frequency, spectral width ',f2,sigma
if(sigma .gt. 2.5) go to 999
! write(*,*) 'remove_tone - frequency: ',f2
dt=1.0/fsample
do i=1, NMAX
arg=2*pi*f2*i*dt
cref(i)=cmplx(cos(arg),sin(arg))
enddo
cfilt=c0*conjg(cref) ! baseband to be filtered
call four2a(cfilt,NMAX,1,-1,1)
cfilt=cfilt*cwindow
call four2a(cfilt,NMAX,1,1,1)
nframe=50*3456
do i=1,nframe
cref(i)=cfilt(i)*cref(i)
c0(i)=c0(i)-cref(i)
enddo
999 return
end subroutine remove_tone

View File

@ -0,0 +1,95 @@
subroutine sfox_remove_tone(c0,fsync)
parameter (NMAX=15*12000)
parameter (NFILT=8000)
complex c0(NMAX)
complex cwindow(15*12000)
complex cref(NMAX)
complex cfilt(NMAX)
real window(-NFILT/2:NFILT/2)
! real endcorrection(NFILT/2+1)
real s(NMAX/4)
integer ipk(1)
logical first
data first/.true./
save cwindow,first,pi
if(first) then
pi=4.0*atan(1.0)
fac=1.0/float(NMAX)
sumw=0.0
do j=-NFILT/2,NFILT/2
window(j)=cos(pi*j/NFILT)**2
sumw=sumw+window(j)
enddo
cwindow=0.
cwindow(1:NFILT+1)=window/sumw
cwindow=cshift(cwindow,NFILT/2+1)
call four2a(cwindow,NMAX,1,-1,1)
cwindow=cwindow*fac ! frequency domain smoothing filter
first=.false.
endif
fsample=12000.0
baud=fsample/1024.0
df=fsample/NMAX
fac=1.0/NMAX
do it=1,2
cfilt=fac*c0
call four2a(cfilt,NMAX,1,-1,1) ! fourier transform of input data
iz=NMAX/4
do i=1,iz
s(i)=real(cfilt(i))**2 + aimag(cfilt(i))**2
enddo
ia=nint((fsync-100.0)/df)
ib=nint((fsync+1500.0+100.0)/df)
ipk=maxloc(s(ia:ib))
i0=ipk(1) + ia - 1
nbaud=nint(baud/df)
ia=i0-nbaud
ib=i0+nbaud
s0=0.0
s1=0.0
s2=0.0
do i=ia,ib
s0=s0+s(i)
s1=s1+(i-i0)*s(i)
enddo
delta=s1/s0
i0=nint(i0+delta)
f2=i0*df
ia=i0-nbaud
ib=i0+nbaud
do i=ia,ib
s2=s2 + s(i)*(i-i0)**2
enddo
sigma=sqrt(s2/s0)*df
write(*,*) 'frequency, spectral width ',f2,sigma
if(sigma .gt. 2.5) exit
write(*,*) 'remove_tone - frequency: ',f2
dt=1.0/fsample
do i=1, NMAX
arg=2*pi*f2*i*dt
cref(i)=cmplx(cos(arg),sin(arg))
enddo
cfilt=c0*conjg(cref) ! baseband to be filtered
call four2a(cfilt,NMAX,1,-1,1)
cfilt=cfilt*cwindow
call four2a(cfilt,NMAX,1,1,1)
nframe=50*3456
do i=1,nframe
cref(i)=cfilt(i)*cref(i)
c0(i)=c0(i)-cref(i)
enddo
enddo
return
end subroutine sfox_remove_tone

View File

@ -36,7 +36,7 @@ subroutine sfrx_sub(nyymmdd,nutc,nfqso,ntol,iwave)
call sfox_ana(dd,npts,c0,npts)
! call remove_tone(c0,fsync) ! Needs testing
! call sfox_remove_tone(c0,fsync) ! Needs testing
ndepth=3
dth=0.5

View File

@ -1352,7 +1352,7 @@ void MainWindow::readSettings()
ui->sbNlist->setValue(m_settings->value("FoxNlist",12).toInt());
m_Nslots=m_settings->value("FoxNslots",3).toInt();
m_Nslots0=m_Nslots;
ui->sbNslots->setValue(m_Nslots);
if(!m_config.superFox()) ui->sbNslots->setValue(m_Nslots);
ui->sbSerialNumber->setValue (m_settings->value ("SerialNumber", 1).toInt ());
m_freeTextMsg0=m_settings->value("FoxTextMsg","").toString();
m_freeTextMsg=m_freeTextMsg0;
@ -2691,6 +2691,10 @@ void MainWindow::statusChanged()
ui->sbNslots->setValue(m_Nslots0);
}
if (SpecOp::HOUND==m_specOp) ui->cbRxAll->setVisible(!m_config.superFox());
if ((SpecOp::HOUND!=m_specOp && SpecOp::FOX!=m_specOp) or !m_config.superFox()) {
m_wideGraph->setSuperFox(false);
m_wideGraph->setSuperHound(false);
}
}
bool MainWindow::eventFilter (QObject * object, QEvent * event)