diff --git a/examples/test_morse_decoder.grc b/examples/test_morse_decoder.grc index 8deab6e..4e96c2f 100644 --- a/examples/test_morse_decoder.grc +++ b/examples/test_morse_decoder.grc @@ -1,5 +1,5 @@ - + Fri Jan 22 20:01:21 2016 @@ -131,6 +131,14 @@ debug_seq "SATNOGS HELLO EARTH WORLD 123456789" + + seq_pause_ms + 1000 + + + wpm + 20 + satnogs_morse_decoder @@ -170,6 +178,10 @@ minoutbuf 0 + + min_frame_len + 3 + unrecognized_char ord('#') diff --git a/grc/satnogs_morse_decoder.xml b/grc/satnogs_morse_decoder.xml index 9ffa79e..c404402 100644 --- a/grc/satnogs_morse_decoder.xml +++ b/grc/satnogs_morse_decoder.xml @@ -3,7 +3,7 @@ Morse Decoder satnogs_morse_decoder import satnogs - satnogs.morse_decoder($unrecognized_char) + satnogs.morse_decoder($unrecognized_char, $min_frame_len) Unrecognized character @@ -11,6 +11,13 @@ ord('#') int + + + Minimum frame length + min_frame_len + 3 + int + diff --git a/include/satnogs/morse_decoder.h b/include/satnogs/morse_decoder.h index 0e9d3bb..330580d 100644 --- a/include/satnogs/morse_decoder.h +++ b/include/satnogs/morse_decoder.h @@ -42,8 +42,10 @@ namespace gr { * @param unrecognized_char the character that will be placed * in situations where the decoder can not decide which character * was received. + * @param min_frame_len the minimum frame length in order to reduce + * false alarms */ - static sptr make(char unrecognized_char = '#'); + static sptr make(char unrecognized_char = '#', size_t min_frame_len = 3); }; } // namespace satnogs diff --git a/lib/morse_decoder_impl.cc b/lib/morse_decoder_impl.cc index 75d6b1c..c86fb36 100644 --- a/lib/morse_decoder_impl.cc +++ b/lib/morse_decoder_impl.cc @@ -32,10 +32,10 @@ namespace gr { morse_decoder::sptr - morse_decoder::make (char unrecognized_char) + morse_decoder::make (char unrecognized_char, size_t min_frame_len) { return gnuradio::get_initial_sptr ( - new morse_decoder_impl (unrecognized_char)); + new morse_decoder_impl (unrecognized_char, min_frame_len)); } void @@ -69,9 +69,11 @@ namespace gr break; } str = d_morse_tree.get_word (); - d_morse_tree.reset (); - message_port_pub (pmt::mp ("out"), - pmt::make_blob (str.c_str (), str.length ())); + if (str.length () > d_min_frame_len) { + d_morse_tree.reset (); + message_port_pub (pmt::mp ("out"), + pmt::make_blob (str.c_str (), str.length ())); + } break; case MORSE_INTRA_SPACE: /*Ignore it */ @@ -98,10 +100,13 @@ namespace gr /* * The private constructor */ - morse_decoder_impl::morse_decoder_impl (char unrecognized_char) : + morse_decoder_impl::morse_decoder_impl (char unrecognized_char, + size_t min_frame_len) : gr::block ("morse_decoder", gr::io_signature::make (0, 0, 0), gr::io_signature::make (0, 0, 0)), - d_morse_tree (unrecognized_char) + d_morse_tree (unrecognized_char), + d_min_frame_len (min_frame_len) + { /* Register the input and output msg handler */ message_port_register_in (pmt::mp ("in")); diff --git a/lib/morse_decoder_impl.h b/lib/morse_decoder_impl.h index cf5a253..0094e46 100644 --- a/lib/morse_decoder_impl.h +++ b/lib/morse_decoder_impl.h @@ -31,12 +31,13 @@ namespace gr { { private: morse_tree d_morse_tree; + size_t d_min_frame_len; void symbol_msg_handler(pmt::pmt_t msg); public: - morse_decoder_impl(char unrecognized_char); + morse_decoder_impl(char unrecognized_char, size_t min_frame_len); };