gr-noaa: added HRPT minor frame parsing, renamed scripts
authorJohnathan Corgan <jcorgan@corganenterprises.com>
Fri, 6 Nov 2009 19:21:08 +0000 (11:21 -0800)
committerJohnathan Corgan <jcorgan@corganenterprises.com>
Mon, 9 Nov 2009 16:05:23 +0000 (08:05 -0800)
implemented start of minor frame parsing
renamed demod_rx_hrpt to hrpt_demod, new defaults
added configuration flags to hrpt_decoder
added hrpt_decode app
updated file_rx_hrpt with new defaults
updated usrp_rx_hrpt_* with new defaults

24 files changed:
gr-noaa/README
gr-noaa/apps/.gitignore
gr-noaa/apps/Makefile.am
gr-noaa/apps/demod_hrpt_file.grc [deleted file]
gr-noaa/apps/demod_hrpt_file.py [deleted file]
gr-noaa/apps/file_rx_hrpt.grc
gr-noaa/apps/file_rx_hrpt.py
gr-noaa/apps/hrpt_decode.grc [new file with mode: 0644]
gr-noaa/apps/hrpt_decode.py [new file with mode: 0755]
gr-noaa/apps/hrpt_demod.grc [new file with mode: 0644]
gr-noaa/apps/hrpt_demod.py [new file with mode: 0755]
gr-noaa/apps/usrp_rx_hrpt.grc
gr-noaa/apps/usrp_rx_hrpt.py
gr-noaa/apps/usrp_rx_hrpt_nogui.grc
gr-noaa/apps/usrp_rx_hrpt_nogui.py
gr-noaa/grc/noaa_hrpt_decoder.xml
gr-noaa/lib/Makefile.am
gr-noaa/lib/noaa_hrpt.h [new file with mode: 0644]
gr-noaa/lib/noaa_hrpt_decoder.cc
gr-noaa/lib/noaa_hrpt_decoder.h
gr-noaa/lib/noaa_hrpt_deframer.cc
gr-noaa/lib/noaa_hrpt_deframer.h
gr-noaa/oct/frames_to_ppm.m
gr-noaa/swig/noaa_hrpt_decoder.i

index 29d11f59349ac5d6f19e1e77d96a5c45a7f10b4f..f00d2d28deec0c0bf9b227aeee90a6d509417a8c 100644 (file)
@@ -40,7 +40,7 @@ be set in the configuration file prior to running.  It has no command-line
 parameters, and works identically to the GUI scripts.
 
 
-demod_hrpt_file.py
+hrpt_demod_file.py
 ------------------
 
 This non-GUI script will operate on a file generated with
index 6bd1ab99593a948cca795ade1958a165d832b87a..cd8d543cc19784476f362673b6c272353b825bbb 100644 (file)
@@ -1,2 +1,3 @@
 *.dat
-*.txt
\ No newline at end of file
+*.txt
+*.hrpt
index 961b09afabe5fa9e243867393fd7ec0c2d2e189d..e246ba76a5c6c326f8a96464d251395b250dd6d4 100644 (file)
@@ -24,15 +24,17 @@ include $(top_srcdir)/Makefile.common
 if PYTHON
 
 dist_bin_SCRIPTS = \
-       demod_hrpt_file.py \
+       hrpt_decode.py \
+       hrpt_demod.py \
        file_rx_hrpt.py \
        usrp_rx_hrpt.py \
        usrp_rx_hrpt_nogui.py \
        usrp_rx_lrit.py
 
 EXTRA_DIST = \
+       hrpt_decode.grc \
+       hrpt_demod.grc \
        file_rx_hrpt.grc \
-       demod_hrpt_file.grc \
        usrp_rx_hrpt.grc \
        usrp_rx_hrpt_nogui.grc \
        usrp_rx_lrit.grc
diff --git a/gr-noaa/apps/demod_hrpt_file.grc b/gr-noaa/apps/demod_hrpt_file.grc
deleted file mode 100644 (file)
index 3c5e3ef..0000000
+++ /dev/null
@@ -1,774 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
-  <timestamp>Mon Nov  2 07:06:57 2009</timestamp>
-  <block>
-    <key>options</key>
-    <param>
-      <key>id</key>
-      <value>demod_hrpt_file</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>title</key>
-      <value></value>
-    </param>
-    <param>
-      <key>author</key>
-      <value></value>
-    </param>
-    <param>
-      <key>description</key>
-      <value></value>
-    </param>
-    <param>
-      <key>window_size</key>
-      <value>4096,4096</value>
-    </param>
-    <param>
-      <key>generate_options</key>
-      <value>no_gui</value>
-    </param>
-    <param>
-      <key>category</key>
-      <value>Custom</value>
-    </param>
-    <param>
-      <key>run_options</key>
-      <value>run</value>
-    </param>
-    <param>
-      <key>run</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>realtime_scheduling</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(10, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>max_carrier_offset</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>2*math.pi*100e3/sample_rate</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(575, 19)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>sym_rate</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>600*1109</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(301, 19)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>sps</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>sample_rate/sym_rate</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(397, 19)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>hs</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>int(sps/2.0)</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(499, 19)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>sample_rate</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>64e6/decim</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(198, 17)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>max_clock_offset</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(710, 17)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>import</key>
-    <param>
-      <key>id</key>
-      <value>import_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>import</key>
-      <value>import math, os</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(11, 103)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>parameter</key>
-    <param>
-      <key>id</key>
-      <value>decim</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>decim</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>16</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>intx</value>
-    </param>
-    <param>
-      <key>short_id</key>
-      <value>d</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(202, 102)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>parameter</key>
-    <param>
-      <key>id</key>
-      <value>pll_alpha</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>pll_alpha</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>eng_float</value>
-    </param>
-    <param>
-      <key>short_id</key>
-      <value>p</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(294, 101)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>parameter</key>
-    <param>
-      <key>id</key>
-      <value>clock_alpha</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>clock_alpha</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>eng_float</value>
-    </param>
-    <param>
-      <key>short_id</key>
-      <value>a</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(395, 101)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>parameter</key>
-    <param>
-      <key>id</key>
-      <value>sync_alpha</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>sync_alpha</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>eng_float</value>
-    </param>
-    <param>
-      <key>short_id</key>
-      <value>s</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(508, 102)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>parameter</key>
-    <param>
-      <key>id</key>
-      <value>input_filename</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>input_filename</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>usrp.dat</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>string</value>
-    </param>
-    <param>
-      <key>short_id</key>
-      <value>F</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(618, 102)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>parameter</key>
-    <param>
-      <key>id</key>
-      <value>output_filename</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>output_filename</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>frames.dat</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>string</value>
-    </param>
-    <param>
-      <key>short_id</key>
-      <value>o</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(726, 102)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>180</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_file_source</key>
-    <param>
-      <key>id</key>
-      <value>file_source</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>file</key>
-      <value>input_filename</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>repeat</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(62, 306)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_interleaved_short_to_complex</key>
-    <param>
-      <key>id</key>
-      <value>cs2cf</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(297, 318)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_agc_xx</key>
-    <param>
-      <key>id</key>
-      <value>agc</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>rate</key>
-      <value>1e-5</value>
-    </param>
-    <param>
-      <key>reference</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>gain</key>
-      <value>1.0/32768.0</value>
-    </param>
-    <param>
-      <key>max_gain</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(538, 290)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>noaa_hrpt_pll_cf</key>
-    <param>
-      <key>id</key>
-      <value>pll</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>alpha</key>
-      <value>pll_alpha</value>
-    </param>
-    <param>
-      <key>beta</key>
-      <value>pll_alpha**2/4.0</value>
-    </param>
-    <param>
-      <key>max_offset</key>
-      <value>max_carrier_offset</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(720, 297)</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>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>length</key>
-      <value>hs</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1.0/hs</value>
-    </param>
-    <param>
-      <key>max_iter</key>
-      <value>4000</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(949, 297)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_clock_recovery_mm_xx</key>
-    <param>
-      <key>id</key>
-      <value>gr_clock_recovery_mm_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>omega</key>
-      <value>sps/2.0</value>
-    </param>
-    <param>
-      <key>gain_omega</key>
-      <value>clock_alpha**2/4.0</value>
-    </param>
-    <param>
-      <key>mu</key>
-      <value>0.5</value>
-    </param>
-    <param>
-      <key>gain_mu</key>
-      <value>clock_alpha</value>
-    </param>
-    <param>
-      <key>omega_relative_limit</key>
-      <value>max_clock_offset</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1158, 281)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_file_sink</key>
-    <param>
-      <key>id</key>
-      <value>gr_file_sink_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>file</key>
-      <value>output_filename</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(732, 615)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>noaa_hrpt_decoder</key>
-    <param>
-      <key>id</key>
-      <value>noaa_hrpt_decoder_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(730, 537)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_binary_slicer_fb</key>
-    <param>
-      <key>id</key>
-      <value>gr_binary_slicer_fb_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(112, 537)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>noaa_hrpt_deframer</key>
-    <param>
-      <key>id</key>
-      <value>noaa_hrpt_deframer_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(536, 537)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <connection>
-    <source_block_id>file_source</source_block_id>
-    <sink_block_id>cs2cf</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>gr_clock_recovery_mm_xx_0</source_block_id>
-    <sink_block_id>gr_binary_slicer_fb_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>gr_moving_average_xx_0</source_block_id>
-    <sink_block_id>gr_clock_recovery_mm_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>pll</source_block_id>
-    <sink_block_id>gr_moving_average_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>cs2cf</source_block_id>
-    <sink_block_id>agc</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>agc</source_block_id>
-    <sink_block_id>pll</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>noaa_hrpt_deframer_0</source_block_id>
-    <sink_block_id>gr_file_sink_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>noaa_hrpt_deframer_0</source_block_id>
-    <sink_block_id>noaa_hrpt_decoder_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>gr_binary_slicer_fb_0</source_block_id>
-    <sink_block_id>noaa_hrpt_deframer_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-</flow_graph>
diff --git a/gr-noaa/apps/demod_hrpt_file.py b/gr-noaa/apps/demod_hrpt_file.py
deleted file mode 100755 (executable)
index d866501..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/usr/bin/env python
-##################################################
-# Gnuradio Python Flow Graph
-# Title: Demod Hrpt File
-# Generated: Mon Nov  2 07:06:57 2009
-##################################################
-
-from gnuradio import eng_notation
-from gnuradio import gr
-from gnuradio import noaa
-from gnuradio.eng_option import eng_option
-from gnuradio.gr import firdes
-from optparse import OptionParser
-import math, os
-
-class demod_hrpt_file(gr.top_block):
-
-       def __init__(self, decim=16, pll_alpha=0.05, clock_alpha=0.05, sync_alpha=0.05, input_filename="usrp.dat", output_filename="frames.dat"):
-               gr.top_block.__init__(self, "Demod Hrpt File")
-
-               ##################################################
-               # Parameters
-               ##################################################
-               self.decim = decim
-               self.pll_alpha = pll_alpha
-               self.clock_alpha = clock_alpha
-               self.sync_alpha = sync_alpha
-               self.input_filename = input_filename
-               self.output_filename = output_filename
-
-               ##################################################
-               # Variables
-               ##################################################
-               self.sym_rate = sym_rate = 600*1109
-               self.sample_rate = sample_rate = 64e6/decim
-               self.sps = sps = sample_rate/sym_rate
-               self.max_clock_offset = max_clock_offset = 0.1
-               self.max_carrier_offset = max_carrier_offset = 2*math.pi*100e3/sample_rate
-               self.hs = hs = int(sps/2.0)
-
-               ##################################################
-               # Blocks
-               ##################################################
-               self.agc = gr.agc_cc(1e-5, 1.0, 1.0/32768.0, 1.0)
-               self.cs2cf = gr.interleaved_short_to_complex()
-               self.file_source = gr.file_source(gr.sizeof_short*1, input_filename, False)
-               self.gr_binary_slicer_fb_0 = gr.binary_slicer_fb()
-               self.gr_clock_recovery_mm_xx_0 = gr.clock_recovery_mm_ff(sps/2.0, clock_alpha**2/4.0, 0.5, clock_alpha, max_clock_offset)
-               self.gr_file_sink_0 = gr.file_sink(gr.sizeof_short*1, output_filename)
-               self.gr_moving_average_xx_0 = gr.moving_average_ff(hs, 1.0/hs, 4000)
-               self.noaa_hrpt_decoder_0 = noaa.hrpt_decoder()
-               self.noaa_hrpt_deframer_0 = noaa.hrpt_deframer()
-               self.pll = noaa.hrpt_pll_cf(pll_alpha, pll_alpha**2/4.0, max_carrier_offset)
-
-               ##################################################
-               # Connections
-               ##################################################
-               self.connect((self.file_source, 0), (self.cs2cf, 0))
-               self.connect((self.gr_clock_recovery_mm_xx_0, 0), (self.gr_binary_slicer_fb_0, 0))
-               self.connect((self.gr_moving_average_xx_0, 0), (self.gr_clock_recovery_mm_xx_0, 0))
-               self.connect((self.pll, 0), (self.gr_moving_average_xx_0, 0))
-               self.connect((self.cs2cf, 0), (self.agc, 0))
-               self.connect((self.agc, 0), (self.pll, 0))
-               self.connect((self.noaa_hrpt_deframer_0, 0), (self.gr_file_sink_0, 0))
-               self.connect((self.noaa_hrpt_deframer_0, 0), (self.noaa_hrpt_decoder_0, 0))
-               self.connect((self.gr_binary_slicer_fb_0, 0), (self.noaa_hrpt_deframer_0, 0))
-
-       def set_decim(self, decim):
-               self.decim = decim
-               self.set_sample_rate(64e6/self.decim)
-
-       def set_pll_alpha(self, pll_alpha):
-               self.pll_alpha = pll_alpha
-               self.pll.set_alpha(self.pll_alpha)
-               self.pll.set_beta(self.pll_alpha**2/4.0)
-
-       def set_clock_alpha(self, clock_alpha):
-               self.clock_alpha = clock_alpha
-               self.gr_clock_recovery_mm_xx_0.set_gain_omega(self.clock_alpha**2/4.0)
-               self.gr_clock_recovery_mm_xx_0.set_gain_mu(self.clock_alpha)
-
-       def set_sync_alpha(self, sync_alpha):
-               self.sync_alpha = sync_alpha
-
-       def set_input_filename(self, input_filename):
-               self.input_filename = input_filename
-
-       def set_output_filename(self, output_filename):
-               self.output_filename = output_filename
-
-       def set_sym_rate(self, sym_rate):
-               self.sym_rate = sym_rate
-               self.set_sps(self.sample_rate/self.sym_rate)
-
-       def set_sample_rate(self, sample_rate):
-               self.sample_rate = sample_rate
-               self.set_max_carrier_offset(2*math.pi*100e3/self.sample_rate)
-               self.set_sps(self.sample_rate/self.sym_rate)
-
-       def set_sps(self, sps):
-               self.sps = sps
-               self.set_hs(int(self.sps/2.0))
-               self.gr_clock_recovery_mm_xx_0.set_omega(self.sps/2.0)
-
-       def set_max_clock_offset(self, max_clock_offset):
-               self.max_clock_offset = max_clock_offset
-
-       def set_max_carrier_offset(self, max_carrier_offset):
-               self.max_carrier_offset = max_carrier_offset
-               self.pll.set_max_offset(self.max_carrier_offset)
-
-       def set_hs(self, hs):
-               self.hs = hs
-               self.gr_moving_average_xx_0.set_length_and_scale(self.hs, 1.0/self.hs)
-
-if __name__ == '__main__':
-       parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
-       parser.add_option("-d", "--decim", dest="decim", type="intx", default=16,
-               help="Set decim [default=%default]")
-       parser.add_option("-p", "--pll-alpha", dest="pll_alpha", type="eng_float", default=eng_notation.num_to_str(0.05),
-               help="Set pll_alpha [default=%default]")
-       parser.add_option("-a", "--clock-alpha", dest="clock_alpha", type="eng_float", default=eng_notation.num_to_str(0.05),
-               help="Set clock_alpha [default=%default]")
-       parser.add_option("-s", "--sync-alpha", dest="sync_alpha", type="eng_float", default=eng_notation.num_to_str(0.05),
-               help="Set sync_alpha [default=%default]")
-       parser.add_option("-F", "--input-filename", dest="input_filename", type="string", default="usrp.dat",
-               help="Set usrp.dat [default=%default]")
-       parser.add_option("-o", "--output-filename", dest="output_filename", type="string", default="frames.dat",
-               help="Set frames.dat [default=%default]")
-       (options, args) = parser.parse_args()
-       tb = demod_hrpt_file(decim=options.decim, pll_alpha=options.pll_alpha, clock_alpha=options.clock_alpha, sync_alpha=options.sync_alpha, input_filename=options.input_filename, output_filename=options.output_filename)
-       tb.run()
-
index f34143756996a89cbf56ec0963f18b5537187653..e3cccd39330fa2154bc911740822944d35bf6147 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Mon Nov  2 08:30:47 2009</timestamp>
+  <timestamp>Mon Nov  9 07:47:17 2009</timestamp>
   <block>
     <key>options</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>max_carrier_offset</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>2*math.pi*100e3/sample_rate</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(575, 19)</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>hs</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>int(sps/2.0)</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(499, 19)</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>max_clock_offset</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(705, 19)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>side</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>'A'</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>string</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'side'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>side</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(194, 253)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_file_sink</key>
-    <param>
-      <key>id</key>
-      <value>frame_sink</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>file</key>
-      <value>output_filename</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(973, 1024)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>virtual_source</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>noaa_hrpt_decoder</key>
-    <param>
-      <key>id</key>
-      <value>decoder</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(974, 925)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable</key>
     <param>
     </param>
   </block>
   <block>
-    <key>gr_throttle</key>
+    <key>gr_file_source</key>
     <param>
       <key>id</key>
-      <value>throttle</value>
+      <value>gr_file_source_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
+    <param>
+      <key>file</key>
+      <value>input_filename</value>
+    </param>
     <param>
       <key>type</key>
       <value>short</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>sample_rate</value>
+      <key>repeat</key>
+      <value>False</value>
     </param>
     <param>
       <key>vlen</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(75, 679)</value>
+      <value>(76, 613)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>gr_file_source</key>
+    <key>notebook</key>
     <param>
       <key>id</key>
-      <value>gr_file_source_0</value>
+      <value>displays</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>file</key>
-      <value>input_filename</value>
+      <key>style</key>
+      <value>wx.NB_TOP</value>
+    </param>
+    <param>
+      <key>labels</key>
+      <value>['Spectrum','Demod']</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value>1,0,1,2</value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(12, 249)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>wxgui_fftsink2</key>
+    <param>
+      <key>id</key>
+      <value>rx_fft</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
+      <value>complex</value>
     </param>
     <param>
-      <key>repeat</key>
+      <key>title</key>
+      <value>RX Spectrum</value>
+    </param>
+    <param>
+      <key>samp_rate</key>
+      <value>sample_rate</value>
+    </param>
+    <param>
+      <key>baseband_freq</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>y_per_div</key>
+      <value>5</value>
+    </param>
+    <param>
+      <key>y_divs</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>ref_level</key>
+      <value>-5</value>
+    </param>
+    <param>
+      <key>ref_scale</key>
+      <value>2.0</value>
+    </param>
+    <param>
+      <key>fft_size</key>
+      <value>1024</value>
+    </param>
+    <param>
+      <key>fft_rate</key>
+      <value>15</value>
+    </param>
+    <param>
+      <key>peak_hold</key>
       <value>False</value>
     </param>
+    <param>
+      <key>average</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>avg_alpha</key>
+      <value>0.1</value>
+    </param>
+    <param>
+      <key>win</key>
+      <value>None</value>
+    </param>
+    <param>
+      <key>win_size</key>
+      <value>640, 360</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value>0, 0, 1, 1</value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value>displays, 0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(471, 450)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_binary_slicer_fb</key>
+    <param>
+      <key>id</key>
+      <value>gr_binary_slicer_fb_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(393, 975)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_throttle</key>
+    <param>
+      <key>id</key>
+      <value>throttle</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>short</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>2*sample_rate</value>
+    </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(76, 613)</value>
+      <value>(75, 679)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
     </param>
     <param>
       <key>value</key>
-      <value>'usrp.dat'</value>
+      <value>usrp.dat</value>
     </param>
     <param>
       <key>type</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(198, 107)</value>
+      <value>(196, 98)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
     <param>
       <key>value</key>
-      <value>16</value>
+      <value>32</value>
     </param>
     <param>
       <key>type</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(308, 107)</value>
+      <value>(307, 98)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(397, 108)</value>
+      <value>(397, 98)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(539, 105)</value>
+      <value>(540, 98)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>variable_config</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>saved_pll_alpha</value>
+      <value>hs</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>real</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'pll_alpha'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>pll_alpha</value>
+      <value>int(sps/2.0)</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(363, 254)</value>
+      <value>(499, 19)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>variable_config</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>saved_clock_alpha</value>
+      <value>max_carrier_offset</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>value</key>
-      <value>0.05</value>
+      <value>2*math.pi*100e3/sample_rate</value>
     </param>
     <param>
-      <key>type</key>
-      <value>real</value>
+      <key>_coordinate</key>
+      <value>(575, 19)</value>
     </param>
     <param>
-      <key>config_file</key>
-      <value>config_filename</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
+      <key>id</key>
+      <value>max_clock_offset</value>
     </param>
     <param>
-      <key>option</key>
-      <value>'clock_alpha'</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>writeback</key>
-      <value>clock_alpha</value>
+      <key>value</key>
+      <value>100e-6</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(527, 256)</value>
+      <value>(705, 19)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
     <param>
       <key>value</key>
-      <value>'frames.dat'</value>
+      <value>'frames.hrpt'</value>
     </param>
     <param>
       <key>type</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(689, 257)</value>
+      <value>(521, 254)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>notebook</key>
+    <key>variable_config</key>
     <param>
       <key>id</key>
-      <value>displays</value>
+      <value>saved_pll_alpha</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>style</key>
-      <value>wx.NB_TOP</value>
+      <key>value</key>
+      <value>0.01</value>
     </param>
     <param>
-      <key>labels</key>
-      <value>['Spectrum','Demod']</value>
+      <key>type</key>
+      <value>real</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value>1,0,1,2</value>
+      <key>config_file</key>
+      <value>config_filename</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value></value>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'pll_alpha'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>pll_alpha</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(12, 249)</value>
+      <value>(195, 253)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>wxgui_fftsink2</key>
+    <key>variable_config</key>
     <param>
       <key>id</key>
-      <value>rx_fft</value>
+      <value>saved_clock_alpha</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>title</key>
-      <value>RX Spectrum</value>
+      <key>value</key>
+      <value>0.01</value>
     </param>
     <param>
-      <key>samp_rate</key>
-      <value>sample_rate</value>
+      <key>type</key>
+      <value>real</value>
     </param>
     <param>
-      <key>baseband_freq</key>
-      <value>0</value>
+      <key>config_file</key>
+      <value>config_filename</value>
     </param>
     <param>
-      <key>y_per_div</key>
-      <value>5</value>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
     </param>
     <param>
-      <key>y_divs</key>
-      <value>8</value>
+      <key>option</key>
+      <value>'clock_alpha'</value>
     </param>
     <param>
-      <key>ref_level</key>
-      <value>-5</value>
+      <key>writeback</key>
+      <value>clock_alpha</value>
     </param>
     <param>
-      <key>ref_scale</key>
-      <value>2.0</value>
+      <key>_coordinate</key>
+      <value>(360, 255)</value>
     </param>
     <param>
-      <key>fft_size</key>
-      <value>1024</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_deframer</key>
     <param>
-      <key>fft_rate</key>
-      <value>15</value>
+      <key>id</key>
+      <value>deframer</value>
     </param>
     <param>
-      <key>peak_hold</key>
-      <value>False</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>average</key>
-      <value>True</value>
+      <key>_coordinate</key>
+      <value>(579, 975)</value>
     </param>
     <param>
-      <key>avg_alpha</key>
-      <value>0.1</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_decoder</key>
     <param>
-      <key>win</key>
-      <value>None</value>
+      <key>id</key>
+      <value>decoder</value>
     </param>
     <param>
-      <key>win_size</key>
-      <value>640, 360</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value>0, 0, 1, 1</value>
+      <key>verbose</key>
+      <value>True</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value>displays, 0</value>
+      <key>output</key>
+      <value>False</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(471, 450)</value>
+      <value>(849, 925)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>gr_binary_slicer_fb</key>
+    <key>gr_file_sink</key>
     <param>
       <key>id</key>
-      <value>gr_binary_slicer_fb_0</value>
+      <value>frame_sink</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(393, 975)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>file</key>
+      <value>output_filename</value>
     </param>
-  </block>
-  <block>
-    <key>noaa_hrpt_deframer</key>
     <param>
-      <key>id</key>
-      <value>deframer</value>
+      <key>type</key>
+      <value>short</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(762, 975)</value>
+      <value>(848, 1007)</value>
     </param>
     <param>
       <key>_rotation</key>
index 1513141ec43cacd73aaa1ef4ae75056dafb96902..13b887635814f6ea3e841355b19916f5d213dbbd 100755 (executable)
@@ -2,7 +2,7 @@
 ##################################################
 # Gnuradio Python Flow Graph
 # Title: USRP HRPT Receiver
-# Generated: Mon Nov  2 08:30:47 2009
+# Generated: Mon Nov  9 07:47:17 2009
 ##################################################
 
 from gnuradio import eng_notation
@@ -22,7 +22,7 @@ import wx
 
 class file_rx_hrpt(grc_wxgui.top_block_gui):
 
-       def __init__(self, input_filename='usrp.dat', decim=16):
+       def __init__(self, input_filename="usrp.dat", decim=32):
                grc_wxgui.top_block_gui.__init__(self, title="USRP HRPT Receiver")
 
                ##################################################
@@ -41,25 +41,20 @@ class file_rx_hrpt(grc_wxgui.top_block_gui):
                self._saved_pll_alpha_config = ConfigParser.ConfigParser()
                self._saved_pll_alpha_config.read(config_filename)
                try: saved_pll_alpha = self._saved_pll_alpha_config.getfloat('usrp_rx_hrpt', 'pll_alpha')
-               except: saved_pll_alpha = 0.05
+               except: saved_pll_alpha = 0.01
                self.saved_pll_alpha = saved_pll_alpha
                self._saved_clock_alpha_config = ConfigParser.ConfigParser()
                self._saved_clock_alpha_config.read(config_filename)
                try: saved_clock_alpha = self._saved_clock_alpha_config.getfloat('usrp_rx_hrpt', 'clock_alpha')
-               except: saved_clock_alpha = 0.05
+               except: saved_clock_alpha = 0.01
                self.saved_clock_alpha = saved_clock_alpha
-               self._side_config = ConfigParser.ConfigParser()
-               self._side_config.read(config_filename)
-               try: side = self._side_config.get('usrp_rx_hrpt', 'side')
-               except: side = 'A'
-               self.side = side
                self.pll_alpha = pll_alpha = saved_pll_alpha
                self._output_filename_config = ConfigParser.ConfigParser()
                self._output_filename_config.read(config_filename)
                try: output_filename = self._output_filename_config.get('usrp_rx_hrpt', 'filename')
-               except: output_filename = 'frames.dat'
+               except: output_filename = 'frames.hrpt'
                self.output_filename = output_filename
-               self.max_clock_offset = max_clock_offset = 0.1
+               self.max_clock_offset = max_clock_offset = 100e-6
                self.max_carrier_offset = max_carrier_offset = 2*math.pi*100e3/sample_rate
                self.hs = hs = int(sps/2.0)
                self.clock_alpha = clock_alpha = saved_clock_alpha
@@ -126,7 +121,7 @@ class file_rx_hrpt(grc_wxgui.top_block_gui):
                # Blocks
                ##################################################
                self.agc = gr.agc_cc(1e-6, 1.0, 1.0, 1.0)
-               self.decoder = noaa.hrpt_decoder()
+               self.decoder = noaa.hrpt_decoder(True,False)
                self.deframer = noaa.hrpt_deframer()
                self.demod_scope = scopesink2.scope_sink_f(
                        self.displays.GetPage(1).GetWin(),
@@ -164,7 +159,7 @@ class file_rx_hrpt(grc_wxgui.top_block_gui):
                        size=(640, 360),
                )
                self.displays.GetPage(0).GridAdd(self.rx_fft.win, 0, 0, 1, 1)
-               self.throttle = gr.throttle(gr.sizeof_short*1, sample_rate)
+               self.throttle = gr.throttle(gr.sizeof_short*1, 2*sample_rate)
 
                ##################################################
                # Connections
@@ -196,18 +191,18 @@ class file_rx_hrpt(grc_wxgui.top_block_gui):
 
        def set_sample_rate(self, sample_rate):
                self.sample_rate = sample_rate
-               self.set_max_carrier_offset(2*math.pi*100e3/self.sample_rate)
                self.set_sps(self.sample_rate/self.sym_rate)
                self.rx_fft.set_sample_rate(self.sample_rate)
+               self.set_max_carrier_offset(2*math.pi*100e3/self.sample_rate)
 
        def set_config_filename(self, config_filename):
                self.config_filename = config_filename
-               self._side_config = ConfigParser.ConfigParser()
-               self._side_config.read(self.config_filename)
-               if not self._side_config.has_section('usrp_rx_hrpt'):
-                       self._side_config.add_section('usrp_rx_hrpt')
-               self._side_config.set('usrp_rx_hrpt', 'side', str(self.side))
-               self._side_config.write(open(self.config_filename, 'w'))
+               self._output_filename_config = ConfigParser.ConfigParser()
+               self._output_filename_config.read(self.config_filename)
+               if not self._output_filename_config.has_section('usrp_rx_hrpt'):
+                       self._output_filename_config.add_section('usrp_rx_hrpt')
+               self._output_filename_config.set('usrp_rx_hrpt', 'filename', str(self.output_filename))
+               self._output_filename_config.write(open(self.config_filename, 'w'))
                self._saved_pll_alpha_config = ConfigParser.ConfigParser()
                self._saved_pll_alpha_config.read(self.config_filename)
                if not self._saved_pll_alpha_config.has_section('usrp_rx_hrpt'):
@@ -220,17 +215,11 @@ class file_rx_hrpt(grc_wxgui.top_block_gui):
                        self._saved_clock_alpha_config.add_section('usrp_rx_hrpt')
                self._saved_clock_alpha_config.set('usrp_rx_hrpt', 'clock_alpha', str(self.clock_alpha))
                self._saved_clock_alpha_config.write(open(self.config_filename, 'w'))
-               self._output_filename_config = ConfigParser.ConfigParser()
-               self._output_filename_config.read(self.config_filename)
-               if not self._output_filename_config.has_section('usrp_rx_hrpt'):
-                       self._output_filename_config.add_section('usrp_rx_hrpt')
-               self._output_filename_config.set('usrp_rx_hrpt', 'filename', str(self.output_filename))
-               self._output_filename_config.write(open(self.config_filename, 'w'))
 
        def set_sps(self, sps):
                self.sps = sps
-               self.set_hs(int(self.sps/2.0))
                self.gr_clock_recovery_mm_xx_0.set_omega(self.sps/2.0)
+               self.set_hs(int(self.sps/2.0))
 
        def set_saved_pll_alpha(self, saved_pll_alpha):
                self.saved_pll_alpha = saved_pll_alpha
@@ -240,15 +229,6 @@ class file_rx_hrpt(grc_wxgui.top_block_gui):
                self.saved_clock_alpha = saved_clock_alpha
                self.set_clock_alpha(self.saved_clock_alpha)
 
-       def set_side(self, side):
-               self.side = side
-               self._side_config = ConfigParser.ConfigParser()
-               self._side_config.read(self.config_filename)
-               if not self._side_config.has_section('usrp_rx_hrpt'):
-                       self._side_config.add_section('usrp_rx_hrpt')
-               self._side_config.set('usrp_rx_hrpt', 'side', str(self.side))
-               self._side_config.write(open(self.config_filename, 'w'))
-
        def set_pll_alpha(self, pll_alpha):
                self.pll_alpha = pll_alpha
                self.pll.set_alpha(self.pll_alpha)
@@ -297,9 +277,9 @@ class file_rx_hrpt(grc_wxgui.top_block_gui):
 
 if __name__ == '__main__':
        parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
-       parser.add_option("-F", "--input-filename", dest="input_filename", type="string", default='usrp.dat',
+       parser.add_option("-F", "--input-filename", dest="input_filename", type="string", default="usrp.dat",
                help="Set usrp.dat [default=%default]")
-       parser.add_option("-d", "--decim", dest="decim", type="intx", default=16,
+       parser.add_option("-d", "--decim", dest="decim", type="intx", default=32,
                help="Set decim [default=%default]")
        (options, args) = parser.parse_args()
        tb = file_rx_hrpt(input_filename=options.input_filename, decim=options.decim)
diff --git a/gr-noaa/apps/hrpt_decode.grc b/gr-noaa/apps/hrpt_decode.grc
new file mode 100644 (file)
index 0000000..39fe195
--- /dev/null
@@ -0,0 +1,428 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+  <timestamp>Sun Nov  8 10:48:59 2009</timestamp>
+  <block>
+    <key>options</key>
+    <param>
+      <key>id</key>
+      <value>hrpt_decode</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>title</key>
+      <value></value>
+    </param>
+    <param>
+      <key>author</key>
+      <value></value>
+    </param>
+    <param>
+      <key>description</key>
+      <value></value>
+    </param>
+    <param>
+      <key>window_size</key>
+      <value>4096,4096</value>
+    </param>
+    <param>
+      <key>generate_options</key>
+      <value>no_gui</value>
+    </param>
+    <param>
+      <key>category</key>
+      <value>Custom</value>
+    </param>
+    <param>
+      <key>run_options</key>
+      <value>run</value>
+    </param>
+    <param>
+      <key>run</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>realtime_scheduling</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(10, 10)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>max_carrier_offset</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>2*math.pi*100e3/sample_rate</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(575, 19)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>hs</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>int(sps/2.0)</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(499, 19)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>sample_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>64e6/decim</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(198, 17)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>import</key>
+    <param>
+      <key>id</key>
+      <value>import_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>import math, os</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(11, 103)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>max_clock_offset</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>100e-6</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(710, 17)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>sym_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>600*1109</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(307, 18)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>sps</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>sample_rate/sym_rate</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(400, 17)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>decim</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>decim</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>32</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>intx</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>d</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(202, 102)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>pll_alpha</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>pll_alpha</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>eng_float</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>p</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(294, 101)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>clock_alpha</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>clock_alpha</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>eng_float</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>s</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(395, 101)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_file_source</key>
+    <param>
+      <key>id</key>
+      <value>file_source</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>file</key>
+      <value>input_filename</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>short</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(231, 419)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_decoder</key>
+    <param>
+      <key>id</key>
+      <value>decoder</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>verbose</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>output</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(462, 419)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>input_filename</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>input_filename</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>frames.hrpt</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>string</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>F</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(522, 100)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <connection>
+    <source_block_id>file_source</source_block_id>
+    <sink_block_id>decoder</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+</flow_graph>
diff --git a/gr-noaa/apps/hrpt_decode.py b/gr-noaa/apps/hrpt_decode.py
new file mode 100755 (executable)
index 0000000..158780b
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: Hrpt Decode
+# Generated: Sun Nov  8 10:49:01 2009
+##################################################
+
+from gnuradio import eng_notation
+from gnuradio import gr
+from gnuradio import noaa
+from gnuradio.eng_option import eng_option
+from gnuradio.gr import firdes
+from optparse import OptionParser
+import math, os
+
+class hrpt_decode(gr.top_block):
+
+       def __init__(self, decim=32, pll_alpha=0.01, clock_alpha=0.01, input_filename="frames.hrpt"):
+               gr.top_block.__init__(self, "Hrpt Decode")
+
+               ##################################################
+               # Parameters
+               ##################################################
+               self.decim = decim
+               self.pll_alpha = pll_alpha
+               self.clock_alpha = clock_alpha
+               self.input_filename = input_filename
+
+               ##################################################
+               # Variables
+               ##################################################
+               self.sym_rate = sym_rate = 600*1109
+               self.sample_rate = sample_rate = 64e6/decim
+               self.sps = sps = sample_rate/sym_rate
+               self.max_clock_offset = max_clock_offset = 100e-6
+               self.max_carrier_offset = max_carrier_offset = 2*math.pi*100e3/sample_rate
+               self.hs = hs = int(sps/2.0)
+
+               ##################################################
+               # Blocks
+               ##################################################
+               self.decoder = noaa.hrpt_decoder(True,True)
+               self.file_source = gr.file_source(gr.sizeof_short*1, input_filename, False)
+
+               ##################################################
+               # Connections
+               ##################################################
+               self.connect((self.file_source, 0), (self.decoder, 0))
+
+       def set_decim(self, decim):
+               self.decim = decim
+               self.set_sample_rate(64e6/self.decim)
+
+       def set_pll_alpha(self, pll_alpha):
+               self.pll_alpha = pll_alpha
+
+       def set_clock_alpha(self, clock_alpha):
+               self.clock_alpha = clock_alpha
+
+       def set_input_filename(self, input_filename):
+               self.input_filename = input_filename
+
+       def set_sym_rate(self, sym_rate):
+               self.sym_rate = sym_rate
+               self.set_sps(self.sample_rate/self.sym_rate)
+
+       def set_sample_rate(self, sample_rate):
+               self.sample_rate = sample_rate
+               self.set_max_carrier_offset(2*math.pi*100e3/self.sample_rate)
+               self.set_sps(self.sample_rate/self.sym_rate)
+
+       def set_sps(self, sps):
+               self.sps = sps
+               self.set_hs(int(self.sps/2.0))
+
+       def set_max_clock_offset(self, max_clock_offset):
+               self.max_clock_offset = max_clock_offset
+
+       def set_max_carrier_offset(self, max_carrier_offset):
+               self.max_carrier_offset = max_carrier_offset
+
+       def set_hs(self, hs):
+               self.hs = hs
+
+if __name__ == '__main__':
+       parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+       parser.add_option("-d", "--decim", dest="decim", type="intx", default=32,
+               help="Set decim [default=%default]")
+       parser.add_option("-p", "--pll-alpha", dest="pll_alpha", type="eng_float", default=eng_notation.num_to_str(0.01),
+               help="Set pll_alpha [default=%default]")
+       parser.add_option("-s", "--clock-alpha", dest="clock_alpha", type="eng_float", default=eng_notation.num_to_str(0.01),
+               help="Set clock_alpha [default=%default]")
+       parser.add_option("-F", "--input-filename", dest="input_filename", type="string", default="frames.hrpt",
+               help="Set frames.hrpt [default=%default]")
+       (options, args) = parser.parse_args()
+       tb = hrpt_decode(decim=options.decim, pll_alpha=options.pll_alpha, clock_alpha=options.clock_alpha, input_filename=options.input_filename)
+       tb.run()
+
diff --git a/gr-noaa/apps/hrpt_demod.grc b/gr-noaa/apps/hrpt_demod.grc
new file mode 100644 (file)
index 0000000..8af3d82
--- /dev/null
@@ -0,0 +1,747 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+  <timestamp>Sun Nov  8 10:41:07 2009</timestamp>
+  <block>
+    <key>options</key>
+    <param>
+      <key>id</key>
+      <value>hrpt_demod</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>title</key>
+      <value></value>
+    </param>
+    <param>
+      <key>author</key>
+      <value></value>
+    </param>
+    <param>
+      <key>description</key>
+      <value></value>
+    </param>
+    <param>
+      <key>window_size</key>
+      <value>4096,4096</value>
+    </param>
+    <param>
+      <key>generate_options</key>
+      <value>no_gui</value>
+    </param>
+    <param>
+      <key>category</key>
+      <value>Custom</value>
+    </param>
+    <param>
+      <key>run_options</key>
+      <value>run</value>
+    </param>
+    <param>
+      <key>run</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>realtime_scheduling</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(10, 10)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>max_carrier_offset</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>2*math.pi*100e3/sample_rate</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(575, 19)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>hs</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>int(sps/2.0)</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(499, 19)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>sample_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>64e6/decim</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(198, 17)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>import</key>
+    <param>
+      <key>id</key>
+      <value>import_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>import math, os</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(11, 103)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>input_filename</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>input_filename</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>usrp.dat</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>string</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>F</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(618, 102)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>output_filename</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>output_filename</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>frames.dat</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>string</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>o</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(726, 102)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_file_source</key>
+    <param>
+      <key>id</key>
+      <value>file_source</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>file</key>
+      <value>input_filename</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>short</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(63, 277)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_interleaved_short_to_complex</key>
+    <param>
+      <key>id</key>
+      <value>cs2cf</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(275, 289)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_agc_xx</key>
+    <param>
+      <key>id</key>
+      <value>agc</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>rate</key>
+      <value>1e-5</value>
+    </param>
+    <param>
+      <key>reference</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>gain</key>
+      <value>1.0/32768.0</value>
+    </param>
+    <param>
+      <key>max_gain</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(117, 394)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_pll_cf</key>
+    <param>
+      <key>id</key>
+      <value>pll</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alpha</key>
+      <value>pll_alpha</value>
+    </param>
+    <param>
+      <key>beta</key>
+      <value>pll_alpha**2/4.0</value>
+    </param>
+    <param>
+      <key>max_offset</key>
+      <value>max_carrier_offset</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(292, 402)</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>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>length</key>
+      <value>hs</value>
+    </param>
+    <param>
+      <key>scale</key>
+      <value>1.0/hs</value>
+    </param>
+    <param>
+      <key>max_iter</key>
+      <value>4000</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(504, 402)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_clock_recovery_mm_xx</key>
+    <param>
+      <key>id</key>
+      <value>gr_clock_recovery_mm_xx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>omega</key>
+      <value>sps/2.0</value>
+    </param>
+    <param>
+      <key>gain_omega</key>
+      <value>clock_alpha**2/4.0</value>
+    </param>
+    <param>
+      <key>mu</key>
+      <value>0.5</value>
+    </param>
+    <param>
+      <key>gain_mu</key>
+      <value>clock_alpha</value>
+    </param>
+    <param>
+      <key>omega_relative_limit</key>
+      <value>max_clock_offset</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(703, 386)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_deframer</key>
+    <param>
+      <key>id</key>
+      <value>noaa_hrpt_deframer_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1142, 422)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_binary_slicer_fb</key>
+    <param>
+      <key>id</key>
+      <value>gr_binary_slicer_fb_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(960, 422)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>max_clock_offset</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>100e-6</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(710, 17)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>sym_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>600*1109</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(307, 18)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>sps</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>sample_rate/sym_rate</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(400, 17)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>decim</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>decim</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>32</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>intx</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>d</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(202, 102)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>pll_alpha</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>pll_alpha</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>eng_float</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>p</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(294, 101)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>parameter</key>
+    <param>
+      <key>id</key>
+      <value>clock_alpha</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>clock_alpha</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>eng_float</value>
+    </param>
+    <param>
+      <key>short_id</key>
+      <value>s</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(395, 101)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_decoder</key>
+    <param>
+      <key>id</key>
+      <value>decoder</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>verbose</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>output</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1150, 341)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_file_sink</key>
+    <param>
+      <key>id</key>
+      <value>gr_file_sink_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>file</key>
+      <value>output_filename</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>short</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1144, 489)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <connection>
+    <source_block_id>file_source</source_block_id>
+    <sink_block_id>cs2cf</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>gr_clock_recovery_mm_xx_0</source_block_id>
+    <sink_block_id>gr_binary_slicer_fb_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>gr_moving_average_xx_0</source_block_id>
+    <sink_block_id>gr_clock_recovery_mm_xx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>pll</source_block_id>
+    <sink_block_id>gr_moving_average_xx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>cs2cf</source_block_id>
+    <sink_block_id>agc</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>agc</source_block_id>
+    <sink_block_id>pll</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>noaa_hrpt_deframer_0</source_block_id>
+    <sink_block_id>gr_file_sink_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>noaa_hrpt_deframer_0</source_block_id>
+    <sink_block_id>decoder</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>gr_binary_slicer_fb_0</source_block_id>
+    <sink_block_id>noaa_hrpt_deframer_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+</flow_graph>
diff --git a/gr-noaa/apps/hrpt_demod.py b/gr-noaa/apps/hrpt_demod.py
new file mode 100755 (executable)
index 0000000..38d0316
--- /dev/null
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: Hrpt Demod
+# Generated: Sun Nov  8 10:41:08 2009
+##################################################
+
+from gnuradio import eng_notation
+from gnuradio import gr
+from gnuradio import noaa
+from gnuradio.eng_option import eng_option
+from gnuradio.gr import firdes
+from optparse import OptionParser
+import math, os
+
+class hrpt_demod(gr.top_block):
+
+       def __init__(self, input_filename="usrp.dat", output_filename="frames.dat", decim=32, pll_alpha=0.01, clock_alpha=0.01):
+               gr.top_block.__init__(self, "Hrpt Demod")
+
+               ##################################################
+               # Parameters
+               ##################################################
+               self.input_filename = input_filename
+               self.output_filename = output_filename
+               self.decim = decim
+               self.pll_alpha = pll_alpha
+               self.clock_alpha = clock_alpha
+
+               ##################################################
+               # Variables
+               ##################################################
+               self.sym_rate = sym_rate = 600*1109
+               self.sample_rate = sample_rate = 64e6/decim
+               self.sps = sps = sample_rate/sym_rate
+               self.max_clock_offset = max_clock_offset = 100e-6
+               self.max_carrier_offset = max_carrier_offset = 2*math.pi*100e3/sample_rate
+               self.hs = hs = int(sps/2.0)
+
+               ##################################################
+               # Blocks
+               ##################################################
+               self.agc = gr.agc_cc(1e-5, 1.0, 1.0/32768.0, 1.0)
+               self.cs2cf = gr.interleaved_short_to_complex()
+               self.decoder = noaa.hrpt_decoder(True,False)
+               self.file_source = gr.file_source(gr.sizeof_short*1, input_filename, False)
+               self.gr_binary_slicer_fb_0 = gr.binary_slicer_fb()
+               self.gr_clock_recovery_mm_xx_0 = gr.clock_recovery_mm_ff(sps/2.0, clock_alpha**2/4.0, 0.5, clock_alpha, max_clock_offset)
+               self.gr_file_sink_0 = gr.file_sink(gr.sizeof_short*1, output_filename)
+               self.gr_moving_average_xx_0 = gr.moving_average_ff(hs, 1.0/hs, 4000)
+               self.noaa_hrpt_deframer_0 = noaa.hrpt_deframer()
+               self.pll = noaa.hrpt_pll_cf(pll_alpha, pll_alpha**2/4.0, max_carrier_offset)
+
+               ##################################################
+               # Connections
+               ##################################################
+               self.connect((self.file_source, 0), (self.cs2cf, 0))
+               self.connect((self.gr_clock_recovery_mm_xx_0, 0), (self.gr_binary_slicer_fb_0, 0))
+               self.connect((self.gr_moving_average_xx_0, 0), (self.gr_clock_recovery_mm_xx_0, 0))
+               self.connect((self.pll, 0), (self.gr_moving_average_xx_0, 0))
+               self.connect((self.cs2cf, 0), (self.agc, 0))
+               self.connect((self.agc, 0), (self.pll, 0))
+               self.connect((self.noaa_hrpt_deframer_0, 0), (self.gr_file_sink_0, 0))
+               self.connect((self.noaa_hrpt_deframer_0, 0), (self.decoder, 0))
+               self.connect((self.gr_binary_slicer_fb_0, 0), (self.noaa_hrpt_deframer_0, 0))
+
+       def set_input_filename(self, input_filename):
+               self.input_filename = input_filename
+
+       def set_output_filename(self, output_filename):
+               self.output_filename = output_filename
+
+       def set_decim(self, decim):
+               self.decim = decim
+               self.set_sample_rate(64e6/self.decim)
+
+       def set_pll_alpha(self, pll_alpha):
+               self.pll_alpha = pll_alpha
+               self.pll.set_alpha(self.pll_alpha)
+               self.pll.set_beta(self.pll_alpha**2/4.0)
+
+       def set_clock_alpha(self, clock_alpha):
+               self.clock_alpha = clock_alpha
+               self.gr_clock_recovery_mm_xx_0.set_gain_omega(self.clock_alpha**2/4.0)
+               self.gr_clock_recovery_mm_xx_0.set_gain_mu(self.clock_alpha)
+
+       def set_sym_rate(self, sym_rate):
+               self.sym_rate = sym_rate
+               self.set_sps(self.sample_rate/self.sym_rate)
+
+       def set_sample_rate(self, sample_rate):
+               self.sample_rate = sample_rate
+               self.set_max_carrier_offset(2*math.pi*100e3/self.sample_rate)
+               self.set_sps(self.sample_rate/self.sym_rate)
+
+       def set_sps(self, sps):
+               self.sps = sps
+               self.set_hs(int(self.sps/2.0))
+               self.gr_clock_recovery_mm_xx_0.set_omega(self.sps/2.0)
+
+       def set_max_clock_offset(self, max_clock_offset):
+               self.max_clock_offset = max_clock_offset
+
+       def set_max_carrier_offset(self, max_carrier_offset):
+               self.max_carrier_offset = max_carrier_offset
+               self.pll.set_max_offset(self.max_carrier_offset)
+
+       def set_hs(self, hs):
+               self.hs = hs
+               self.gr_moving_average_xx_0.set_length_and_scale(self.hs, 1.0/self.hs)
+
+if __name__ == '__main__':
+       parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+       parser.add_option("-F", "--input-filename", dest="input_filename", type="string", default="usrp.dat",
+               help="Set usrp.dat [default=%default]")
+       parser.add_option("-o", "--output-filename", dest="output_filename", type="string", default="frames.dat",
+               help="Set frames.dat [default=%default]")
+       parser.add_option("-d", "--decim", dest="decim", type="intx", default=32,
+               help="Set decim [default=%default]")
+       parser.add_option("-p", "--pll-alpha", dest="pll_alpha", type="eng_float", default=eng_notation.num_to_str(0.01),
+               help="Set pll_alpha [default=%default]")
+       parser.add_option("-s", "--clock-alpha", dest="clock_alpha", type="eng_float", default=eng_notation.num_to_str(0.01),
+               help="Set clock_alpha [default=%default]")
+       (options, args) = parser.parse_args()
+       tb = hrpt_demod(input_filename=options.input_filename, output_filename=options.output_filename, decim=options.decim, pll_alpha=options.pll_alpha, clock_alpha=options.clock_alpha)
+       tb.run()
+
index ac7a87a1608e3d275be08efed4f1f0dc456282d4..990855f6967999d66447ff7f0901e1b99961cf4b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Mon Nov  2 08:31:09 2009</timestamp>
+  <timestamp>Mon Nov  9 07:56:11 2009</timestamp>
   <block>
     <key>options</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>output_filename</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>'frames.dat'</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>string</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'filename'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>output_filename</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1139, 259)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>max_clock_offset</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(705, 19)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable_slider</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>saved_pll_alpha</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>real</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'pll_alpha'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>pll_alpha</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(823, 258)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>saved_clock_alpha</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>real</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'clock_alpha'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>clock_alpha</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(981, 258)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>decim</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>16</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>real</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'decim'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>decim</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(351, 255)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable_config</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>noaa_hrpt_decoder</key>
-    <param>
-      <key>id</key>
-      <value>decoder</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(974, 925)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>gr_agc_xx</key>
     <param>
       <value>0</value>
     </param>
   </block>
+  <block>
+    <key>variable_config</key>
+    <param>
+      <key>id</key>
+      <value>decim</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>32</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>real</value>
+    </param>
+    <param>
+      <key>config_file</key>
+      <value>config_filename</value>
+    </param>
+    <param>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'decim'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>decim</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(351, 255)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_config</key>
+    <param>
+      <key>id</key>
+      <value>saved_pll_alpha</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>real</value>
+    </param>
+    <param>
+      <key>config_file</key>
+      <value>config_filename</value>
+    </param>
+    <param>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'pll_alpha'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>pll_alpha</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(823, 258)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_config</key>
+    <param>
+      <key>id</key>
+      <value>saved_clock_alpha</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>real</value>
+    </param>
+    <param>
+      <key>config_file</key>
+      <value>config_filename</value>
+    </param>
+    <param>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'clock_alpha'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>clock_alpha</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(981, 258)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_config</key>
+    <param>
+      <key>id</key>
+      <value>output_filename</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>'frames.hrpt'</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>string</value>
+    </param>
+    <param>
+      <key>config_file</key>
+      <value>config_filename</value>
+    </param>
+    <param>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'filename'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>output_filename</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1139, 259)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_decoder</key>
+    <param>
+      <key>id</key>
+      <value>decoder</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>verbose</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>output</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(974, 925)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>max_clock_offset</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>100e-6</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(705, 19)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
   <connection>
     <source_block_id>virtual_source_0</source_block_id>
     <sink_block_id>gr_binary_slicer_fb_0</sink_block_id>
index a5f9a8e946148febdbca5407b72e0b754cd39e14..48c5f9d29f49f169b0b1bc3a1afa020694298cd8 100755 (executable)
@@ -2,7 +2,7 @@
 ##################################################
 # Gnuradio Python Flow Graph
 # Title: USRP HRPT Receiver
-# Generated: Mon Nov  2 08:31:10 2009
+# Generated: Mon Nov  9 07:56:11 2009
 ##################################################
 
 from gnuradio import eng_notation
@@ -33,7 +33,7 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                self._decim_config = ConfigParser.ConfigParser()
                self._decim_config.read(config_filename)
                try: decim = self._decim_config.getfloat('usrp_rx_hrpt', 'decim')
-               except: decim = 16
+               except: decim = 32
                self.decim = decim
                self.sym_rate = sym_rate = 600*1109
                self.sample_rate = sample_rate = 64e6/decim
@@ -46,7 +46,7 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                self._saved_pll_alpha_config = ConfigParser.ConfigParser()
                self._saved_pll_alpha_config.read(config_filename)
                try: saved_pll_alpha = self._saved_pll_alpha_config.getfloat('usrp_rx_hrpt', 'pll_alpha')
-               except: saved_pll_alpha = 0.05
+               except: saved_pll_alpha = 0.01
                self.saved_pll_alpha = saved_pll_alpha
                self._saved_gain_config = ConfigParser.ConfigParser()
                self._saved_gain_config.read(config_filename)
@@ -61,16 +61,16 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                self._saved_clock_alpha_config = ConfigParser.ConfigParser()
                self._saved_clock_alpha_config.read(config_filename)
                try: saved_clock_alpha = self._saved_clock_alpha_config.getfloat('usrp_rx_hrpt', 'clock_alpha')
-               except: saved_clock_alpha = 0.05
+               except: saved_clock_alpha = 0.01
                self.saved_clock_alpha = saved_clock_alpha
                self.side_text = side_text = side
                self.pll_alpha = pll_alpha = saved_pll_alpha
                self._output_filename_config = ConfigParser.ConfigParser()
                self._output_filename_config.read(config_filename)
                try: output_filename = self._output_filename_config.get('usrp_rx_hrpt', 'filename')
-               except: output_filename = 'frames.dat'
+               except: output_filename = 'frames.hrpt'
                self.output_filename = output_filename
-               self.max_clock_offset = max_clock_offset = 0.1
+               self.max_clock_offset = max_clock_offset = 100e-6
                self.max_carrier_offset = max_carrier_offset = 2*math.pi*100e3/sample_rate
                self.hs = hs = int(sps/2.0)
                self.gain = gain = saved_gain
@@ -187,7 +187,7 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                # Blocks
                ##################################################
                self.agc = gr.agc_cc(1e-6, 1.0, 1.0, 1.0)
-               self.decoder = noaa.hrpt_decoder()
+               self.decoder = noaa.hrpt_decoder(True,True)
                self.deframer = noaa.hrpt_deframer()
                self.demod_scope = scopesink2.scope_sink_f(
                        self.displays.GetPage(1).GetWin(),
@@ -256,12 +256,18 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                        self._saved_gain_config.add_section('usrp_rx_hrpt')
                self._saved_gain_config.set('usrp_rx_hrpt', 'gain', str(self.gain))
                self._saved_gain_config.write(open(self.config_filename, 'w'))
-               self._output_filename_config = ConfigParser.ConfigParser()
-               self._output_filename_config.read(self.config_filename)
-               if not self._output_filename_config.has_section('usrp_rx_hrpt'):
-                       self._output_filename_config.add_section('usrp_rx_hrpt')
-               self._output_filename_config.set('usrp_rx_hrpt', 'filename', str(self.output_filename))
-               self._output_filename_config.write(open(self.config_filename, 'w'))
+               self._side_config = ConfigParser.ConfigParser()
+               self._side_config.read(self.config_filename)
+               if not self._side_config.has_section('usrp_rx_hrpt'):
+                       self._side_config.add_section('usrp_rx_hrpt')
+               self._side_config.set('usrp_rx_hrpt', 'side', str(self.side))
+               self._side_config.write(open(self.config_filename, 'w'))
+               self._decim_config = ConfigParser.ConfigParser()
+               self._decim_config.read(self.config_filename)
+               if not self._decim_config.has_section('usrp_rx_hrpt'):
+                       self._decim_config.add_section('usrp_rx_hrpt')
+               self._decim_config.set('usrp_rx_hrpt', 'decim', str(self.decim))
+               self._decim_config.write(open(self.config_filename, 'w'))
                self._saved_pll_alpha_config = ConfigParser.ConfigParser()
                self._saved_pll_alpha_config.read(self.config_filename)
                if not self._saved_pll_alpha_config.has_section('usrp_rx_hrpt'):
@@ -274,30 +280,24 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                        self._saved_clock_alpha_config.add_section('usrp_rx_hrpt')
                self._saved_clock_alpha_config.set('usrp_rx_hrpt', 'clock_alpha', str(self.clock_alpha))
                self._saved_clock_alpha_config.write(open(self.config_filename, 'w'))
-               self._decim_config = ConfigParser.ConfigParser()
-               self._decim_config.read(self.config_filename)
-               if not self._decim_config.has_section('usrp_rx_hrpt'):
-                       self._decim_config.add_section('usrp_rx_hrpt')
-               self._decim_config.set('usrp_rx_hrpt', 'decim', str(self.decim))
-               self._decim_config.write(open(self.config_filename, 'w'))
-               self._side_config = ConfigParser.ConfigParser()
-               self._side_config.read(self.config_filename)
-               if not self._side_config.has_section('usrp_rx_hrpt'):
-                       self._side_config.add_section('usrp_rx_hrpt')
-               self._side_config.set('usrp_rx_hrpt', 'side', str(self.side))
-               self._side_config.write(open(self.config_filename, 'w'))
+               self._output_filename_config = ConfigParser.ConfigParser()
+               self._output_filename_config.read(self.config_filename)
+               if not self._output_filename_config.has_section('usrp_rx_hrpt'):
+                       self._output_filename_config.add_section('usrp_rx_hrpt')
+               self._output_filename_config.set('usrp_rx_hrpt', 'filename', str(self.output_filename))
+               self._output_filename_config.write(open(self.config_filename, 'w'))
 
        def set_decim(self, decim):
                self.decim = decim
                self.set_sample_rate(64e6/self.decim)
                self.set_decim_text(self.decim)
+               self.usrp_source.set_decim_rate(self.decim)
                self._decim_config = ConfigParser.ConfigParser()
                self._decim_config.read(self.config_filename)
                if not self._decim_config.has_section('usrp_rx_hrpt'):
                        self._decim_config.add_section('usrp_rx_hrpt')
                self._decim_config.set('usrp_rx_hrpt', 'decim', str(self.decim))
                self._decim_config.write(open(self.config_filename, 'w'))
-               self.usrp_source.set_decim_rate(self.decim)
 
        def set_sym_rate(self, sym_rate):
                self.sym_rate = sym_rate
@@ -349,14 +349,14 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                self.pll_alpha = pll_alpha
                self._pll_alpha_slider.set_value(self.pll_alpha)
                self._pll_alpha_text_box.set_value(self.pll_alpha)
+               self.pll.set_alpha(self.pll_alpha)
+               self.pll.set_beta(self.pll_alpha**2/4.0)
                self._saved_pll_alpha_config = ConfigParser.ConfigParser()
                self._saved_pll_alpha_config.read(self.config_filename)
                if not self._saved_pll_alpha_config.has_section('usrp_rx_hrpt'):
                        self._saved_pll_alpha_config.add_section('usrp_rx_hrpt')
                self._saved_pll_alpha_config.set('usrp_rx_hrpt', 'pll_alpha', str(self.pll_alpha))
                self._saved_pll_alpha_config.write(open(self.config_filename, 'w'))
-               self.pll.set_alpha(self.pll_alpha)
-               self.pll.set_beta(self.pll_alpha**2/4.0)
 
        def set_output_filename(self, output_filename):
                self.output_filename = output_filename
@@ -410,14 +410,14 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                self.clock_alpha = clock_alpha
                self._clock_alpha_slider.set_value(self.clock_alpha)
                self._clock_alpha_text_box.set_value(self.clock_alpha)
+               self.gr_clock_recovery_mm_xx_0.set_gain_omega(self.clock_alpha**2/4.0)
+               self.gr_clock_recovery_mm_xx_0.set_gain_mu(self.clock_alpha)
                self._saved_clock_alpha_config = ConfigParser.ConfigParser()
                self._saved_clock_alpha_config.read(self.config_filename)
                if not self._saved_clock_alpha_config.has_section('usrp_rx_hrpt'):
                        self._saved_clock_alpha_config.add_section('usrp_rx_hrpt')
                self._saved_clock_alpha_config.set('usrp_rx_hrpt', 'clock_alpha', str(self.clock_alpha))
                self._saved_clock_alpha_config.write(open(self.config_filename, 'w'))
-               self.gr_clock_recovery_mm_xx_0.set_gain_omega(self.clock_alpha**2/4.0)
-               self.gr_clock_recovery_mm_xx_0.set_gain_mu(self.clock_alpha)
 
 if __name__ == '__main__':
        parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
index 02d509f08d99bd7b644cbd8a664a3913b2b9264a..22bd3bdc3cacda8ead81442e282179d5255ebc39 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Mon Nov  2 08:31:35 2009</timestamp>
+  <timestamp>Mon Nov  9 08:03:25 2009</timestamp>
   <block>
     <key>options</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>max_clock_offset</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(705, 19)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>clock_alpha</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>real</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'clock_alpha'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>clock_alpha</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(986, 101)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable_config</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>decim</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>16</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>real</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'decim'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>decim</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(355, 97)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>output_filename</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>'frames.dat'</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>string</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'filename'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>output_filename</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1143, 101)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_config</key>
-    <param>
-      <key>id</key>
-      <value>pll_alpha</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>real</value>
-    </param>
-    <param>
-      <key>config_file</key>
-      <value>config_filename</value>
-    </param>
-    <param>
-      <key>section</key>
-      <value>'usrp_rx_hrpt'</value>
-    </param>
-    <param>
-      <key>option</key>
-      <value>'pll_alpha'</value>
-    </param>
-    <param>
-      <key>writeback</key>
-      <value>pll_alpha</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(827, 100)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable_config</key>
     <param>
     </param>
   </block>
   <block>
-    <key>noaa_hrpt_decoder</key>
+    <key>gr_binary_slicer_fb</key>
     <param>
       <key>id</key>
-      <value>decoder</value>
+      <value>gr_binary_slicer_fb_0</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1027, 623)</value>
+      <value>(446, 673)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>gr_binary_slicer_fb</key>
+    <key>noaa_hrpt_deframer</key>
     <param>
       <key>id</key>
-      <value>gr_binary_slicer_fb_0</value>
+      <value>deframer</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(446, 673)</value>
+      <value>(815, 673)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>noaa_hrpt_deframer</key>
+    <key>variable_config</key>
     <param>
       <key>id</key>
-      <value>deframer</value>
+      <value>decim</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
+    <param>
+      <key>value</key>
+      <value>32</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>real</value>
+    </param>
+    <param>
+      <key>config_file</key>
+      <value>config_filename</value>
+    </param>
+    <param>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'decim'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>decim</value>
+    </param>
     <param>
       <key>_coordinate</key>
-      <value>(815, 673)</value>
+      <value>(355, 97)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_config</key>
+    <param>
+      <key>id</key>
+      <value>pll_alpha</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>real</value>
+    </param>
+    <param>
+      <key>config_file</key>
+      <value>config_filename</value>
+    </param>
+    <param>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'pll_alpha'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>pll_alpha</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(827, 100)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_config</key>
+    <param>
+      <key>id</key>
+      <value>clock_alpha</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>real</value>
+    </param>
+    <param>
+      <key>config_file</key>
+      <value>config_filename</value>
+    </param>
+    <param>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'clock_alpha'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>clock_alpha</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(986, 101)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_config</key>
+    <param>
+      <key>id</key>
+      <value>output_filename</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>'frames.hrpt'</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>string</value>
+    </param>
+    <param>
+      <key>config_file</key>
+      <value>config_filename</value>
+    </param>
+    <param>
+      <key>section</key>
+      <value>'usrp_rx_hrpt'</value>
+    </param>
+    <param>
+      <key>option</key>
+      <value>'filename'</value>
+    </param>
+    <param>
+      <key>writeback</key>
+      <value>output_filename</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1143, 101)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>max_clock_offset</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>100e-6</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(705, 19)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_decoder</key>
+    <param>
+      <key>id</key>
+      <value>decoder</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>verbose</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>output</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1027, 623)</value>
     </param>
     <param>
       <key>_rotation</key>
index 4dc32dbda9df8686c3f346ba5a9f124bb73d3643..1b510bdb2ef2851c005e41a8a5f9f6284b3ed949 100755 (executable)
@@ -2,7 +2,7 @@
 ##################################################
 # Gnuradio Python Flow Graph
 # Title: Usrp Rx Hrpt Nogui
-# Generated: Mon Nov  2 08:31:35 2009
+# Generated: Mon Nov  9 08:03:25 2009
 ##################################################
 
 from gnuradio import eng_notation
@@ -27,7 +27,7 @@ class usrp_rx_hrpt_nogui(gr.top_block):
                self._decim_config = ConfigParser.ConfigParser()
                self._decim_config.read(config_filename)
                try: decim = self._decim_config.getfloat('usrp_rx_hrpt', 'decim')
-               except: decim = 16
+               except: decim = 32
                self.decim = decim
                self.sym_rate = sym_rate = 600*1109
                self.sample_rate = sample_rate = 64e6/decim
@@ -40,14 +40,14 @@ class usrp_rx_hrpt_nogui(gr.top_block):
                self._pll_alpha_config = ConfigParser.ConfigParser()
                self._pll_alpha_config.read(config_filename)
                try: pll_alpha = self._pll_alpha_config.getfloat('usrp_rx_hrpt', 'pll_alpha')
-               except: pll_alpha = 0.05
+               except: pll_alpha = 0.01
                self.pll_alpha = pll_alpha
                self._output_filename_config = ConfigParser.ConfigParser()
                self._output_filename_config.read(config_filename)
                try: output_filename = self._output_filename_config.get('usrp_rx_hrpt', 'filename')
-               except: output_filename = 'frames.dat'
+               except: output_filename = 'frames.hrpt'
                self.output_filename = output_filename
-               self.max_clock_offset = max_clock_offset = 0.1
+               self.max_clock_offset = max_clock_offset = 100e-6
                self.max_carrier_offset = max_carrier_offset = 2*math.pi*100e3/sample_rate
                self.hs = hs = int(sps/2.0)
                self._gain_config = ConfigParser.ConfigParser()
@@ -63,14 +63,14 @@ class usrp_rx_hrpt_nogui(gr.top_block):
                self._clock_alpha_config = ConfigParser.ConfigParser()
                self._clock_alpha_config.read(config_filename)
                try: clock_alpha = self._clock_alpha_config.getfloat('usrp_rx_hrpt', 'clock_alpha')
-               except: clock_alpha = 0.05
+               except: clock_alpha = 0.01
                self.clock_alpha = clock_alpha
 
                ##################################################
                # Blocks
                ##################################################
                self.agc = gr.agc_cc(1e-6, 1.0, 1.0, 1.0)
-               self.decoder = noaa.hrpt_decoder()
+               self.decoder = noaa.hrpt_decoder(True,True)
                self.deframer = noaa.hrpt_deframer()
                self.frame_sink = gr.file_sink(gr.sizeof_short*1, output_filename)
                self.gr_binary_slicer_fb_0 = gr.binary_slicer_fb()
@@ -96,12 +96,6 @@ class usrp_rx_hrpt_nogui(gr.top_block):
 
        def set_config_filename(self, config_filename):
                self.config_filename = config_filename
-               self._clock_alpha_config = ConfigParser.ConfigParser()
-               self._clock_alpha_config.read(self.config_filename)
-               if not self._clock_alpha_config.has_section('usrp_rx_hrpt'):
-                       self._clock_alpha_config.add_section('usrp_rx_hrpt')
-               self._clock_alpha_config.set('usrp_rx_hrpt', 'clock_alpha', str(self.clock_alpha))
-               self._clock_alpha_config.write(open(self.config_filename, 'w'))
                self._gain_config = ConfigParser.ConfigParser()
                self._gain_config.read(self.config_filename)
                if not self._gain_config.has_section('usrp_rx_hrpt'):
@@ -114,41 +108,47 @@ class usrp_rx_hrpt_nogui(gr.top_block):
                        self._freq_config.add_section('usrp_rx_hrpt')
                self._freq_config.set('usrp_rx_hrpt', 'freq', str(self.freq))
                self._freq_config.write(open(self.config_filename, 'w'))
+               self._side_config = ConfigParser.ConfigParser()
+               self._side_config.read(self.config_filename)
+               if not self._side_config.has_section('usrp_rx_hrpt'):
+                       self._side_config.add_section('usrp_rx_hrpt')
+               self._side_config.set('usrp_rx_hrpt', 'side', str(self.side))
+               self._side_config.write(open(self.config_filename, 'w'))
                self._decim_config = ConfigParser.ConfigParser()
                self._decim_config.read(self.config_filename)
                if not self._decim_config.has_section('usrp_rx_hrpt'):
                        self._decim_config.add_section('usrp_rx_hrpt')
                self._decim_config.set('usrp_rx_hrpt', 'decim', str(self.decim))
                self._decim_config.write(open(self.config_filename, 'w'))
-               self._output_filename_config = ConfigParser.ConfigParser()
-               self._output_filename_config.read(self.config_filename)
-               if not self._output_filename_config.has_section('usrp_rx_hrpt'):
-                       self._output_filename_config.add_section('usrp_rx_hrpt')
-               self._output_filename_config.set('usrp_rx_hrpt', 'filename', str(self.output_filename))
-               self._output_filename_config.write(open(self.config_filename, 'w'))
                self._pll_alpha_config = ConfigParser.ConfigParser()
                self._pll_alpha_config.read(self.config_filename)
                if not self._pll_alpha_config.has_section('usrp_rx_hrpt'):
                        self._pll_alpha_config.add_section('usrp_rx_hrpt')
                self._pll_alpha_config.set('usrp_rx_hrpt', 'pll_alpha', str(self.pll_alpha))
                self._pll_alpha_config.write(open(self.config_filename, 'w'))
-               self._side_config = ConfigParser.ConfigParser()
-               self._side_config.read(self.config_filename)
-               if not self._side_config.has_section('usrp_rx_hrpt'):
-                       self._side_config.add_section('usrp_rx_hrpt')
-               self._side_config.set('usrp_rx_hrpt', 'side', str(self.side))
-               self._side_config.write(open(self.config_filename, 'w'))
+               self._clock_alpha_config = ConfigParser.ConfigParser()
+               self._clock_alpha_config.read(self.config_filename)
+               if not self._clock_alpha_config.has_section('usrp_rx_hrpt'):
+                       self._clock_alpha_config.add_section('usrp_rx_hrpt')
+               self._clock_alpha_config.set('usrp_rx_hrpt', 'clock_alpha', str(self.clock_alpha))
+               self._clock_alpha_config.write(open(self.config_filename, 'w'))
+               self._output_filename_config = ConfigParser.ConfigParser()
+               self._output_filename_config.read(self.config_filename)
+               if not self._output_filename_config.has_section('usrp_rx_hrpt'):
+                       self._output_filename_config.add_section('usrp_rx_hrpt')
+               self._output_filename_config.set('usrp_rx_hrpt', 'filename', str(self.output_filename))
+               self._output_filename_config.write(open(self.config_filename, 'w'))
 
        def set_decim(self, decim):
                self.decim = decim
                self.set_sample_rate(64e6/self.decim)
+               self.usrp_source.set_decim_rate(self.decim)
                self._decim_config = ConfigParser.ConfigParser()
                self._decim_config.read(self.config_filename)
                if not self._decim_config.has_section('usrp_rx_hrpt'):
                        self._decim_config.add_section('usrp_rx_hrpt')
                self._decim_config.set('usrp_rx_hrpt', 'decim', str(self.decim))
                self._decim_config.write(open(self.config_filename, 'w'))
-               self.usrp_source.set_decim_rate(self.decim)
 
        def set_sym_rate(self, sym_rate):
                self.sym_rate = sym_rate
@@ -175,14 +175,14 @@ class usrp_rx_hrpt_nogui(gr.top_block):
 
        def set_pll_alpha(self, pll_alpha):
                self.pll_alpha = pll_alpha
+               self.pll.set_alpha(self.pll_alpha)
+               self.pll.set_beta(self.pll_alpha**2/4.0)
                self._pll_alpha_config = ConfigParser.ConfigParser()
                self._pll_alpha_config.read(self.config_filename)
                if not self._pll_alpha_config.has_section('usrp_rx_hrpt'):
                        self._pll_alpha_config.add_section('usrp_rx_hrpt')
                self._pll_alpha_config.set('usrp_rx_hrpt', 'pll_alpha', str(self.pll_alpha))
                self._pll_alpha_config.write(open(self.config_filename, 'w'))
-               self.pll.set_alpha(self.pll_alpha)
-               self.pll.set_beta(self.pll_alpha**2/4.0)
 
        def set_output_filename(self, output_filename):
                self.output_filename = output_filename
@@ -226,14 +226,14 @@ class usrp_rx_hrpt_nogui(gr.top_block):
 
        def set_clock_alpha(self, clock_alpha):
                self.clock_alpha = clock_alpha
+               self.gr_clock_recovery_mm_xx_0.set_gain_omega(self.clock_alpha**2/4.0)
+               self.gr_clock_recovery_mm_xx_0.set_gain_mu(self.clock_alpha)
                self._clock_alpha_config = ConfigParser.ConfigParser()
                self._clock_alpha_config.read(self.config_filename)
                if not self._clock_alpha_config.has_section('usrp_rx_hrpt'):
                        self._clock_alpha_config.add_section('usrp_rx_hrpt')
                self._clock_alpha_config.set('usrp_rx_hrpt', 'clock_alpha', str(self.clock_alpha))
                self._clock_alpha_config.write(open(self.config_filename, 'w'))
-               self.gr_clock_recovery_mm_xx_0.set_gain_omega(self.clock_alpha**2/4.0)
-               self.gr_clock_recovery_mm_xx_0.set_gain_mu(self.clock_alpha)
 
 if __name__ == '__main__':
        parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
index 183d72aba34b2d7e0ef18780a5fb0dc4c2c3768b..2d6e98c5311dc420e3715da5fcfe14370428c2e1 100644 (file)
@@ -4,7 +4,20 @@
   <key>noaa_hrpt_decoder</key>
   <category>NOAA</category>
   <import>from gnuradio import noaa</import>
-  <make>noaa.hrpt_decoder()</make>
+  <make>noaa.hrpt_decoder($verbose,$output)</make>
+
+  <param>
+    <name>Verbose</name>
+    <key>verbose</key>
+    <type>bool</type>
+  </param>
+
+  <param>
+    <name>Output Files</name>
+    <key>output</key>
+    <type>bool</type>
+  </param>
+
   <sink>
     <name>in</name>
     <type>short</type>
index 4ef4eb87bdaf884ddeb3862a05f17d3fec38be34..f01bbfab89c46bf21e086ffe294994fce274ae72 100644 (file)
@@ -33,6 +33,9 @@ libgnuradio_noaa_la_SOURCES = \
        noaa_hrpt_deframer.cc \
        noaa_hrpt_pll_cf.cc
 
+noinst_HEADERS = \
+       noaa_hrpt.h
+
 libgnuradio_noaa_la_LIBADD = \
        $(GNURADIO_CORE_LA)
 
diff --git a/gr-noaa/lib/noaa_hrpt.h b/gr-noaa/lib/noaa_hrpt.h
new file mode 100644 (file)
index 0000000..3812e93
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_NOAA_HRPT_H
+#define INCLUDED_NOAA_HRPT_H
+
+#define HRPT_SYNC1 0x0284
+#define HRPT_SYNC2 0x016F
+#define HRPT_SYNC3 0x035C
+#define HRPT_SYNC4 0x019D
+#define HRPT_SYNC5 0x020F
+#define HRPT_SYNC6 0x0095
+
+#define HRPT_MINOR_FRAME_SYNC  0x0A116FD719D83C95LL
+
+#define HRPT_SYNC_WORDS        6
+#define HRPT_MINOR_FRAME_WORDS 11090
+#define HRPT_BITS_PER_WORD     10
+
+#endif /* INCLUDED_NOAA_HRPT_H */
index 8cfaa913c46c588e69bce82c8d58ec632c8a1a4f..24331008910748ea0016c60aa210e2ba7e1714a3 100644 (file)
 #endif
 
 #include <noaa_hrpt_decoder.h>
+#include <noaa_hrpt.h>
 #include <gr_io_signature.h>
+#include <cstdio>
 
-#define SYNC1 0x0284
-#define SYNC2 0x016F
-#define SYNC3 0x035C
-#define SYNC4 0x019D
-#define SYNC5 0x020F
-#define SYNC6 0x0095
+static const char *hrpt_ids[] = {
+  "000000",
+  "NOAA11",
+  "000002",
+  "NOAA16",
+  "000004",
+  "000005",
+  "000006",
+  "NOAA15",
+  "000008",
+  "NOAA12",
+  "000010",
+  "NOAA17",
+  "000012",
+  "NOAA18",
+  "000014",
+  "NOAA19"
+};
 
 noaa_hrpt_decoder_sptr
-noaa_make_hrpt_decoder()
+noaa_make_hrpt_decoder(bool verbose, bool output_files)
 {
-  return gnuradio::get_initial_sptr(new noaa_hrpt_decoder());
+  return gnuradio::get_initial_sptr(new noaa_hrpt_decoder(verbose, output_files));
 }
 
-noaa_hrpt_decoder::noaa_hrpt_decoder()
+noaa_hrpt_decoder::noaa_hrpt_decoder(bool verbose, bool output_files)
   : gr_sync_block("noaa_hrpt_decoder",
                  gr_make_io_signature(1, 1, sizeof(short)),
-                 gr_make_io_signature(0, 0, 0))
+                 gr_make_io_signature(0, 0, 0)),
+    d_verbose(verbose),
+    d_output_files(output_files),
+    d_word_num(0),
+    d_frames_seen(0),
+    d_current_mfnum(0),
+    d_expected_mfnum(0),
+    d_seq_errs(0),
+    d_address(0),
+    d_day_of_year(0),
+    d_milliseconds(0),
+    d_last_time(0)
 {
-  d_word_count = 0;
+  // Start of capture processing here
 }
 
 int
@@ -57,21 +82,119 @@ noaa_hrpt_decoder::work(int noutput_items,
 
   int i = 0;
   while (i < noutput_items) {
-    unsigned short word = in[i++];
-    d_word_count++;
-    //fprintf(stderr, "%5u:  ", d_word_count);
-    for (int pos = 0; pos < 10; pos++) {
-      char ch = (word & (1 << 9)) ? '1' : '0';
-      word = word << 1;
-      //fprintf(stderr, "%c ", ch);
+    d_current_word = in[i++] & 0x3FF;
+    d_word_num++;
+
+    // Per HRPT word processing here
+
+    switch (d_word_num) {
+    case 7:
+      process_mfnum();
+      process_address();
+      break;
+
+    case 9:
+      process_day_of_year();
+      break;
+
+    case 10:
+      process_milli1();
+      break;
+
+    case 11:
+      process_milli2();
+      break;
+
+    case 12:
+      process_milli3();
+      break;
+
+    default:
+      break;
     }
-    //fprintf(stderr, "\n");
 
-    if (d_word_count == 11090) {
-      d_word_count = 0;
-      //fprintf(stderr, "\n");
+    if (d_word_num == HRPT_MINOR_FRAME_WORDS) {
+
+      // End of minor frame processing here
+      d_frames_seen++;
+      d_word_num = 0;
+      fprintf(stderr, "\n");
     }
   }
 
   return i;
 }
+
+void
+noaa_hrpt_decoder::process_mfnum()
+{
+  d_current_mfnum = (d_current_word & 0x180) >> 7;
+
+  if (d_verbose)
+    fprintf(stderr, "MF:");
+
+  if (d_current_mfnum != d_expected_mfnum && d_frames_seen > 0) {
+    d_seq_errs++;
+
+    if (d_verbose)
+      fprintf(stderr, "*");
+  }
+  else
+    if (d_verbose)
+      fprintf(stderr, " ");
+  
+  if (d_verbose)
+    fprintf(stderr, "%i  ", d_current_mfnum);
+  d_expected_mfnum = (d_current_mfnum == 3) ? 1 : d_current_mfnum+1;
+}
+
+void
+noaa_hrpt_decoder::process_address()
+{
+  d_address = ((d_current_word & 0x078) >> 3) & 0x000F;
+
+  if (d_verbose)
+    fprintf(stderr, "SA: %s  ", hrpt_ids[d_address]);
+}
+
+void
+noaa_hrpt_decoder::process_day_of_year()
+{
+  d_day_of_year = d_current_word >> 1;
+
+  if (d_verbose)
+    fprintf(stderr, "DOY: %3i  ", d_day_of_year);
+}
+
+void
+noaa_hrpt_decoder::process_milli1()
+{
+  d_milliseconds = (d_current_word & 0x7F) << 20;
+}
+
+void
+noaa_hrpt_decoder::process_milli2()
+{
+  d_milliseconds |= (d_current_word << 10);
+}
+
+void
+noaa_hrpt_decoder::process_milli3()
+{
+  d_milliseconds |= d_current_word;
+  int delta = d_milliseconds - d_last_time;
+  d_last_time = d_milliseconds;
+
+  if (d_verbose)
+    fprintf(stderr, "MS: %8i  DT: %8i", d_milliseconds, delta);
+}
+
+noaa_hrpt_decoder::~noaa_hrpt_decoder()
+{
+  // End of capture processing here
+
+  if (d_verbose) {
+    fprintf(stderr, "Frames seen:     %10i\n", d_frames_seen);
+    fprintf(stderr, "Sequence errors: %10i\n", d_seq_errs);
+  }
+}
index 305243b09a273f4b360e9247ba2bc22af6099231..9d67d7108e64af9a54567c2152b2fc4bd6519c99 100644 (file)
@@ -29,16 +29,45 @@ class noaa_hrpt_decoder;
 typedef boost::shared_ptr<noaa_hrpt_decoder> noaa_hrpt_decoder_sptr;
 
 noaa_hrpt_decoder_sptr
-noaa_make_hrpt_decoder();
+noaa_make_hrpt_decoder(bool verbose, bool output_files);
 
 class noaa_hrpt_decoder : public gr_sync_block
 {
-  friend noaa_hrpt_decoder_sptr noaa_make_hrpt_decoder();
-  noaa_hrpt_decoder();
+  friend noaa_hrpt_decoder_sptr noaa_make_hrpt_decoder(bool verbose, bool output_files);
+  noaa_hrpt_decoder(bool verbose, bool output_files);
+
+  // Configuration
+  bool d_verbose;
+  bool d_output_files;
+
+  // Frame-level state
+  unsigned short d_current_word;
+  unsigned int   d_word_num;
+  int            d_frames_seen;
+
+  // Minor frame number
+  int d_current_mfnum;
+  int d_expected_mfnum;
+  int d_seq_errs;
+
+  // Spacecraft address
+  int d_address;
+
+  // Minor frame timestamp
+  int d_day_of_year;
+  int d_milliseconds;
+  int d_last_time;
+
+  void process_mfnum();
+  void process_address();
+  void process_day_of_year();
+  void process_milli1();
+  void process_milli2();
+  void process_milli3();
 
-  unsigned int d_word_count;
 public:
+  ~noaa_hrpt_decoder();
+
   int work(int noutput_items,
           gr_vector_const_void_star &input_items,
           gr_vector_void_star &output_items);
index e79894869bb7568043a2f1c40ee2e224eaf20393..1a2af6c37922c3b52c6510530d68d6e474ccec69 100644 (file)
 
 #include <noaa_hrpt_deframer.h>
 #include <gr_io_signature.h>
+#include <noaa_hrpt.h>
 #include <cstring>
 #include <cstdio>
 
 #define ST_IDLE   0
 #define ST_SYNCED 1
 
-#define SYNC1 0x0284
-#define SYNC2 0x016F
-#define SYNC3 0x035C
-#define SYNC4 0x019D
-#define SYNC5 0x020F
-#define SYNC6 0x0095
-
-#define HRPT_MINOR_FRAME_SYNC  0x0A116FD719D83C95LL
-
-static int frames_seen = 0;
-
 noaa_hrpt_deframer_sptr
 noaa_make_hrpt_deframer()
 {
@@ -98,13 +88,12 @@ noaa_hrpt_deframer::general_work(int noutput_items,
        d_shifter = (d_shifter << 1) | bit; // MSB transmitted first
        
        if ((d_shifter & 0x0FFFFFFFFFFFFFFFLL) == HRPT_MINOR_FRAME_SYNC) {
-         fprintf(stderr, "SYNC #%i", frames_seen++);
-         out[j++] = SYNC1;
-         out[j++] = SYNC2;
-         out[j++] = SYNC3;
-         out[j++] = SYNC4;
-         out[j++] = SYNC5;
-         out[j++] = SYNC6;
+         out[j++] = HRPT_SYNC1;
+         out[j++] = HRPT_SYNC2;
+         out[j++] = HRPT_SYNC3;
+         out[j++] = HRPT_SYNC4;
+         out[j++] = HRPT_SYNC5;
+         out[j++] = HRPT_SYNC6;
          enter_synced();
        }
        break;
@@ -116,7 +105,6 @@ noaa_hrpt_deframer::general_work(int noutput_items,
          d_word = 0;
          d_bit_count = HRPT_BITS_PER_WORD;
          if (--d_word_count == 0) {
-           fprintf(stderr, "...done\n");
            enter_idle();
          }
        }
index 43abba0e9152bb383c728d07e1766a14d8870b88..b11d0fa2b6bed7de78f3e59687bc999403b49b55 100644 (file)
 #ifndef INCLUDED_NOAA_HRPT_DEFRAMER_H
 #define INCLUDED_NOAA_HRPT_DEFRAMER_H
 
-#define HRPT_SYNC_WORDS        6
-#define HRPT_MINOR_FRAME_WORDS 11090
-#define HRPT_BITS_PER_WORD     10
-
 #include <gr_block.h>
 
 class noaa_hrpt_deframer;
index aeb22faace48e13b0f4a381ade96606d89824de2..73842f0a9f6b19a46071396aa400ac31ca2fc691 100644 (file)
@@ -23,7 +23,7 @@
 % Extract AVHRR images from HRPT frames.dat
 clear
 
-fid = fopen('frames.dat');
+fid = fopen('frames.hrpt');
 dat = fread(fid, 'uint16');
 
 frame_len = 11090;
index ddf181c280e62bad89a1503594b93b5e00b503ea..220a5714d75a690bbc06ccfc8428a96d562679a1 100644 (file)
@@ -23,7 +23,7 @@
 GR_SWIG_BLOCK_MAGIC(noaa,hrpt_decoder)
 
 noaa_hrpt_decoder_sptr
-noaa_make_hrpt_decoder();
+noaa_make_hrpt_decoder(bool verbose, bool output_files);
 
 class noaa_hrpt_decoder : public gr_sync_block
 {