Added resampler and pushed matched filter into it.
authorJohnathan Corgan <jcorgan@corganenterprises.com>
Thu, 29 Oct 2009 15:10:20 +0000 (08:10 -0700)
committerJohnathan Corgan <jcorgan@corganenterprises.com>
Tue, 3 Nov 2009 15:21:42 +0000 (07:21 -0800)
gr-pager/apps/usrp_rx_flex.grc
gr-pager/apps/usrp_rx_flex.py

index 2d16e1cd6356f3f8fca0aaca85fdbd2a13c696d5..bf3d9abce36d7f4a219ad938c0e5f0d563b76e88 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Sat Oct 17 11:46:38 2009</timestamp>
+  <timestamp>Thu Oct 29 08:08:45 2009</timestamp>
   <block>
     <key>options</key>
     <param>
       <key>avg_alpha</key>
       <value>0</value>
     </param>
+    <param>
+      <key>win</key>
+      <value>None</value>
+    </param>
     <param>
       <key>win_size</key>
       <value></value>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>gr_quadrature_demod_cf</key>
-    <param>
-      <key>id</key>
-      <value>fm_demod</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>gain</key>
-      <value>demod_k</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(599, 774)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>gr_freq_xlating_fir_filter_xxx</key>
     <param>
       <key>v_scale</key>
       <value>8e3</value>
     </param>
+    <param>
+      <key>v_offset</key>
+      <value>0</value>
+    </param>
     <param>
       <key>t_scale</key>
       <value>20.0/channel_rate</value>
       <key>avg_alpha</key>
       <value>0</value>
     </param>
+    <param>
+      <key>win</key>
+      <value>None</value>
+    </param>
     <param>
       <key>win_size</key>
       <value></value>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>gr_moving_average_xx</key>
-    <param>
-      <key>id</key>
-      <value>gr_moving_average_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>length</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1.0/8.0</value>
-    </param>
-    <param>
-      <key>max_iter</key>
-      <value>4000</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(831, 758)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>ma_ntaps</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>channel_rate/symbol_rate</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(833, 851)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>nchan_taps</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>len(channel_taps)</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(328, 1009)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable_slider</key>
-    <param>
-      <key>id</key>
-      <value>offset</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>Freq. Offset</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>saved_offset</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>-10e3</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>10e3</value>
-    </param>
-    <param>
-      <key>num_steps</key>
-      <value>100</value>
-    </param>
-    <param>
-      <key>style</key>
-      <value>wx.SL_HORIZONTAL</value>
-    </param>
-    <param>
-      <key>converver</key>
-      <value>float_converter</value>
-    </param>
-    <param>
-      <key>grid_pos</key>
-      <value>0, 3, 1, 1</value>
-    </param>
-    <param>
-      <key>notebook</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(518, 118)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable_static_text</key>
     <param>
       <value>0</value>
     </param>
   </block>
+  <block>
+    <key>variable_slider</key>
+    <param>
+      <key>id</key>
+      <value>offset</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>Freq. Offset</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>saved_offset</value>
+    </param>
+    <param>
+      <key>min</key>
+      <value>-12.5e3</value>
+    </param>
+    <param>
+      <key>max</key>
+      <value>12.5e3</value>
+    </param>
+    <param>
+      <key>num_steps</key>
+      <value>100</value>
+    </param>
+    <param>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
+    </param>
+    <param>
+      <key>converver</key>
+      <value>float_converter</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value>0, 3, 1, 1</value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(518, 118)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>ma_ntaps</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>channel_rate/symbol_rate</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(833, 851)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
   <block>
     <key>wxgui_scopesink2</key>
     <param>
     </param>
     <param>
       <key>samp_rate</key>
-      <value>channel_rate</value>
+      <value>16e3</value>
     </param>
     <param>
       <key>v_scale</key>
       <value>1</value>
     </param>
+    <param>
+      <key>v_offset</key>
+      <value>0</value>
+    </param>
     <param>
       <key>t_scale</key>
-      <value>40.0/channel_rate</value>
+      <value>40.0/16e3</value>
     </param>
     <param>
       <key>ac_couple</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(797, 601)</value>
+      <value>(1029, 586)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>180</value>
     </param>
   </block>
+  <block>
+    <key>gr_quadrature_demod_cf</key>
+    <param>
+      <key>id</key>
+      <value>fm_demod</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>gain</key>
+      <value>demod_k</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(599, 774)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_moving_average_xx</key>
+    <param>
+      <key>id</key>
+      <value>gr_moving_average_xx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>length</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>scale</key>
+      <value>1.0/8.0</value>
+    </param>
+    <param>
+      <key>max_iter</key>
+      <value>4000</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(815, 676)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blks2_rational_resampler_xxx</key>
+    <param>
+      <key>id</key>
+      <value>blks2_rational_resampler_xxx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>fff</value>
+    </param>
+    <param>
+      <key>decim</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>interp</key>
+      <value>5</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>[1.0/8.0,]*40</value>
+    </param>
+    <param>
+      <key>fractional_bw</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1029, 750)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
+    <param>
+      <key>id</key>
+      <value>virtual_sink_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>baseband</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1260, 774)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>baseband_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>16000</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1019, 17)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>nchan_taps</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>len(channel_taps)</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(412, 931)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
   <connection>
     <source_block_id>gr_freq_xlating_fir_filter_xxx_0</source_block_id>
     <sink_block_id>wxgui_fftsink2_1</sink_block_id>
   </connection>
   <connection>
     <source_block_id>gr_moving_average_xx_0</source_block_id>
+    <sink_block_id>blks2_rational_resampler_xxx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blks2_rational_resampler_xxx_0</source_block_id>
     <sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
+  <connection>
+    <source_block_id>fm_demod</source_block_id>
+    <sink_block_id>blks2_rational_resampler_xxx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blks2_rational_resampler_xxx_0</source_block_id>
+    <sink_block_id>virtual_sink_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
 </flow_graph>
index 73b11f90c72efdd03904c856cd6d3382afe19037..cdc5da200139e1a2c20d40ba4f316590e3498ef3 100755 (executable)
@@ -2,11 +2,13 @@
 ##################################################
 # Gnuradio Python Flow Graph
 # Title: USRP FLEX Pager Receiver (Single Channel)
-# Generated: Sat Oct 17 11:46:38 2009
+# Generated: Thu Oct 29 08:04:51 2009
 ##################################################
 
+from gnuradio import blks2
 from gnuradio import eng_notation
 from gnuradio import gr
+from gnuradio import window
 from gnuradio.eng_option import eng_option
 from gnuradio.gr import firdes
 from gnuradio.wxgui import fftsink2
@@ -147,8 +149,8 @@ class usrp_rx_flex(grc_wxgui.top_block_gui):
                        sizer=_offset_sizer,
                        value=self.offset,
                        callback=self.set_offset,
-                       minimum=-10e3,
-                       maximum=10e3,
+                       minimum=-12.5e3,
+                       maximum=12.5e3,
                        num_steps=100,
                        style=wx.SL_HORIZONTAL,
                        cast=float,
@@ -167,9 +169,14 @@ class usrp_rx_flex(grc_wxgui.top_block_gui):
                ##################################################
                # Blocks
                ##################################################
+               self.blks2_rational_resampler_xxx_0 = blks2.rational_resampler_fff(
+                       interpolation=5,
+                       decimation=8,
+                       taps=([1.0/8.0,]*40),
+                       fractional_bw=None,
+               )
                self.fm_demod = gr.quadrature_demod_cf(demod_k)
                self.gr_freq_xlating_fir_filter_xxx_0 = gr.freq_xlating_fir_filter_ccc(channel_decim, (channel_taps), band_freq-freq+offset, sample_rate)
-               self.gr_moving_average_xx_0 = gr.moving_average_ff(8, 1.0/8.0, 4000)
                self.usrp_source = grc_usrp.simple_source_c(which=0, side="A", rx_ant="RXA")
                self.usrp_source.set_decim_rate(decim)
                self.usrp_source.set_frequency(band_freq, verbose=True)
@@ -211,6 +218,7 @@ class usrp_rx_flex(grc_wxgui.top_block_gui):
                        title="Channel Waveform",
                        sample_rate=channel_rate,
                        v_scale=8e3,
+                       v_offset=0,
                        t_scale=20.0/channel_rate,
                        ac_couple=False,
                        xy_mode=False,
@@ -220,9 +228,10 @@ class usrp_rx_flex(grc_wxgui.top_block_gui):
                self.wxgui_scopesink2_0_0 = scopesink2.scope_sink_f(
                        self.displays.GetPage(1).GetWin(),
                        title="Baseband",
-                       sample_rate=channel_rate,
+                       sample_rate=16e3,
                        v_scale=1,
-                       t_scale=40.0/channel_rate,
+                       v_offset=0,
+                       t_scale=40.0/16e3,
                        ac_couple=False,
                        xy_mode=False,
                        num_inputs=1,
@@ -237,8 +246,8 @@ class usrp_rx_flex(grc_wxgui.top_block_gui):
                self.connect((self.usrp_source, 0), (self.wxgui_fftsink2_0, 0))
                self.connect((self.gr_freq_xlating_fir_filter_xxx_0, 0), (self.wxgui_scopesink2_0, 0))
                self.connect((self.gr_freq_xlating_fir_filter_xxx_0, 0), (self.fm_demod, 0))
-               self.connect((self.fm_demod, 0), (self.gr_moving_average_xx_0, 0))
-               self.connect((self.gr_moving_average_xx_0, 0), (self.wxgui_scopesink2_0_0, 0))
+               self.connect((self.blks2_rational_resampler_xxx_0, 0), (self.wxgui_scopesink2_0_0, 0))
+               self.connect((self.fm_demod, 0), (self.blks2_rational_resampler_xxx_0, 0))
 
        def set_config_filename(self, config_filename):
                self.config_filename = config_filename
@@ -269,8 +278,8 @@ class usrp_rx_flex(grc_wxgui.top_block_gui):
 
        def set_symbol_rate(self, symbol_rate):
                self.symbol_rate = symbol_rate
-               self.set_ma_ntaps(self.channel_rate/self.symbol_rate)
                self.set_passband(2*(self.deviation+self.symbol_rate))
+               self.set_ma_ntaps(self.channel_rate/self.symbol_rate)
 
        def set_saved_channel(self, saved_channel):
                self.saved_channel = saved_channel
@@ -308,11 +317,10 @@ class usrp_rx_flex(grc_wxgui.top_block_gui):
                self.channel_rate = channel_rate
                self.wxgui_scopesink2_0.set_sample_rate(self.channel_rate)
                self.wxgui_fftsink2_1.set_sample_rate(self.channel_rate)
-               self.set_ma_ntaps(self.channel_rate/self.symbol_rate)
                self.set_channel_decim(int(self.sample_rate/self.channel_rate))
                self.set_demod_k(3*self.channel_rate/(2*math.pi*self.deviation))
                self.set_channel_taps(firdes.low_pass(10, self.sample_rate, self.passband/2.0, (self.channel_rate-self.passband)/2.0))
-               self.wxgui_scopesink2_0_0.set_sample_rate(self.channel_rate)
+               self.set_ma_ntaps(self.channel_rate/self.symbol_rate)
 
        def set_channel(self, channel):
                self.channel = channel