TinyModem
Header-only software audio modem library
Loading...
Searching...
No Matches
tinymodem::OliviaCodec Class Reference

The forward error correction of Olivia and Contestia (as in fldigi): each character of a block of bitsPerSymbol() characters is a Walsh-Hadamard code word of 64 (Contestia: 32) bits, which is scrambled and spread diagonally over the 64 (32) symbols of the block. More...

#include <Olivia.h>

Public Member Functions

void begin (int bits_per_symbol, bool is_contestia)
bool isSkipped (uint8_t ch) const
void encodeBlock (const uint8_t *chars, uint8_t *symbols)
 Encodes bits characters into block_len symbols (binary, not Gray coded).
uint8_t decodeChar (const int8_t *soft, int b, float &peak, float &noise)
int blockLen () const

Static Public Member Functions

static uint8_t grayCode (uint8_t binary)
static uint8_t binaryCode (uint8_t gray)

Protected Member Functions

uint64_t scramblingCode () const
int shift () const
uint8_t encodeChar (uint8_t ch) const
uint8_t decodeChar (uint8_t ch) const

Static Protected Member Functions

template<class T>
static void fhtTransform (T *data, int len)
 fast Hadamard transform (fldigi FHT)
template<class T>
static void ifht (T *data, int len)
 inverse fast Hadamard transform (fldigi IFHT)

Protected Attributes

int bits = 5
int block_len = 64
bool contestia = false

Detailed Description

The forward error correction of Olivia and Contestia (as in fldigi): each character of a block of bitsPerSymbol() characters is a Walsh-Hadamard code word of 64 (Contestia: 32) bits, which is scrambled and spread diagonally over the 64 (32) symbols of the block.

Member Function Documentation

◆ begin()

void tinymodem::OliviaCodec::begin ( int bits_per_symbol,
bool is_contestia )
inline

◆ binaryCode()

uint8_t tinymodem::OliviaCodec::binaryCode ( uint8_t gray)
inlinestatic

◆ blockLen()

int tinymodem::OliviaCodec::blockLen ( ) const
inline

◆ decodeChar() [1/2]

uint8_t tinymodem::OliviaCodec::decodeChar ( const int8_t * soft,
int b,
float & peak,
float & noise )
inline

Decodes the character b from the soft bits of a block: soft[t * bits + k] is bit k of symbol t (positive = 0). Provides the correlation peak and the energy of the other correlations.

◆ decodeChar() [2/2]

uint8_t tinymodem::OliviaCodec::decodeChar ( uint8_t ch) const
inlineprotected

◆ encodeBlock()

void tinymodem::OliviaCodec::encodeBlock ( const uint8_t * chars,
uint8_t * symbols )
inline

Encodes bits characters into block_len symbols (binary, not Gray coded).

◆ encodeChar()

uint8_t tinymodem::OliviaCodec::encodeChar ( uint8_t ch) const
inlineprotected

◆ fhtTransform()

template<class T>
void tinymodem::OliviaCodec::fhtTransform ( T * data,
int len )
inlinestaticprotected

fast Hadamard transform (fldigi FHT)

◆ grayCode()

uint8_t tinymodem::OliviaCodec::grayCode ( uint8_t binary)
inlinestatic

◆ ifht()

template<class T>
void tinymodem::OliviaCodec::ifht ( T * data,
int len )
inlinestaticprotected

inverse fast Hadamard transform (fldigi IFHT)

◆ isSkipped()

bool tinymodem::OliviaCodec::isSkipped ( uint8_t ch) const
inline

true if the character is not transmitted (Contestia: '\r', which is replaced by '
')

◆ scramblingCode()

uint64_t tinymodem::OliviaCodec::scramblingCode ( ) const
inlineprotected

◆ shift()

int tinymodem::OliviaCodec::shift ( ) const
inlineprotected

Member Data Documentation

◆ bits

int tinymodem::OliviaCodec::bits = 5
protected

◆ block_len

int tinymodem::OliviaCodec::block_len = 64
protected

◆ contestia

bool tinymodem::OliviaCodec::contestia = false
protected

The documentation for this class was generated from the following file: