aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--grc/CMakeLists.txt1
-rw-r--r--grc/receiver/gsm_input.xml64
-rw-r--r--hier_blocks/receiver/gsm_input.grc486
-rw-r--r--python/CMakeLists.txt1
-rw-r--r--python/__init__.py2
-rw-r--r--python/receiver/gsm_input.py84
6 files changed, 638 insertions, 0 deletions
diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
index 8ded6ca..ef06807 100644
--- a/grc/CMakeLists.txt
+++ b/grc/CMakeLists.txt
@@ -18,6 +18,7 @@
# Boston, MA 02110-1301, USA.
install(FILES
gsm_block_tree.xml
+ receiver/gsm_input.xml
receiver/gsm_receiver.xml
misc_utils/gsm_bursts_printer.xml
receiver/gsm_fcch_burst_tagger.xml
diff --git a/grc/receiver/gsm_input.xml b/grc/receiver/gsm_input.xml
new file mode 100644
index 0000000..df86a3f
--- /dev/null
+++ b/grc/receiver/gsm_input.xml
@@ -0,0 +1,64 @@
+<?xml version='1.0' encoding='ASCII'?>
+<block>
+ <name>GSM input adaptor</name>
+ <key>gsm_input</key>
+ <category></category>
+ <import>import gsm</import>
+ <make>gsm.gsm_input(
+ ppm=$ppm,
+ fc=$fc,
+ osr=$osr,
+ samp_rate_in=$samp_rate_in,
+)</make>
+ <callback>set_ppm($ppm)</callback>
+ <callback>set_fc($fc)</callback>
+ <callback>set_osr($osr)</callback>
+ <callback>set_samp_rate_in($samp_rate_in)</callback>
+ <param>
+ <name>ppm</name>
+ <key>ppm</key>
+ <value>0</value>
+ <type>raw</type>
+ <hide>part</hide>
+ </param>
+ <param>
+ <name>fc</name>
+ <key>fc</key>
+ <value>fc</value>
+ <type>raw</type>
+ <hide>part</hide>
+ </param>
+ <param>
+ <name>OSR</name>
+ <key>osr</key>
+ <value>4</value>
+ <type>raw</type>
+ <hide>part</hide>
+ </param>
+ <param>
+ <name>samp_rate_in</name>
+ <key>samp_rate_in</key>
+ <value>samp_rate</value>
+ <type>raw</type>
+ <hide>part</hide>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ <vlen>1</vlen>
+ </sink>
+ <sink>
+ <name>ppm_in</name>
+ <type>message</type>
+ <optional>True</optional>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>complex</type>
+ <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>
+</block>
diff --git a/hier_blocks/receiver/gsm_input.grc b/hier_blocks/receiver/gsm_input.grc
new file mode 100644
index 0000000..8d99640
--- /dev/null
+++ b/hier_blocks/receiver/gsm_input.grc
@@ -0,0 +1,486 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Thu Nov 6 14:41:06 2014</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>gsm_input</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>GSM input adaptor</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value>Piotr Krysik</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>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>hb</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value></value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 10)</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>
+ </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>
+ </param>
+ <param>
+ <key>optional</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(706, 213)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>parameter</key>
+ <param>
+ <key>id</key>
+ <value>ppm</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>ppm</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</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>(453, 22)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>parameter</key>
+ <param>
+ <key>id</key>
+ <value>osr</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>OSR</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>intx</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(541, 23)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>low_pass_filter</key>
+ <param>
+ <key>id</key>
+ <value>low_pass_filter_0_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fir_filter_ccf</value>
+ </param>
+ <param>
+ <key>decim</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>interp</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>1625000.0/6.0*osr</value>
+ </param>
+ <param>
+ <key>cutoff_freq</key>
+ <value>125e3</value>
+ </param>
+ <param>
+ <key>width</key>
+ <value>5e3</value>
+ </param>
+ <param>
+ <key>win</key>
+ <value>firdes.WIN_HAMMING</value>
+ </param>
+ <param>
+ <key>beta</key>
+ <value>6.76</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <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>(502, 165)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>pad_source</key>
+ <param>
+ <key>id</key>
+ <value>ppm_in</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>ppm_in</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>message</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_streams</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>optional</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(91, 242)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gsm_clock_offset_corrector</key>
+ <param>
+ <key>id</key>
+ <value>gsm_clock_offset_corrector_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>fc</value>
+ </param>
+ <param>
+ <key>ppm</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>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <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>(279, 190)</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>
+ <param>
+ <key>optional</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(88, 197)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </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>
+ <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>
+ </connection>
+ <connection>
+ <source_block_id>gsm_clock_offset_corrector_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>pad_source_0</source_block_id>
+ <sink_block_id>gsm_clock_offset_corrector_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_key>0</source_key>
+ <sink_key>ppm_in</sink_key>
+ </connection>
+</flow_graph>
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 68a6aa4..1689ee5 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -31,6 +31,7 @@ endif()
GR_PYTHON_INSTALL(
FILES
__init__.py
+ receiver/gsm_input.py
receiver/fcch_burst_tagger.py
receiver/sch_detector.py
receiver/fcch_detector.py
diff --git a/python/__init__.py b/python/__init__.py
index 3b10c19..326f54c 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -51,6 +51,8 @@ from sch_detector import sch_detector
from fcch_detector import fcch_detector
from clock_offset_control import clock_offset_control
from clock_offset_corrector import clock_offset_corrector
+from gsm_input import gsm_input
+
#
diff --git a/python/receiver/gsm_input.py b/python/receiver/gsm_input.py
new file mode 100644
index 0000000..e1a51b0
--- /dev/null
+++ b/python/receiver/gsm_input.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# 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
+##################################################
+
+from gnuradio import filter
+from gnuradio import gr
+from gnuradio.filter import firdes
+import gsm
+
+class gsm_input(gr.hier_block2):
+
+ def __init__(self, ppm=0, osr=4, fc=940e6, samp_rate_in=1e6):
+ gr.hier_block2.__init__(
+ self, "GSM input adaptor",
+ gr.io_signature(1, 1, gr.sizeof_gr_complex*1),
+ gr.io_signature(1, 1, gr.sizeof_gr_complex*1),
+ )
+
+ ##################################################
+ # Parameters
+ ##################################################
+ self.ppm = ppm
+ self.osr = osr
+ self.fc = fc
+ self.samp_rate_in = samp_rate_in
+
+ ##################################################
+ # 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))
+ self.gsm_clock_offset_corrector_0 = gsm.clock_offset_corrector(
+ fc=fc,
+ ppm=0,
+ samp_rate_in=samp_rate_in,
+ samp_rate_out=1625000.0/6.0*4.0,
+ )
+
+ ##################################################
+ # 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, 0), (self.gsm_clock_offset_corrector_0, 0))
+
+ ##################################################
+ # Asynch Message Connections
+ ##################################################
+ self.msg_connect(self, "ppm_in", self.gsm_clock_offset_corrector_0, "ppm_in")
+
+
+ def get_ppm(self):
+ return self.ppm
+
+ def set_ppm(self, ppm):
+ self.ppm = 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))
+
+ def get_fc(self):
+ return self.fc
+
+ def set_fc(self, fc):
+ self.fc = fc
+ self.gsm_clock_offset_corrector_0.set_fc(self.fc)
+
+ 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_0.set_samp_rate_in(self.samp_rate_in)
+