From 845c3e1be6382198913d960063b0addeffef8d0e Mon Sep 17 00:00:00 2001 From: Kamal Mostafa Date: Fri, 8 Jul 2011 08:03:31 -0700 Subject: [PATCH] fsk: CONFIDENCE_ALGO 3 (worst divergence) CONFIDENCE_ALGO 3 (worst divergence): - single worst diverging bit in the frame - amplitude normalized - drop AVOID_TRANSIENT --- src/fsk.c | 50 ++++++++++++++++++++++--------------------------- src/minimodem.c | 2 +- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/fsk.c b/src/fsk.c index a8e4059..7d6d256 100644 --- a/src/fsk.c +++ b/src/fsk.c @@ -186,16 +186,17 @@ fsk_frame_analyze( fsk_plan *fskp, float *samples, float samples_per_bit, v += bit_strengths[bitnum]; } - // float i_str = bit_strengths[0]; - float s_str = bit_strengths[1]; - float p_str = bit_strengths[fskp->n_data_bits + 2]; - -#define AVOID_TRANSIENTS 0.7 +// Note: CONFIDENCE_ALGO 3 does not need AVOID_TRANSIENTS +// #define AVOID_TRANSIENTS 0.7 +// #ifdef AVOID_TRANSIENTS /* Compare strength of stop bit and start bit, to avoid detecting * a transient as a start bit, as often results in a single false * character when the mark "leader" tone begins. Require that the * diff between start bit and stop bit strength not be "large". */ + //float i_str = bit_strengths[0]; + float s_str = bit_strengths[1]; + float p_str = bit_strengths[fskp->n_data_bits + 2]; if ( fabs(s_str-p_str) > (s_str * AVOID_TRANSIENTS) ) { debug_log(" avoid transient\n"); return 0.0; @@ -220,33 +221,23 @@ fsk_frame_analyze( fsk_plan *fskp, float *samples, float samples_per_bit, if ( v < FSK_MIN_STRENGTH ) return 0.0; + +#define CONFIDENCE_ALGO 3 + + float worst_divergence = 0; int i; + for ( i=0; in_data_bits; i++ ) - confidence += 1.0 - fabs(databit_strengths[i] - v); - confidence /= (fskp->n_data_bits + 3); - -#elif ( CONFIDENCE_ALGO == 2 ) - - float confidence = 0; - for ( i=0; in_data_bits; i++ ) -// *bits_outp |= bit_values[i+2] << i; for ( i=0; i> 2 ) & 0xFF; diff --git a/src/minimodem.c b/src/minimodem.c index 36533f5..de59434 100644 --- a/src/minimodem.c +++ b/src/minimodem.c @@ -601,7 +601,7 @@ main( int argc, char*argv[] ) else bits = ( bits >> 2 ) & 0xFF; -#define FSK_MIN_CONFIDENCE 0.05 +#define FSK_MIN_CONFIDENCE 0.50 #define FSK_MAX_NOCONFIDENCE_BITS 20 if ( confidence <= FSK_MIN_CONFIDENCE ) {