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

This commit is contained in:
Joe Taylor 2024-06-10 08:36:18 -04:00
commit e439a005f1
21 changed files with 151 additions and 7 deletions

View File

@ -587,6 +587,7 @@ set (wsjt_FSRCS
lib/fst4/fst4_baseline.f90
lib/77bit/hash22calc.f90
lib/superfox/sfox_wave.f90
lib/superfox/sfox_wave_gfsk.f90
)
# temporary workaround for a gfortran v7.3 ICE on Fedora 27 64-bit

View File

@ -70,9 +70,10 @@ void Modulator::start (QString mode, unsigned symbolsLength, double framesPerSym
m_bFastMode=fastMode;
m_TRperiod=TRperiod;
unsigned delay_ms=1000;
if(mode=="FT8" or (mode=="FST4" and m_nsps==720)) delay_ms=500; //FT8, FST4-15
if(mode=="Q65" and m_nsps<=3600) delay_ms=500; //Q65-15 and Q65-30
if(mode=="FT4") delay_ms=300; //FT4
if((mode=="FT8" and m_nsps==1920) or (mode=="FST4" and m_nsps==720)) delay_ms=500; //FT8, FST4-15
if((mode=="FT8" and m_nsps==1024)) delay_ms=400; //SuperFox Qary Polar Code transmission
if(mode=="Q65" and m_nsps<=3600) delay_ms=500; //Q65-15 and Q65-30
if(mode=="FT4") delay_ms=300; //FT4
// noise generator parameters
if (m_addNoise) {

View File

@ -11,6 +11,70 @@
Copyright 2001 - 2024 by Joe Taylor, K1JT, and the WSJT Development Team
Release: WSJT-X 2.7.0-rc5
July 1, 2024
-------------------------
WSJT-X 2.7.0 Release Candidate 5 primarily introduces a new "SuperFox
and SuperHound" mode, a powerful new tool that helps DXpeditions to make
digital QSOs at very high rates. Furthermore, it brings some fixes and
other improvements.
SuperFox and SuperHound mode:
- The SuperFox mode behaves operationally like the present Fox and Hounds
but uses a constant envelope waveform for Foxs transmissions rather
than sending concurrent streams of up to five normal FT8 signals. This
has the advantage that up to 9 messages can be transmitted without
getting a signal-strength penalty, resulting in a system gain of approx.
+10 dB compared to the conventional Fox/Hound operation with 5 slots!
- Hounds chasing the DX station transmit normal FT8 signals, as in the
already familiar Fox and Hound mode.
- Important: Hounds must use at least WSJT-X 2.7.0-rc5 to be able to
receive SuperFox messages.
- When in SuperFox mode, Hound stations can call now also below 1000 Hz.
- SuperFox Operation requires the Fox operator to use a valid key. Such
messages then contain a digital signature. Authorized keys will be
issued in advance for legitimate DXpeditions by the Northern California
DX Foundation.
- Hounds will see the "Super Hound" label turn to green when a verified
SuperFox message arrives, as well as a "CALLSIGN verified" message.
- Hound Operation should begin by selecting Special operating activity,
SuperFox, and Hound on the Settings / Advanced page. Alternatively,
right-clicking on the FT8 buttons toggles SuperFox mode on/off.
It works both when in Hound or in Fox mode. This allows quick switching
between SuperFox and the normal Fox and Hound operation.
- SuperFox stations can send free text messages of up to 26 characters.
Other enhancements:
- Fixed a flaw that caused "Log automatically" to not work for the ARRL
Digi Contest mode.
- Control elements for special operating activities are now disabled
if the respective function is not applicable.
- Fixed a long-standing error that caused "Start new period decodes at
top" to stop working properly after some time.
- Right-click mouse press events are now less error-prone.
- Improved the readability of the first line when "Start new period
decodes at top" is checked.
- 4-digit grids are now logged for certain contest modes to ensure that
the log complies with the contest rules.
- The Fox Tx frequency is now saved and restored separately.
Release: WSJT-X 2.7.0-rc4
March 11, 2024
-------------------------

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,78 @@
subroutine sfox_wave_gfsk(fname)
! Called by WSJT-X when it's time for SuperFox to transmit. Reads array
! itone(1:151) from disk file 'sfox_2.dat' in the writable data directory.
! Generates a GFSK waveform with short ramp-up and ramp-down symbols of
! duration NSPS/BT at the beginning and end of the waveform.
parameter (NWAVE=(160+2)*134400*4) !Max WSJT-X waveform (FST4-1800 at 48kHz)
parameter (NSYM=151,NSPS=1024*4)
parameter (NPTS=(NSYM+2)*NSPS)
parameter (BT=8)
character*(*) fname
integer itone(151)
real*8 dt,twopi,f0,baud,phi,dphi_peak
real*8 dphi(0:NPTS-1)
real*8 pulse(3*NSPS)
logical first/.true./
common/foxcom/wave(NWAVE)
save first,twopi,dt,hmod,dphi_peak,pulse
if(first) then
fsample=48000.0
twopi=8.d0*atan(1.d0)
dt=1.d0/fsample
hmod=1.0
dphi_peak=twopi*hmod/real(NSPS)
do i=1,3*NSPS
tt=(i-1.5*NSPS)/real(NSPS)
pulse(i)=gfsk_pulse(BT,tt)
enddo
first=.false.
endif
open(25,file=trim(fname),status='unknown',err=999)
read(25,'(20i4)',err=999,end=999) itone
close(25)
if(itone(1).lt.0 .or. itone(1).gt.128) go to 999
! Generate the SuperFox waveform.
dphi=0.d0
do j=1,NSYM
ib=(j-1)*NSPS
ie=ib+3*NSPS-1
dphi(ib:ie)=dphi(ib:ie)+dphi_peak*pulse(1:3*NSPS)*itone(j)
enddo
dphi(0:2*NSPS-1)=dphi(0:2*NSPS-1)+dphi_peak*itone(1)*pulse(NSPS+1:3*NSPS)
dphi(NSYM*NSPS:(NSYM+2)*NSPS-1)=dphi(NSYM*NSPS:(NSYM+2)*NSPS-1)+dphi_peak*itone(NSYM)*pulse(1:2*NSPS)
wave=0.
phi=0.d0
f0=750.0d0
dphi=dphi+twopi*f0*dt
k=0
do j=1,NSPS*(NSYM+2)-1
k=k+1
wave(k)=sin(phi)
phi=phi+dphi(j)
enddo
! Add raised cosine ramps at the beginning and end of the waveform.
! Since the modulator expects an integral number of symbols, dummy
! symbols are added to the beginning and end of the waveform to
! hold the ramps. All but nramp of the samples in each dummy
! symbol will be zero.
nramp=NSPS/BT
wave(1:NSPS-nramp)=0.0
wave(NSPS-nramp+1:NSPS)=wave(NSPS-nramp+1:NSPS) * &
(1.0-cos(twopi*(/(i,i=0,nramp-1)/)/(2.0*nramp)))/2.0
k1=(NSYM+1)*NSPS+1
wave(k1:k1+nramp-1)=wave(k1:k1+nramp-1) * &
(1.0+cos(twopi*(/(i,i=0,nramp-1)/)/(2.0*nramp)))/2.0
wave(k1+nramp:NPTS)=0.0
999 return
end subroutine sfox_wave_gfsk

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -178,7 +178,7 @@ extern "C" {
void foxgen_(bool* bSuperFox, char const * fname, FCL len);
void sfox_wave_(char const * fname, FCL len);
void sfox_wave_gfsk_(char const * fname, FCL len);
void plotsave_(float swide[], int* m_w , int* m_h1, int* irow);
@ -4172,7 +4172,7 @@ void MainWindow::readFromStdout() //readFromStdout
verified = true;
ui->labDXped->setStyleSheet("QLabel {background-color: #00ff00; color: black;}");
} else {
verified = false;
if (decodedtext0.mid(5,2).contains("00") or decodedtext0.mid(5,2).contains("30")) verified = false;
}
if ((!verified && ui->labDXped->isVisible()) or ui->labDXped->text()!="Super Hound")
ui->labDXped->setStyleSheet("QLabel {background-color: red; color: white;}");
@ -11021,5 +11021,5 @@ void MainWindow::sfox_tx()
p2.start(QDir::toNativeSeparators(m_appDir)+QDir::separator()+"sftx", args);
p2.waitForFinished();
auto fname2 {QDir::toNativeSeparators(m_config.writeable_data_dir().absoluteFilePath("sfox_2.dat")).toLocal8Bit()};
sfox_wave_(fname2.constData(), (FCL)fname2.size());
sfox_wave_gfsk_(fname2.constData(), (FCL)fname2.size());
}

View File

@ -50,7 +50,7 @@
#define NUM_MSK144_SYMBOLS 144 //s8 + d48 + s8 + d80
#define NUM_Q65_SYMBOLS 85 //63 data + 22 sync
#define NUM_FT8_SYMBOLS 79
#define NUM_SUPERFOX_SYMBOLS 151
#define NUM_SUPERFOX_SYMBOLS 153 //24 sync + 127 data + 2 ramp up/down
#define NUM_FT4_SYMBOLS 105
#define NUM_FST4_SYMBOLS 160 //240/2 data + 5*8 sync
#define NUM_CW_SYMBOLS 250