2014-01-28 08:12:19 -05:00
|
|
|
// Status=review
|
|
|
|
.Transmitting
|
|
|
|
|
|
|
|
Immediately before the start of a transmission _WSJT-X_ encodes a
|
|
|
|
user's message and computes the sequence of tones to be sent. The
|
|
|
|
transmitted audio waveform is then computed on-the-fly, using 16-bit
|
|
|
|
integer samples at a 48000 Hz rate. Digital samples are converted to
|
|
|
|
an analog waveform in the sound card or equivalent D/A interface.
|
|
|
|
|
2014-01-29 15:50:18 -05:00
|
|
|
.Receiving
|
2014-01-28 08:12:19 -05:00
|
|
|
|
|
|
|
_WSJT-X_ acquires 16-bit integer samples from the sound card at a 48000
|
|
|
|
Hz rate and immediately downsamples the stream to 12000 Hz. Spectra
|
|
|
|
from overlapping segments are computed for the waterfall display and
|
2014-01-29 15:50:18 -05:00
|
|
|
saved at intervals of 0.188 s, half the JT9 symbol length.
|
2014-01-28 08:12:19 -05:00
|
|
|
|
|
|
|
At the end of a reception sequence, about 50 seconds into the UTC
|
|
|
|
minute, received data samples are forwarded to the decoder. For
|
|
|
|
operator convenience the decoder goes through its full procedure
|
2014-01-29 15:50:18 -05:00
|
|
|
twice: first at the selected Rx frequency, and then over the full
|
|
|
|
displayed frequency range. Each decoding pass can be described as a
|
|
|
|
sequence of discrete blocks. These functional blocks are different
|
|
|
|
for the JT65 and JT9 modes.
|
|
|
|
|
|
|
|
.Decoding
|
2014-01-28 08:12:19 -05:00
|
|
|
|
2014-01-29 15:50:18 -05:00
|
|
|
The basic decoding algorithm for JT65 mode was described in the
|
|
|
|
{jt65protocol} paper. The following list summarizes the corresponding
|
|
|
|
algorithm for JT9 mode, with blocks labeled with the names of
|
|
|
|
functional procedures in the code.
|
2014-01-28 08:12:19 -05:00
|
|
|
|
|
|
|
[horizontal]
|
|
|
|
+sync9+:: Use sync symbols to find candidate JT9 signals
|
|
|
|
in the specified frequency range
|
|
|
|
|
|
|
|
Then, at the frequency of each plausible candidate:
|
|
|
|
|
|
|
|
[horizontal]
|
|
|
|
+downsam9+:: Mix, filter and downsample to 16 complex
|
|
|
|
samples/symbol
|
|
|
|
|
|
|
|
+peakdt9+:: Using sync symbols, time-align to start of JT9 symbol
|
|
|
|
sequence
|
|
|
|
|
|
|
|
+afc9+:: Measure frequency offset and any possible drift
|
|
|
|
|
|
|
|
+twkfreq+:: Remove frequency offset and drift
|
|
|
|
|
|
|
|
+symspec2+:: Compute 8-bin spectra for 69 information-carrying
|
|
|
|
symbols, using the time- and frequency-aligned data;
|
|
|
|
transform to yield 206 single-bit soft symbols
|
|
|
|
|
|
|
|
+interleave9+:: Remove single-bit symbol interleaving imposed at the
|
|
|
|
transmitter
|
|
|
|
|
|
|
|
+decode9+:: Retrieve a 72-bit user message using the sequential
|
|
|
|
Fano algorithm for convolutional codes
|
|
|
|
|
|
|
|
|
|
|
|
+unpackmsg+:: Unpack a human-readable message from the 72-bit
|
|
|
|
compressed format
|
|
|
|
|
2014-01-29 15:50:18 -05:00
|
|
|
Decoding of clean JT9 signals in a white-noise background starts to
|
|
|
|
fail below signal-to-noise ratio -25 dB and reaches 50% copy at -26
|
|
|
|
dB.
|
|
|
|
|
2014-01-28 08:12:19 -05:00
|
|
|
With marginal or unrecognizable signals the sequential decoding
|
|
|
|
algorithm can take exponentially long times. If the +sync9+ step in
|
|
|
|
the above sequence finds many seemingly worthy candidate signals, and
|
|
|
|
if many of them turn out to be undecodable the decoding loop can take
|
|
|
|
an inconveniently long time. For this reason the step labeled
|
|
|
|
+decode9+ is programmed to ``time out'' and report failure if it is
|
|
|
|
taking too long. The choices *Fast | Normal | Deepest* on the Decode
|
|
|
|
menu provide the user with a three-step adjustment of this timeout
|
|
|
|
limit.
|