From: drowe67 Date: Tue, 26 Feb 2013 02:21:57 +0000 (+0000) Subject: fixed sync state machine bug X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=b66e3f2b01546db0761cbd4ab6ddf6142af9dfeb;p=freetel-svn-tracking.git fixed sync state machine bug git-svn-id: https://svn.code.sf.net/p/freetel/code@1170 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/src/fdmdv.c b/codec2-dev/src/fdmdv.c index 9453b87d..9fe7aa38 100644 --- a/codec2-dev/src/fdmdv.c +++ b/codec2-dev/src/fdmdv.c @@ -221,7 +221,8 @@ struct FDMDV * CODEC2_WIN32SUPPORT fdmdv_create(void) f->fest_state = 0; f->coarse_fine = COARSE; - + f->bad_sync = 0; + for(c=0; csig_est[c] = 0.0; f->noise_est[c] = 0.0; @@ -1134,10 +1135,9 @@ void CODEC2_WIN32SUPPORT fdmdv_put_test_bits(struct FDMDV *f, int *sync, \*---------------------------------------------------------------------------*/ -int freq_state(int sync_bit, int *state) +int freq_state(int sync_bit, int *state, int *bad_sync) { int next_state, coarse_fine; - int bad_sync = 0; /* acquire state, look for 6 symbol 010101 sequence from sync bit */ @@ -1174,7 +1174,7 @@ int freq_state(int sync_bit, int *state) case 5: if (sync_bit == 1) { next_state = 6; - bad_sync = 0; + *bad_sync = 0; } else next_state = 0; @@ -1189,10 +1189,10 @@ int freq_state(int sync_bit, int *state) case 6: next_state = 7; if (sync_bit == 0) - bad_sync = 0; + *bad_sync = 0; else { - bad_sync++; - if (bad_sync > 2) + (*bad_sync)++; + if (*bad_sync > 2) next_state = 0; } @@ -1200,10 +1200,10 @@ int freq_state(int sync_bit, int *state) case 7: next_state = 6; if (sync_bit == 1) - bad_sync = 0; + *bad_sync = 0; else { - bad_sync++; - if (bad_sync > 2) + (*bad_sync)++; + if (*bad_sync > 2) next_state = 0; } break; @@ -1278,7 +1278,7 @@ void CODEC2_WIN32SUPPORT fdmdv_demod(struct FDMDV *fdmdv, int rx_bits[], /* freq offset estimation state machine */ - fdmdv->coarse_fine = freq_state(*sync_bit, &fdmdv->fest_state); + fdmdv->coarse_fine = freq_state(*sync_bit, &fdmdv->fest_state, &fdmdv->bad_sync); fdmdv->foff -= TRACK_COEFF*foff_fine; } diff --git a/codec2-dev/src/fdmdv_internal.h b/codec2-dev/src/fdmdv_internal.h index d4120733..b126bb91 100644 --- a/codec2-dev/src/fdmdv_internal.h +++ b/codec2-dev/src/fdmdv_internal.h @@ -130,6 +130,7 @@ struct FDMDV { int fest_state; int coarse_fine; + int bad_sync; /* SNR estimation states */ @@ -167,7 +168,7 @@ float rx_est_timing(COMP rx_symbols[], int nin); float qpsk_to_bits(int rx_bits[], int *sync_bit, COMP phase_difference[], COMP prev_rx_symbols[], COMP rx_symbols[]); void snr_update(float sig_est[], float noise_est[], COMP phase_difference[]); -int freq_state(int sync_bit, int *state); +int freq_state(int sync_bit, int *state, int *bad_sync); float calc_snr(float sig_est[], float noise_est[]); #endif