aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Krysik <ptrkrysik@gmail.com>2016-07-15 13:14:37 +0200
committerPiotr Krysik <ptrkrysik@gmail.com>2016-07-15 13:14:37 +0200
commitcbaf4760a8191e30a7fe0bb1b0f98208b0979896 (patch)
treed262ec415ffd7a82ec7ed53b3f2a71130c193075
parent0982673af1e91b91c4b983f0f423277e09089e7e (diff)
New gsm_input block
-rw-r--r--grc/receiver/gsm_input.xml2
-rw-r--r--hier_blocks/receiver/gsm_input.grc490
-rw-r--r--python/receiver/gsm_input.py35
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))