Improved Morse decoding
The AGC block in the Morse decoding flowgraph is placed now at the proper position. The output of the matched filter produces now a clear and distinguishable signal during the presence of a pulse. This makes the work for the signal to symbol decoder more easy.
This commit is contained in:
parent
f8b847077e
commit
1e210087f3
|
@ -97,7 +97,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(136, 120)</value>
|
||||
<value>(216, 25)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>gui_hint</key>
|
||||
|
@ -171,6 +171,96 @@
|
|||
<value>8000</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>variable_qtgui_range</key>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>value</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(392, 49)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>gui_hint</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>switch</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>label</key>
|
||||
<value>Switch</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>min_len</key>
|
||||
<value>200</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>orient</key>
|
||||
<value>Qt.Horizontal</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>start</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>step</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>stop</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>rangeType</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>widget</key>
|
||||
<value>counter_slider</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>variable</key>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(16, 237)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>taps</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>value</key>
|
||||
<value>12</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>analog_agc2_xx</key>
|
||||
<param>
|
||||
|
@ -199,7 +289,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(672, 320)</value>
|
||||
<value>(584, 368)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -211,7 +301,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>analog_agc2_xx_0</value>
|
||||
<value>analog_agc2_xx_0_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>max_gain</key>
|
||||
|
@ -293,53 +383,6 @@
|
|||
<value>8192</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>audio_sink</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>device_name</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(1032, 348)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>audio_sink_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>num_inputs</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>ok_to_block</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>samp_rate</key>
|
||||
<value>samp_rate</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_add_xx</key>
|
||||
<param>
|
||||
|
@ -391,6 +434,57 @@
|
|||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_file_sink</key>
|
||||
<param>
|
||||
<key>append</key>
|
||||
<value>False</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>file</key>
|
||||
<value>/home/surligas/test.dat</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(1104, 296)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>blocks_file_sink_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>type</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>unbuffered</key>
|
||||
<value>False</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>vlen</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_moving_average_xx</key>
|
||||
<param>
|
||||
|
@ -411,7 +505,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(728, 134)</value>
|
||||
<value>(880, 158)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -423,7 +517,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>length</key>
|
||||
<value>8</value>
|
||||
<value>taps</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>max_iter</key>
|
||||
|
@ -470,7 +564,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(344, 276)</value>
|
||||
<value>(216, 276)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -497,6 +591,108 @@
|
|||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_multiply_const_vxx</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>const</key>
|
||||
<value>const</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(416, 396)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>blocks_multiply_const_vxx_0_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>type</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>vlen</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_multiply_const_vxx</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>const</key>
|
||||
<value>switch</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>2</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(872, 340)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>180</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>blocks_multiply_const_vxx_1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>type</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>vlen</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_multiply_xx</key>
|
||||
<param>
|
||||
|
@ -517,7 +713,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(616, 136)</value>
|
||||
<value>(768, 256)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -548,6 +744,61 @@
|
|||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_throttle</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(368, 276)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>blocks_throttle_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>ignoretag</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>samples_per_second</key>
|
||||
<value>samp_rate</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>type</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>vlen</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_wavfile_source</key>
|
||||
<param>
|
||||
|
@ -572,7 +823,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(96, 237)</value>
|
||||
<value>(40, 365)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -631,7 +882,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(1032, 166)</value>
|
||||
<value>(1096, 110)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>gui_hint</key>
|
||||
|
@ -735,7 +986,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>label3</key>
|
||||
<value>Square</value>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>marker3</key>
|
||||
|
@ -899,7 +1150,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>nconnections</key>
|
||||
<value>3</value>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>size</key>
|
||||
|
@ -958,6 +1209,37 @@
|
|||
<value>-1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>satnogs_clear_text_msg_sink</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(1080, 544)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>satnogs_clear_text_msg_sink_0</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>satnogs_cw_matched_filter_ff</key>
|
||||
<param>
|
||||
|
@ -982,7 +1264,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(480, 262)</value>
|
||||
<value>(536, 270)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -1009,27 +1291,107 @@
|
|||
<value>20</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>satnogs_cw_to_symbol</key>
|
||||
<param>
|
||||
<key>threshold</key>
|
||||
<value>20e3</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>conf_level</key>
|
||||
<value>0.85</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(856, 383)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>satnogs_cw_to_symbol_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>sampling_rate</key>
|
||||
<value>samp_rate</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>wpm</key>
|
||||
<value>20</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>satnogs_morse_decoder</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(848, 540)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>satnogs_morse_decoder_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>unrecognized_char</key>
|
||||
<value>ord('#')</value>
|
||||
</param>
|
||||
</block>
|
||||
<connection>
|
||||
<source_block_id>analog_agc2_xx_0</source_block_id>
|
||||
<sink_block_id>audio_sink_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>analog_agc2_xx_0</source_block_id>
|
||||
<sink_block_id>blocks_multiply_xx_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>analog_agc2_xx_0</source_block_id>
|
||||
<sink_block_id>blocks_multiply_xx_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>1</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>analog_agc2_xx_0</source_block_id>
|
||||
<sink_block_id>qtgui_time_sink_x_0</sink_block_id>
|
||||
<source_block_id>analog_agc2_xx_0_0</source_block_id>
|
||||
<sink_block_id>satnogs_cw_matched_filter_ff_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
|
@ -1045,15 +1407,39 @@
|
|||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_moving_average_xx_0</source_block_id>
|
||||
<sink_block_id>blocks_file_sink_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_moving_average_xx_0</source_block_id>
|
||||
<sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_moving_average_xx_0</source_block_id>
|
||||
<sink_block_id>qtgui_time_sink_x_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>2</sink_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_multiply_const_vxx_0</source_block_id>
|
||||
<sink_block_id>satnogs_cw_matched_filter_ff_0</sink_block_id>
|
||||
<sink_block_id>blocks_throttle_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_multiply_const_vxx_0_0</source_block_id>
|
||||
<sink_block_id>analog_agc2_xx_0_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_multiply_const_vxx_1</source_block_id>
|
||||
<sink_block_id>satnogs_cw_to_symbol_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
|
@ -1063,6 +1449,12 @@
|
|||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_throttle_0</source_block_id>
|
||||
<sink_block_id>blocks_multiply_const_vxx_0_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_wavfile_source_0</source_block_id>
|
||||
<sink_block_id>blocks_add_xx_0</sink_block_id>
|
||||
|
@ -1071,14 +1463,26 @@
|
|||
</connection>
|
||||
<connection>
|
||||
<source_block_id>satnogs_cw_matched_filter_ff_0</source_block_id>
|
||||
<sink_block_id>analog_agc2_xx_0</sink_block_id>
|
||||
<sink_block_id>blocks_multiply_xx_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>satnogs_cw_matched_filter_ff_0</source_block_id>
|
||||
<sink_block_id>qtgui_time_sink_x_0</sink_block_id>
|
||||
<sink_block_id>blocks_multiply_xx_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>1</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>satnogs_cw_to_symbol_0</source_block_id>
|
||||
<sink_block_id>satnogs_morse_decoder_0</sink_block_id>
|
||||
<source_key>out</source_key>
|
||||
<sink_key>in</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>satnogs_morse_decoder_0</source_block_id>
|
||||
<sink_block_id>satnogs_clear_text_msg_sink_0</sink_block_id>
|
||||
<source_key>out</source_key>
|
||||
<sink_key>in</sink_key>
|
||||
</connection>
|
||||
</flow_graph>
|
||||
|
|
|
@ -81,6 +81,69 @@
|
|||
<value></value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>variable_qtgui_range</key>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>value</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(152, 113)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>gui_hint</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>const</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>label</key>
|
||||
<value>Signal Amplitude</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>min_len</key>
|
||||
<value>200</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>orient</key>
|
||||
<value>Qt.Horizontal</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>start</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>step</key>
|
||||
<value>0.01</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>stop</key>
|
||||
<value>5</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>rangeType</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>widget</key>
|
||||
<value>counter_slider</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>variable</key>
|
||||
<param>
|
||||
|
@ -108,6 +171,33 @@
|
|||
<value>8000</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>variable</key>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(8, 229)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>taps</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>value</key>
|
||||
<value>12</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>analog_agc2_xx</key>
|
||||
<param>
|
||||
|
@ -128,7 +218,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>decay_rate</key>
|
||||
<value>2e-6</value>
|
||||
<value>6.25e-4</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
|
@ -136,7 +226,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(752, 320)</value>
|
||||
<value>(536, 384)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -148,7 +238,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>analog_agc2_xx_0</value>
|
||||
<value>analog_agc2_xx_0_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>max_gain</key>
|
||||
|
@ -230,53 +320,6 @@
|
|||
<value>8192</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>audio_sink</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>device_name</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(1032, 348)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>audio_sink_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>num_inputs</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>ok_to_block</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>samp_rate</key>
|
||||
<value>samp_rate</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_add_xx</key>
|
||||
<param>
|
||||
|
@ -297,7 +340,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(416, 440)</value>
|
||||
<value>(240, 344)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -328,6 +371,218 @@
|
|||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_moving_average_xx</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(936, 150)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>blocks_moving_average_xx_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>length</key>
|
||||
<value>taps</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>max_iter</key>
|
||||
<value>4000</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>scale</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>type</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_multiply_const_vxx</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>const</key>
|
||||
<value>const</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(424, 508)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>blocks_multiply_const_vxx_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>type</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>vlen</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_multiply_xx</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(768, 176)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>blocks_multiply_xx_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>type</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>num_inputs</key>
|
||||
<value>2</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>vlen</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_throttle</key>
|
||||
<param>
|
||||
<key>alias</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>comment</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>affinity</key>
|
||||
<value></value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_enabled</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(344, 356)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>id</key>
|
||||
<value>blocks_throttle_0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>ignoretag</key>
|
||||
<value>True</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>maxoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>minoutbuf</key>
|
||||
<value>0</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>samples_per_second</key>
|
||||
<value>samp_rate</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>type</key>
|
||||
<value>float</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>vlen</key>
|
||||
<value>1</value>
|
||||
</param>
|
||||
</block>
|
||||
<block>
|
||||
<key>blocks_wavfile_source</key>
|
||||
<param>
|
||||
|
@ -411,7 +666,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(952, 166)</value>
|
||||
<value>(1112, 166)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>gui_hint</key>
|
||||
|
@ -679,7 +934,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>nconnections</key>
|
||||
<value>2</value>
|
||||
<value>1</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>size</key>
|
||||
|
@ -762,7 +1017,7 @@
|
|||
</param>
|
||||
<param>
|
||||
<key>_coordinate</key>
|
||||
<value>(536, 222)</value>
|
||||
<value>(488, 182)</value>
|
||||
</param>
|
||||
<param>
|
||||
<key>_rotation</key>
|
||||
|
@ -790,14 +1045,8 @@
|
|||
</param>
|
||||
</block>
|
||||
<connection>
|
||||
<source_block_id>analog_agc2_xx_0</source_block_id>
|
||||
<sink_block_id>audio_sink_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>analog_agc2_xx_0</source_block_id>
|
||||
<sink_block_id>qtgui_time_sink_x_0</sink_block_id>
|
||||
<source_block_id>analog_agc2_xx_0_0</source_block_id>
|
||||
<sink_block_id>satnogs_cw_matched_filter_ff_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
|
@ -809,7 +1058,31 @@
|
|||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_add_xx_0</source_block_id>
|
||||
<sink_block_id>satnogs_cw_matched_filter_ff_0</sink_block_id>
|
||||
<sink_block_id>blocks_throttle_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_moving_average_xx_0</source_block_id>
|
||||
<sink_block_id>qtgui_time_sink_x_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_multiply_const_vxx_0</source_block_id>
|
||||
<sink_block_id>analog_agc2_xx_0_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_multiply_xx_0</source_block_id>
|
||||
<sink_block_id>blocks_moving_average_xx_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>blocks_throttle_0</source_block_id>
|
||||
<sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
|
@ -821,13 +1094,13 @@
|
|||
</connection>
|
||||
<connection>
|
||||
<source_block_id>satnogs_cw_matched_filter_ff_0</source_block_id>
|
||||
<sink_block_id>analog_agc2_xx_0</sink_block_id>
|
||||
<sink_block_id>blocks_multiply_xx_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>0</sink_key>
|
||||
</connection>
|
||||
<connection>
|
||||
<source_block_id>satnogs_cw_matched_filter_ff_0</source_block_id>
|
||||
<sink_block_id>qtgui_time_sink_x_0</sink_block_id>
|
||||
<sink_block_id>blocks_multiply_xx_0</sink_block_id>
|
||||
<source_key>0</source_key>
|
||||
<sink_key>1</sink_key>
|
||||
</connection>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<key>satnogs_cw_to_symbol</key>
|
||||
<category>satnogs</category>
|
||||
<import>import satnogs</import>
|
||||
<make>satnogs.cw_to_symbol($sampling_rate, $threshold, $wpm)</make>
|
||||
<make>satnogs.cw_to_symbol($sampling_rate, $threshold, $conf_level, $wpm)</make>
|
||||
|
||||
<param>
|
||||
<name>Sampling Rate</name>
|
||||
|
@ -18,6 +18,13 @@
|
|||
<key>threshold</key>
|
||||
<type>real</type>
|
||||
</param>
|
||||
|
||||
<param>
|
||||
<name>Confidence Level</name>
|
||||
<key>conf_level</key>
|
||||
<value>0.9</value>
|
||||
<type>real</type>
|
||||
</param>
|
||||
|
||||
<param>
|
||||
<name>Words per Minute</name>
|
||||
|
|
|
@ -51,9 +51,15 @@ namespace gr {
|
|||
*
|
||||
* @param sampling_rate the sampling rate of the signal
|
||||
* @param threshold the activation threshold
|
||||
* @param conf_level the confidence level, for the decisions made by
|
||||
* the decoder. Higher values, means that the decoder would be more
|
||||
* conservative, whereas lower may help in noisy environments but may
|
||||
* trigger false alarms too, especially for the case of short pauses
|
||||
* symbols
|
||||
* @param wpm Morse code Words per Minute
|
||||
*/
|
||||
static sptr make(double sampling_rate, float threshold, size_t wpm = 20);
|
||||
static sptr make(double sampling_rate, float threshold,
|
||||
float conf_level = 0.9, size_t wpm = 20);
|
||||
};
|
||||
|
||||
} // namespace satnogs
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
|
||||
#include <gnuradio/io_signature.h>
|
||||
#include <satnogs/log.h>
|
||||
#include <satnogs/morse.h>
|
||||
#include "cw_to_symbol_impl.h"
|
||||
|
||||
namespace gr
|
||||
|
@ -33,34 +32,42 @@ namespace gr
|
|||
{
|
||||
|
||||
cw_to_symbol::sptr
|
||||
cw_to_symbol::make (double sampling_rate, float threshold, size_t wpm)
|
||||
cw_to_symbol::make (double sampling_rate, float threshold,
|
||||
float conf_level, size_t wpm)
|
||||
{
|
||||
return gnuradio::get_initial_sptr (
|
||||
new cw_to_symbol_impl (sampling_rate, threshold, wpm));
|
||||
new cw_to_symbol_impl (sampling_rate, threshold, conf_level, wpm));
|
||||
}
|
||||
|
||||
/*
|
||||
* The private constructor
|
||||
*/
|
||||
cw_to_symbol_impl::cw_to_symbol_impl (double sampling_rate, float threshold,
|
||||
size_t wpm) :
|
||||
float conf_level, size_t wpm) :
|
||||
gr::sync_block ("cw_to_symbol",
|
||||
gr::io_signature::make (1, 1, sizeof(float)),
|
||||
gr::io_signature::make (0, 0, 0)),
|
||||
d_sampling_rate(sampling_rate),
|
||||
d_act_thrshld(threshold),
|
||||
d_confidence_level(0.90),
|
||||
d_confidence_level(conf_level),
|
||||
d_dot_samples((1.2/wpm) / (1.0 / sampling_rate)),
|
||||
d_dash_samples(3 * d_dot_samples),
|
||||
d_short_pause_samples(3 * d_dot_samples),
|
||||
d_long_pause_samples(7 * d_dot_samples),
|
||||
d_state(IDLE),
|
||||
d_state_cnt(0),
|
||||
d_pause_cnt(0)
|
||||
d_pause_cnt(0),
|
||||
d_seq_started(false)
|
||||
{
|
||||
message_port_register_out(pmt::mp("out"));
|
||||
}
|
||||
|
||||
inline void
|
||||
cw_to_symbol_impl::send_symbol_msg (morse_symbol_t s)
|
||||
{
|
||||
message_port_pub(pmt::mp("out"), pmt::from_long(s));
|
||||
}
|
||||
|
||||
/*
|
||||
* Our virtual destructor.
|
||||
*/
|
||||
|
@ -71,6 +78,7 @@ namespace gr
|
|||
inline void
|
||||
cw_to_symbol_impl::set_idle ()
|
||||
{
|
||||
LOG_WARN("Enter IDLE");
|
||||
d_state = IDLE;
|
||||
d_state_cnt = 0;
|
||||
d_pause_cnt = 0;
|
||||
|
@ -79,33 +87,32 @@ namespace gr
|
|||
inline void
|
||||
cw_to_symbol_impl::set_short_on ()
|
||||
{
|
||||
LOG_WARN("Enter SHORT ON");
|
||||
d_state = SHORT_ON_PERIOD;
|
||||
d_state_cnt = 1;
|
||||
d_pause_cnt = 0;
|
||||
}
|
||||
|
||||
inline void
|
||||
cw_to_symbol_impl::set_long_on ()
|
||||
{
|
||||
LOG_WARN("Enter LONG ON");
|
||||
d_state = LONG_ON_PERIOD;
|
||||
d_pause_cnt = 0;
|
||||
}
|
||||
|
||||
inline void
|
||||
cw_to_symbol_impl::set_short_off (size_t borrow_cnt)
|
||||
cw_to_symbol_impl::set_short_off ()
|
||||
{
|
||||
LOG_WARN("Enter SHORT OFF");
|
||||
d_state = SHORT_OFF_PERIOD;
|
||||
d_state_cnt = 0;
|
||||
d_pause_cnt += borrow_cnt;
|
||||
|
||||
/* Due to time-slots borrowing we may be already at the Long pause */
|
||||
if(d_pause_cnt > d_short_pause_samples) {
|
||||
d_state = LONG_OFF_PERIOD;
|
||||
}
|
||||
d_pause_cnt = 1;
|
||||
}
|
||||
|
||||
inline void
|
||||
cw_to_symbol_impl::set_long_off ()
|
||||
{
|
||||
LOG_WARN("Enter LONG OFF");
|
||||
d_state = LONG_OFF_PERIOD;
|
||||
}
|
||||
|
||||
|
@ -124,7 +131,6 @@ namespace gr
|
|||
if(in[i] > d_act_thrshld) {
|
||||
set_short_on();
|
||||
}
|
||||
// TODO Avoid unnecessary pause messages
|
||||
break;
|
||||
|
||||
case SHORT_ON_PERIOD:
|
||||
|
@ -140,17 +146,16 @@ namespace gr
|
|||
* Before going to short pause, check the confidence level.
|
||||
* Perhaps a short symbol should be produced.
|
||||
*
|
||||
* Otherwise, it was a false alarm. So the time-slots counted
|
||||
* so far should be assigned as pause time-slots.
|
||||
* Otherwise, it was a false alarm.
|
||||
*/
|
||||
conf_lvl = ((float) d_state_cnt) / d_dot_samples;
|
||||
if(conf_lvl > d_confidence_level){
|
||||
message_port_pub(pmt::mp("out"), pmt::from_long(MORSE_DOT));
|
||||
set_short_off(0);
|
||||
}
|
||||
else{
|
||||
set_short_off(d_state_cnt);
|
||||
LOG_DEBUG("Short space");
|
||||
send_symbol_msg(MORSE_S_SPACE);
|
||||
}
|
||||
|
||||
/* Go find a possible short pause symbol */
|
||||
set_short_off();
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -158,25 +163,37 @@ namespace gr
|
|||
if( in[i] > d_act_thrshld ) {
|
||||
d_state_cnt++;
|
||||
}
|
||||
else{
|
||||
/*
|
||||
* In this case the FSM should continue at the SHORT_OFF state.
|
||||
* Before this depending the confidence for a long pulse, produce
|
||||
* a short or long pulse message
|
||||
*/
|
||||
else {
|
||||
conf_lvl = ((float) d_state_cnt) / d_dash_samples;
|
||||
if(conf_lvl > d_confidence_level){
|
||||
message_port_pub(pmt::mp("out"), pmt::from_long(MORSE_DASH));
|
||||
if(conf_lvl > d_confidence_level) {
|
||||
LOG_DEBUG("DASH");
|
||||
send_symbol_msg(MORSE_DASH);
|
||||
set_short_off();
|
||||
break;
|
||||
}
|
||||
else{
|
||||
message_port_pub(pmt::mp("out"), pmt::from_long(MORSE_DOT));
|
||||
|
||||
/* Perhaps this was a short on symbol */
|
||||
conf_lvl = ((float) d_state_cnt) / d_dot_samples;
|
||||
if(conf_lvl > d_confidence_level) {
|
||||
LOG_DEBUG("DOT");
|
||||
send_symbol_msg(MORSE_DOT);
|
||||
set_short_off();
|
||||
}
|
||||
set_short_off(0);
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case SHORT_OFF_PERIOD:
|
||||
if(in[i] > d_act_thrshld) {
|
||||
/*
|
||||
* Before going to ON state, again check if a short pause symbol
|
||||
* should be produced
|
||||
*/
|
||||
conf_lvl = ((float) d_pause_cnt) / d_short_pause_samples;
|
||||
if(conf_lvl > d_confidence_level) {
|
||||
LOG_DEBUG("Short space");
|
||||
send_symbol_msg(MORSE_S_SPACE);
|
||||
}
|
||||
set_short_on();
|
||||
}
|
||||
else {
|
||||
|
@ -186,14 +203,32 @@ namespace gr
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case LONG_OFF_PERIOD:
|
||||
if(in[i] > d_act_thrshld) {
|
||||
conf_lvl = ((float) d_pause_cnt) / d_long_pause_samples;
|
||||
if (conf_lvl > d_confidence_level) {
|
||||
LOG_DEBUG("Long space");
|
||||
send_symbol_msg (MORSE_L_SPACE);
|
||||
set_idle();
|
||||
break;
|
||||
}
|
||||
else {
|
||||
LOG_DEBUG("Short space");
|
||||
send_symbol_msg (MORSE_S_SPACE);
|
||||
}
|
||||
set_short_on();
|
||||
}
|
||||
else {
|
||||
d_pause_cnt++;
|
||||
/*
|
||||
* If the pause duration is greater than the long pause symbol,
|
||||
* definitely a long pause symbol should be produced
|
||||
*/
|
||||
if(d_pause_cnt > d_long_pause_samples) {
|
||||
message_port_pub(pmt::mp("out"), pmt::from_long(MORSE_L_SPACE));
|
||||
LOG_DEBUG("Long space");
|
||||
send_symbol_msg(MORSE_L_SPACE);
|
||||
d_seq_started = false;
|
||||
set_idle();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#ifndef INCLUDED_SATNOGS_CW_TO_SYMBOL_IMPL_H
|
||||
#define INCLUDED_SATNOGS_CW_TO_SYMBOL_IMPL_H
|
||||
|
||||
#include <satnogs/morse.h>
|
||||
#include <satnogs/cw_to_symbol.h>
|
||||
|
||||
namespace gr
|
||||
|
@ -48,6 +49,7 @@ namespace gr
|
|||
cw_state_t d_state;
|
||||
size_t d_state_cnt;
|
||||
size_t d_pause_cnt;
|
||||
bool d_seq_started;
|
||||
|
||||
inline void
|
||||
set_idle ();
|
||||
|
@ -59,13 +61,17 @@ namespace gr
|
|||
set_long_on ();
|
||||
|
||||
inline void
|
||||
set_short_off (size_t borrow_cnt);
|
||||
set_short_off ();
|
||||
|
||||
inline void
|
||||
set_long_off ();
|
||||
|
||||
inline void
|
||||
send_symbol_msg (morse_symbol_t s);
|
||||
|
||||
public:
|
||||
cw_to_symbol_impl (double sampling_rate, float threshold, size_t wpm);
|
||||
cw_to_symbol_impl (double sampling_rate, float threshold,
|
||||
float conf_level, size_t wpm);
|
||||
~cw_to_symbol_impl ();
|
||||
|
||||
// Where all the action really happens
|
||||
|
|
|
@ -56,6 +56,11 @@ namespace gr
|
|||
* word
|
||||
*/
|
||||
case MORSE_L_SPACE:
|
||||
/* Just ignore the word separator if no word is yet decoded */
|
||||
if (d_morse_tree.get_word_len() == 0) {
|
||||
res = true;
|
||||
break;
|
||||
}
|
||||
str = d_morse_tree.get_word();
|
||||
d_morse_tree.reset();
|
||||
message_port_pub(pmt::mp("out"), pmt::make_blob(str.c_str(),
|
||||
|
|
|
@ -217,6 +217,13 @@ namespace gr
|
|||
}
|
||||
break;
|
||||
case MORSE_S_SPACE:
|
||||
/*
|
||||
* A short space received, but the decoder is still at the root.
|
||||
* This is not in general an error so we return true
|
||||
*/
|
||||
if(d_current == d_root){
|
||||
return true;
|
||||
}
|
||||
c = d_current->get_char ();
|
||||
d_current = d_root;
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue