JT9 is a mode designed for amateur QSOs and beacon-like transmissions
at MF and LF.  The mode uses the same 72-bit user messages as JT65.
Convolutional error-control coding (ECC) uses constraint length K=32,
rate r=1/2, and a zero tail, which leads to an encoded message length
of (72+31)*2 = 206 bits.  Modulation is 9-FSK: 8 tones for data, one
for synchronization.  Sixteen symbol intervals are used for
synchronization, so a transmission requires a total of 207/3 + 16 = 85
channel symbols.  Symbol durations tsym are approximately
(TRperiod-10)/85, where TRperiod is the T/R sequence length in
seconds.  Exact symbol lengths are chosen so that nsps, the number of
samples per symbol (at 12000 samples per second) is a number with no
prime factor greater than 7.  This choice makes for efficient FFTs.
Tone spacing of the 9-FSK modulation is df=1/tsym=12000/nsps, the same
as the keying rate.  The total occupied bandwidth is 9*df.

Parameters of five JT9 sub-modes are summarized in the following
table, along with S/N thresholds measured by simulation on an AWGN
(additive white Gaussian noise) channel.

-------------------------------------------------------------------------
Mode     nsps nsps2   df    tsym  BW    S/N*   Tdec  Tfree   Factors 
        12000   750  (Hz)   (s)  (Hz)   (dB)   (s)    (s)    of nsps
-------------------------------------------------------------------------
JT9-1    6912   432  1.736  0.58 15.6  -26.9   52.5   7.5   2^8 3^3
JT9-2   15360   960  0.781  1.28  7.0  -30.2  112.3   7.7   2^10 3 5
JT9-5   40960  2560  0.293  3.41  2.6  -34.4  293.6   6.4   2^13 5
JT9-10  82944  5184  0.145  6.91  1.3  -37.5  591.0   9.0   2^10 3^4
JT9-30 250880 15750  0.048 20.91  0.4  -42.3 1788.5  11.5   2^5 3^2 5^3 7
-------------------------------------------------------------------------
* Noise power measured in a 2500 Hz bandwidth.


Transmitting
------------
1. Source encode the structured message to 72 bits
2. Apply convolutional ECC (K=32, r=1/2) to yield (72+31)*2 = 206 bits
3. Interleave to scramble the bit order
4. Assemble 3-bit groups to make (206+1)/3 = 69 symbols
5. Gray-code the symbol values
6. Insert 16 sync symbols ==> 69+15=81 channel symbols, values 0-8


Receiving
---------
1.  Apply noise blanking with the timf2 method
2.  Filter to 500 Hz bandwidth and downsample (1/16) to 750 Hz (FIR
    filter with 61 taps).  Complex data to array c0 (max 1.35M)
3.  Compute symbol-length spectra at half-symbol steps.  Use for
    waterfall display s(15750) and save in ss(184,15750) and 
    savg(15750) for detecting sync vectors.
4.  At time Tdec, find sync vectors in ss(); get estimates of DF, DT
5.  Do full-length FFT, NFFT1=96*nsps2, zero-pad as required.
6.  For each candidate signal, do inverse FFT of length 1536.  This 
    yields 16 complex samples per symbol, and sync tone should be 
    close to zero frequency.
7.  Use afc65b method to get improved values of DF, DT.
8.  Tweak freq and time offset to 0.
9.  Compute 8-bin spectra of 69 data symbols: s2(8,69).  Re-order bins
    by removing Gray code.
10. Compute soft symbols for 206 bits.
11. Remove interleaving
12. Pack bits into bytes, send to Fano decoder
13. If Fano succeeds, remove source encoding and display user message.