mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-15 16:42:12 -05:00
Merge branch 'develop' of bitbucket.org:k1jt/wsjtx into develop
This commit is contained in:
commit
68efcca51d
@ -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)
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
|
||||||
|
@ -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
|
||||||
|
@ -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
41
lib/sumsim.f90
Normal 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
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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 ()));
|
||||||
|
Loading…
Reference in New Issue
Block a user