Add minimum frame length on the morse decoder

This commit is contained in:
Nikos Karamolegkos 2018-02-01 21:59:45 +02:00
parent de05c3f1c4
commit 12a2aa0090
5 changed files with 38 additions and 11 deletions

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<?grc format='1' created='3.7.10'?> <?grc format='1' created='3.7.11'?>
<flow_graph> <flow_graph>
<timestamp>Fri Jan 22 20:01:21 2016</timestamp> <timestamp>Fri Jan 22 20:01:21 2016</timestamp>
<block> <block>
@ -131,6 +131,14 @@
<key>debug_seq</key> <key>debug_seq</key>
<value>"SATNOGS HELLO EARTH WORLD 123456789"</value> <value>"SATNOGS HELLO EARTH WORLD 123456789"</value>
</param> </param>
<param>
<key>seq_pause_ms</key>
<value>1000</value>
</param>
<param>
<key>wpm</key>
<value>20</value>
</param>
</block> </block>
<block> <block>
<key>satnogs_morse_decoder</key> <key>satnogs_morse_decoder</key>
@ -170,6 +178,10 @@
<key>minoutbuf</key> <key>minoutbuf</key>
<value>0</value> <value>0</value>
</param> </param>
<param>
<key>min_frame_len</key>
<value>3</value>
</param>
<param> <param>
<key>unrecognized_char</key> <key>unrecognized_char</key>
<value>ord('#')</value> <value>ord('#')</value>

View File

@ -3,7 +3,7 @@
<name>Morse Decoder</name> <name>Morse Decoder</name>
<key>satnogs_morse_decoder</key> <key>satnogs_morse_decoder</key>
<import>import satnogs</import> <import>import satnogs</import>
<make>satnogs.morse_decoder($unrecognized_char)</make> <make>satnogs.morse_decoder($unrecognized_char, $min_frame_len)</make>
<param> <param>
<name>Unrecognized character</name> <name>Unrecognized character</name>
@ -11,6 +11,13 @@
<value>ord('#')</value> <value>ord('#')</value>
<type>int</type> <type>int</type>
</param> </param>
<param>
<name>Minimum frame length</name>
<key>min_frame_len</key>
<value>3</value>
<type>int</type>
</param>
<sink> <sink>

View File

@ -42,8 +42,10 @@ namespace gr {
* @param unrecognized_char the character that will be placed * @param unrecognized_char the character that will be placed
* in situations where the decoder can not decide which character * in situations where the decoder can not decide which character
* was received. * 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 } // namespace satnogs

View File

@ -32,10 +32,10 @@ namespace gr
{ {
morse_decoder::sptr 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 ( return gnuradio::get_initial_sptr (
new morse_decoder_impl (unrecognized_char)); new morse_decoder_impl (unrecognized_char, min_frame_len));
} }
void void
@ -69,9 +69,11 @@ namespace gr
break; break;
} }
str = d_morse_tree.get_word (); str = d_morse_tree.get_word ();
d_morse_tree.reset (); if (str.length () > d_min_frame_len) {
message_port_pub (pmt::mp ("out"), d_morse_tree.reset ();
pmt::make_blob (str.c_str (), str.length ())); message_port_pub (pmt::mp ("out"),
pmt::make_blob (str.c_str (), str.length ()));
}
break; break;
case MORSE_INTRA_SPACE: case MORSE_INTRA_SPACE:
/*Ignore it */ /*Ignore it */
@ -98,10 +100,13 @@ namespace gr
/* /*
* The private constructor * 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::block ("morse_decoder", gr::io_signature::make (0, 0, 0),
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 */ /* Register the input and output msg handler */
message_port_register_in (pmt::mp ("in")); message_port_register_in (pmt::mp ("in"));

View File

@ -31,12 +31,13 @@ namespace gr {
{ {
private: private:
morse_tree d_morse_tree; morse_tree d_morse_tree;
size_t d_min_frame_len;
void void
symbol_msg_handler(pmt::pmt_t msg); symbol_msg_handler(pmt::pmt_t msg);
public: public:
morse_decoder_impl(char unrecognized_char); morse_decoder_impl(char unrecognized_char, size_t min_frame_len);
}; };