mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-08-03 14:42:25 -04:00
Merge branch 'develop' of bitbucket.org:k1jt/wsjtx into develop
This commit is contained in:
commit
33637034af
@ -612,6 +612,7 @@ set (wsjt_FSRCS
|
|||||||
lib/superfox/sfox_demod.f90
|
lib/superfox/sfox_demod.f90
|
||||||
lib/superfox/sfox_pack.f90
|
lib/superfox/sfox_pack.f90
|
||||||
lib/superfox/sfox_remove_ft8.f90
|
lib/superfox/sfox_remove_ft8.f90
|
||||||
|
lib/superfox/sfox_remove_tone.f90
|
||||||
lib/superfox/sfox_unpack.f90
|
lib/superfox/sfox_unpack.f90
|
||||||
lib/superfox/sfox_wave.f90
|
lib/superfox/sfox_wave.f90
|
||||||
lib/superfox/sfox_wave_gfsk.f90
|
lib/superfox/sfox_wave_gfsk.f90
|
||||||
|
@ -11,6 +11,92 @@
|
|||||||
|
|
||||||
Copyright 2001 - 2024 by Joe Taylor, K1JT, and the WSJT Development Team
|
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
|
Release: WSJT-X 2.7.0-rc6
|
||||||
July 19, 2024
|
July 19, 2024
|
||||||
-------------------------
|
-------------------------
|
||||||
|
@ -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]
|
:sourceforge-jtsdk: https://sourceforge.net/projects/jtsdk[SourceForge JTSDK]
|
||||||
:ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice]
|
: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]
|
: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]
|
: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://slproweb.com/download/Win64OpenSSL_Light-1_1_1s.msi[Win64 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]
|
:writelog: https://writelog.com/[Writelog]
|
||||||
:wsjtx_group: https://groups.io/g/wsjtgroup[WSJT GROUP User Forum]
|
:wsjtx_group: https://groups.io/g/wsjtgroup[WSJT GROUP User Forum]
|
||||||
:wsjtx_group2: https://groups.io/g/wsjtgroup/join[join the group]
|
:wsjtx_group2: https://groups.io/g/wsjtgroup/join[join the group]
|
||||||
|
@ -148,95 +148,3 @@ subroutine smo121a(x,nz,a,b)
|
|||||||
|
|
||||||
return
|
return
|
||||||
end subroutine smo121a
|
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
|
|
||||||
|
95
lib/superfox/sfox_remove_tone.f90
Normal file
95
lib/superfox/sfox_remove_tone.f90
Normal 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
|
@ -36,7 +36,7 @@ subroutine sfrx_sub(nyymmdd,nutc,nfqso,ntol,iwave)
|
|||||||
|
|
||||||
call sfox_ana(dd,npts,c0,npts)
|
call sfox_ana(dd,npts,c0,npts)
|
||||||
|
|
||||||
! call remove_tone(c0,fsync) ! Needs testing
|
! call sfox_remove_tone(c0,fsync) ! Needs testing
|
||||||
|
|
||||||
ndepth=3
|
ndepth=3
|
||||||
dth=0.5
|
dth=0.5
|
||||||
|
@ -1352,7 +1352,7 @@ void MainWindow::readSettings()
|
|||||||
ui->sbNlist->setValue(m_settings->value("FoxNlist",12).toInt());
|
ui->sbNlist->setValue(m_settings->value("FoxNlist",12).toInt());
|
||||||
m_Nslots=m_settings->value("FoxNslots",3).toInt();
|
m_Nslots=m_settings->value("FoxNslots",3).toInt();
|
||||||
m_Nslots0=m_Nslots;
|
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 ());
|
ui->sbSerialNumber->setValue (m_settings->value ("SerialNumber", 1).toInt ());
|
||||||
m_freeTextMsg0=m_settings->value("FoxTextMsg","").toString();
|
m_freeTextMsg0=m_settings->value("FoxTextMsg","").toString();
|
||||||
m_freeTextMsg=m_freeTextMsg0;
|
m_freeTextMsg=m_freeTextMsg0;
|
||||||
@ -2691,6 +2691,10 @@ void MainWindow::statusChanged()
|
|||||||
ui->sbNslots->setValue(m_Nslots0);
|
ui->sbNslots->setValue(m_Nslots0);
|
||||||
}
|
}
|
||||||
if (SpecOp::HOUND==m_specOp) ui->cbRxAll->setVisible(!m_config.superFox());
|
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)
|
bool MainWindow::eventFilter (QObject * object, QEvent * event)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user