mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-22 04:11:16 -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)
|
||||
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)
|
||||
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
|
||||
fully automated QSOs.
|
||||
|
||||
[[CONTEST_MSGS]]
|
||||
=== 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
|
||||
*ARRL Field Day* and the *ARRL RTTY Roundup*. The decoders recognize
|
||||
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
|
||||
G4ABC PA9XYZ JO22
|
||||
PA9XYZ 570123 IO91NP
|
||||
G4ABC R 580071 JO22DB
|
||||
<PA9XYZ> <G4ABC> 570123 IO91NP
|
||||
<G4ABC> <PA9XYZ> R 580071 JO22DB
|
||||
PA9XYZ G4ABC RR73
|
||||
|
||||
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*
|
||||
|
||||
CQ FD K1ABC FN42
|
||||
|
@ -1,15 +1,73 @@
|
||||
=== New in Version {VERSION}
|
||||
|
||||
The most important feature added to _WSJT-X_ since Version 2.0.1 is
|
||||
the new *FT4 protocol*, designed especially for radio contesting. It
|
||||
has T/R sequence length 7.5 s, bandwidth 80 Hz, and threshold
|
||||
sensitivity -17.5 dB. Version 2.1.0 also has improvements to FT8
|
||||
waveform generation, waterfall and spectrum display, contest logging,
|
||||
rig control, the user interface, keyboard shortcuts, UDP messaging for
|
||||
inter-program communication, and accessibility, as well as a number of
|
||||
more minor enhancements and bug fixes. We now provide a separate
|
||||
installation package for 64-bit Windows Vista and later, offering
|
||||
significant improvements in decoding speed.
|
||||
*Improvements to decoders*
|
||||
|
||||
*FT4:* Corrected bugs that prevented AP (_a priori_) decoding and/or
|
||||
multi-pass decoding in some circumstances. Improved and extended the
|
||||
algorithm for AP decoding.
|
||||
|
||||
*FT8:* Decoding is now spread over three intervals. The first starts
|
||||
11.8 s into an Rx sequence and typically yields around 85% of the
|
||||
possible decodes, so you see most decodes much earlier than before. A
|
||||
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
|
||||
|
||||
@ -34,6 +92,5 @@ your interests known to the development team. The project's
|
||||
source-code repository can be found at {devrepo}, and communication
|
||||
among the developers takes place on the email reflector {devmail}.
|
||||
Bug reports and suggestions for new features, improvements to the
|
||||
_WSJT-X_ User Guide, etc., may also be sent to the {wsjt_yahoo_group}
|
||||
email reflector. You must join the relevant group before posting to
|
||||
either email list.
|
||||
_WSJT-X_ User Guide, etc., may be sent there as well. You must join
|
||||
the group before posting to the email list.
|
||||
|
@ -1,6 +1,5 @@
|
||||
_WSJT-X_ v{VERSION_MAJOR}.{VERSION_MINOR} supports a number of
|
||||
features designed for use on the VHF and higher bands. These features
|
||||
include:
|
||||
_WSJT-X_ supports a number of features designed for use on the VHF and
|
||||
higher bands. These features include:
|
||||
|
||||
- *FT8*, a mode designed for making fast QSOs with weak, fading
|
||||
signals
|
||||
@ -155,6 +154,7 @@ QSO using submode JT4F.
|
||||
|
||||
image::JT4F.png[align="center",alt="JT4F"]
|
||||
|
||||
[[VHF_JT65]]
|
||||
=== JT65
|
||||
|
||||
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
|
||||
enddo
|
||||
10 ncalls=j
|
||||
if(ncalls.lt.10) then
|
||||
write(*,1010) ncalls
|
||||
1010 format('CALL3.TXT very short (N =',i2,') or missing?')
|
||||
endif
|
||||
close(23)
|
||||
|
||||
! 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
|
||||
enddo
|
||||
|
||||
!### Just in case ???
|
||||
! rewind 77
|
||||
! write(77,*) u1,u2,ipk,ipk2
|
||||
! call flush(77)
|
||||
!###
|
||||
|
||||
decoded=' '
|
||||
bias=max(1.12*u2,0.35)
|
||||
if(nadd.ge.4) bias=max(1.08*u2,0.45)
|
||||
if(nadd.ge.8) bias=max(1.04*u2,0.60)
|
||||
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
|
||||
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
|
||||
freq=i*df
|
||||
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(i.ne.ipk .or. ccfmax.lt.thresh0) cycle
|
||||
itry=1
|
||||
|
@ -4591,17 +4591,22 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
||||
|| (firstcall == "DE")) {
|
||||
|
||||
QString w2;
|
||||
if(w.size()>=3) w2=w.at(2);
|
||||
QString w34;
|
||||
if(w.size()>=4) w34=w.at(3);
|
||||
int nw=w.size();
|
||||
if(nw>=3) w2=w.at(2);
|
||||
int nrpt=w2.toInt();
|
||||
if(w2=="R") {
|
||||
nrpt=w34.toInt();
|
||||
w34=w.at(4);
|
||||
QString w34;
|
||||
if(nw>=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);
|
||||
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);
|
||||
@ -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?"));
|
||||
}
|
||||
|
||||
n=w34.toInt();
|
||||
bool bRTTY = (n>=529 and n<=599);
|
||||
|
||||
if(bRTTY and SpecOp::RTTY != m_config.special_op_id()) {
|
||||
// ### Should be in 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(2).contains(qso_partner_base_call) or m_bDoubleClicked
|
||||
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(SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::WW_DIGI==m_config.special_op_id()){
|
||||
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()) {
|
||||
|
||||
if(nrpt==0) {
|
||||
gen_msg=setTxMsg(2);
|
||||
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) {
|
||||
gen_msg=setTxMsg(3);
|
||||
m_QSOProgress=ROGER_REPORT;
|
||||
int n=t.size();
|
||||
int nRpt=t[n-2].toInt();
|
||||
if(nRpt>=529 and nRpt<=599) m_xRcvd=t[n-2] + " " + t[n-1];
|
||||
if(w2=="R") {
|
||||
gen_msg=setTxMsg(4);
|
||||
m_QSOProgress=ROGERS;
|
||||
} else {
|
||||
gen_msg=setTxMsg(3);
|
||||
m_QSOProgress=ROGER_REPORT;
|
||||
}
|
||||
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) {
|
||||
if(t0=="R") {
|
||||
gen_msg=setTxMsg(4);
|
||||
|
@ -330,7 +330,8 @@ void CPlotter::DrawOverlay() //DrawOverlay()
|
||||
|
||||
double df = m_binsPerPixel*m_fftBinWidth;
|
||||
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
|
||||
QPainter painter(&m_OverlayPixmap);
|
||||
painter.setBackground (palette ().brush (backgroundRole ()));
|
||||
|
Loading…
Reference in New Issue
Block a user