The Olivia transmission system is constructed of two layers: the lower, modulation layer is an (almost) classical Multi-Frequency Shift Keying (MFSK) and the higher layer is a Forward Error-Correcting (FEC) code based on Walsh functions.
The modulation layer: MFSK
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 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 same symbol is repeatedly sent. Because the symbols are smoothly shaped we do not need to keep the phase continues, which normally is the case when no (e.g. square) shaping were 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.
The error-correcting layer: FEC based on Walsh functions
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.