minimodem: --auto-carrier off by default

No longer on by default for <= 300 baud.
This commit is contained in:
Kamal Mostafa 2011-07-08 17:42:19 -07:00
parent 633153916b
commit 695c628427
3 changed files with 22 additions and 17 deletions

View File

@ -45,6 +45,9 @@ transmit mode: generate audio tones
receive mode: decode audio tones receive mode: decode audio tones
.SH OPTIONS .SH OPTIONS
.TP .TP
.B \-a, \-\-auto-carrier
automatically detect mark and space frequences from carrier
.TP
.B \-c, \-\-confidence threshold .B \-c, \-\-confidence threshold
set receive confidence threshold (0.0 to 1.0, default 0.6) set receive confidence threshold (0.0 to 1.0, default 0.6)
.TP .TP
@ -77,7 +80,7 @@ depending on the rate.
: Bell202 1200 bps \-\-ascii : Bell202 1200 bps \-\-ascii
.TP .TP
.B 300 .B 300
: Bell103 300 bps \-\-ascii (auto-rx-carrier) : Bell103 300 bps \-\-ascii
.TP .TP
.B N>=100 .B N>=100
: Bellxxx N bps \-\-ascii : Bellxxx N bps \-\-ascii

View File

@ -188,6 +188,8 @@ usage()
" -t, --tx, --transmit, --write\n" " -t, --tx, --transmit, --write\n"
" -r, --rx, --receive, --read (default)\n" " -r, --rx, --receive, --read (default)\n"
" [options]\n" " [options]\n"
" -a, --auto-carrier\n"
" -c, --confidence {threshold}\n"
" -8, --ascii ASCII 8-N-1\n" " -8, --ascii ASCII 8-N-1\n"
" -5, --baudot Baudot 5-N-1\n" " -5, --baudot Baudot 5-N-1\n"
" -f, --file {filename.flac}\n" " -f, --file {filename.flac}\n"
@ -198,7 +200,7 @@ usage()
" -V, --version\n" " -V, --version\n"
" {baudmode}\n" " {baudmode}\n"
" 1200 : Bell202 1200 bps --ascii\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 : Bellxxx N bps --ascii\n"
" N<100 : RTTY N bps --baudot\n" " N<100 : RTTY N bps --baudot\n"
" rtty : RTTY 45.45 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; unsigned int bfsk_space_f = 0;
float bfsk_txstopbits = 0; float bfsk_txstopbits = 0;
unsigned int bfsk_n_data_bits = 0; unsigned int bfsk_n_data_bits = 0;
unsigned int autodetect_shift; int autodetect_shift;
char *filename = NULL; char *filename = NULL;
char *program_name; char *program_name;
float carrier_autodetect_threshold = 0.0;
float bfsk_confidence_threshold = 0.6; float bfsk_confidence_threshold = 0.6;
program_name = strrchr(argv[0], '/'); program_name = strrchr(argv[0], '/');
@ -241,6 +244,7 @@ main( int argc, char*argv[] )
{ "receive", 0, 0, 'r' }, { "receive", 0, 0, 'r' },
{ "read", 0, 0, 'r' }, { "read", 0, 0, 'r' },
{ "confidence", 1, 0, 'c' }, { "confidence", 1, 0, 'c' },
{ "auto-carrier", 0, 0, 'a' },
{ "ascii", 0, 0, '8' }, { "ascii", 0, 0, '8' },
{ "baudot", 0, 0, '5' }, { "baudot", 0, 0, '5' },
{ "file", 1, 0, 'f' }, { "file", 1, 0, 'f' },
@ -250,7 +254,7 @@ main( int argc, char*argv[] )
{ "txstopbits", 1, 0, 'T' }, { "txstopbits", 1, 0, 'T' },
{ 0 } { 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); long_options, &option_index);
if ( c == -1 ) if ( c == -1 )
break; break;
@ -271,6 +275,9 @@ main( int argc, char*argv[] )
case 'c': case 'c':
bfsk_confidence_threshold = atof(optarg); bfsk_confidence_threshold = atof(optarg);
break; break;
case 'a':
carrier_autodetect_threshold = 0.001;
break;
case 'f': case 'f':
filename = optarg; filename = optarg;
break; break;
@ -348,16 +355,15 @@ main( int argc, char*argv[] )
assert( 0 && bfsk_n_data_bits ); assert( 0 && bfsk_n_data_bits );
} }
if ( bfsk_data_rate >= 400 ) { if ( bfsk_data_rate >= 400 ) {
/* /*
* Bell 202: baud=1200 mark=1200 space=2200 * Bell 202: baud=1200 mark=1200 space=2200
*/ */
autodetect_shift = 0; // not used autodetect_shift = -1000;
if ( bfsk_mark_f == 0 ) if ( bfsk_mark_f == 0 )
bfsk_mark_f = 1200; bfsk_mark_f = 1200;
if ( bfsk_space_f == 0 ) if ( bfsk_space_f == 0 )
bfsk_space_f = bfsk_mark_f + 1000; bfsk_space_f = bfsk_mark_f - autodetect_shift;
if ( band_width == 0 ) if ( band_width == 0 )
band_width = 200; band_width = 200;
} else if ( bfsk_data_rate >= 100 ) { } else if ( bfsk_data_rate >= 100 ) {
@ -538,12 +544,9 @@ main( int argc, char*argv[] )
if ( samples_nvalid == 0 ) if ( samples_nvalid == 0 )
break; break;
#define CARRIER_AUTODETECT_THRESHOLD 0.001
#ifdef CARRIER_AUTODETECT_THRESHOLD
/* Auto-detect carrier frequency */ /* Auto-detect carrier frequency */
static int carrier_band = -1; static int carrier_band = -1;
// FIXME?: hardcoded 300 baud trigger for carrier autodetect if ( carrier_autodetect_threshold > 0.0 && carrier_band < 0 ) {
if ( bfsk_data_rate <= 300 && carrier_band < 0 ) {
unsigned int i; unsigned int i;
float nsamples_per_scan = nsamples_per_bit; float nsamples_per_scan = nsamples_per_bit;
if ( nsamples_per_scan > fskp->fftsize ) if ( nsamples_per_scan > fskp->fftsize )
@ -552,7 +555,7 @@ main( int argc, char*argv[] )
i+=nsamples_per_scan ) { i+=nsamples_per_scan ) {
carrier_band = fsk_detect_carrier(fskp, carrier_band = fsk_detect_carrier(fskp,
samplebuf+i, nsamples_per_scan, samplebuf+i, nsamples_per_scan,
CARRIER_AUTODETECT_THRESHOLD); carrier_autodetect_threshold);
if ( carrier_band >= 0 ) if ( carrier_band >= 0 )
break; break;
} }
@ -580,7 +583,6 @@ main( int argc, char*argv[] )
fsk_set_tones_by_bandshift(fskp, /*b_mark*/carrier_band, b_shift); fsk_set_tones_by_bandshift(fskp, /*b_mark*/carrier_band, b_shift);
} }
#endif
/* /*
* The main processing algorithm: scan samplesbuf for FSK frames, * The main processing algorithm: scan samplesbuf for FSK frames,
@ -629,9 +631,7 @@ main( int argc, char*argv[] )
// FIXME: explain // FIXME: explain
if ( ++noconfidence > FSK_MAX_NOCONFIDENCE_BITS ) if ( ++noconfidence > FSK_MAX_NOCONFIDENCE_BITS )
{ {
#ifdef CARRIER_AUTODETECT_THRESHOLD
carrier_band = -1; carrier_band = -1;
#endif
if ( carrier ) { if ( carrier ) {
carrier_nsamples -= noconfidence_nsamples; carrier_nsamples -= noconfidence_nsamples;
if ( nframes_decoded > 0 ) if ( nframes_decoded > 0 )

View File

@ -27,8 +27,10 @@ do
txtnum="${i##*/}" txtnum="${i##*/}"
txtnum="${txtnum%%-*}" txtnum="${txtnum%%-*}"
echo TEST $MINIMODEM -f "$i" "$rate" unset flags
$MINIMODEM -f "$i" "$rate" >$TMPDIR/out 2>$TMPDIR/err [ $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%%-*}" t="${f%%-*}"