From 49fe4846ae16ad894a0cb4d6bc338135d11315c2 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 28 Jan 2014 13:12:19 +0000 Subject: [PATCH] Yesterday, forgot to add tx-rx.adoc to SVN. Here it is. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3665 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- doc/source/tx-rx.adoc | 77 +++++++++++++++++++++++++++++++++++++++++++ mainwindow.cpp | 2 +- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 doc/source/tx-rx.adoc diff --git a/doc/source/tx-rx.adoc b/doc/source/tx-rx.adoc new file mode 100644 index 000000000..bd48f16cd --- /dev/null +++ b/doc/source/tx-rx.adoc @@ -0,0 +1,77 @@ +// 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. + +.Receiving and Decoding + +_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 +saved at intervals of 0.188 s, half the JT9 symbol length. As shown +in screen shots earlier in this guide, a JT9 signal appears in the +*Cumulative* spectrum as a nearly rectangular shape about 16 Hz wide. +Although there is no clearly visible ``sync tone'' like the one at the +low-frequency edge of a JT65 signal, by convention the nominal +frequency of a JT9 signal is taken to be that of the lowest tone, at +the left edge of the spectrum. + + insert annotated waterfall picture here? + +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 +twice: first at the selected Rx frequency, and then in the full +displayed frequency range (or in JT9+JT65 mode, the displayed range +above the blue *JT65 nnnn JT9* marker). 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. + +Each decoding pass can be described as a sequence of discrete blocks. +In the following list, blocks are labeled with the names of functional +procedures in the code. + +[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 + +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. diff --git a/mainwindow.cpp b/mainwindow.cpp index db013b8d1..5d81308d0 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,4 +1,4 @@ -//------------------------------------------------------------ MainWindow +//----------------------------------------------------------- MainWindow #include "mainwindow.h" #include "ui_mainwindow.h"