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

FSK demodulator: PCM audio data is written to the decoder and the decoded data is written to the output that was defined with setOutput(). Supported input formats are 8, 16 or 32 bit signed integer samples with any number of channels (only config.channel is evaluated). The decoding is compatible with minimodem –tx. More...

#include <FSKDecoder.h>

Inheritance diagram for tinymodem::FSKDecoder:
Collaboration diagram for tinymodem::FSKDecoder:

Public Member Functions

 FSKDecoder ()=default
 FSKDecoder (Print &out)
ModemConfig defaultConfig ()
 Provides a default configuration for a 1200 baud Bell 202 modem.
void setAudioInfo (audio_tools::AudioInfo info) override
 Defines the format of the input audio data.
audio_tools::AudioInfo audioInfo () override
bool begin (ModemConfig config)
 Starts the processing with the indicated modem configuration.
bool begin () override
void end () override
 Processes the remaining samples and reports the end of the carrier.
void flush () override
 Processes all buffered samples (e.g. at the end of the input).
size_t write (const uint8_t *data, size_t len) override
 Provide PCM data to the decoder.
bool isCarrier () override
 true while a carrier is detected
bool isFinished () override
 true if the decoding was stopped (rx_one)
ModemConfig & config ()
const ModemConfig & activeConfig () const
 The active configuration with all derived values (e.g. frequencies).
float markFrequency ()
 Actual mark frequency (e.g. after the carrier auto detection).
 operator bool () override
Public Member Functions inherited from tinymodem::ModemDecoder
void setStatusOutput (Print &out)
 Defines the output for the ### CARRIER / ### NOCARRIER messages.
void setQuiet (bool quiet)
 Suppresses the status messages.
const char * mime () override

Protected Member Functions

void setupCodec ()
void resetState ()
int buildExpectBits (char *str, bool use_expect_bits, uint64_t expect_bits)
float noise ()
 uniform random value in the range -0.5 to 0.5
void addSample (float sample)
void applyAdvance ()
bool step (bool eof)
void reportCarrier ()
void reportNoCarrier ()
Protected Member Functions inherited from tinymodem::ModemDecoder
void status (const char *fmt,...)

Protected Attributes

ModemConfig cfg
ModemConfig active_cfg
bool is_active = false
bool is_finished = false
FSKDemodulator plan
AsciiCodec ascii
BaudotCodec baudot
BinaryCodec binary
CallerIDCodec callerid
UICCodec uic
DataCodec * p_codec = &ascii
PrintFilter print_filter
audio_tools::Vector< float > samplebuf
size_t samples_nvalid = 0
size_t process_threshold = 0
size_t advance = 0
size_t skip = 0
float nsamples_per_bit = 0
unsigned nsamples_overscan = 0
float frame_n_bits = 0
unsigned frame_nsamples = 0
char expect_data_string [MAX_EXPECT]
char expect_sync_string [MAX_EXPECT]
unsigned expect_n_bits = 0
unsigned expect_nsamples = 0
PcmInput input
uint32_t noise_seed = 1
bool carrier = false
int carrier_band = -1
float confidence_total = 0
float amplitude_total = 0
unsigned nframes_decoded = 0
size_t carrier_nsamples = 0
unsigned noconfidence = 0
float track_amplitude = 0.0f
float peak_confidence = 0.0f
Protected Attributes inherited from tinymodem::ModemDecoder
Print * p_status = nullptr
bool is_quiet = false

Static Protected Attributes

static constexpr int MAX_EXPECT = 80
static constexpr int FSK_ANALYZE_NSTEPS = 3
static constexpr int FSK_ANALYZE_NSTEPS_FINE = 8
static constexpr unsigned FSK_MAX_NOCONFIDENCE_BITS = 20
static constexpr float FRAME_OVERSCAN = 0.5f

Detailed Description

FSK demodulator: PCM audio data is written to the decoder and the decoded data is written to the output that was defined with setOutput(). Supported input formats are 8, 16 or 32 bit signed integer samples with any number of channels (only config.channel is evaluated). The decoding is compatible with minimodem –tx.

Status messages (### CARRIER and ### NOCARRIER) are written in the minimodem format to the Print defined with setStatusOutput().

Constructor & Destructor Documentation

◆ FSKDecoder() [1/2]

tinymodem::FSKDecoder::FSKDecoder ( )
default

◆ FSKDecoder() [2/2]

tinymodem::FSKDecoder::FSKDecoder ( Print & out)
inline

Member Function Documentation

◆ activeConfig()

const ModemConfig & tinymodem::FSKDecoder::activeConfig ( ) const
inline

The active configuration with all derived values (e.g. frequencies).

◆ addSample()

void tinymodem::FSKDecoder::addSample ( float sample)
inlineprotected

◆ applyAdvance()

void tinymodem::FSKDecoder::applyAdvance ( )
inlineprotected

◆ audioInfo()

audio_tools::AudioInfo tinymodem::FSKDecoder::audioInfo ( )
inlineoverride

◆ begin() [1/2]

bool tinymodem::FSKDecoder::begin ( )
inlineoverride

◆ begin() [2/2]

bool tinymodem::FSKDecoder::begin ( ModemConfig config)
inline

Starts the processing with the indicated modem configuration.

◆ buildExpectBits()

int tinymodem::FSKDecoder::buildExpectBits ( char * str,
bool use_expect_bits,
uint64_t expect_bits )
inlineprotected

Builds the expected framing pattern e.g. "10dddddddd1" (prev_stop, start, data bits, stop)

◆ config()

ModemConfig & tinymodem::FSKDecoder::config ( )
inline

The configuration which was provided in begin(): you can change it and call begin() again

◆ defaultConfig()

ModemConfig tinymodem::FSKDecoder::defaultConfig ( )
inline

Provides a default configuration for a 1200 baud Bell 202 modem.

◆ end()

void tinymodem::FSKDecoder::end ( )
inlineoverride

Processes the remaining samples and reports the end of the carrier.

◆ flush()

void tinymodem::FSKDecoder::flush ( )
inlineoverridevirtual

Processes all buffered samples (e.g. at the end of the input).

Implements tinymodem::ModemDecoder.

◆ isCarrier()

bool tinymodem::FSKDecoder::isCarrier ( )
inlineoverridevirtual

true while a carrier is detected

Implements tinymodem::ModemDecoder.

◆ isFinished()

bool tinymodem::FSKDecoder::isFinished ( )
inlineoverridevirtual

true if the decoding was stopped (rx_one)

Implements tinymodem::ModemDecoder.

◆ markFrequency()

float tinymodem::FSKDecoder::markFrequency ( )
inline

Actual mark frequency (e.g. after the carrier auto detection).

◆ noise()

float tinymodem::FSKDecoder::noise ( )
inlineprotected

uniform random value in the range -0.5 to 0.5

◆ operator bool()

tinymodem::FSKDecoder::operator bool ( )
inlineoverride

◆ reportCarrier()

void tinymodem::FSKDecoder::reportCarrier ( )
inlineprotected

◆ reportNoCarrier()

void tinymodem::FSKDecoder::reportNoCarrier ( )
inlineprotected

◆ resetState()

void tinymodem::FSKDecoder::resetState ( )
inlineprotected

◆ setAudioInfo()

void tinymodem::FSKDecoder::setAudioInfo ( audio_tools::AudioInfo info)
inlineoverride

Defines the format of the input audio data.

◆ setupCodec()

void tinymodem::FSKDecoder::setupCodec ( )
inlineprotected

◆ step()

bool tinymodem::FSKDecoder::step ( bool eof)
inlineprotected

One iteration of the minimodem receive loop: returns false if more data is needed or if the processing has ended.

◆ write()

size_t tinymodem::FSKDecoder::write ( const uint8_t * data,
size_t len )
inlineoverride

Provide PCM data to the decoder.

Member Data Documentation

◆ active_cfg

ModemConfig tinymodem::FSKDecoder::active_cfg
protected

◆ advance

size_t tinymodem::FSKDecoder::advance = 0
protected

◆ amplitude_total

float tinymodem::FSKDecoder::amplitude_total = 0
protected

◆ ascii

AsciiCodec tinymodem::FSKDecoder::ascii
protected

◆ baudot

BaudotCodec tinymodem::FSKDecoder::baudot
protected

◆ binary

BinaryCodec tinymodem::FSKDecoder::binary
protected

◆ callerid

CallerIDCodec tinymodem::FSKDecoder::callerid
protected

◆ carrier

bool tinymodem::FSKDecoder::carrier = false
protected

◆ carrier_band

int tinymodem::FSKDecoder::carrier_band = -1
protected

◆ carrier_nsamples

size_t tinymodem::FSKDecoder::carrier_nsamples = 0
protected

◆ cfg

ModemConfig tinymodem::FSKDecoder::cfg
protected

◆ confidence_total

float tinymodem::FSKDecoder::confidence_total = 0
protected

◆ expect_data_string

char tinymodem::FSKDecoder::expect_data_string[MAX_EXPECT]
protected

◆ expect_n_bits

unsigned tinymodem::FSKDecoder::expect_n_bits = 0
protected

◆ expect_nsamples

unsigned tinymodem::FSKDecoder::expect_nsamples = 0
protected

◆ expect_sync_string

char tinymodem::FSKDecoder::expect_sync_string[MAX_EXPECT]
protected

◆ frame_n_bits

float tinymodem::FSKDecoder::frame_n_bits = 0
protected

◆ frame_nsamples

unsigned tinymodem::FSKDecoder::frame_nsamples = 0
protected

◆ FRAME_OVERSCAN

float tinymodem::FSKDecoder::FRAME_OVERSCAN = 0.5f
staticconstexprprotected

◆ FSK_ANALYZE_NSTEPS

int tinymodem::FSKDecoder::FSK_ANALYZE_NSTEPS = 3
staticconstexprprotected

◆ FSK_ANALYZE_NSTEPS_FINE

int tinymodem::FSKDecoder::FSK_ANALYZE_NSTEPS_FINE = 8
staticconstexprprotected

◆ FSK_MAX_NOCONFIDENCE_BITS

unsigned tinymodem::FSKDecoder::FSK_MAX_NOCONFIDENCE_BITS = 20
staticconstexprprotected

◆ input

PcmInput tinymodem::FSKDecoder::input
protected

◆ is_active

bool tinymodem::FSKDecoder::is_active = false
protected

◆ is_finished

bool tinymodem::FSKDecoder::is_finished = false
protected

◆ MAX_EXPECT

int tinymodem::FSKDecoder::MAX_EXPECT = 80
staticconstexprprotected

◆ nframes_decoded

unsigned tinymodem::FSKDecoder::nframes_decoded = 0
protected

◆ noconfidence

unsigned tinymodem::FSKDecoder::noconfidence = 0
protected

◆ noise_seed

uint32_t tinymodem::FSKDecoder::noise_seed = 1
protected

◆ nsamples_overscan

unsigned tinymodem::FSKDecoder::nsamples_overscan = 0
protected

◆ nsamples_per_bit

float tinymodem::FSKDecoder::nsamples_per_bit = 0
protected

◆ p_codec

DataCodec* tinymodem::FSKDecoder::p_codec = &ascii
protected

◆ peak_confidence

float tinymodem::FSKDecoder::peak_confidence = 0.0f
protected

◆ plan

FSKDemodulator tinymodem::FSKDecoder::plan
protected

◆ print_filter

PrintFilter tinymodem::FSKDecoder::print_filter
protected

◆ process_threshold

size_t tinymodem::FSKDecoder::process_threshold = 0
protected

◆ samplebuf

audio_tools::Vector<float> tinymodem::FSKDecoder::samplebuf
protected

◆ samples_nvalid

size_t tinymodem::FSKDecoder::samples_nvalid = 0
protected

◆ skip

size_t tinymodem::FSKDecoder::skip = 0
protected

◆ track_amplitude

float tinymodem::FSKDecoder::track_amplitude = 0.0f
protected

◆ uic

UICCodec tinymodem::FSKDecoder::uic
protected

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