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

This commit is contained in:
Steven Franke 2020-05-02 08:10:42 -05:00
commit 68efcca51d
9 changed files with 150 additions and 50 deletions

View File

@ -1306,6 +1306,9 @@ target_link_libraries (jt4sim wsjt_fort wsjt_cxx)
add_executable (jt65sim lib/jt65sim.f90 wsjtx.rc) add_executable (jt65sim lib/jt65sim.f90 wsjtx.rc)
target_link_libraries (jt65sim wsjt_fort wsjt_cxx) target_link_libraries (jt65sim wsjt_fort wsjt_cxx)
add_executable (sumsim lib/sumsim.f90 wsjtx.rc)
target_link_libraries (sumsim wsjt_fort wsjt_cxx)
add_executable (qra64sim lib/qra/qra64/qra64sim.f90 wsjtx.rc) add_executable (qra64sim lib/qra/qra64/qra64sim.f90 wsjtx.rc)
target_link_libraries (qra64sim wsjt_fort wsjt_cxx) target_link_libraries (qra64sim wsjt_fort wsjt_cxx)

View File

@ -79,9 +79,10 @@ NOTE: When *Auto-Seq* is enabled the program de-activates *Enable Tx*
at the end of each QSO. It is not intended that _WSJT-X_ should make at the end of each QSO. It is not intended that _WSJT-X_ should make
fully automated QSOs. fully automated QSOs.
[[CONTEST_MSGS]]
=== Contest Messages === Contest Messages
The new FT4, FT8, and MSK144 protocols support special messages optimized The FT4, FT8, and MSK144 protocols support special messages optimized
for *NA VHF* and *EU VHF* contests. FT8 also supports messages for for *NA VHF* and *EU VHF* contests. FT8 also supports messages for
*ARRL Field Day* and the *ARRL RTTY Roundup*. The decoders recognize *ARRL Field Day* and the *ARRL RTTY Roundup*. The decoders recognize
and decode these messages at any time. Configure the program to and decode these messages at any time. Configure the program to
@ -105,12 +106,17 @@ place of RRR, and the final 73 is optional.
CQ TEST G4ABC IO91 CQ TEST G4ABC IO91
G4ABC PA9XYZ JO22 G4ABC PA9XYZ JO22
PA9XYZ 570123 IO91NP <PA9XYZ> <G4ABC> 570123 IO91NP
G4ABC R 580071 JO22DB <G4ABC> <PA9XYZ> R 580071 JO22DB
PA9XYZ G4ABC RR73 PA9XYZ G4ABC RR73
Either callsign (or both) may have /P appended. Either callsign (or both) may have /P appended.
IMPORTANT: Messages conveying signal reports, QSO serial numbers, and
6-character locators have been changed in _WSJT-X v2.2_ and are *NOT*
compatible with the formats used in earlier program versions. Be sure
to upgrade _WSJT-X_ if you will use *EU VHF Contest* messages.
*ARRL Field Day* *ARRL Field Day*
CQ FD K1ABC FN42 CQ FD K1ABC FN42

View File

@ -1,15 +1,73 @@
=== New in Version {VERSION} === New in Version {VERSION}
The most important feature added to _WSJT-X_ since Version 2.0.1 is *Improvements to decoders*
the new *FT4 protocol*, designed especially for radio contesting. It
has T/R sequence length 7.5 s, bandwidth 80 Hz, and threshold *FT4:* Corrected bugs that prevented AP (_a priori_) decoding and/or
sensitivity -17.5 dB. Version 2.1.0 also has improvements to FT8 multi-pass decoding in some circumstances. Improved and extended the
waveform generation, waterfall and spectrum display, contest logging, algorithm for AP decoding.
rig control, the user interface, keyboard shortcuts, UDP messaging for
inter-program communication, and accessibility, as well as a number of *FT8:* Decoding is now spread over three intervals. The first starts
more minor enhancements and bug fixes. We now provide a separate 11.8 s into an Rx sequence and typically yields around 85% of the
installation package for 64-bit Windows Vista and later, offering possible decodes, so you see most decodes much earlier than before. A
significant improvements in decoding speed. second processing step starts at 13.5 s, and the final one at 14.7 s.
Overall decoding yield on crowded bands is improved by 10% or more.
Systems with receive latency greater than 0.2 s will see smaller
improvements, but will still see many decodes earlier than before.
SNR estimates no longer saturate at +20 dB, and large signals in the
passband no longer cause the SNR of weaker signals to be biased low.
Times written to cumulative journal file ALL.TXT are now correct even
when the decode occurs after the T/R sequence boundary. In FT8
DXpedition Mode, AP decoding is now implemented for Hounds when the
Fox has a compound callsign.
*JT4:* Formatting and display of averaged and Deep Search decodes has
been cleaned up and made consistent with other modes used for EME and
extreme weak-signal work on microwave bands.
*JT65:* Many improvements have been made for averaged and Deep Search
decodes, and their display to the user. For details see <<VHF_JT65,JT65>>
in the <<VHF_AND_UP,VHF+ Features>> section of this guide.
*WSPR:* Significant improvements have been made to the WSPR decoder's
sensitivity, its ability to cope with many signals in a crowded
sub-band, and its rate of undetected false decodes. We now use up to
three decoding passes. Passes 1 and 2 use noncoherent demodulation of
single symbols and allow for frequency drifts up to ±4 Hz in a
transmission. Pass 3 assumes no drift and does coherent block
detection of up to three symbols. It also applies bit-by-bit
normalization of the single-symbol bit metrics, a technique that has
proven helpful for signals corrupted by artifacts of the subtraction
of stronger signals and also for LF/MF signals heavily contaminated by
lightning transients. With these improvements the number of decodes
in a crowded WSPR sub-band typically increases by 10 to 15%.
*New message format:* When *EU VHF Contest* is selected, the Tx2 and
Tx3 messages -- those conveying signal report, serial number, and
6-character locator -- now use hashcodes for both callsigns . This
change is *not* backward compatible with earlier versions of _WSJT-X_, so
all users of *EU VHF Contest* messages should be sure to upgrade to
versiion 2.2.0. See <<CONTEST_MSGS,Contest Messages>> for details.
*Minor enhancements and bug fixes*
- *Save None* now writes no .wav files to disk, even temporarily.
- An explicit entry for *WW Digi Contest* has been added to *Special
operating activities* on the *Settings | Advanced* tab.
- The contest mode FT4 now always uses RR73 for the Tx4 message.
- *Keyboard shortcuts* have been added as an aid to accessibility:
*Alt+R* sets Tx4 message to RR73, *Ctrl+R* sets it to RRR.
- The *Status bar* now displays the number of decodes found in the
most recent Rx sequence.
- As an aid for partial color-blindness, the "`inverted goal posts`"
marking Rx frequency on the Wide Graph's frequency scale are now in a
darker shade of green.
=== Documentation Conventions === Documentation Conventions
@ -34,6 +92,5 @@ your interests known to the development team. The project's
source-code repository can be found at {devrepo}, and communication source-code repository can be found at {devrepo}, and communication
among the developers takes place on the email reflector {devmail}. among the developers takes place on the email reflector {devmail}.
Bug reports and suggestions for new features, improvements to the Bug reports and suggestions for new features, improvements to the
_WSJT-X_ User Guide, etc., may also be sent to the {wsjt_yahoo_group} _WSJT-X_ User Guide, etc., may be sent there as well. You must join
email reflector. You must join the relevant group before posting to the group before posting to the email list.
either email list.

View File

@ -1,6 +1,5 @@
_WSJT-X_ v{VERSION_MAJOR}.{VERSION_MINOR} supports a number of _WSJT-X_ supports a number of features designed for use on the VHF and
features designed for use on the VHF and higher bands. These features higher bands. These features include:
include:
- *FT8*, a mode designed for making fast QSOs with weak, fading - *FT8*, a mode designed for making fast QSOs with weak, fading
signals signals
@ -155,6 +154,7 @@ QSO using submode JT4F.
image::JT4F.png[align="center",alt="JT4F"] image::JT4F.png[align="center",alt="JT4F"]
[[VHF_JT65]]
=== JT65 === JT65
In many ways JT65 operation on VHF and higher bands is similar to HF In many ways JT65 operation on VHF and higher bands is similar to HF

View File

@ -62,10 +62,6 @@ subroutine hint65(s3,mrs,mrs2,nadd,nflip,mycall,hiscall,hisgrid,qual,decoded)
grid2(j)=grid grid2(j)=grid
enddo enddo
10 ncalls=j 10 ncalls=j
if(ncalls.lt.10) then
write(*,1010) ncalls
1010 format('CALL3.TXT very short (N =',i2,') or missing?')
endif
close(23) close(23)
! NB: generation of test messages is not yet complete! ! NB: generation of test messages is not yet complete!
@ -146,19 +142,11 @@ subroutine hint65(s3,mrs,mrs2,nadd,nflip,mycall,hiscall,hisgrid,qual,decoded)
endif endif
enddo enddo
!### Just in case ???
! rewind 77
! write(77,*) u1,u2,ipk,ipk2
! call flush(77)
!###
decoded=' ' decoded=' '
bias=max(1.12*u2,0.35) bias=max(1.12*u2,0.35)
if(nadd.ge.4) bias=max(1.08*u2,0.45) if(nadd.ge.4) bias=max(1.08*u2,0.45)
if(nadd.ge.8) bias=max(1.04*u2,0.60) if(nadd.ge.8) bias=max(1.04*u2,0.60)
qual=100.0*(u1-bias) qual=100.0*(u1-bias)
! write(*,3301) u1,u2,u1/u2,bias,qual,nadd,ipk,ipk2
!3301 format(5f6.2,i3,2i6)
qmin=1.0 qmin=1.0
if(qual.ge.qmin) decoded=msg0(ipk) if(qual.ge.qmin) decoded=msg0(ipk)

41
lib/sumsim.f90 Normal file
View File

@ -0,0 +1,41 @@
program sumsim
! Sum a number of *.wav files so that multiple signals are present
use wavhdr
parameter (NMAX=60*12000)
type(hdr) h !Header for the .wav file
integer*2 iwave(NMAX) !i*2 data
real wave(NMAX) !r*4 data
character*80 fname
nargs=iargc()
if(nargs.lt.1) then
print*,'Usage: sumsim file1 [file2, ...]'
go to 999
endif
wave=0.
do ifile=1,nargs
call getarg(ifile,fname)
open(10,file=trim(fname),status='old',access='stream')
read(10) h
npts=h%ndata/2
nfsample=h%nsamrate
read(10) iwave(1:npts)
n=len(trim(fname))
wave(1:npts)=wave(1:npts)+iwave(1:npts)
rms=sqrt(dot_product(wave(1:npts),wave(1:npts))/npts)
write(*,1000) ifile,npts,float(npts)/nfsample,rms,fname(n-14:n)
1000 format(i3,i8,f6.1,f10.3,2x,a15)
close(10)
enddo
fac=1.0/sqrt(float(nargs))
iwave(1:npts)=nint(fac*wave(1:npts))
open(12,file='000000_0000.wav',access='stream',status='unknown')
write(12) h,iwave(1:npts)
close(12)
999 end program sumsim

View File

@ -55,8 +55,6 @@ subroutine sync65(nfa,nfb,ntol,nqsym,ca,ncand,nrobust,bVHF)
do i=ia,ib do i=ia,ib
freq=i*df freq=i*df
itry=0 itry=0
! if(naggressive.gt.0 .and. ntol.lt.1000 .and. ccfmax.ge.thresh0) then
! if(naggressive.gt.0 .and. ccfmax.ge.thresh0) then
if(bVHF) then if(bVHF) then
if(i.ne.ipk .or. ccfmax.lt.thresh0) cycle if(i.ne.ipk .or. ccfmax.lt.thresh0) cycle
itry=1 itry=1

View File

@ -4591,17 +4591,22 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|| (firstcall == "DE")) { || (firstcall == "DE")) {
QString w2; QString w2;
if(w.size()>=3) w2=w.at(2); int nw=w.size();
QString w34; if(nw>=3) w2=w.at(2);
if(w.size()>=4) w34=w.at(3);
int nrpt=w2.toInt(); int nrpt=w2.toInt();
if(w2=="R") { QString w34;
nrpt=w34.toInt(); if(nw>=4) {
w34=w.at(4); // w34=w.at(nw-2);
nrpt=w.at(nw-2).toInt();
w34=w.at(nw-1);
} }
bool bRTTY = (nrpt>=529 and nrpt<=599);
bool bEU_VHF_w2=(nrpt>=520001 and nrpt<=594000); bool bEU_VHF_w2=(nrpt>=520001 and nrpt<=594000);
if(bEU_VHF_w2 and SpecOp::EU_VHF!=m_config.special_op_id()) { if(bEU_VHF_w2 and SpecOp::EU_VHF!=m_config.special_op_id()) {
MessageBox::information_message (this, tr ("Should you switch to EU VHF Contest mode?")); auto const& msg = tr("Should you switch to EU VHF Contest mode?\n\n"
"To do so, check 'Special operating activity' and\n"
"'EU VHF Contest' on the Settings | Advanced tab.");
MessageBox::information_message (this, msg);
} }
QStringList t=message.string().split(' ', QString::SkipEmptyParts); QStringList t=message.string().split(' ', QString::SkipEmptyParts);
@ -4620,9 +4625,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
MessageBox::information_message (this, tr ("Should you switch to ARRL Field Day mode?")); MessageBox::information_message (this, tr ("Should you switch to ARRL Field Day mode?"));
} }
n=w34.toInt();
bool bRTTY = (n>=529 and n<=599);
if(bRTTY and SpecOp::RTTY != m_config.special_op_id()) { if(bRTTY and SpecOp::RTTY != m_config.special_op_id()) {
// ### Should be in RTTY contest mode ??? ### // ### Should be in RTTY contest mode ??? ###
MessageBox::information_message (this, tr ("Should you switch to RTTY contest mode?")); MessageBox::information_message (this, tr ("Should you switch to RTTY contest mode?"));
@ -4638,7 +4640,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
&& (message_words.at(1).contains(m_baseCall) || "DE" == message_words.at(1)) && (message_words.at(1).contains(m_baseCall) || "DE" == message_words.at(1))
&& (message_words.at(2).contains(qso_partner_base_call) or m_bDoubleClicked && (message_words.at(2).contains(qso_partner_base_call) or m_bDoubleClicked
or bEU_VHF_w2 or (m_QSOProgress==CALLING))) { or bEU_VHF_w2 or (m_QSOProgress==CALLING))) {
if(message_words.at(3).contains(grid_regexp) and SpecOp::EU_VHF!=m_config.special_op_id()) { if(message_words.at(3).contains(grid_regexp) and SpecOp::EU_VHF!=m_config.special_op_id()) {
if(SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::WW_DIGI==m_config.special_op_id()){ if(SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::WW_DIGI==m_config.special_op_id()){
gen_msg=setTxMsg(3); gen_msg=setTxMsg(3);
@ -4653,6 +4654,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
} }
} }
} else if(w34.contains(grid_regexp) and SpecOp::EU_VHF==m_config.special_op_id()) { } else if(w34.contains(grid_regexp) and SpecOp::EU_VHF==m_config.special_op_id()) {
if(nrpt==0) { if(nrpt==0) {
gen_msg=setTxMsg(2); gen_msg=setTxMsg(2);
m_QSOProgress=REPORT; m_QSOProgress=REPORT;
@ -4666,11 +4668,15 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
} }
} }
} else if(SpecOp::RTTY == m_config.special_op_id() and bRTTY) { } else if(SpecOp::RTTY == m_config.special_op_id() and bRTTY) {
if(w2=="R") {
gen_msg=setTxMsg(4);
m_QSOProgress=ROGERS;
} else {
gen_msg=setTxMsg(3); gen_msg=setTxMsg(3);
m_QSOProgress=ROGER_REPORT; m_QSOProgress=ROGER_REPORT;
int n=t.size(); }
int nRpt=t[n-2].toInt(); m_xRcvd=t[n-2] + " " + t[n-1];
if(nRpt>=529 and nRpt<=599) m_xRcvd=t[n-2] + " " + t[n-1]; // qDebug() << "bb" << w2 << w34 << t0 << m_xRcvd;
} else if(SpecOp::FIELD_DAY==m_config.special_op_id() and bFieldDay_msg) { } else if(SpecOp::FIELD_DAY==m_config.special_op_id() and bFieldDay_msg) {
if(t0=="R") { if(t0=="R") {
gen_msg=setTxMsg(4); gen_msg=setTxMsg(4);

View File

@ -330,7 +330,8 @@ void CPlotter::DrawOverlay() //DrawOverlay()
double df = m_binsPerPixel*m_fftBinWidth; double df = m_binsPerPixel*m_fftBinWidth;
QPen penOrange(QColor(255,165,0),3); QPen penOrange(QColor(255,165,0),3);
QPen penGreen(Qt::green, 3); //Mark Tol range with green line // QPen penGreen(Qt::green, 3); //Mark Tol range with green line
QPen penGreen(QColor(15,153,105), 3); //Mark Tol range or BW with dark green line
QPen penRed(Qt::red, 3); //Mark Tx freq with red QPen penRed(Qt::red, 3); //Mark Tx freq with red
QPainter painter(&m_OverlayPixmap); QPainter painter(&m_OverlayPixmap);
painter.setBackground (palette ().brush (backgroundRole ())); painter.setBackground (palette ().brush (backgroundRole ()));