diff --git a/src/fsk.c b/src/fsk.c index 4902f68..650e12e 100644 --- a/src/fsk.c +++ b/src/fsk.c @@ -128,47 +128,24 @@ fsk_bit_analyze( fsk_plan *fskp, float *samples, unsigned int bit_nsamples, /* returns confidence value [0.0 to 1.0] */ -static float +static void fsk_bits_analyze( fsk_plan *fskp, float *samples, float samples_per_bit, - unsigned int *bits_outp ) + unsigned int *bits_outp, float *bit_strengths_outp ) { unsigned int bit_nsamples = (float)(samples_per_bit + 0.5); unsigned int nbits = fskp->n_data_bits; - float v = 0; unsigned int bits_out = 0; int i; - float d_str[32]; for ( i=0; in_data_bits; i++ ) + v += databit_strengths[i]; + v /= (fskp->n_data_bits + 3); + +#define FSK_MIN_STRENGTH 0.05 + if ( v < FSK_MIN_STRENGTH ) + return 0.0; + + float confidence = 0; + confidence += 1.0 - fabs(i_str - v); + confidence += 1.0 - fabs(s_str - v); + confidence += 1.0 - fabs(p_str - v); + for ( i=0; in_data_bits; i++ ) + confidence += 1.0 - fabs(databit_strengths[i] - v); + confidence /= (fskp->n_data_bits + 3); return confidence; }