Olivia MFSK
From Wikipedia, the free encyclopedia
Olivia MFSK is an amateur radio teletype protocol designed to work in difficult (low signal-to-noise ratio plus multipath propagation) conditions on shortwave bands. The signal can still be properly copied when it is buried 10 dB below the noise floor (i.e. when the amplitude of the noise is slightly over 3 times that of the signal).
Contents |
[edit] History
The protocol was developed at the end of 2003 by Pawel Jalocha. The first on-the-air tests were performed by two radio amateurs, Fred OH/DK4ZC and Les VK2DSG on the Europe-Australia path in the 20-meter amateur band. The tests proved that the protocol works well and can allow regular intercontinental radio contacts with as little as one watt RF power. Since 2005 Olivia has become a standard for digital data transfer under white noise, fading and multipath, flutter (polar path) and auroral conditions.
[edit] The technical details
Being a teletype protocol, Olivia transmits a stream of ASCII (7-bit) characters. The characters are sent in blocks of 5. Each block takes 2 seconds to transmit, thus the effective data rate is 2.5 character/second or 150 characters/minute. The transmission bandwidth is 1000 Hz and the baud rate is 31.25 MFSK tones/second. To accommodate for different conditions and for the purpose of experimentation the bandwidth and the baud rate can be changed.
The Olivia transmission system is constructed of two layers: the lower, modulation and forward error correcting (FEC) code layer is a classical multiple frequency-shift keying (MFSK) while the higher layer is a forward error correcting code based on Walsh functions.
Both layers are of similar nature: they constitute a "1-out-of-N" FEC code. For the first layer the orthogonal functions are (co)sine functions, with 32 different frequencies (tones). At a given time only one of those 32 tones is being sent. The demodulator measures the amplitudes of all the 32 possible tones (using a Fourier transform ) and (knowing that only one of those 32 could have been sent) picks up the tone with the highest amplitude. See the equations and graphs behind the MFSK layer here.
For the second FEC layer: every ASCII character is encoded as one of 64 possible Walsh functions (or vectors of a Hadamard matrix). The receiver again measures the amplitudes for all 64 vectors (here comes the Hadamard Transform) and chooses the greatest. See the algorithms and more details here.
For optimal performance the actual demodulators work with soft decisions and the final (hard) decision to decode a character is taken only at the second layer. Thus the first layer demodulator actually produces soft decisions for each of the 5 bits associated to an MFSK tone instead of simply picking up the highest tone to produce hard decisions for those 5 bits.
In order to avoid simple transmitted patterns (like a constant tone) and to minimize the chance for a false lock at the synchronizer the characters encoded into the Walsh function pass through a scrambler and interleaver. This stage simply shifts and XORs bits with predefined scrambling vectors and so it does not improve the performance where the white (uncorrelated) noise is concerned, but the resulting pattern gains certain distimct characteristics which are of great help to the synchronizer.
The receiver synchronizes automatically by searching through possible time and frequency offsets for a matching pattern. The frequency search range is normally +/- 100 Hz but can be as high as +/- 500 Hz if the user wishes so.
[edit] The MFSK layer
The default mode sends 32 tones within the 1000 Hz audio bandwidth and the tones are spaced by 1000 Hz/32 = 31.25 Hz. The tones are shaped to minimize the amount of energy sent outside the nominal bandwidth. The shape applied is plotted as the red trace on this graph. The blue trace represents the more classical Hann window, which was used in the first version of the system.
The exact shape formula is:
+1.0000000000 +1.1913785723*cos(x) -0.0793018558*cos(2x) -0.2171442026*cos(3x) -0.0014526076*cos(4x)
where x ranges from – π to π.
The coefficients represent the symbol shape in the frequency domain and were calculated by a minimization procedure which sought to make the smallest crosstalk and the smallest frequency spillover.
This graph presents the 500 Hz MFSK tone (red trace) shaped according to the above formula. The blue trace is the envelope.
The tones are sent at 31.25 baud or every 32 milliseconds. The phase is not preserved from one tone to the next: instead a random shift of ±90 degrees is introduced in order not to transmit a pure tone when the same symbol is repeatedly sent. Because the symbols are smoothly shaped there is no need to keep the phase constant, which normally is the case when no (e.g. square) shaping is used.
The modulator uses the Gray code to encode 5-bit symbols into the tone numbers.
The waveform generator is based on the 8000 Hz sampling rate. The tones are spaced by 256 samples in time and the window that shapes them is 512 samples long. The demodulator is based on the FFT with the size of 512 points. The tone spacing in frequency is 8000 Hz/256 = 31.25 Hz and the demodulator FFT has the resolution of 8000 Hz/512 = 15.625 Hz thus half of the tone separation.
To adapt the system to different propagation conditions, the number of tones and the bandwidth can be changed and the time and frequency parameters are proportionally scaled. The number of tones can be 2, 4, 8, 16, 32, 64, 128 or 256. The bandwidth can be 125, 250, 500, 1000 or 2000 Hz.
[edit] The Walsh functions FEC layer
The modulation layer of the Olivia transmission system sends at a time one out of 32 tones (the default mode). Each tone constitutes thus a symbol that carries 5 bits of information. For the FEC code, 64 symbols are taken to form a block. Within each block one bit out of every symbol is taken and it forms a 64-bit vector coded as a Walsh function. Every 64-bit vector represents a 7-bit ASCII character, thus each block represents 5 ASCII characters.
This way, if one symbol (tone) becomes corrupted by the noise, only one bit of every 64-bit vector becomes corrupt, thus the transmission errors are spread uniformly across the characters within a block.
The two layers (MFSK+Walsh function) of the FEC code can be treated as a two dimensional code: the first dimension is formed along the frequency axis by the MFSK itself while the second dimension is formed along the time axis by the Walsh functions. The two dimensional arrangement was made with the idea in mind to solve such arranged FEC code with an iterative algorithm, however, no such algorithm was established to date.
The scrambling and simple bit interleaving is applied to make the generated symbol patterns appear more random and with minimal self-correlation: this avoids false locks at the receiver:
Bit interleaving: The Walsh function for the first character in a block is constructed from the 1st bit of the 1st symbol, the 2nd bit of the 2nd symbol, and so on. The 2nd Walsh function is constructed from the 2nd bit of the 1st symbol, the 3rd bit of the 2nd symbol, and so on.
Scrambling: The Walsh functions are scrambled with a pseudo-random sequence 0xE257E6D0291574EC. The Walsh function for the 1st character in a block is scrambled with the scrambling sequence, the 2nd Walsh function is scrambled with the sequence rotated right by 13 bits, the 3rd with the sequence rotated by 26 bits, and so on.