osmocom-analog/src/common/ffsk.h

28 lines
1.3 KiB
C

#include "../common/goertzel.h"
typedef struct ffsk {
void *inst;
void (*receive_bit)(void *inst, int bit, double quality, double level);
int channel; /* channel number */
int samplerate; /* current sample rate */
double samples_per_bit; /* number of samples for one bit (1200 Baud) */
double bits_per_sample; /* fraction of a bit per sample */
goertzel_t goertzel[2]; /* filter for fsk decoding */
int polarity; /* current polarity state of bit */
sample_t *filter_spl; /* array to hold ring buffer for bit decoding */
int filter_size; /* size of ring buffer */
int filter_pos; /* position to write next sample */
double filter_step; /* counts bit duration, to trigger decoding every 10th bit */
int filter_bit; /* last bit state, so we detect a bit change */
int filter_sample; /* count until it is time to sample bit */
double phaseshift65536; /* how much the phase of fsk synbol changes per sample */
double phase65536; /* current phase */
} ffsk_t;
void ffsk_global_init(double peak_fsk);
int ffsk_init(ffsk_t *ffsk, void *inst, void (*receive_bit)(void *inst, int bit, double quality, double level), int channel, int samplerate);
void ffsk_cleanup(ffsk_t *ffsk);
void ffsk_receive(ffsk_t *ffsk, sample_t *sample, int lenght);
int ffsk_render_frame(ffsk_t *ffsk, const char *frame, int length, sample_t *sample);