mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-03-23 12:38:53 -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_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
|
||||
|
@ -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
|
||||
-------------------------
|
||||
|
@ -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]
|
||||
|
@ -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
|
||||
|
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 remove_tone(c0,fsync) ! Needs testing
|
||||
! call sfox_remove_tone(c0,fsync) ! Needs testing
|
||||
|
||||
ndepth=3
|
||||
dth=0.5
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user