From 0145d2642d38ff651690ac40cd823b663265401f Mon Sep 17 00:00:00 2001 From: drowe67 Date: Tue, 19 Mar 2013 23:10:23 +0000 Subject: [PATCH] prototype more reliable sync git-svn-id: https://svn.code.sf.net/p/freetel/code@1217 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/src/codec2_fdmdv.h | 2 +- codec2-dev/src/fdmdv.c | 14 ++++--- codec2-dev/src/fdmdv_demod.c | 71 ++++++++++++++------------------- codec2-dev/src/fdmdv_internal.h | 2 +- 4 files changed, 41 insertions(+), 48 deletions(-) diff --git a/codec2-dev/src/codec2_fdmdv.h b/codec2-dev/src/codec2_fdmdv.h index e0e8abb7..1d9db7d2 100644 --- a/codec2-dev/src/codec2_fdmdv.h +++ b/codec2-dev/src/codec2_fdmdv.h @@ -96,7 +96,7 @@ void CODEC2_WIN32SUPPORT fdmdv_use_old_qpsk_mapping(struct FDMDV *fdmd int CODEC2_WIN32SUPPORT fdmdv_bits_per_frame(struct FDMDV *fdmdv_state); void CODEC2_WIN32SUPPORT fdmdv_mod(struct FDMDV *fdmdv_state, COMP tx_fdm[], int tx_bits[], int *sync_bit); -void CODEC2_WIN32SUPPORT fdmdv_demod(struct FDMDV *fdmdv_state, int rx_bits[], int *sync_bit, COMP rx_fdm[], int *nin); +void CODEC2_WIN32SUPPORT fdmdv_demod(struct FDMDV *fdmdv_state, int rx_bits[], int *reliable_sync_bit, COMP rx_fdm[], int *nin); void CODEC2_WIN32SUPPORT fdmdv_get_test_bits(struct FDMDV *fdmdv_state, int tx_bits[]); int CODEC2_WIN32SUPPORT fdmdv_error_pattern_size(struct FDMDV *fdmdv_state); diff --git a/codec2-dev/src/fdmdv.c b/codec2-dev/src/fdmdv.c index 2ca7d7e0..b1e76fa5 100644 --- a/codec2-dev/src/fdmdv.c +++ b/codec2-dev/src/fdmdv.c @@ -1183,11 +1183,11 @@ void CODEC2_WIN32SUPPORT fdmdv_put_test_bits(struct FDMDV *f, int *sync, short e \*---------------------------------------------------------------------------*/ -int freq_state(int sync_bit, int *state, int *timer, int *sync_mem) +int freq_state(int *reliable_sync_bit, int sync_bit, int *state, int *timer, int *sync_mem) { int next_state, sync, unique_word, i, corr; - /* look for 6 symbols (120ms) 010101 of sync sequence */ + /* look for 6 symbols (120ms) 101010 of sync sequence */ unique_word = 0; for(i=0; irx_timing < 0) *nin -= M/P; - foff_fine = qpsk_to_bits(rx_bits, sync_bit, fdmdv->Nc, fdmdv->phase_difference, fdmdv->prev_rx_symbols, rx_symbols, + foff_fine = qpsk_to_bits(rx_bits, &sync_bit, fdmdv->Nc, fdmdv->phase_difference, fdmdv->prev_rx_symbols, rx_symbols, fdmdv->old_qpsk_mapping); memcpy(fdmdv->prev_rx_symbols, rx_symbols, sizeof(COMP)*(fdmdv->Nc+1)); snr_update(fdmdv->sig_est, fdmdv->noise_est, fdmdv->Nc, fdmdv->phase_difference); /* freq offset estimation state machine */ - fdmdv->sync = freq_state(*sync_bit, &fdmdv->fest_state, &fdmdv->timer, fdmdv->sync_mem); + fdmdv->sync = freq_state(reliable_sync_bit, sync_bit, &fdmdv->fest_state, &fdmdv->timer, fdmdv->sync_mem); fdmdv->foff -= TRACK_COEFF*foff_fine; } diff --git a/codec2-dev/src/fdmdv_demod.c b/codec2-dev/src/fdmdv_demod.c index fd47050f..5783279f 100644 --- a/codec2-dev/src/fdmdv_demod.c +++ b/codec2-dev/src/fdmdv_demod.c @@ -58,8 +58,8 @@ int main(int argc, char *argv[]) short rx_fdm_scaled[FDMDV_MAX_SAMPLES_PER_FRAME]; int i, bit, byte, c; int nin, nin_prev; - int sync_bit; - int state, next_state; + int sync_bit, reliable_sync_bit; + int sync; int f; FILE *foct = NULL; struct FDMDV_STATS stats; @@ -136,7 +136,6 @@ int main(int argc, char *argv[]) assert(rx_fdm_log != NULL); f = 0; - state = 0; nin = FDMDV_NOM_SAMPLES_PER_FRAME; rx_fdm_log_col_index = 0; max_frames_reached = 0; @@ -148,7 +147,7 @@ int main(int argc, char *argv[]) rx_fdm[i].imag = 0; } nin_prev = nin; - fdmdv_demod(fdmdv, rx_bits, &sync_bit, rx_fdm, &nin); + fdmdv_demod(fdmdv, rx_bits, &reliable_sync_bit, rx_fdm, &nin); /* log data for optional Octave dump */ @@ -179,43 +178,35 @@ int main(int argc, char *argv[]) max_frames_reached = 1; } - /* state machine to output codec bits only if we have a 0,1 - sync bit sequence */ + if (reliable_sync_bit) + sync = 1; + //printf("sync_bit: %d reliable_sync_bit: %d sync: %d\n", sync_bit, reliable_sync_bit, sync); - next_state = state; - switch (state) { - case 0: - if (sync_bit == 0) { - next_state = 1; - memcpy(codec_bits, rx_bits, bits_per_fdmdv_frame*sizeof(int)); - } - else - next_state = 0; - break; - case 1: - if (sync_bit == 1) { - memcpy(&codec_bits[bits_per_fdmdv_frame], rx_bits, bits_per_fdmdv_frame*sizeof(int)); - - /* pack bits, MSB received first */ - - bit = 7; byte = 0; - memset(packed_bits, 0, bytes_per_codec_frame); - for(i=0; i