diff options
-rw-r--r-- | grc/receiver/gsm_input.xml | 2 | ||||
-rw-r--r-- | hier_blocks/receiver/gsm_input.grc | 490 | ||||
-rw-r--r-- | python/receiver/gsm_input.py | 35 |
3 files changed, 289 insertions, 238 deletions
diff --git a/grc/receiver/gsm_input.xml b/grc/receiver/gsm_input.xml index 8ecf696..52445da 100644 --- a/grc/receiver/gsm_input.xml +++ b/grc/receiver/gsm_input.xml @@ -47,7 +47,7 @@ <vlen>1</vlen> </sink> <sink> - <name>ppm_in</name> + <name>ctrl_in</name> <type>message</type> <optional>True</optional> </sink> diff --git a/hier_blocks/receiver/gsm_input.grc b/hier_blocks/receiver/gsm_input.grc index 685f0b2..300dff5 100644 --- a/hier_blocks/receiver/gsm_input.grc +++ b/hier_blocks/receiver/gsm_input.grc @@ -1,42 +1,70 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.6'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.9'?> <flow_graph> <timestamp>Thu Nov 6 14:41:06 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>gsm_input</value> + <key>author</key> + <value>Piotr Krysik</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>window_size</key> + <value>1280, 1024</value> </param> <param> - <key>title</key> - <value>GSM input adaptor</value> + <key>category</key> + <value></value> </param> <param> - <key>author</key> - <value>Piotr Krysik</value> + <key>comment</key> + <value></value> </param> <param> <key>description</key> <value>Adaptor of input stream for the GSM receiver. Contains frequency ofset corrector doing also resampling to integer multiplies of GSM sample rate and LP filter filtering GSM channel.</value> </param> <param> - <key>window_size</key> - <value>1280, 1024</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(10, 10)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> </param> <param> <key>generate_options</key> <value>hb</value> </param> <param> - <key>category</key> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>gsm_input</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>qt_qss_theme</key> + <value></value> + </param> + <param> + <key>realtime_scheduling</key> <value></value> </param> <param> + <key>run_command</key> + <value>{python} -u {filename}</value> + </param> + <param> <key>run_options</key> <value>prompt</value> </param> @@ -45,214 +73,254 @@ <value>True</value> </param> <param> - <key>max_nouts</key> - <value>0</value> + <key>thread_safe_setters</key> + <value></value> </param> <param> - <key>realtime_scheduling</key> - <value></value> + <key>title</key> + <value>GSM input adaptor</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(10, 10)</value> + <value>(632, 19)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> <value>samp_rate_out</value> </param> <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> <key>value</key> <value>1625000.0/6.0*osr</value> </param> + </block> + <block> + <key>pad_source</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(632, 19)</value> + <value>(56, 188)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>parameter</key> <param> <key>id</key> - <value>ppm</value> + <value>ctrl_in</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>ctrl_in</value> </param> <param> - <key>label</key> - <value>ppm</value> + <key>num_streams</key> + <value>1</value> </param> <param> - <key>value</key> - <value>0</value> + <key>optional</key> + <value>True</value> </param> <param> <key>type</key> - <value>eng_float</value> + <value>message</value> </param> <param> - <key>short_id</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>parameter</key> <param> <key>alias</key> <value></value> </param> <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(453, 22)</value> + <value>(231, 22)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>parameter</key> <param> <key>id</key> - <value>osr</value> + <value>fc</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>fc</value> </param> <param> - <key>label</key> - <value>OSR</value> + <key>short_id</key> + <value></value> + </param> + <param> + <key>type</key> + <value>eng_float</value> </param> <param> <key>value</key> - <value>4</value> + <value>940e6</value> </param> + </block> + <block> + <key>fractional_resampler_xx</key> <param> - <key>type</key> - <value>intx</value> + <key>alias</key> + <value></value> </param> <param> - <key>short_id</key> + <key>comment</key> <value></value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(541, 23)</value> + <value>(488, 217)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>parameter</key> <param> <key>id</key> - <value>fc</value> + <value>fractional_resampler_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>label</key> - <value>fc</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>value</key> - <value>940e6</value> + <key>phase_shift</key> + <value>0</value> + </param> + <param> + <key>resamp_ratio</key> + <value>samp_rate_in/samp_rate_out</value> </param> <param> <key>type</key> - <value>eng_float</value> + <value>complex</value> </param> + </block> + <block> + <key>gsm_clock_offset_corrector_tagged</key> <param> - <key>short_id</key> + <key>alias</key> <value></value> </param> <param> - <key>alias</key> + <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>(231, 22)</value> + <value>(224, 198)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>parameter</key> <param> <key>id</key> - <value>samp_rate_in</value> + <value>gsm_clock_offset_corrector_tagged_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>label</key> - <value>samp_rate_in</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>value</key> - <value>1e6</value> + <key>fc</key> + <value>fc</value> </param> <param> - <key>type</key> - <value>eng_float</value> + <key>ppm</key> + <value>ppm</value> </param> <param> - <key>short_id</key> - <value></value> + <key>samp_rate_in</key> + <value>samp_rate_in</value> + </param> + </block> + <block> + <key>low_pass_filter</key> + <param> + <key>beta</key> + <value>6.76</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(328, 22)</value> + <key>comment</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> - </block> - <block> - <key>low_pass_filter</key> <param> - <key>id</key> - <value>low_pass_filter_0_0</value> + <key>cutoff_freq</key> + <value>125e3</value> + </param> + <param> + <key>decim</key> + <value>1</value> </param> <param> <key>_enabled</key> @@ -263,24 +331,36 @@ <value>fir_filter_ccf</value> </param> <param> - <key>decim</key> + <key>_coordinate</key> + <value>(712, 186)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>gain</key> <value>1</value> </param> <param> + <key>id</key> + <value>low_pass_filter_0_0</value> + </param> + <param> <key>interp</key> <value>1</value> </param> <param> - <key>gain</key> - <value>1</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate_out</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>cutoff_freq</key> - <value>125e3</value> + <key>samp_rate</key> + <value>samp_rate_out</value> </param> <param> <key>width</key> @@ -290,144 +370,120 @@ <key>win</key> <value>firdes.WIN_HAMMING</value> </param> - <param> - <key>beta</key> - <value>6.76</value> - </param> + </block> + <block> + <key>parameter</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(704, 179)</value> + <value>(541, 23)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>pad_sink</key> <param> <key>id</key> - <value>pad_sink_0</value> + <value>osr</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>OSR</value> </param> <param> - <key>label</key> - <value>out</value> + <key>short_id</key> + <value></value> </param> <param> <key>type</key> - <value>complex</value> + <value>intx</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>value</key> + <value>4</value> </param> + </block> + <block> + <key>pad_sink</key> <param> - <key>num_streams</key> - <value>1</value> + <key>comment</key> + <value></value> </param> <param> - <key>optional</key> - <value>False</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(904, 227)</value> + <value>(904, 228)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>fractional_resampler_xx</key> <param> <key>id</key> - <value>fractional_resampler_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>pad_sink_0</value> </param> <param> <key>type</key> <value>complex</value> </param> <param> - <key>phase_shift</key> - <value>0</value> + <key>label</key> + <value>out</value> </param> <param> - <key>resamp_ratio</key> - <value>samp_rate_in/samp_rate_out</value> + <key>num_streams</key> + <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>optional</key> + <value>False</value> </param> <param> - <key>affinity</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>pad_source</key> <param> - <key>minoutbuf</key> - <value>0</value> + <key>comment</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(488, 216)</value> + <value>(56, 236)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>pad_source</key> <param> <key>id</key> <value>pad_source_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> <key>label</key> <value>in</value> </param> <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> <key>num_streams</key> <value>1</value> </param> @@ -436,105 +492,105 @@ <value>False</value> </param> <param> - <key>_coordinate</key> - <value>(56, 179)</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>vlen</key> + <value>1</value> </param> </block> <block> - <key>pad_source</key> + <key>parameter</key> <param> - <key>id</key> - <value>ppm_in</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>ppm_in</value> + <key>_coordinate</key> + <value>(453, 22)</value> </param> <param> - <key>type</key> - <value>message</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>id</key> + <value>ppm</value> </param> <param> - <key>num_streams</key> - <value>1</value> + <key>label</key> + <value>ppm</value> </param> <param> - <key>optional</key> - <value>True</value> + <key>short_id</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(56, 243)</value> + <key>type</key> + <value>eng_float</value> </param> <param> - <key>_rotation</key> + <key>value</key> <value>0</value> </param> </block> <block> - <key>gsm_clock_offset_corrector</key> + <key>parameter</key> <param> - <key>id</key> - <value>gsm_clock_offset_corrector_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>fc</key> - <value>fc</value> + <key>_coordinate</key> + <value>(328, 22)</value> </param> <param> - <key>ppm</key> - <value>ppm</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>samp_rate_in</key> + <key>id</key> <value>samp_rate_in</value> </param> <param> - <key>alias</key> - <value></value> + <key>label</key> + <value>samp_rate_in</value> </param> <param> - <key>affinity</key> + <key>short_id</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(280, 195)</value> + <key>type</key> + <value>eng_float</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>1e6</value> </param> </block> <connection> - <source_block_id>low_pass_filter_0_0</source_block_id> - <sink_block_id>pad_sink_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> + <source_block_id>ctrl_in</source_block_id> + <sink_block_id>gsm_clock_offset_corrector_tagged_0</sink_block_id> + <source_key>out</source_key> + <sink_key>ctrl</sink_key> </connection> <connection> <source_block_id>fractional_resampler_xx_0</source_block_id> @@ -543,21 +599,21 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gsm_clock_offset_corrector_0</source_block_id> + <source_block_id>gsm_clock_offset_corrector_tagged_0</source_block_id> <sink_block_id>fractional_resampler_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>pad_source_0</source_block_id> - <sink_block_id>gsm_clock_offset_corrector_0</sink_block_id> + <source_block_id>low_pass_filter_0_0</source_block_id> + <sink_block_id>pad_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>ppm_in</source_block_id> - <sink_block_id>gsm_clock_offset_corrector_0</sink_block_id> + <source_block_id>pad_source_0</source_block_id> + <sink_block_id>gsm_clock_offset_corrector_tagged_0</sink_block_id> <source_key>0</source_key> - <sink_key>ppm_in</sink_key> + <sink_key>0</sink_key> </connection> </flow_graph> diff --git a/python/receiver/gsm_input.py b/python/receiver/gsm_input.py index 97ab633..b18a631 100644 --- a/python/receiver/gsm_input.py +++ b/python/receiver/gsm_input.py @@ -38,11 +38,11 @@ class gsm_input(grgsm.hier_block): ################################################## # Blocks ################################################## - self.message_port_register_hier_in("ppm_in") + self.message_port_register_hier_in("ctrl_in") self.low_pass_filter_0_0 = filter.fir_filter_ccf(1, firdes.low_pass( 1, samp_rate_out, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) - self.gsm_clock_offset_corrector_0 = grgsm.clock_offset_corrector( + self.gsm_clock_offset_corrector_tagged_0 = grgsm.clock_offset_corrector_tagged( fc=fc, ppm=ppm, samp_rate_in=samp_rate_in, @@ -54,21 +54,17 @@ class gsm_input(grgsm.hier_block): ################################################## self.connect((self.low_pass_filter_0_0, 0), (self, 0)) self.connect((self.fractional_resampler_xx_0, 0), (self.low_pass_filter_0_0, 0)) - self.connect((self.gsm_clock_offset_corrector_0, 0), (self.fractional_resampler_xx_0, 0)) - self.connect((self, 0), (self.gsm_clock_offset_corrector_0, 0)) + self.connect((self.gsm_clock_offset_corrector_tagged_0, 0), (self.fractional_resampler_xx_0, 0)) + self.connect((self, 0), (self.gsm_clock_offset_corrector_tagged_0, 0)) ################################################## # Asynch Message Connections ################################################## - self.msg_connect(self, "ppm_in", self.gsm_clock_offset_corrector_0, "ppm_in") + self.msg_connect((self, 'ctrl_in'), (self.gsm_clock_offset_corrector_tagged_0, 'ctrl')) - - def get_ppm(self): - return self.ppm - - def set_ppm(self, ppm): - self.ppm = ppm - self.gsm_clock_offset_corrector_0.set_ppm(self.ppm) + def set_fc(self, fc): + self.fc = fc + self.gsm_clock_offset_corrector_tagged_0.set_fc(self.fc) def get_osr(self): return self.osr @@ -77,26 +73,25 @@ class gsm_input(grgsm.hier_block): self.osr = osr self.set_samp_rate_out(1625000.0/6.0*self.osr) - def get_fc(self): - return self.fc + def get_ppm(self): + return self.ppm - def set_fc(self, fc): - self.fc = fc - self.gsm_clock_offset_corrector_0.set_fc(self.fc) + def set_ppm(self, ppm): + self.ppm = ppm + self.gsm_clock_offset_corrector_tagged_0.set_ppm(self.ppm) def get_samp_rate_in(self): return self.samp_rate_in def set_samp_rate_in(self, samp_rate_in): self.samp_rate_in = samp_rate_in + self.gsm_clock_offset_corrector_tagged_0.set_samp_rate_in(self.samp_rate_in) self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) - self.gsm_clock_offset_corrector_0.set_samp_rate_in(self.samp_rate_in) def get_samp_rate_out(self): return self.samp_rate_out def set_samp_rate_out(self, samp_rate_out): self.samp_rate_out = samp_rate_out - self.low_pass_filter_0_0.set_taps(firdes.low_pass(1, self.samp_rate_out, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) - + self.low_pass_filter_0_0.set_taps(firdes.low_pass(1, self.samp_rate_out, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) |