X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=ss5_decode.c;h=95a1f747897630456cc56bc4f0f43f5be0e64181;hp=713f818a5c674b1d8cf96739af220e9ba893c8b3;hb=6642360dcf1eecba954ad04d2d0a78753f8e5182;hpb=7d414983c9ddfa9cf8300d5d9aee7a86876b7ea7;ds=sidebyside diff --git a/ss5_decode.c b/ss5_decode.c index 713f818..95a1f74 100644 --- a/ss5_decode.c +++ b/ss5_decode.c @@ -52,18 +52,16 @@ static char decode_one[8] = * calculate the coefficients of the given sample and decode */ -char ss5_decode(unsigned char *data, int len) +char ss5_decode(unsigned char *data, int len, double *_quality) { signed short buf[len]; signed long sk, sk1, sk2, low, high; int k, n, i; int f1 = 0, f2 = 0; double result[NCOEFF], power, noise; -#ifdef DEBUG_LEVELS - double snr; -#endif signed long long cos2pik_; char digit = ' '; + double quality; /* convert samples */ for (i = 0; i < len; i++) @@ -124,38 +122,34 @@ char ss5_decode(unsigned char *data, int len) } } -#ifdef DEBUG_LEVELS - snr = 0; -#endif + quality = 0; /* check one frequency */ if (result[f1] > TONE_MIN_DB /* must be at least -17 db */ && result[f1]*SNR > noise) { /* */ digit = decode_one[f1]; -#ifdef DEBUG_LEVELS if (digit != ' ') - snr = result[f1] / noise; -#endif + quality = result[f1] / noise; } /* check two frequencies */ if (result[f1] > TONE_MIN_DB && result[f2] > TONE_MIN_DB /* must be at lease -17 db */ && result[f1]*TONE_DIFF_DB <= result[f2] /* f2 must be not less than 5 db below f1 */ && (result[f1]+result[f2])*SNR > noise) { /* */ digit = decode_two[f1][f2]; -#ifdef DEBUG_LEVELS if (digit != ' ') - snr = (result[f1]+result[f2]) / noise; -#endif + quality = (result[f1]+result[f2]) / noise; } /* debug powers */ #ifdef DEBUG_LEVELS for (i = 0; i < NCOEFF; i++) printf("%d:%3d %c ", i, (int)(result[i]*100), (f1==i || f2==i)?'*':' '); - printf("N:%3d digit:%c snr=%3d\n", (int)(noise*100), digit, (int)(snr*100)); + printf("N:%3d digit:%c quality=%3d%%\n", (int)(noise*100), digit, (int)(quality*100)); // if (result[f1]*TONE_DIFF_DB <= result[f2]) /* f2 must be not less than 5 db below f1 */ // printf("jo!"); #endif + if (_quality) + *_quality = quality; return digit; }