void rx_fm_broadcast_to_audio_init(rx_fm_broadcast_to_audio_state_t* const state) { translate_fs_over_4_and_decimate_by_2_cic_3_s8_s16_init(&state->dec_stage_1_state); fir_cic3_decim_2_s16_s16_init(&state->dec_stage_2_state); fm_demodulate_s16_s16_init(&state->fm_demodulate_state, 768000, 75000); fir_cic4_decim_2_real_s16_s16_init(&state->audio_dec_1); fir_cic4_decim_2_real_s16_s16_init(&state->audio_dec_2); fir_cic4_decim_2_real_s16_s16_init(&state->audio_dec_3); fir_64_decim_2_real_s16_s16_init(&state->audio_dec_4, taps_64_lp_156_198); }
void rx_tpms_fsk_init(void* const _state, packet_builder_payload_handler_t payload_handler) { rx_tpms_fsk_state_t* const state = (rx_tpms_fsk_state_t*)_state; const float symbol_rate = 19200.0f; const float sample_rate = 76800.0f; translate_fs_over_4_and_decimate_by_2_cic_3_s8_s16_init(&state->bb_dec_1); fir_cic3_decim_2_s16_s16_init(&state->bb_dec_2); fir_cic3_decim_2_s16_s16_init(&state->bb_dec_3); fir_cic3_decim_2_s16_s16_init(&state->bb_dec_4); for(size_t i=0; i<ARRAY_SIZE(state->symbol_z); i++) { state->symbol_z[i].i = 0; state->symbol_z[i].q = 0; } clock_recovery_init(&state->clock_recovery, symbol_rate / sample_rate, rx_tpms_fsk_clock_recovery_symbol_handler, state); access_code_correlator_init(&state->access_code_correlator, 0b01010101010101010101010101010110, 32, 2); packet_builder_init(&state->packet_builder, 160, payload_handler, state); }