// Status=review .Algorithms and Source Code - For those wishing to study the program’s algorithms and source code, perhaps with an eye toward future improvements, the blocks are labeled here with the names of functional procedures in the code: .Block Steps [width="80%",cols="<2,60",options="header",valign="middle"] |======== |Block/Step|Functional Procedure |sync9:|Use sync symbols to find candidate JT9 signals in the specified frequency range. + Then, at the frequency of each plausible candidate |downsam9:|Mix, filter and down-sample 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 |======== :shannonfano: http://en.wikipedia.org/wiki/Shannon%E2%80%93Fano_coding[ Fano Algorithm] - With marginal or unrecognizable signals the sequential {shannonfano} can take exponentially long times to completion. - If the first step in the above sequence finds many seemingly worthy candidate signals, and if many of them turn out to be undecodable, the decoding loop could take a very long time. - For this reason the decode9 step is programmed to “time out” and report failure if it takes too long. - The choice Fast | Normal | Deepest on the Decode menu provides a three-step control of this timeout limit.