diff options
author | ptrkrysik <ptrkrysik@gmail.com> | 2014-11-19 11:30:53 +0100 |
---|---|---|
committer | ptrkrysik <ptrkrysik@gmail.com> | 2014-11-19 11:30:53 +0100 |
commit | 381253a1d24f1273fad2f4e0d57d75d3ac6e518d (patch) | |
tree | 2ac0ba198a88845d41626a7056b7e0508a669fae | |
parent | 7a7b9b0a3a446e83703f53bea11389f030c68fde (diff) |
Changes in clock offset corrector and gsm_input - the previous version wasn't working well when samp_rate_in was different from samp_rate_out.
Now resampling is done outside of clock offset corrector.
-rw-r--r-- | grc/misc_utils/gsm_clock_offset_corrector.xml | 18 | ||||
-rw-r--r-- | grc/receiver/gsm_input.xml | 33 | ||||
-rw-r--r-- | hier_blocks/misc_utils/gsm_clock_offset_corrector.grc | 272 | ||||
-rw-r--r-- | hier_blocks/receiver/gsm_input.grc | 205 | ||||
-rw-r--r-- | python/misc_utils/clock_offset_corrector.py | 44 | ||||
-rw-r--r-- | python/receiver/gsm_input.py | 28 |
6 files changed, 357 insertions, 243 deletions
diff --git a/grc/misc_utils/gsm_clock_offset_corrector.xml b/grc/misc_utils/gsm_clock_offset_corrector.xml index c541054..0740f17 100644 --- a/grc/misc_utils/gsm_clock_offset_corrector.xml +++ b/grc/misc_utils/gsm_clock_offset_corrector.xml @@ -1,4 +1,3 @@ -<?xml version='1.0' encoding='ASCII'?> <block> <name>Clock offset corrector</name> <key>gsm_clock_offset_corrector</key> @@ -7,34 +6,26 @@ fc=$fc, ppm=$ppm, samp_rate_in=$samp_rate_in, - samp_rate_out=$samp_rate_out, )</make> <callback>set_fc($fc)</callback> <callback>set_ppm($ppm)</callback> <callback>set_samp_rate_in($samp_rate_in)</callback> - <callback>set_samp_rate_out($samp_rate_out)</callback> <param> <name>fc</name> <key>fc</key> - <value>936.6e6</value> + <value>fc</value> <type>float</type> </param> <param> <name>ppm</name> <key>ppm</key> - <value>0</value> - <type>int</type> + <value>ppm</value> + <type>float</type> </param> <param> <name>samp_rate_in</name> <key>samp_rate_in</key> - <value>1625000.0/6.0*4.0</value> - <type>float</type> - </param> - <param> - <name>samp_rate_out</name> - <key>samp_rate_out</key> - <value>1625000.0/6.0*4.0</value> + <value>samp_rate_in</value> <type>float</type> </param> <sink> @@ -53,5 +44,4 @@ <vlen>1</vlen> </source> <doc>Piotr Krysik</doc> -<!-- <grc_source></grc_source> --> </block> diff --git a/grc/receiver/gsm_input.xml b/grc/receiver/gsm_input.xml index df86a3f..2892103 100644 --- a/grc/receiver/gsm_input.xml +++ b/grc/receiver/gsm_input.xml @@ -1,4 +1,3 @@ -<?xml version='1.0' encoding='ASCII'?> <block> <name>GSM input adaptor</name> <key>gsm_input</key> @@ -6,40 +5,40 @@ <import>import gsm</import> <make>gsm.gsm_input( ppm=$ppm, - fc=$fc, osr=$osr, + fc=$fc, samp_rate_in=$samp_rate_in, )</make> <callback>set_ppm($ppm)</callback> - <callback>set_fc($fc)</callback> <callback>set_osr($osr)</callback> + <callback>set_fc($fc)</callback> <callback>set_samp_rate_in($samp_rate_in)</callback> <param> <name>ppm</name> <key>ppm</key> - <value>0</value> - <type>raw</type> + <value>ppm</value> + <type>float</type> <hide>part</hide> </param> <param> - <name>fc</name> - <key>fc</key> - <value>fc</value> - <type>raw</type> + <name>OSR</name> + <key>osr</key> + <value>osr</value> + <type>int</type> <hide>part</hide> </param> <param> - <name>OSR</name> - <key>osr</key> - <value>4</value> - <type>raw</type> + <name>fc</name> + <key>fc</key> + <value>fc</value> + <type>float</type> <hide>part</hide> </param> <param> <name>samp_rate_in</name> <key>samp_rate_in</key> - <value>samp_rate</value> - <type>raw</type> + <value>samp_rate_in</value> + <type>float</type> <hide>part</hide> </param> <sink> @@ -58,7 +57,5 @@ <vlen>1</vlen> </source> <doc>Piotr Krysik -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. -/home/piotr/.grc_gnuradio/gsm_input.py</doc> - <grc_source>/home/piotr/Odbiornik_gsm/Dodanie_wielokanalowosci/demonstration (without data)/gsminput.grc</grc_source> +Adaptor of input stream for the GSM receiver. Contains frequency offset corrector and resampler to correct carrier frequency and sampling frequency offsets. At the end it has LP filter for filtering of a GSM channel.</doc> </block> diff --git a/hier_blocks/misc_utils/gsm_clock_offset_corrector.grc b/hier_blocks/misc_utils/gsm_clock_offset_corrector.grc index efc1275..99d8e15 100644 --- a/hier_blocks/misc_utils/gsm_clock_offset_corrector.grc +++ b/hier_blocks/misc_utils/gsm_clock_offset_corrector.grc @@ -1,4 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> <flow_graph> <timestamp>Thu Nov 6 10:22:20 2014</timestamp> <block> @@ -29,6 +30,33 @@ </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>samp_rate_in</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(736, 19)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> <key>parameter</key> <param> <key>id</key> @@ -68,10 +96,10 @@ </param> </block> <block> - <key>parameter</key> + <key>pad_source</key> <param> <key>id</key> - <value>samp_rate_in</value> + <value>pad_source_0</value> </param> <param> <key>_enabled</key> @@ -79,27 +107,27 @@ </param> <param> <key>label</key> - <value>samp_rate_in</value> + <value>in</value> </param> <param> - <key>value</key> - <value>1625000.0/6.0*4.0</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>type</key> - <value>eng_float</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>short_id</key> - <value></value> + <key>num_streams</key> + <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>optional</key> + <value>False</value> </param> <param> <key>_coordinate</key> - <value>(368, 19)</value> + <value>(14, 299)</value> </param> <param> <key>_rotation</key> @@ -110,7 +138,7 @@ <key>parameter</key> <param> <key>id</key> - <value>samp_rate_out</value> + <value>ppm</value> </param> <param> <key>_enabled</key> @@ -118,11 +146,11 @@ </param> <param> <key>label</key> - <value>samp_rate_out</value> + <value>ppm</value> </param> <param> <key>value</key> - <value>1625000.0/6.0*4.0</value> + <value>0</value> </param> <param> <key>type</key> @@ -138,7 +166,7 @@ </param> <param> <key>_coordinate</key> - <value>(592, 20)</value> + <value>(496, 19)</value> </param> <param> <key>_rotation</key> @@ -146,10 +174,10 @@ </param> </block> <block> - <key>pad_sink</key> + <key>parameter</key> <param> <key>id</key> - <value>pad_sink_1</value> + <value>samp_rate_in</value> </param> <param> <key>_enabled</key> @@ -157,27 +185,27 @@ </param> <param> <key>label</key> - <value>out</value> + <value>samp_rate_in</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>value</key> + <value>1625000.0/6.0*4.0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>type</key> + <value>eng_float</value> </param> <param> - <key>num_streams</key> - <value>1</value> + <key>short_id</key> + <value></value> </param> <param> - <key>optional</key> - <value>False</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(1184, 333)</value> + <value>(368, 19)</value> </param> <param> <key>_rotation</key> @@ -185,46 +213,38 @@ </param> </block> <block> - <key>fractional_resampler_xx</key> + <key>parameter</key> <param> <key>id</key> - <value>fractional_resampler_xx_0</value> + <value>samp_rate_out</value> </param> <param> <key>_enabled</key> - <value>True</value> + <value>False</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>label</key> + <value>samp_rate_out</value> </param> <param> - <key>phase_shift</key> - <value>0</value> + <key>value</key> + <value>1625000.0/6.0*4.0</value> </param> <param> - <key>resamp_ratio</key> - <value>samp_rate_in/samp_rate_out</value> + <key>type</key> + <value>eng_float</value> </param> <param> - <key>alias</key> + <key>short_id</key> <value></value> </param> <param> - <key>affinity</key> + <key>alias</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>(721, 303)</value> + <value>(592, 20)</value> </param> <param> <key>_rotation</key> @@ -235,7 +255,7 @@ <key>pad_source</key> <param> <key>id</key> - <value>pad_source_0</value> + <value>ppm_in</value> </param> <param> <key>_enabled</key> @@ -243,11 +263,11 @@ </param> <param> <key>label</key> - <value>in</value> + <value>ppm_in</value> </param> <param> <key>type</key> - <value>complex</value> + <value>message</value> </param> <param> <key>vlen</key> @@ -259,11 +279,11 @@ </param> <param> <key>optional</key> - <value>False</value> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(14, 299)</value> + <value>(16, 219)</value> </param> <param> <key>_rotation</key> @@ -271,22 +291,26 @@ </param> </block> <block> - <key>gsm_controlled_rotator_cc</key> + <key>fractional_resampler_xx</key> <param> <key>id</key> - <value>gsm_controlled_rotator_cc_0</value> + <value>fractional_resampler_xx_0_0</value> </param> <param> <key>_enabled</key> - <value>True</value> + <value>False</value> </param> <param> - <key>phase_inc</key> + <key>type</key> + <value>float</value> + </param> + <param> + <key>phase_shift</key> <value>0</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate_out</value> + <key>resamp_ratio</key> + <value>samp_rate_in/samp_rate_out</value> </param> <param> <key>alias</key> @@ -306,7 +330,7 @@ </param> <param> <key>_coordinate</key> - <value>(968, 320)</value> + <value>(712, 144)</value> </param> <param> <key>_rotation</key> @@ -353,7 +377,7 @@ </param> <param> <key>_coordinate</key> - <value>(435, 216)</value> + <value>(416, 219)</value> </param> <param> <key>_rotation</key> @@ -364,7 +388,7 @@ <key>fractional_resampler_xx</key> <param> <key>id</key> - <value>fractional_resampler_xx_0_0</value> + <value>fractional_resampler_xx_0</value> </param> <param> <key>_enabled</key> @@ -372,7 +396,7 @@ </param> <param> <key>type</key> - <value>float</value> + <value>complex</value> </param> <param> <key>phase_shift</key> @@ -400,7 +424,7 @@ </param> <param> <key>_coordinate</key> - <value>(721, 220)</value> + <value>(704, 304)</value> </param> <param> <key>_rotation</key> @@ -408,18 +432,26 @@ </param> </block> <block> - <key>gsm_controlled_const_source_f</key> + <key>blocks_multiply_const_vxx</key> <param> <key>id</key> - <value>gsm_controlled_const_source_f_0</value> + <value>blocks_multiply_const_vxx_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>constant</key> - <value>ppm</value> + <key>type</key> + <value>float</value> + </param> + <param> + <key>const</key> + <value>1.0e-6*samp_rate_in/samp_rate_out</value> + </param> + <param> + <key>vlen</key> + <value>1</value> </param> <param> <key>alias</key> @@ -439,7 +471,7 @@ </param> <param> <key>_coordinate</key> - <value>(182, 216)</value> + <value>(392, 331)</value> </param> <param> <key>_rotation</key> @@ -447,10 +479,10 @@ </param> </block> <block> - <key>pad_source</key> + <key>pad_sink</key> <param> <key>id</key> - <value>ppm_in</value> + <value>pad_sink_1</value> </param> <param> <key>_enabled</key> @@ -458,11 +490,11 @@ </param> <param> <key>label</key> - <value>ppm_in</value> + <value>out</value> </param> <param> <key>type</key> - <value>message</value> + <value>complex</value> </param> <param> <key>vlen</key> @@ -474,11 +506,11 @@ </param> <param> <key>optional</key> - <value>True</value> + <value>False</value> </param> <param> <key>_coordinate</key> - <value>(13, 216)</value> + <value>(1112, 331)</value> </param> <param> <key>_rotation</key> @@ -486,38 +518,42 @@ </param> </block> <block> - <key>parameter</key> + <key>gsm_controlled_rotator_cc</key> <param> <key>id</key> - <value>ppm</value> + <value>gsm_controlled_rotator_cc_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>ppm</value> - </param> - <param> - <key>value</key> + <key>phase_inc</key> <value>0</value> </param> <param> - <key>type</key> - <value>eng_float</value> + <key>samp_rate</key> + <value>samp_rate_out</value> </param> <param> - <key>short_id</key> + <key>alias</key> <value></value> </param> <param> - <key>alias</key> + <key>affinity</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>(496, 19)</value> + <value>(928, 320)</value> </param> <param> <key>_rotation</key> @@ -525,26 +561,18 @@ </param> </block> <block> - <key>blocks_multiply_const_vxx</key> + <key>gsm_controlled_const_source_f</key> <param> <key>id</key> - <value>blocks_multiply_const_vxx_0_0</value> + <value>gsm_controlled_const_source_f_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>const</key> - <value>1.0e-6*samp_rate_in/samp_rate_out</value> - </param> - <param> - <key>vlen</key> - <value>1</value> + <key>constant</key> + <value>ppm</value> </param> <param> <key>alias</key> @@ -564,7 +592,7 @@ </param> <param> <key>_coordinate</key> - <value>(410, 333)</value> + <value>(168, 219)</value> </param> <param> <key>_rotation</key> @@ -611,7 +639,7 @@ </param> <param> <key>_coordinate</key> - <value>(571, 333)</value> + <value>(552, 331)</value> </param> <param> <key>_rotation</key> @@ -688,12 +716,6 @@ <sink_key>constant_msg</sink_key> </connection> <connection> - <source_block_id>gsm_controlled_const_source_f_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> - <connection> <source_block_id>pad_source_0</source_block_id> <sink_block_id>fractional_resampler_xx_0</sink_block_id> <source_key>0</source_key> @@ -712,12 +734,6 @@ <sink_key>1</sink_key> </connection> <connection> - <source_block_id>gsm_controlled_rotator_cc_0</source_block_id> - <sink_block_id>pad_sink_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> <source_block_id>fractional_resampler_xx_0</source_block_id> <sink_block_id>gsm_controlled_rotator_cc_0</sink_block_id> <source_key>0</source_key> @@ -730,12 +746,6 @@ <sink_key>1</sink_key> </connection> <connection> - <source_block_id>gsm_controlled_const_source_f_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_multiply_const_vxx_0_0</source_block_id> <sink_block_id>blocks_add_const_vxx_0</sink_block_id> <source_key>0</source_key> @@ -747,4 +757,28 @@ <source_key>0</source_key> <sink_key>1</sink_key> </connection> + <connection> + <source_block_id>blocks_multiply_const_vxx_0</source_block_id> + <sink_block_id>gsm_controlled_rotator_cc_0</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> + <connection> + <source_block_id>gsm_controlled_rotator_cc_0</source_block_id> + <sink_block_id>pad_sink_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>gsm_controlled_const_source_f_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>gsm_controlled_const_source_f_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> </flow_graph> diff --git a/hier_blocks/receiver/gsm_input.grc b/hier_blocks/receiver/gsm_input.grc index 8d99640..685f0b2 100644 --- a/hier_blocks/receiver/gsm_input.grc +++ b/hier_blocks/receiver/gsm_input.grc @@ -1,4 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> <flow_graph> <timestamp>Thu Nov 6 14:41:06 2014</timestamp> <block> @@ -65,38 +66,26 @@ </param> </block> <block> - <key>pad_sink</key> + <key>variable</key> <param> <key>id</key> - <value>pad_sink_0</value> + <value>samp_rate_out</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>out</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> + <key>value</key> + <value>1625000.0/6.0*osr</value> </param> <param> - <key>optional</key> - <value>False</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(706, 213)</value> + <value>(632, 19)</value> </param> <param> <key>_rotation</key> @@ -182,6 +171,84 @@ </param> </block> <block> + <key>parameter</key> + <param> + <key>id</key> + <value>fc</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>label</key> + <value>fc</value> + </param> + <param> + <key>value</key> + <value>940e6</value> + </param> + <param> + <key>type</key> + <value>eng_float</value> + </param> + <param> + <key>short_id</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(231, 22)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>parameter</key> + <param> + <key>id</key> + <value>samp_rate_in</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>label</key> + <value>samp_rate_in</value> + </param> + <param> + <key>value</key> + <value>1e6</value> + </param> + <param> + <key>type</key> + <value>eng_float</value> + </param> + <param> + <key>short_id</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(328, 22)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> <key>low_pass_filter</key> <param> <key>id</key> @@ -209,7 +276,7 @@ </param> <param> <key>samp_rate</key> - <value>1625000.0/6.0*osr</value> + <value>samp_rate_out</value> </param> <param> <key>cutoff_freq</key> @@ -245,7 +312,7 @@ </param> <param> <key>_coordinate</key> - <value>(502, 165)</value> + <value>(704, 179)</value> </param> <param> <key>_rotation</key> @@ -253,10 +320,10 @@ </param> </block> <block> - <key>pad_source</key> + <key>pad_sink</key> <param> <key>id</key> - <value>ppm_in</value> + <value>pad_sink_0</value> </param> <param> <key>_enabled</key> @@ -264,11 +331,11 @@ </param> <param> <key>label</key> - <value>ppm_in</value> + <value>out</value> </param> <param> <key>type</key> - <value>message</value> + <value>complex</value> </param> <param> <key>vlen</key> @@ -280,11 +347,11 @@ </param> <param> <key>optional</key> - <value>True</value> + <value>False</value> </param> <param> <key>_coordinate</key> - <value>(91, 242)</value> + <value>(904, 227)</value> </param> <param> <key>_rotation</key> @@ -292,30 +359,26 @@ </param> </block> <block> - <key>gsm_clock_offset_corrector</key> + <key>fractional_resampler_xx</key> <param> <key>id</key> - <value>gsm_clock_offset_corrector_0</value> + <value>fractional_resampler_xx_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>fc</key> - <value>fc</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>ppm</key> + <key>phase_shift</key> <value>0</value> </param> <param> - <key>samp_rate_in</key> - <value>samp_rate_in</value> - </param> - <param> - <key>samp_rate_out</key> - <value>1625000.0/6.0*4.0</value> + <key>resamp_ratio</key> + <value>samp_rate_in/samp_rate_out</value> </param> <param> <key>alias</key> @@ -335,7 +398,7 @@ </param> <param> <key>_coordinate</key> - <value>(279, 190)</value> + <value>(488, 216)</value> </param> <param> <key>_rotation</key> @@ -374,7 +437,7 @@ </param> <param> <key>_coordinate</key> - <value>(88, 197)</value> + <value>(56, 179)</value> </param> <param> <key>_rotation</key> @@ -382,10 +445,10 @@ </param> </block> <block> - <key>parameter</key> + <key>pad_source</key> <param> <key>id</key> - <value>fc</value> + <value>ppm_in</value> </param> <param> <key>_enabled</key> @@ -393,27 +456,27 @@ </param> <param> <key>label</key> - <value>fc</value> + <value>ppm_in</value> </param> <param> - <key>value</key> - <value>940e6</value> + <key>type</key> + <value>message</value> </param> <param> - <key>type</key> - <value>eng_float</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>short_id</key> - <value></value> + <key>num_streams</key> + <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>optional</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(231, 22)</value> + <value>(56, 243)</value> </param> <param> <key>_rotation</key> @@ -421,38 +484,46 @@ </param> </block> <block> - <key>parameter</key> + <key>gsm_clock_offset_corrector</key> <param> <key>id</key> - <value>samp_rate_in</value> + <value>gsm_clock_offset_corrector_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>samp_rate_in</value> + <key>fc</key> + <value>fc</value> </param> <param> - <key>value</key> - <value>1e6</value> + <key>ppm</key> + <value>ppm</value> </param> <param> - <key>type</key> - <value>eng_float</value> + <key>samp_rate_in</key> + <value>samp_rate_in</value> </param> <param> - <key>short_id</key> + <key>alias</key> <value></value> </param> <param> - <key>alias</key> + <key>affinity</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>(328, 22)</value> + <value>(280, 195)</value> </param> <param> <key>_rotation</key> @@ -466,12 +537,18 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gsm_clock_offset_corrector_0</source_block_id> + <source_block_id>fractional_resampler_xx_0</source_block_id> <sink_block_id>low_pass_filter_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> + <source_block_id>gsm_clock_offset_corrector_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_key>0</source_key> diff --git a/python/misc_utils/clock_offset_corrector.py b/python/misc_utils/clock_offset_corrector.py index 0633ae5..9063082 100644 --- a/python/misc_utils/clock_offset_corrector.py +++ b/python/misc_utils/clock_offset_corrector.py @@ -3,7 +3,7 @@ # Gnuradio Python Flow Graph # Title: Clock offset corrector # Author: Piotr Krysik -# Generated: Thu Nov 6 10:22:24 2014 +# Generated: Wed Nov 19 08:38:40 2014 ################################################## from gnuradio import blocks @@ -15,7 +15,7 @@ import math class clock_offset_corrector(gr.hier_block2): - def __init__(self, fc=936.6e6, samp_rate_in=1625000.0/6.0*4.0, samp_rate_out=1625000.0/6.0*4.0, ppm=0): + def __init__(self, fc=936.6e6, ppm=0, samp_rate_in=1625000.0/6.0*4.0): gr.hier_block2.__init__( self, "Clock offset corrector", gr.io_signature(1, 1, gr.sizeof_gr_complex*1), @@ -26,9 +26,13 @@ class clock_offset_corrector(gr.hier_block2): # Parameters ################################################## self.fc = fc - self.samp_rate_in = samp_rate_in - self.samp_rate_out = samp_rate_out self.ppm = ppm + self.samp_rate_in = samp_rate_in + + ################################################## + # Variables + ################################################## + self.samp_rate_out = samp_rate_out = samp_rate_in ################################################## # Blocks @@ -36,7 +40,6 @@ class clock_offset_corrector(gr.hier_block2): self.ppm_in = None;self.message_port_register_hier_out("ppm_in") self.gsm_controlled_rotator_cc_0 = gsm.controlled_rotator_cc(0,samp_rate_out) self.gsm_controlled_const_source_f_0 = gsm.controlled_const_source_f(ppm) - self.fractional_resampler_xx_0_0 = filter.fractional_resampler_ff(0, samp_rate_in/samp_rate_out) self.fractional_resampler_xx_0 = filter.fractional_resampler_cc(0, samp_rate_in/samp_rate_out) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff((1.0e-6*samp_rate_in/samp_rate_out, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((fc/samp_rate_out*(2*math.pi)/1e6, )) @@ -45,16 +48,14 @@ class clock_offset_corrector(gr.hier_block2): ################################################## # Connections ################################################## - self.connect((self.gsm_controlled_const_source_f_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self, 0), (self.fractional_resampler_xx_0, 0)) - self.connect((self.blocks_multiply_const_vxx_0, 0), (self.fractional_resampler_xx_0_0, 0)) - self.connect((self.blocks_add_const_vxx_0, 0), (self.fractional_resampler_xx_0_0, 1)) - self.connect((self.gsm_controlled_rotator_cc_0, 0), (self, 0)) self.connect((self.fractional_resampler_xx_0, 0), (self.gsm_controlled_rotator_cc_0, 0)) self.connect((self.blocks_add_const_vxx_0, 0), (self.fractional_resampler_xx_0, 1)) - self.connect((self.gsm_controlled_const_source_f_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.blocks_add_const_vxx_0, 0)) - self.connect((self.fractional_resampler_xx_0_0, 0), (self.gsm_controlled_rotator_cc_0, 1)) + self.connect((self.blocks_multiply_const_vxx_0, 0), (self.gsm_controlled_rotator_cc_0, 1)) + self.connect((self.gsm_controlled_rotator_cc_0, 0), (self, 0)) + self.connect((self.gsm_controlled_const_source_f_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) + self.connect((self.gsm_controlled_const_source_f_0, 0), (self.blocks_multiply_const_vxx_0, 0)) ################################################## # Asynch Message Connections @@ -69,13 +70,20 @@ class clock_offset_corrector(gr.hier_block2): self.fc = fc self.blocks_multiply_const_vxx_0.set_k((self.fc/self.samp_rate_out*(2*math.pi)/1e6, )) + def get_ppm(self): + return self.ppm + + def set_ppm(self, ppm): + self.ppm = ppm + self.gsm_controlled_const_source_f_0.set_constant(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.set_samp_rate_out(self.samp_rate_in) self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) - self.fractional_resampler_xx_0_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) self.blocks_multiply_const_vxx_0_0.set_k((1.0e-6*self.samp_rate_in/self.samp_rate_out, )) self.blocks_add_const_vxx_0.set_k((self.samp_rate_in/self.samp_rate_out, )) @@ -84,17 +92,9 @@ class clock_offset_corrector(gr.hier_block2): def set_samp_rate_out(self, samp_rate_out): self.samp_rate_out = samp_rate_out - self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) - self.gsm_controlled_rotator_cc_0.set_samp_rate(self.samp_rate_out) self.blocks_multiply_const_vxx_0.set_k((self.fc/self.samp_rate_out*(2*math.pi)/1e6, )) - self.fractional_resampler_xx_0_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) + self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) self.blocks_multiply_const_vxx_0_0.set_k((1.0e-6*self.samp_rate_in/self.samp_rate_out, )) + self.gsm_controlled_rotator_cc_0.set_samp_rate(self.samp_rate_out) self.blocks_add_const_vxx_0.set_k((self.samp_rate_in/self.samp_rate_out, )) - def get_ppm(self): - return self.ppm - - def set_ppm(self, ppm): - self.ppm = ppm - self.gsm_controlled_const_source_f_0.set_constant(self.ppm) - diff --git a/python/receiver/gsm_input.py b/python/receiver/gsm_input.py index e1a51b0..ffc7782 100644 --- a/python/receiver/gsm_input.py +++ b/python/receiver/gsm_input.py @@ -4,7 +4,7 @@ # Title: GSM input adaptor # Author: Piotr Krysik # Description: 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. -# Generated: Thu Nov 6 14:41:06 2014 +# Generated: Wed Nov 19 08:23:52 2014 ################################################## from gnuradio import filter @@ -30,23 +30,29 @@ class gsm_input(gr.hier_block2): self.samp_rate_in = samp_rate_in ################################################## + # Variables + ################################################## + self.samp_rate_out = samp_rate_out = 1625000.0/6.0*osr + + ################################################## # Blocks ################################################## self.ppm_in = None;self.message_port_register_hier_out("ppm_in") self.low_pass_filter_0_0 = filter.fir_filter_ccf(1, firdes.low_pass( - 1, 1625000.0/6.0*osr, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) + 1, samp_rate_out, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) self.gsm_clock_offset_corrector_0 = gsm.clock_offset_corrector( - fc=fc, + fc=936.6e6, ppm=0, samp_rate_in=samp_rate_in, - samp_rate_out=1625000.0/6.0*4.0, ) + self.fractional_resampler_xx_0 = filter.fractional_resampler_cc(0, samp_rate_in/samp_rate_out) ################################################## # Connections ################################################## self.connect((self.low_pass_filter_0_0, 0), (self, 0)) - self.connect((self.gsm_clock_offset_corrector_0, 0), (self.low_pass_filter_0_0, 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)) ################################################## @@ -60,13 +66,14 @@ class gsm_input(gr.hier_block2): def set_ppm(self, ppm): self.ppm = ppm + self.gsm_clock_offset_corrector_0.set_ppm(self.ppm) def get_osr(self): return self.osr def set_osr(self, osr): self.osr = osr - self.low_pass_filter_0_0.set_taps(firdes.low_pass(1, 1625000.0/6.0*self.osr, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) + self.set_samp_rate_out(1625000.0/6.0*self.osr) def get_fc(self): return self.fc @@ -80,5 +87,14 @@ class gsm_input(gr.hier_block2): def set_samp_rate_in(self, samp_rate_in): self.samp_rate_in = 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) + |