diff options
Diffstat (limited to 'src/libv27/psk.h')
-rw-r--r-- | src/libv27/psk.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/libv27/psk.h b/src/libv27/psk.h new file mode 100644 index 0000000..1dbaa07 --- /dev/null +++ b/src/libv27/psk.h @@ -0,0 +1,48 @@ +#include "../libfilter/iir_filter.h" +#include "../libfilter/fir_filter.h" + +typedef struct psk_mod { + int (*send_bit)(void *inst); + void *inst; + + double symbol_pos; /* current position in symbol */ + double symbols_per_sample; /* change of position per sample */ + double phase_shift; /* carrier phase shift */ + double carrier_phase; /* current carrier phase */ + double carrier_phaseshift; /* shift of phase per sample */ + + fir_filter_t *lp[2]; /* filter for limiting spectrum */ + + int spl_count; /* SIT: counter for 30 samples (symbol duration) */ + int sym_list[5]; /* SIT: list of 5 symbols */ + int sym_count; /* SIT: current list index */ +} psk_mod_t; + +typedef struct psk_demod { + void (*receive_bit)(void *inst, int bit); + void *inst; + + double carrier_phase; /* current carrier phase */ + double carrier_phaseshift; /* shift of phase per sample */ + + fir_filter_t *lp[2]; /* filter for limiting spectrum */ + iir_filter_t lp_error[2]; /* filter for phase correction */ + iir_filter_t lp_clock; /* filter for symbol clock */ + + uint16_t last_phase_error; /* error phase of last sample */ + int32_t phase_error; /* current phase error */ + + sample_t last_amplitude; /* clock amplitude of last sample */ + int sample_delay; /* delay of quarter symbol length in samples */ + int sample_timer; /* counter to wait for the symbol's sample point */ + + uint8_t last_sector; /* sector of last symbol */ +} psk_demod_t; + +int psk_mod_init(psk_mod_t *psk, void *inst, int (*send_bit)(void *inst), int samplerate, double symbolrate); +void psk_mod_exit(psk_mod_t *psk); +void psk_mod(psk_mod_t *psk, sample_t *sample, int length); +int psk_demod_init(psk_demod_t *psk, void *inst, void (*receive_bit)(void *inst, int bit), int samplerate, double symbolrate); +void psk_demod_exit(psk_demod_t *psk); +void psk_demod(psk_demod_t *psk, sample_t *sample, int length); + |