From 695c628427b236253e6c61fabc225b74019f05bd Mon Sep 17 00:00:00 2001 From: Kamal Mostafa Date: Fri, 8 Jul 2011 17:42:19 -0700 Subject: [PATCH] minimodem: --auto-carrier off by default No longer on by default for <= 300 baud. --- src/minimodem.1 | 5 ++++- src/minimodem.c | 28 ++++++++++++++-------------- src/run-test | 6 ++++-- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/minimodem.1 b/src/minimodem.1 index 35e9c92..8bbeb7d 100644 --- a/src/minimodem.1 +++ b/src/minimodem.1 @@ -45,6 +45,9 @@ transmit mode: generate audio tones receive mode: decode audio tones .SH OPTIONS .TP +.B \-a, \-\-auto-carrier +automatically detect mark and space frequences from carrier +.TP .B \-c, \-\-confidence threshold set receive confidence threshold (0.0 to 1.0, default 0.6) .TP @@ -77,7 +80,7 @@ depending on the rate. : Bell202 1200 bps \-\-ascii .TP .B 300 - : Bell103 300 bps \-\-ascii (auto-rx-carrier) + : Bell103 300 bps \-\-ascii .TP .B N>=100 : Bellxxx N bps \-\-ascii diff --git a/src/minimodem.c b/src/minimodem.c index d2e8833..8f24319 100644 --- a/src/minimodem.c +++ b/src/minimodem.c @@ -188,6 +188,8 @@ usage() " -t, --tx, --transmit, --write\n" " -r, --rx, --receive, --read (default)\n" " [options]\n" + " -a, --auto-carrier\n" + " -c, --confidence {threshold}\n" " -8, --ascii ASCII 8-N-1\n" " -5, --baudot Baudot 5-N-1\n" " -f, --file {filename.flac}\n" @@ -198,7 +200,7 @@ usage() " -V, --version\n" " {baudmode}\n" " 1200 : Bell202 1200 bps --ascii\n" - " 300 : Bell103 300 bps --ascii (auto-rx-carrier)\n" + " 300 : Bell103 300 bps --ascii\n" " N>=100 : Bellxxx N bps --ascii\n" " N<100 : RTTY N bps --baudot\n" " rtty : RTTY 45.45 bps --baudot\n" @@ -216,10 +218,11 @@ main( int argc, char*argv[] ) unsigned int bfsk_space_f = 0; float bfsk_txstopbits = 0; unsigned int bfsk_n_data_bits = 0; - unsigned int autodetect_shift; + int autodetect_shift; char *filename = NULL; char *program_name; + float carrier_autodetect_threshold = 0.0; float bfsk_confidence_threshold = 0.6; program_name = strrchr(argv[0], '/'); @@ -241,6 +244,7 @@ main( int argc, char*argv[] ) { "receive", 0, 0, 'r' }, { "read", 0, 0, 'r' }, { "confidence", 1, 0, 'c' }, + { "auto-carrier", 0, 0, 'a' }, { "ascii", 0, 0, '8' }, { "baudot", 0, 0, '5' }, { "file", 1, 0, 'f' }, @@ -250,7 +254,7 @@ main( int argc, char*argv[] ) { "txstopbits", 1, 0, 'T' }, { 0 } }; - c = getopt_long(argc, argv, "Vtrc:85f:b:M:S:T:", + c = getopt_long(argc, argv, "Vtrc:a85f:b:M:S:T:", long_options, &option_index); if ( c == -1 ) break; @@ -271,6 +275,9 @@ main( int argc, char*argv[] ) case 'c': bfsk_confidence_threshold = atof(optarg); break; + case 'a': + carrier_autodetect_threshold = 0.001; + break; case 'f': filename = optarg; break; @@ -348,16 +355,15 @@ main( int argc, char*argv[] ) assert( 0 && bfsk_n_data_bits ); } - if ( bfsk_data_rate >= 400 ) { /* * Bell 202: baud=1200 mark=1200 space=2200 */ - autodetect_shift = 0; // not used + autodetect_shift = -1000; if ( bfsk_mark_f == 0 ) bfsk_mark_f = 1200; if ( bfsk_space_f == 0 ) - bfsk_space_f = bfsk_mark_f + 1000; + bfsk_space_f = bfsk_mark_f - autodetect_shift; if ( band_width == 0 ) band_width = 200; } else if ( bfsk_data_rate >= 100 ) { @@ -538,12 +544,9 @@ main( int argc, char*argv[] ) if ( samples_nvalid == 0 ) break; -#define CARRIER_AUTODETECT_THRESHOLD 0.001 -#ifdef CARRIER_AUTODETECT_THRESHOLD /* Auto-detect carrier frequency */ static int carrier_band = -1; - // FIXME?: hardcoded 300 baud trigger for carrier autodetect - if ( bfsk_data_rate <= 300 && carrier_band < 0 ) { + if ( carrier_autodetect_threshold > 0.0 && carrier_band < 0 ) { unsigned int i; float nsamples_per_scan = nsamples_per_bit; if ( nsamples_per_scan > fskp->fftsize ) @@ -552,7 +555,7 @@ main( int argc, char*argv[] ) i+=nsamples_per_scan ) { carrier_band = fsk_detect_carrier(fskp, samplebuf+i, nsamples_per_scan, - CARRIER_AUTODETECT_THRESHOLD); + carrier_autodetect_threshold); if ( carrier_band >= 0 ) break; } @@ -580,7 +583,6 @@ main( int argc, char*argv[] ) fsk_set_tones_by_bandshift(fskp, /*b_mark*/carrier_band, b_shift); } -#endif /* * The main processing algorithm: scan samplesbuf for FSK frames, @@ -629,9 +631,7 @@ main( int argc, char*argv[] ) // FIXME: explain if ( ++noconfidence > FSK_MAX_NOCONFIDENCE_BITS ) { -#ifdef CARRIER_AUTODETECT_THRESHOLD carrier_band = -1; -#endif if ( carrier ) { carrier_nsamples -= noconfidence_nsamples; if ( nframes_decoded > 0 ) diff --git a/src/run-test b/src/run-test index 2c445b1..33f6931 100755 --- a/src/run-test +++ b/src/run-test @@ -27,8 +27,10 @@ do txtnum="${i##*/}" txtnum="${txtnum%%-*}" - echo TEST $MINIMODEM -f "$i" "$rate" - $MINIMODEM -f "$i" "$rate" >$TMPDIR/out 2>$TMPDIR/err + unset flags + [ $rate = rtty ] || [ $rate -le 300 ] && flags="--auto-carrier" + echo TEST $MINIMODEM $flags -f "$i" "$rate" + $MINIMODEM $flags -f "$i" "$rate" >$TMPDIR/out 2>$TMPDIR/err t="${f%%-*}"