f->fest_state = 0;
f->coarse_fine = COARSE;
-
+ f->bad_sync = 0;
+
for(c=0; c<NC+1; c++) {
f->sig_est[c] = 0.0;
f->noise_est[c] = 0.0;
\*---------------------------------------------------------------------------*/
-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 */
case 5:
if (sync_bit == 1) {
next_state = 6;
- bad_sync = 0;
+ *bad_sync = 0;
}
else
next_state = 0;
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;
}
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;
/* 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;
}
int fest_state;
int coarse_fine;
+ int bad_sync;
/* SNR estimation states */
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