From 6b6a5522e0b1d12ef5d697b1067a87dfe584cec6 Mon Sep 17 00:00:00 2001
From: Johnathan Corgan
Date: Sat, 29 Aug 2009 11:12:37 -0700
Subject: Work in progress, incomplete
* Renamed noaa.carrier_pll_cc to noaa.hrpt_pll_cc
* Added nop noaa.hrpt_sync_cc
* Renamed grc apps to use usrp_ prefix and protocol name
* Installed grc generated scripts to path
---
gr-noaa/grc/Makefile.am | 12 +-
gr-noaa/grc/noaa_carrier_pll_cc.xml | 34 -
gr-noaa/grc/noaa_hrpt_pll_cc.xml | 34 +
gr-noaa/grc/noaa_hrpt_sync_cc.xml | 39 +
gr-noaa/grc/rx_goes.grc | 1454 ----------------------------------
gr-noaa/grc/rx_poes.grc | 806 -------------------
gr-noaa/grc/usrp_rx_hrpt.grc | 1026 ++++++++++++++++++++++++
gr-noaa/grc/usrp_rx_hrpt.py | 245 ++++++
gr-noaa/grc/usrp_rx_lrit.grc | 1477 +++++++++++++++++++++++++++++++++++
gr-noaa/grc/usrp_rx_lrit.py | 399 ++++++++++
10 files changed, 3229 insertions(+), 2297 deletions(-)
delete mode 100644 gr-noaa/grc/noaa_carrier_pll_cc.xml
create mode 100644 gr-noaa/grc/noaa_hrpt_pll_cc.xml
create mode 100644 gr-noaa/grc/noaa_hrpt_sync_cc.xml
delete mode 100755 gr-noaa/grc/rx_goes.grc
delete mode 100755 gr-noaa/grc/rx_poes.grc
create mode 100644 gr-noaa/grc/usrp_rx_hrpt.grc
create mode 100755 gr-noaa/grc/usrp_rx_hrpt.py
create mode 100644 gr-noaa/grc/usrp_rx_lrit.grc
create mode 100755 gr-noaa/grc/usrp_rx_lrit.py
(limited to 'gr-noaa/grc')
diff --git a/gr-noaa/grc/Makefile.am b/gr-noaa/grc/Makefile.am
index 18144040d..c75529778 100644
--- a/gr-noaa/grc/Makefile.am
+++ b/gr-noaa/grc/Makefile.am
@@ -22,9 +22,15 @@
include $(top_srcdir)/Makefile.common
grcblocksdir = $(prefix)/share/gnuradio/grc/blocks
+
+dist_bin_SCRIPTS = \
+ usrp_rx_hrpt.py \
+ usrp_rx_lrit.py
+
dist_grcblocks_DATA = \
- noaa_carrier_pll_cc.xml
+ noaa_hrpt_pll_cc.xml \
+ noaa_hrpt_sync_cc.xml
EXTRA_DIST = \
- rx_goes.grc \
- rx_poes.grc
+ usrp_rx_hrpt.grc \
+ usrp_rx_lrit.grc
diff --git a/gr-noaa/grc/noaa_carrier_pll_cc.xml b/gr-noaa/grc/noaa_carrier_pll_cc.xml
deleted file mode 100644
index 7b1fdc8f2..000000000
--- a/gr-noaa/grc/noaa_carrier_pll_cc.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
- Carrier PLL
- noaa_carrier_pll_cc
- NOAA
- from gnuradio import noaa
- noaa.carrier_pll_cc($alpha, $beta, $max_offset)
- set_alpha($alpha)
- set_beta($beta)
- set_max_offset($max_offset)
-
- Alpha
- alpha
- real
-
-
- Beta
- beta
- real
-
-
- Max Offset
- max_offset
- real
-
-
- in
- complex
-
-
- out
- complex
-
-
diff --git a/gr-noaa/grc/noaa_hrpt_pll_cc.xml b/gr-noaa/grc/noaa_hrpt_pll_cc.xml
new file mode 100644
index 000000000..e56e0b056
--- /dev/null
+++ b/gr-noaa/grc/noaa_hrpt_pll_cc.xml
@@ -0,0 +1,34 @@
+
+
+ HRPT PLL
+ noaa_hrpt_pll_cc
+ NOAA
+ from gnuradio import noaa
+ noaa.hrpt_pll_cc($alpha, $beta, $max_offset)
+ set_alpha($alpha)
+ set_beta($beta)
+ set_max_offset($max_offset)
+
+ Alpha
+ alpha
+ real
+
+
+ Beta
+ beta
+ real
+
+
+ Max Offset
+ max_offset
+ real
+
+
+ in
+ complex
+
+
+ out
+ complex
+
+
diff --git a/gr-noaa/grc/noaa_hrpt_sync_cc.xml b/gr-noaa/grc/noaa_hrpt_sync_cc.xml
new file mode 100644
index 000000000..d311aa946
--- /dev/null
+++ b/gr-noaa/grc/noaa_hrpt_sync_cc.xml
@@ -0,0 +1,39 @@
+
+
+ HRPT SYNC
+ noaa_hrpt_sync_cc
+ NOAA
+ from gnuradio import noaa
+ noaa.hrpt_sync_cc($alpha, $beta, $sps, $max_offset)
+ set_alpha($alpha)
+ set_beta($beta)
+ set_max_offset($max_offset)
+
+ Alpha
+ alpha
+ real
+
+
+ Beta
+ beta
+ real
+
+
+ Samples/Symbol
+ sps
+ real
+
+
+ Max Offset
+ max_offset
+ real
+
+
+ in
+ complex
+
+
+ out
+ complex
+
+
diff --git a/gr-noaa/grc/rx_goes.grc b/gr-noaa/grc/rx_goes.grc
deleted file mode 100755
index ebd21da40..000000000
--- a/gr-noaa/grc/rx_goes.grc
+++ /dev/null
@@ -1,1454 +0,0 @@
-
-
- Sat Aug 1 22:58:41 2009
-
- options
-
- id
- rx_goes
-
-
- _enabled
- True
-
-
- title
- USRP GOES Receiver
-
-
- author
-
-
-
- description
-
-
-
- window_size
- 4095, 4095
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- run
- True
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 64e6/decim
-
-
- _coordinate
- (10, 81)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- symbol_rate
-
-
- _enabled
- True
-
-
- value
- 293e3
-
-
- _coordinate
- (11, 148)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- sps
-
-
- _enabled
- True
-
-
- value
- samp_rate/symbol_rate
-
-
- _coordinate
- (12, 214)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- gain
-
-
- _enabled
- True
-
-
- label
- Gain
-
-
- value
- saved_gain
-
-
- min
- 0
-
-
- max
- 115
-
-
- num_steps
- 115
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
- 0, 1, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (392, 12)
-
-
- _rotation
- 0
-
-
-
- variable_config
-
- id
- saved_gain
-
-
- _enabled
- True
-
-
- value
- 33
-
-
- type
- real
-
-
- config_file
- rx_goes.cfg
-
-
- section
- main
-
-
- option
- gain
-
-
- writeback
- gain
-
-
- _coordinate
- (392, 163)
-
-
- _rotation
- 0
-
-
-
- variable_config
-
- id
- saved_gain_mu
-
-
- _enabled
- True
-
-
- value
- 0.005
-
-
- type
- real
-
-
- config_file
- rx_goes.cfg
-
-
- section
- main
-
-
- option
- gain_mu
-
-
- writeback
- gain_mu
-
-
- _coordinate
- (835, 162)
-
-
- _rotation
- 0
-
-
-
- variable_config
-
- id
- saved_costas_alpha
-
-
- _enabled
- True
-
-
- value
- 0.005
-
-
- type
- real
-
-
- config_file
- rx_goes.cfg
-
-
- section
- main
-
-
- option
- costas_alpha
-
-
- writeback
- costas_alpha
-
-
- _coordinate
- (688, 162)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- gain_mu
-
-
- _enabled
- True
-
-
- label
- Gain Mu
-
-
- value
- saved_gain_mu
-
-
- min
- 0
-
-
- max
- 0.5
-
-
- num_steps
- 100
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
- 1, 1, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (833, 14)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- costas_alpha
-
-
- _enabled
- True
-
-
- label
- Costas Alpha
-
-
- value
- saved_costas_alpha
-
-
- min
- 0
-
-
- max
- 0.5
-
-
- num_steps
- 100
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
- 1, 0, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (688, 13)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq
-
-
- _enabled
- True
-
-
- label
- Frequency
-
-
- value
- saved_freq
-
-
- min
- 135e6
-
-
- max
- 139e6
-
-
- num_steps
- 400
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
- 0, 2, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (540, 13)
-
-
- _rotation
- 0
-
-
-
- variable_config
-
- id
- saved_freq
-
-
- _enabled
- True
-
-
- value
- 137e6
-
-
- type
- real
-
-
- config_file
- rx_goes.cfg
-
-
- section
- main
-
-
- option
- freq
-
-
- writeback
- freq
-
-
- _coordinate
- (541, 162)
-
-
- _rotation
- 0
-
-
-
- variable_config
-
- id
- saved_decim
-
-
- _enabled
- True
-
-
- value
- 160
-
-
- type
- int
-
-
- config_file
- rx_goes.cfg
-
-
- section
- main
-
-
- option
- decim
-
-
- writeback
- decim
-
-
- _coordinate
- (245, 161)
-
-
- _rotation
- 0
-
-
-
- variable_text_box
-
- id
- decim
-
-
- _enabled
- True
-
-
- label
- Decim
-
-
- value
- saved_decim
-
-
- converver
- int_converter
-
-
- formatter
- None
-
-
- grid_pos
- 0, 0, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (243, 13)
-
-
- _rotation
- 0
-
-
-
- notebook
-
- id
- displays
-
-
- _enabled
- True
-
-
- style
- wx.NB_TOP
-
-
- labels
- ['USRP RX', 'Costas Output']
-
-
- grid_pos
- 2, 0, 1, 3
-
-
- notebook
-
-
-
- _coordinate
- (12, 287)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Waveform
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 0.5
-
-
- t_scale
- 20.0/samp_rate
-
-
- ac_couple
- False
-
-
- xy_mode
- True
-
-
- num_inputs
- 1
-
-
- grid_pos
- 1, 0, 1, 1
-
-
- notebook
- displays, 0
-
-
- _coordinate
- (434, 551)
-
-
- _rotation
- 0
-
-
-
- gr_agc_xx
-
- id
- gr_agc_xx_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- rate
- 1e-6
-
-
- reference
- 1.0
-
-
- gain
- 1.0/32767.0
-
-
- max_gain
- 1.0
-
-
- _coordinate
- (261, 493)
-
-
- _rotation
- 0
-
-
-
- root_raised_cosine_filter
-
- id
- root_raised_cosine_filter_0
-
-
- _enabled
- False
-
-
- type
- fir_filter_ccf
-
-
- decim
- 1
-
-
- interp
- 1
-
-
- gain
- 1
-
-
- samp_rate
- samp_rate
-
-
- sym_rate
- symbol_rate
-
-
- alpha
- 0.5
-
-
- ntaps
- 50
-
-
- _coordinate
- (618, 373)
-
-
- _rotation
- 0
-
-
-
- usrp_simple_source_x
-
- id
- usrp_simple_source_x_0
-
-
- _enabled
- False
-
-
- type
- complex
-
-
- format
-
-
-
- which
- 0
-
-
- decimation
- decim
-
-
- frequency
- freq
-
-
- lo_offset
- float('inf')
-
-
- gain
- gain
-
-
- side
- B
-
-
- rx_ant
- RXA
-
-
- hb_filters
-
-
-
- _coordinate
- (11, 477)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- wxgui_fftsink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Spectrum
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- freq
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 50
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- grid_pos
- 0, 0, 1, 1
-
-
- notebook
- displays, 0
-
-
- _coordinate
- (434, 337)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (181, 663)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_1
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Scope Plot
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 0.4
-
-
- t_scale
- 20.0/samp_rate
-
-
- ac_couple
- False
-
-
- xy_mode
- True
-
-
- num_inputs
- 1
-
-
- grid_pos
- 0, 0, 1, 1
-
-
- notebook
- displays, 1
-
-
- _coordinate
- (1126, 251)
-
-
- _rotation
- 0
-
-
-
- gr_probe_mpsk_snr_c
-
- id
- gr_probe_mpsk_snr_c_0
-
-
- _enabled
- True
-
-
- type
- snr
-
-
- alpha
- 0.0001
-
-
- probe_rate
- 10
-
-
- _coordinate
- (1126, 723)
-
-
- _rotation
- 0
-
-
-
- wxgui_numbersink2
-
- id
- wxgui_numbersink2_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- SNR
-
-
- units
- dB
-
-
- samp_rate
- 10
-
-
- min_value
- 0
-
-
- max_value
- 30
-
-
- factor
- 1.0
-
-
- decimal_places
- 1
-
-
- ref_level
- 0
-
-
- number_rate
- 10
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- show_gauge
- True
-
-
- grid_pos
- 2, 0, 1, 1
-
-
- notebook
- displays, 1
-
-
- _coordinate
- (1335, 651)
-
-
- _rotation
- 0
-
-
-
- gr_mpsk_receiver_cc
-
- id
- gr_mpsk_receiver_cc_0
-
-
- _enabled
- True
-
-
- M
- 2
-
-
- theta
- 0
-
-
- alpha
- costas_alpha
-
-
- beta
- costas_alpha*costas_alpha/4.0
-
-
- fmin
- -0.05
-
-
- fmax
- 0.05
-
-
- mu
- 0.5
-
-
- gain_mu
- gain_mu
-
-
- omega
- sps
-
-
- gain_omega
- gain_mu*gain_mu/4.0
-
-
- omega_relative_limit
- 0.05
-
-
- _coordinate
- (881, 437)
-
-
- _rotation
- 0
-
-
-
- gr_complex_to_real
-
- id
- gr_complex_to_real_0
-
-
- _enabled
- True
-
-
- vlen
- 1
-
-
- _coordinate
- (1133, 521)
-
-
- _rotation
- 0
-
-
-
- gr_char_to_float
-
- id
- gr_char_to_float_0
-
-
- _enabled
- True
-
-
- _coordinate
- (1523, 521)
-
-
- _rotation
- 0
-
-
-
- gr_binary_slicer_fb
-
- id
- gr_binary_slicer_fb_0
-
-
- _enabled
- True
-
-
- _coordinate
- (1343, 521)
-
-
- _rotation
- 0
-
-
-
- gr_add_const_vxx
-
- id
- gr_add_const_vxx_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- const
- 48.0
-
-
- vlen
- 1
-
-
- _coordinate
- (1707, 517)
-
-
- _rotation
- 0
-
-
-
- gr_float_to_char
-
- id
- gr_float_to_char_0
-
-
- _enabled
- True
-
-
- _coordinate
- (1878, 521)
-
-
- _rotation
- 0
-
-
-
- gr_file_sink
-
- id
- gr_file_sink_0
-
-
- _enabled
- True
-
-
- file
- bits.dat
-
-
- type
- byte
-
-
- vlen
- 1
-
-
- _coordinate
- (2059, 517)
-
-
- _rotation
- 0
-
-
-
- gr_file_source
-
- id
- gr_file_source_0
-
-
- _enabled
- True
-
-
- file
- lrit.dat
-
-
- type
- complex
-
-
- repeat
- False
-
-
- vlen
- 1
-
-
- _coordinate
- (11, 655)
-
-
- _rotation
- 0
-
-
-
- usrp_simple_source_x_0
- gr_agc_xx_0
- 0
- 0
-
-
- gr_agc_xx_0
- wxgui_scopesink2_0
- 0
- 0
-
-
- gr_file_source_0
- gr_throttle_0
- 0
- 0
-
-
- gr_throttle_0
- gr_agc_xx_0
- 0
- 0
-
-
- gr_probe_mpsk_snr_c_0
- wxgui_numbersink2_0
- 0
- 0
-
-
- gr_mpsk_receiver_cc_0
- gr_probe_mpsk_snr_c_0
- 0
- 0
-
-
- gr_agc_xx_0
- gr_mpsk_receiver_cc_0
- 0
- 0
-
-
- gr_mpsk_receiver_cc_0
- wxgui_scopesink2_1
- 0
- 0
-
-
- gr_agc_xx_0
- wxgui_fftsink2_0
- 0
- 0
-
-
- gr_mpsk_receiver_cc_0
- gr_complex_to_real_0
- 0
- 0
-
-
- gr_complex_to_real_0
- gr_binary_slicer_fb_0
- 0
- 0
-
-
- gr_binary_slicer_fb_0
- gr_char_to_float_0
- 0
- 0
-
-
- gr_char_to_float_0
- gr_add_const_vxx_0
- 0
- 0
-
-
- gr_add_const_vxx_0
- gr_float_to_char_0
- 0
- 0
-
-
- gr_float_to_char_0
- gr_file_sink_0
- 0
- 0
-
-
diff --git a/gr-noaa/grc/rx_poes.grc b/gr-noaa/grc/rx_poes.grc
deleted file mode 100755
index 1001049a2..000000000
--- a/gr-noaa/grc/rx_poes.grc
+++ /dev/null
@@ -1,806 +0,0 @@
-
-
- Sat Aug 22 13:06:22 2009
-
- options
-
- id
- rx_poes
-
-
- _enabled
- True
-
-
- title
-
-
-
- author
-
-
-
- description
-
-
-
- window_size
- 4096,4096
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- run
- True
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- decim
-
-
- _enabled
- True
-
-
- value
- 16
-
-
- _coordinate
- (97, 10)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- sym_rate
-
-
- _enabled
- True
-
-
- value
- 600*1109
-
-
- _coordinate
- (286, 10)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- sample_rate
-
-
- _enabled
- True
-
-
- value
- 64e6/decim
-
-
- _coordinate
- (176, 12)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- sps
-
-
- _enabled
- True
-
-
- value
- sample_rate/sym_rate
-
-
- _coordinate
- (382, 14)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- hs
-
-
- _enabled
- True
-
-
- value
- int(sps/2.0)
-
-
- _coordinate
- (492, 16)
-
-
- _rotation
- 0
-
-
-
- import
-
- id
- import_0
-
-
- _enabled
- True
-
-
- import
- import math
-
-
- _coordinate
- (9, 202)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- max_offset
-
-
- _enabled
- True
-
-
- value
- 2*math.pi*100e3/sample_rate
-
-
- _coordinate
- (342, 95)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- pll_alpha
-
-
- _enabled
- True
-
-
- label
- PLL Alpha
-
-
- value
- 0.005
-
-
- min
- 0.0
-
-
- max
- 0.5
-
-
- num_steps
- 500
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
- 0, 0, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (192, 100)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- throttle
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- samples_per_second
- sample_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (79, 518)
-
-
- _rotation
- 0
-
-
-
- gr_agc_xx
-
- id
- agr
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- rate
- 1e-6
-
-
- reference
- 1.0
-
-
- gain
- 1.0
-
-
- max_gain
- 1.0
-
-
- _coordinate
- (261, 494)
-
-
- _rotation
- 0
-
-
-
- gr_moving_average_xx
-
- id
- gr_moving_average_xx_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- length
- hs
-
-
- scale
- 1.0/hs
-
-
- max_iter
- 4000
-
-
- _coordinate
- (429, 502)
-
-
- _rotation
- 0
-
-
-
- noaa_carrier_pll_cc
-
- id
- noaa_carrier_pll_cc_0
-
-
- _enabled
- True
-
-
- alpha
- pll_alpha
-
-
- beta
- pll_alpha**2/4.0
-
-
- max_offset
- max_offset
-
-
- _coordinate
- (636, 502)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- RX Waveform
-
-
- samp_rate
- sample_rate
-
-
- v_scale
- 0
-
-
- t_scale
- 20.0/sample_rate
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- grid_pos
- 1, 0, 1, 1
-
-
- notebook
- displays, 0
-
-
- _coordinate
- (433, 612)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- rx_fftsink
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- RX Spectrum
-
-
- samp_rate
- sample_rate
-
-
- baseband_freq
- 1698e6
-
-
- y_per_div
- 5
-
-
- y_divs
- 8
-
-
- ref_level
- 20
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- True
-
-
- avg_alpha
- 0.1
-
-
- grid_pos
- 0, 0, 1, 1
-
-
- notebook
- displays, 0
-
-
- _coordinate
- (433, 241)
-
-
- _rotation
- 0
-
-
-
- gr_complex_to_imag
-
- id
- gr_complex_to_imag_0
-
-
- _enabled
- True
-
-
- vlen
- 1
-
-
- _coordinate
- (877, 522)
-
-
- _rotation
- 0
-
-
-
- notebook
-
- id
- displays
-
-
- _enabled
- True
-
-
- style
- wx.NB_TOP
-
-
- labels
- ['RX','Baseband']
-
-
- grid_pos
- 1, 0, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (9, 99)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0_1_0_1
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- Manchester Symbols
-
-
- samp_rate
- sample_rate
-
-
- v_scale
- 0.5
-
-
- t_scale
- 5.0/sym_rate
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- grid_pos
- 1, 0, 1, 1
-
-
- notebook
- displays, 1
-
-
- _coordinate
- (856, 343)
-
-
- _rotation
- 180
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Post-Filter/PLL
-
-
- samp_rate
- sample_rate
-
-
- v_scale
- 0.5
-
-
- t_scale
- 20.0/sample_rate
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- grid_pos
- 0, 0, 1, 1
-
-
- notebook
- displays, 1
-
-
- _coordinate
- (634, 335)
-
-
- _rotation
- 180
-
-
-
- gr_file_source
-
- id
- src
-
-
- _enabled
- True
-
-
- file
- poes-d16.dat
-
-
- type
- complex
-
-
- repeat
- True
-
-
- vlen
- 1
-
-
- _coordinate
- (34, 423)
-
-
- _rotation
- 0
-
-
-
- src
- throttle
- 0
- 0
-
-
- noaa_carrier_pll_cc_0
- gr_complex_to_imag_0
- 0
- 0
-
-
- throttle
- agr
- 0
- 0
-
-
- agr
- gr_moving_average_xx_0
- 0
- 0
-
-
- agr
- rx_fftsink
- 0
- 0
-
-
- agr
- wxgui_scopesink2_0
- 0
- 0
-
-
- gr_moving_average_xx_0
- noaa_carrier_pll_cc_0
- 0
- 0
-
-
- noaa_carrier_pll_cc_0
- wxgui_scopesink2_0_0
- 0
- 0
-
-
- gr_complex_to_imag_0
- wxgui_scopesink2_0_1_0_1
- 0
- 0
-
-
diff --git a/gr-noaa/grc/usrp_rx_hrpt.grc b/gr-noaa/grc/usrp_rx_hrpt.grc
new file mode 100644
index 000000000..d3c6603ad
--- /dev/null
+++ b/gr-noaa/grc/usrp_rx_hrpt.grc
@@ -0,0 +1,1026 @@
+
+
+ Sat Aug 29 11:48:56 2009
+
+ options
+
+ id
+ usrp_rx_hrpt
+
+
+ _enabled
+ True
+
+
+ title
+ USRP HRPT Receiver
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 4096,4096
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ import
+
+ id
+ import_0
+
+
+ _enabled
+ True
+
+
+ import
+ import math
+
+
+ _coordinate
+ (9, 202)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ throttle
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samples_per_second
+ sample_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (79, 518)
+
+
+ _rotation
+ 0
+
+
+
+ gr_file_source
+
+ id
+ src
+
+
+ _enabled
+ True
+
+
+ file
+ poes-d16.dat
+
+
+ type
+ complex
+
+
+ repeat
+ True
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (34, 423)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ decim
+
+
+ _enabled
+ True
+
+
+ value
+ 16
+
+
+ _coordinate
+ (186, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ hs
+
+
+ _enabled
+ True
+
+
+ value
+ int(sps/2.0)
+
+
+ _coordinate
+ (589, 13)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ sym_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 600*1109
+
+
+ _coordinate
+ (383, 7)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ sps
+
+
+ _enabled
+ True
+
+
+ value
+ sample_rate/sym_rate
+
+
+ _coordinate
+ (479, 11)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ sample_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 64e6/decim
+
+
+ _coordinate
+ (273, 9)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ rx_fftsink
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ RX Spectrum
+
+
+ samp_rate
+ sample_rate
+
+
+ baseband_freq
+ 1698e6
+
+
+ y_per_div
+ 5
+
+
+ y_divs
+ 8
+
+
+ ref_level
+ 20
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ True
+
+
+ avg_alpha
+ 0.1
+
+
+ grid_pos
+ 0, 0, 1, 1
+
+
+ notebook
+ displays, 0
+
+
+ _coordinate
+ (194, 263)
+
+
+ _rotation
+ 180
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ RX Waveform
+
+
+ samp_rate
+ sample_rate
+
+
+ v_scale
+ 0
+
+
+ t_scale
+ 20.0/sample_rate
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ grid_pos
+ 1, 0, 1, 1
+
+
+ notebook
+ displays, 0
+
+
+ _coordinate
+ (198, 609)
+
+
+ _rotation
+ 180
+
+
+
+ gr_agc_xx
+
+ id
+ agr
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ rate
+ 1e-6
+
+
+ reference
+ 1.0
+
+
+ gain
+ 1.0
+
+
+ max_gain
+ 1.0
+
+
+ _coordinate
+ (261, 494)
+
+
+ _rotation
+ 0
+
+
+
+ gr_moving_average_xx
+
+ id
+ gr_moving_average_xx_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ length
+ hs
+
+
+ scale
+ 1.0/hs
+
+
+ max_iter
+ 4000
+
+
+ _coordinate
+ (434, 502)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ max_carrier_offset
+
+
+ _enabled
+ True
+
+
+ value
+ 2*math.pi*100e3/sample_rate
+
+
+ _coordinate
+ (668, 107)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ max_sync_offset
+
+
+ _enabled
+ True
+
+
+ value
+ 0.01
+
+
+ _coordinate
+ (665, 173)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ pll_alpha
+
+
+ _enabled
+ True
+
+
+ label
+ PLL Alpha
+
+
+ value
+ 0.005
+
+
+ min
+ 0.0
+
+
+ max
+ 0.5
+
+
+ num_steps
+ 500
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+ 0, 0, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (192, 100)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ sync_alpha
+
+
+ _enabled
+ True
+
+
+ label
+ SYNC Alpha
+
+
+ value
+ 0.005
+
+
+ min
+ 0.0
+
+
+ max
+ 0.5
+
+
+ num_steps
+ 500
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+ 0, 1, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (344, 101)
+
+
+ _rotation
+ 0
+
+
+
+ noaa_hrpt_pll_cc
+
+ id
+ noaa_hrpt_pll_cc_0
+
+
+ _enabled
+ True
+
+
+ alpha
+ pll_alpha
+
+
+ beta
+ pll_alpha**2/4.0
+
+
+ max_offset
+ max_carrier_offset
+
+
+ _coordinate
+ (628, 502)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Post-PLL
+
+
+ samp_rate
+ sample_rate
+
+
+ v_scale
+ 0.5
+
+
+ t_scale
+ 20.0/sample_rate
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ grid_pos
+ 0, 0, 1, 1
+
+
+ notebook
+ displays, 1
+
+
+ _coordinate
+ (618, 335)
+
+
+ _rotation
+ 180
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0_1
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Post-SYNC
+
+
+ samp_rate
+ sample_rate
+
+
+ v_scale
+ 0.5
+
+
+ t_scale
+ 20.0/sample_rate
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ grid_pos
+ 0, 0, 1, 1
+
+
+ notebook
+ displays, 2
+
+
+ _coordinate
+ (872, 341)
+
+
+ _rotation
+ 180
+
+
+
+ notebook
+
+ id
+ displays
+
+
+ _enabled
+ True
+
+
+ style
+ wx.NB_TOP
+
+
+ labels
+ ['RX','PLL','SYNC']
+
+
+ grid_pos
+ 1, 0, 1, 2
+
+
+ notebook
+
+
+
+ _coordinate
+ (9, 99)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Post-PLL
+
+
+ samp_rate
+ sample_rate
+
+
+ v_scale
+ 0.5
+
+
+ t_scale
+ 20.0/sample_rate
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ True
+
+
+ num_inputs
+ 1
+
+
+ grid_pos
+ 1, 0, 1, 1
+
+
+ notebook
+ displays, 1
+
+
+ _coordinate
+ (618, 614)
+
+
+ _rotation
+ 180
+
+
+
+ noaa_hrpt_sync_cc
+
+ id
+ sync
+
+
+ _enabled
+ True
+
+
+ alpha
+ sync_alpha
+
+
+ beta
+ sync_alpha**2/4.0
+
+
+ sps
+ sps
+
+
+ max_offset
+ max_sync_offset
+
+
+ _coordinate
+ (865, 494)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Post-SYNC
+
+
+ samp_rate
+ sample_rate
+
+
+ v_scale
+ 0.5
+
+
+ t_scale
+ 20.0/sample_rate
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ True
+
+
+ num_inputs
+ 1
+
+
+ grid_pos
+ 1, 0, 1, 1
+
+
+ notebook
+ displays, 2
+
+
+ _coordinate
+ (872, 607)
+
+
+ _rotation
+ 180
+
+
+
+ src
+ throttle
+ 0
+ 0
+
+
+ throttle
+ agr
+ 0
+ 0
+
+
+ agr
+ gr_moving_average_xx_0
+ 0
+ 0
+
+
+ agr
+ rx_fftsink
+ 0
+ 0
+
+
+ agr
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ gr_moving_average_xx_0
+ noaa_hrpt_pll_cc_0
+ 0
+ 0
+
+
+ noaa_hrpt_pll_cc_0
+ wxgui_scopesink2_0_0
+ 0
+ 0
+
+
+ noaa_hrpt_pll_cc_0
+ wxgui_scopesink2_0_0_0
+ 0
+ 0
+
+
+ noaa_hrpt_pll_cc_0
+ sync
+ 0
+ 0
+
+
+ sync
+ wxgui_scopesink2_0_0_1
+ 0
+ 0
+
+
+ sync
+ wxgui_scopesink2_0_0_0_0
+ 0
+ 0
+
+
diff --git a/gr-noaa/grc/usrp_rx_hrpt.py b/gr-noaa/grc/usrp_rx_hrpt.py
new file mode 100755
index 000000000..ed6417335
--- /dev/null
+++ b/gr-noaa/grc/usrp_rx_hrpt.py
@@ -0,0 +1,245 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: USRP HRPT Receiver
+# Generated: Sat Aug 29 11:48:57 2009
+##################################################
+
+from gnuradio import gr
+from gnuradio import noaa
+from gnuradio.eng_option import eng_option
+from gnuradio.wxgui import fftsink2
+from gnuradio.wxgui import forms
+from gnuradio.wxgui import scopesink2
+from grc_gnuradio import wxgui as grc_wxgui
+from optparse import OptionParser
+import math
+import wx
+
+class usrp_rx_hrpt(grc_wxgui.top_block_gui):
+
+ def __init__(self):
+ grc_wxgui.top_block_gui.__init__(self, title="USRP HRPT Receiver")
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.decim = decim = 16
+ self.sym_rate = sym_rate = 600*1109
+ self.sample_rate = sample_rate = 64e6/decim
+ self.sps = sps = sample_rate/sym_rate
+ self.sync_alpha = sync_alpha = 0.005
+ self.pll_alpha = pll_alpha = 0.005
+ self.max_sync_offset = max_sync_offset = 0.01
+ self.max_carrier_offset = max_carrier_offset = 2*math.pi*100e3/sample_rate
+ self.hs = hs = int(sps/2.0)
+
+ ##################################################
+ # Notebooks
+ ##################################################
+ self.displays = wx.Notebook(self.GetWin(), style=wx.NB_TOP)
+ self.displays.AddPage(grc_wxgui.Panel(self.displays), "RX")
+ self.displays.AddPage(grc_wxgui.Panel(self.displays), "PLL")
+ self.displays.AddPage(grc_wxgui.Panel(self.displays), "SYNC")
+ self.GridAdd(self.displays, 1, 0, 1, 2)
+
+ ##################################################
+ # Controls
+ ##################################################
+ _sync_alpha_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._sync_alpha_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_sync_alpha_sizer,
+ value=self.sync_alpha,
+ callback=self.set_sync_alpha,
+ label="SYNC Alpha",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._sync_alpha_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_sync_alpha_sizer,
+ value=self.sync_alpha,
+ callback=self.set_sync_alpha,
+ minimum=0.0,
+ maximum=0.5,
+ num_steps=500,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.GridAdd(_sync_alpha_sizer, 0, 1, 1, 1)
+ _pll_alpha_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._pll_alpha_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_pll_alpha_sizer,
+ value=self.pll_alpha,
+ callback=self.set_pll_alpha,
+ label="PLL Alpha",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._pll_alpha_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_pll_alpha_sizer,
+ value=self.pll_alpha,
+ callback=self.set_pll_alpha,
+ minimum=0.0,
+ maximum=0.5,
+ num_steps=500,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.GridAdd(_pll_alpha_sizer, 0, 0, 1, 1)
+
+ ##################################################
+ # Blocks
+ ##################################################
+ self.agr = gr.agc_cc(1e-6, 1.0, 1.0, 1.0)
+ self.gr_moving_average_xx_0 = gr.moving_average_cc(hs, 1.0/hs, 4000)
+ self.noaa_hrpt_pll_cc_0 = noaa.hrpt_pll_cc(pll_alpha, pll_alpha**2/4.0, max_carrier_offset)
+ self.rx_fftsink = fftsink2.fft_sink_c(
+ self.displays.GetPage(0).GetWin(),
+ baseband_freq=1698e6,
+ y_per_div=5,
+ y_divs=8,
+ ref_level=20,
+ sample_rate=sample_rate,
+ fft_size=1024,
+ fft_rate=30,
+ average=True,
+ avg_alpha=0.1,
+ title="RX Spectrum",
+ peak_hold=False,
+ )
+ self.displays.GetPage(0).GridAdd(self.rx_fftsink.win, 0, 0, 1, 1)
+ self.src = gr.file_source(gr.sizeof_gr_complex*1, "poes-d16.dat", True)
+ self.sync = noaa.hrpt_sync_cc(sync_alpha, sync_alpha**2/4.0, sps, max_sync_offset)
+ self.throttle = gr.throttle(gr.sizeof_gr_complex*1, sample_rate)
+ self.wxgui_scopesink2_0 = scopesink2.scope_sink_c(
+ self.displays.GetPage(0).GetWin(),
+ title="RX Waveform",
+ sample_rate=sample_rate,
+ v_scale=0,
+ t_scale=20.0/sample_rate,
+ ac_couple=False,
+ xy_mode=False,
+ num_inputs=1,
+ )
+ self.displays.GetPage(0).GridAdd(self.wxgui_scopesink2_0.win, 1, 0, 1, 1)
+ self.wxgui_scopesink2_0_0 = scopesink2.scope_sink_c(
+ self.displays.GetPage(1).GetWin(),
+ title="Post-PLL",
+ sample_rate=sample_rate,
+ v_scale=0.5,
+ t_scale=20.0/sample_rate,
+ ac_couple=False,
+ xy_mode=False,
+ num_inputs=1,
+ )
+ self.displays.GetPage(1).GridAdd(self.wxgui_scopesink2_0_0.win, 0, 0, 1, 1)
+ self.wxgui_scopesink2_0_0_0 = scopesink2.scope_sink_c(
+ self.displays.GetPage(1).GetWin(),
+ title="Post-PLL",
+ sample_rate=sample_rate,
+ v_scale=0.5,
+ t_scale=20.0/sample_rate,
+ ac_couple=False,
+ xy_mode=True,
+ num_inputs=1,
+ )
+ self.displays.GetPage(1).GridAdd(self.wxgui_scopesink2_0_0_0.win, 1, 0, 1, 1)
+ self.wxgui_scopesink2_0_0_0_0 = scopesink2.scope_sink_c(
+ self.displays.GetPage(2).GetWin(),
+ title="Post-SYNC",
+ sample_rate=sample_rate,
+ v_scale=0.5,
+ t_scale=20.0/sample_rate,
+ ac_couple=False,
+ xy_mode=True,
+ num_inputs=1,
+ )
+ self.displays.GetPage(2).GridAdd(self.wxgui_scopesink2_0_0_0_0.win, 1, 0, 1, 1)
+ self.wxgui_scopesink2_0_0_1 = scopesink2.scope_sink_c(
+ self.displays.GetPage(2).GetWin(),
+ title="Post-SYNC",
+ sample_rate=sample_rate,
+ v_scale=0.5,
+ t_scale=20.0/sample_rate,
+ ac_couple=False,
+ xy_mode=False,
+ num_inputs=1,
+ )
+ self.displays.GetPage(2).GridAdd(self.wxgui_scopesink2_0_0_1.win, 0, 0, 1, 1)
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.connect((self.src, 0), (self.throttle, 0))
+ self.connect((self.throttle, 0), (self.agr, 0))
+ self.connect((self.agr, 0), (self.gr_moving_average_xx_0, 0))
+ self.connect((self.agr, 0), (self.rx_fftsink, 0))
+ self.connect((self.agr, 0), (self.wxgui_scopesink2_0, 0))
+ self.connect((self.gr_moving_average_xx_0, 0), (self.noaa_hrpt_pll_cc_0, 0))
+ self.connect((self.noaa_hrpt_pll_cc_0, 0), (self.wxgui_scopesink2_0_0, 0))
+ self.connect((self.noaa_hrpt_pll_cc_0, 0), (self.wxgui_scopesink2_0_0_0, 0))
+ self.connect((self.noaa_hrpt_pll_cc_0, 0), (self.sync, 0))
+ self.connect((self.sync, 0), (self.wxgui_scopesink2_0_0_1, 0))
+ self.connect((self.sync, 0), (self.wxgui_scopesink2_0_0_0_0, 0))
+
+ def set_decim(self, decim):
+ self.decim = decim
+ self.set_sample_rate(64e6/self.decim)
+
+ 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_sps(self.sample_rate/self.sym_rate)
+ self.rx_fftsink.set_sample_rate(self.sample_rate)
+ self.wxgui_scopesink2_0.set_sample_rate(self.sample_rate)
+ self.set_max_carrier_offset(2*math.pi*100e3/self.sample_rate)
+ self.wxgui_scopesink2_0_0.set_sample_rate(self.sample_rate)
+ self.wxgui_scopesink2_0_0_1.set_sample_rate(self.sample_rate)
+ self.wxgui_scopesink2_0_0_0.set_sample_rate(self.sample_rate)
+ self.wxgui_scopesink2_0_0_0_0.set_sample_rate(self.sample_rate)
+
+ def set_sps(self, sps):
+ self.sps = sps
+ self.set_hs(int(self.sps/2.0))
+
+ def set_sync_alpha(self, sync_alpha):
+ self.sync_alpha = sync_alpha
+ self._sync_alpha_slider.set_value(self.sync_alpha)
+ self._sync_alpha_text_box.set_value(self.sync_alpha)
+ self.sync.set_alpha(self.sync_alpha)
+ self.sync.set_beta(self.sync_alpha**2/4.0)
+
+ def set_pll_alpha(self, pll_alpha):
+ 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.noaa_hrpt_pll_cc_0.set_alpha(self.pll_alpha)
+ self.noaa_hrpt_pll_cc_0.set_beta(self.pll_alpha**2/4.0)
+
+ def set_max_sync_offset(self, max_sync_offset):
+ self.max_sync_offset = max_sync_offset
+ self.sync.set_max_offset(self.max_sync_offset)
+
+ def set_max_carrier_offset(self, max_carrier_offset):
+ self.max_carrier_offset = max_carrier_offset
+ self.noaa_hrpt_pll_cc_0.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]")
+ (options, args) = parser.parse_args()
+ tb = usrp_rx_hrpt()
+ tb.Run(True)
+
diff --git a/gr-noaa/grc/usrp_rx_lrit.grc b/gr-noaa/grc/usrp_rx_lrit.grc
new file mode 100644
index 000000000..55fe39787
--- /dev/null
+++ b/gr-noaa/grc/usrp_rx_lrit.grc
@@ -0,0 +1,1477 @@
+
+
+ Sat Aug 29 11:26:03 2009
+
+ options
+
+ id
+ usrp_rx_lrit
+
+
+ _enabled
+ True
+
+
+ title
+ USRP LRIT Receiver
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 4095, 4095
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 64e6/decim
+
+
+ _coordinate
+ (10, 81)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ symbol_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 293e3
+
+
+ _coordinate
+ (11, 148)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ sps
+
+
+ _enabled
+ True
+
+
+ value
+ samp_rate/symbol_rate
+
+
+ _coordinate
+ (12, 214)
+
+
+ _rotation
+ 0
+
+
+
+ variable_text_box
+
+ id
+ decim
+
+
+ _enabled
+ True
+
+
+ label
+ Decim
+
+
+ value
+ saved_decim
+
+
+ converver
+ int_converter
+
+
+ formatter
+ None
+
+
+ grid_pos
+ 0, 0, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (243, 13)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Waveform
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0.5
+
+
+ t_scale
+ 20.0/samp_rate
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ True
+
+
+ num_inputs
+ 1
+
+
+ grid_pos
+ 1, 0, 1, 1
+
+
+ notebook
+ displays, 0
+
+
+ _coordinate
+ (434, 551)
+
+
+ _rotation
+ 0
+
+
+
+ gr_agc_xx
+
+ id
+ gr_agc_xx_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ rate
+ 1e-6
+
+
+ reference
+ 1.0
+
+
+ gain
+ 1.0/32767.0
+
+
+ max_gain
+ 1.0
+
+
+ _coordinate
+ (261, 493)
+
+
+ _rotation
+ 0
+
+
+
+ root_raised_cosine_filter
+
+ id
+ root_raised_cosine_filter_0
+
+
+ _enabled
+ False
+
+
+ type
+ fir_filter_ccf
+
+
+ decim
+ 1
+
+
+ interp
+ 1
+
+
+ gain
+ 1
+
+
+ samp_rate
+ samp_rate
+
+
+ sym_rate
+ symbol_rate
+
+
+ alpha
+ 0.5
+
+
+ ntaps
+ 50
+
+
+ _coordinate
+ (618, 373)
+
+
+ _rotation
+ 0
+
+
+
+ usrp_simple_source_x
+
+ id
+ usrp_simple_source_x_0
+
+
+ _enabled
+ False
+
+
+ type
+ complex
+
+
+ format
+
+
+
+ which
+ 0
+
+
+ decimation
+ decim
+
+
+ frequency
+ freq
+
+
+ lo_offset
+ float('inf')
+
+
+ gain
+ gain
+
+
+ side
+ B
+
+
+ rx_ant
+ RXA
+
+
+ hb_filters
+
+
+
+ _coordinate
+ (11, 477)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Spectrum
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ freq
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 50
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ grid_pos
+ 0, 0, 1, 1
+
+
+ notebook
+ displays, 0
+
+
+ _coordinate
+ (434, 337)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (181, 663)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_1
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0.4
+
+
+ t_scale
+ 20.0/samp_rate
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ True
+
+
+ num_inputs
+ 1
+
+
+ grid_pos
+ 0, 0, 1, 1
+
+
+ notebook
+ displays, 1
+
+
+ _coordinate
+ (1126, 251)
+
+
+ _rotation
+ 0
+
+
+
+ gr_probe_mpsk_snr_c
+
+ id
+ gr_probe_mpsk_snr_c_0
+
+
+ _enabled
+ True
+
+
+ type
+ snr
+
+
+ alpha
+ 0.0001
+
+
+ probe_rate
+ 10
+
+
+ _coordinate
+ (1126, 723)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_numbersink2
+
+ id
+ wxgui_numbersink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ SNR
+
+
+ units
+ dB
+
+
+ samp_rate
+ 10
+
+
+ min_value
+ 0
+
+
+ max_value
+ 30
+
+
+ factor
+ 1.0
+
+
+ decimal_places
+ 1
+
+
+ ref_level
+ 0
+
+
+ number_rate
+ 10
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ show_gauge
+ True
+
+
+ grid_pos
+ 2, 0, 1, 1
+
+
+ notebook
+ displays, 1
+
+
+ _coordinate
+ (1335, 651)
+
+
+ _rotation
+ 0
+
+
+
+ gr_mpsk_receiver_cc
+
+ id
+ gr_mpsk_receiver_cc_0
+
+
+ _enabled
+ True
+
+
+ M
+ 2
+
+
+ theta
+ 0
+
+
+ alpha
+ costas_alpha
+
+
+ beta
+ costas_alpha*costas_alpha/4.0
+
+
+ fmin
+ -0.05
+
+
+ fmax
+ 0.05
+
+
+ mu
+ 0.5
+
+
+ gain_mu
+ gain_mu
+
+
+ omega
+ sps
+
+
+ gain_omega
+ gain_mu*gain_mu/4.0
+
+
+ omega_relative_limit
+ 0.05
+
+
+ _coordinate
+ (881, 437)
+
+
+ _rotation
+ 0
+
+
+
+ gr_complex_to_real
+
+ id
+ gr_complex_to_real_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (1133, 521)
+
+
+ _rotation
+ 0
+
+
+
+ gr_char_to_float
+
+ id
+ gr_char_to_float_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1523, 521)
+
+
+ _rotation
+ 0
+
+
+
+ gr_binary_slicer_fb
+
+ id
+ gr_binary_slicer_fb_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1343, 521)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_const_vxx
+
+ id
+ gr_add_const_vxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ 48.0
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (1707, 517)
+
+
+ _rotation
+ 0
+
+
+
+ gr_float_to_char
+
+ id
+ gr_float_to_char_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1878, 521)
+
+
+ _rotation
+ 0
+
+
+
+ gr_file_sink
+
+ id
+ gr_file_sink_0
+
+
+ _enabled
+ True
+
+
+ file
+ bits.dat
+
+
+ type
+ byte
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (2059, 517)
+
+
+ _rotation
+ 0
+
+
+
+ gr_file_source
+
+ id
+ gr_file_source_0
+
+
+ _enabled
+ True
+
+
+ file
+ lrit.dat
+
+
+ type
+ complex
+
+
+ repeat
+ False
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (11, 655)
+
+
+ _rotation
+ 0
+
+
+
+ notebook
+
+ id
+ displays
+
+
+ _enabled
+ True
+
+
+ style
+ wx.NB_TOP
+
+
+ labels
+ ['USRP RX', 'Costas Output']
+
+
+ grid_pos
+ 2, 0, 1, 3
+
+
+ notebook
+
+
+
+ _coordinate
+ (14, 351)
+
+
+ _rotation
+ 0
+
+
+
+ variable_config
+
+ id
+ saved_decim
+
+
+ _enabled
+ True
+
+
+ value
+ 160
+
+
+ type
+ int
+
+
+ config_file
+ config_filename
+
+
+ section
+ main
+
+
+ option
+ decim
+
+
+ writeback
+ decim
+
+
+ _coordinate
+ (246, 172)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ gain
+
+
+ _enabled
+ True
+
+
+ label
+ Gain
+
+
+ value
+ saved_gain
+
+
+ min
+ 0
+
+
+ max
+ 115
+
+
+ num_steps
+ 115
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+ 0, 1, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (411, 11)
+
+
+ _rotation
+ 0
+
+
+
+ variable_config
+
+ id
+ saved_gain
+
+
+ _enabled
+ True
+
+
+ value
+ 33
+
+
+ type
+ real
+
+
+ config_file
+ config_filename
+
+
+ section
+ main
+
+
+ option
+ gain
+
+
+ writeback
+ gain
+
+
+ _coordinate
+ (412, 172)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency
+
+
+ value
+ saved_freq
+
+
+ min
+ 135e6
+
+
+ max
+ 139e6
+
+
+ num_steps
+ 400
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+ 0, 2, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (574, 12)
+
+
+ _rotation
+ 0
+
+
+
+ variable_config
+
+ id
+ saved_freq
+
+
+ _enabled
+ True
+
+
+ value
+ 137e6
+
+
+ type
+ real
+
+
+ config_file
+ config_filename
+
+
+ section
+ main
+
+
+ option
+ freq
+
+
+ writeback
+ freq
+
+
+ _coordinate
+ (576, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ costas_alpha
+
+
+ _enabled
+ True
+
+
+ label
+ Costas Alpha
+
+
+ value
+ saved_costas_alpha
+
+
+ min
+ 0
+
+
+ max
+ 0.5
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+ 1, 0, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (738, 13)
+
+
+ _rotation
+ 0
+
+
+
+ variable_config
+
+ id
+ saved_costas_alpha
+
+
+ _enabled
+ True
+
+
+ value
+ 0.005
+
+
+ type
+ real
+
+
+ config_file
+ config_filename
+
+
+ section
+ main
+
+
+ option
+ costas_alpha
+
+
+ writeback
+ costas_alpha
+
+
+ _coordinate
+ (739, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable_config
+
+ id
+ saved_gain_mu
+
+
+ _enabled
+ True
+
+
+ value
+ 0.005
+
+
+ type
+ real
+
+
+ config_file
+ config_filename
+
+
+ section
+ main
+
+
+ option
+ gain_mu
+
+
+ writeback
+ gain_mu
+
+
+ _coordinate
+ (900, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ gain_mu
+
+
+ _enabled
+ True
+
+
+ label
+ Gain Mu
+
+
+ value
+ saved_gain_mu
+
+
+ min
+ 0
+
+
+ max
+ 0.5
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+ 1, 1, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (902, 13)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ config_filename
+
+
+ _enabled
+ True
+
+
+ value
+ "usrp_rx_lrit.cfg"
+
+
+ _coordinate
+ (13, 283)
+
+
+ _rotation
+ 0
+
+
+
+ usrp_simple_source_x_0
+ gr_agc_xx_0
+ 0
+ 0
+
+
+ gr_agc_xx_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ gr_file_source_0
+ gr_throttle_0
+ 0
+ 0
+
+
+ gr_throttle_0
+ gr_agc_xx_0
+ 0
+ 0
+
+
+ gr_probe_mpsk_snr_c_0
+ wxgui_numbersink2_0
+ 0
+ 0
+
+
+ gr_mpsk_receiver_cc_0
+ gr_probe_mpsk_snr_c_0
+ 0
+ 0
+
+
+ gr_agc_xx_0
+ gr_mpsk_receiver_cc_0
+ 0
+ 0
+
+
+ gr_mpsk_receiver_cc_0
+ wxgui_scopesink2_1
+ 0
+ 0
+
+
+ gr_agc_xx_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ gr_mpsk_receiver_cc_0
+ gr_complex_to_real_0
+ 0
+ 0
+
+
+ gr_complex_to_real_0
+ gr_binary_slicer_fb_0
+ 0
+ 0
+
+
+ gr_binary_slicer_fb_0
+ gr_char_to_float_0
+ 0
+ 0
+
+
+ gr_char_to_float_0
+ gr_add_const_vxx_0
+ 0
+ 0
+
+
+ gr_add_const_vxx_0
+ gr_float_to_char_0
+ 0
+ 0
+
+
+ gr_float_to_char_0
+ gr_file_sink_0
+ 0
+ 0
+
+
diff --git a/gr-noaa/grc/usrp_rx_lrit.py b/gr-noaa/grc/usrp_rx_lrit.py
new file mode 100755
index 000000000..bc313e3af
--- /dev/null
+++ b/gr-noaa/grc/usrp_rx_lrit.py
@@ -0,0 +1,399 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: USRP LRIT Receiver
+# Generated: Sat Aug 29 11:26:03 2009
+##################################################
+
+from gnuradio import gr
+from gnuradio.eng_option import eng_option
+from gnuradio.wxgui import fftsink2
+from gnuradio.wxgui import forms
+from gnuradio.wxgui import numbersink2
+from gnuradio.wxgui import scopesink2
+from grc_gnuradio import blks2 as grc_blks2
+from grc_gnuradio import wxgui as grc_wxgui
+from optparse import OptionParser
+import ConfigParser
+import wx
+
+class usrp_rx_lrit(grc_wxgui.top_block_gui):
+
+ def __init__(self):
+ grc_wxgui.top_block_gui.__init__(self, title="USRP LRIT Receiver")
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.config_filename = config_filename = "usrp_rx_lrit.cfg"
+ self._saved_decim_config = ConfigParser.ConfigParser()
+ self._saved_decim_config.read(config_filename)
+ try: saved_decim = self._saved_decim_config.getint("main", "decim")
+ except: saved_decim = 160
+ self.saved_decim = saved_decim
+ self.decim = decim = saved_decim
+ self.symbol_rate = symbol_rate = 293e3
+ self._saved_gain_mu_config = ConfigParser.ConfigParser()
+ self._saved_gain_mu_config.read(config_filename)
+ try: saved_gain_mu = self._saved_gain_mu_config.getfloat("main", "gain_mu")
+ except: saved_gain_mu = 0.005
+ self.saved_gain_mu = saved_gain_mu
+ self._saved_gain_config = ConfigParser.ConfigParser()
+ self._saved_gain_config.read(config_filename)
+ try: saved_gain = self._saved_gain_config.getfloat("main", "gain")
+ except: saved_gain = 33
+ self.saved_gain = saved_gain
+ self._saved_freq_config = ConfigParser.ConfigParser()
+ self._saved_freq_config.read(config_filename)
+ try: saved_freq = self._saved_freq_config.getfloat("main", "freq")
+ except: saved_freq = 137e6
+ self.saved_freq = saved_freq
+ self._saved_costas_alpha_config = ConfigParser.ConfigParser()
+ self._saved_costas_alpha_config.read(config_filename)
+ try: saved_costas_alpha = self._saved_costas_alpha_config.getfloat("main", "costas_alpha")
+ except: saved_costas_alpha = 0.005
+ self.saved_costas_alpha = saved_costas_alpha
+ self.samp_rate = samp_rate = 64e6/decim
+ self.sps = sps = samp_rate/symbol_rate
+ self.gain_mu = gain_mu = saved_gain_mu
+ self.gain = gain = saved_gain
+ self.freq = freq = saved_freq
+ self.costas_alpha = costas_alpha = saved_costas_alpha
+
+ ##################################################
+ # Notebooks
+ ##################################################
+ self.displays = wx.Notebook(self.GetWin(), style=wx.NB_TOP)
+ self.displays.AddPage(grc_wxgui.Panel(self.displays), "USRP RX")
+ self.displays.AddPage(grc_wxgui.Panel(self.displays), "Costas Output")
+ self.GridAdd(self.displays, 2, 0, 1, 3)
+
+ ##################################################
+ # Controls
+ ##################################################
+ self._decim_text_box = forms.text_box(
+ parent=self.GetWin(),
+ value=self.decim,
+ callback=self.set_decim,
+ label="Decim",
+ converter=forms.int_converter(),
+ )
+ self.GridAdd(self._decim_text_box, 0, 0, 1, 1)
+ _gain_mu_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._gain_mu_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_gain_mu_sizer,
+ value=self.gain_mu,
+ callback=self.set_gain_mu,
+ label="Gain Mu",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._gain_mu_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_gain_mu_sizer,
+ value=self.gain_mu,
+ callback=self.set_gain_mu,
+ minimum=0,
+ maximum=0.5,
+ num_steps=100,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.GridAdd(_gain_mu_sizer, 1, 1, 1, 1)
+ _gain_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._gain_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_gain_sizer,
+ value=self.gain,
+ callback=self.set_gain,
+ label="Gain",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._gain_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_gain_sizer,
+ value=self.gain,
+ callback=self.set_gain,
+ minimum=0,
+ maximum=115,
+ num_steps=115,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.GridAdd(_gain_sizer, 0, 1, 1, 1)
+ _freq_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._freq_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_freq_sizer,
+ value=self.freq,
+ callback=self.set_freq,
+ label="Frequency",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._freq_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_freq_sizer,
+ value=self.freq,
+ callback=self.set_freq,
+ minimum=135e6,
+ maximum=139e6,
+ num_steps=400,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.GridAdd(_freq_sizer, 0, 2, 1, 1)
+ _costas_alpha_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._costas_alpha_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_costas_alpha_sizer,
+ value=self.costas_alpha,
+ callback=self.set_costas_alpha,
+ label="Costas Alpha",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._costas_alpha_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_costas_alpha_sizer,
+ value=self.costas_alpha,
+ callback=self.set_costas_alpha,
+ minimum=0,
+ maximum=0.5,
+ num_steps=100,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.GridAdd(_costas_alpha_sizer, 1, 0, 1, 1)
+
+ ##################################################
+ # Blocks
+ ##################################################
+ self.gr_add_const_vxx_0 = gr.add_const_vff((48.0, ))
+ self.gr_agc_xx_0 = gr.agc_cc(1e-6, 1.0, 1.0/32767.0, 1.0)
+ self.gr_binary_slicer_fb_0 = gr.binary_slicer_fb()
+ self.gr_char_to_float_0 = gr.char_to_float()
+ self.gr_complex_to_real_0 = gr.complex_to_real(1)
+ self.gr_file_sink_0 = gr.file_sink(gr.sizeof_char*1, "bits.dat")
+ self.gr_file_source_0 = gr.file_source(gr.sizeof_gr_complex*1, "lrit.dat", False)
+ self.gr_float_to_char_0 = gr.float_to_char()
+ self.gr_mpsk_receiver_cc_0 = gr.mpsk_receiver_cc(2, 0, costas_alpha, costas_alpha*costas_alpha/4.0, -0.05, 0.05, 0.5, gain_mu, sps, gain_mu*gain_mu/4.0, 0.05)
+ self.gr_probe_mpsk_snr_c_0 = grc_blks2.probe_mpsk_snr_c(
+ type='snr',
+ alpha=0.0001,
+ probe_rate=10,
+ )
+ self.gr_throttle_0 = gr.throttle(gr.sizeof_gr_complex*1, samp_rate)
+ self.wxgui_fftsink2_0 = fftsink2.fft_sink_c(
+ self.displays.GetPage(0).GetWin(),
+ baseband_freq=freq,
+ y_per_div=10,
+ y_divs=10,
+ ref_level=50,
+ sample_rate=samp_rate,
+ fft_size=1024,
+ fft_rate=30,
+ average=False,
+ avg_alpha=None,
+ title="Spectrum",
+ peak_hold=False,
+ )
+ self.displays.GetPage(0).GridAdd(self.wxgui_fftsink2_0.win, 0, 0, 1, 1)
+ self.wxgui_numbersink2_0 = numbersink2.number_sink_f(
+ self.displays.GetPage(1).GetWin(),
+ unit="dB",
+ minval=0,
+ maxval=30,
+ factor=1.0,
+ decimal_places=1,
+ ref_level=0,
+ sample_rate=10,
+ number_rate=10,
+ average=False,
+ avg_alpha=None,
+ label="SNR",
+ peak_hold=False,
+ show_gauge=True,
+ )
+ self.displays.GetPage(1).GridAdd(self.wxgui_numbersink2_0.win, 2, 0, 1, 1)
+ self.wxgui_scopesink2_0 = scopesink2.scope_sink_c(
+ self.displays.GetPage(0).GetWin(),
+ title="Waveform",
+ sample_rate=samp_rate,
+ v_scale=0.5,
+ t_scale=20.0/samp_rate,
+ ac_couple=False,
+ xy_mode=True,
+ num_inputs=1,
+ )
+ self.displays.GetPage(0).GridAdd(self.wxgui_scopesink2_0.win, 1, 0, 1, 1)
+ self.wxgui_scopesink2_1 = scopesink2.scope_sink_c(
+ self.displays.GetPage(1).GetWin(),
+ title="Scope Plot",
+ sample_rate=samp_rate,
+ v_scale=0.4,
+ t_scale=20.0/samp_rate,
+ ac_couple=False,
+ xy_mode=True,
+ num_inputs=1,
+ )
+ self.displays.GetPage(1).GridAdd(self.wxgui_scopesink2_1.win, 0, 0, 1, 1)
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.connect((self.gr_agc_xx_0, 0), (self.wxgui_scopesink2_0, 0))
+ self.connect((self.gr_file_source_0, 0), (self.gr_throttle_0, 0))
+ self.connect((self.gr_throttle_0, 0), (self.gr_agc_xx_0, 0))
+ self.connect((self.gr_probe_mpsk_snr_c_0, 0), (self.wxgui_numbersink2_0, 0))
+ self.connect((self.gr_mpsk_receiver_cc_0, 0), (self.gr_probe_mpsk_snr_c_0, 0))
+ self.connect((self.gr_agc_xx_0, 0), (self.gr_mpsk_receiver_cc_0, 0))
+ self.connect((self.gr_mpsk_receiver_cc_0, 0), (self.wxgui_scopesink2_1, 0))
+ self.connect((self.gr_agc_xx_0, 0), (self.wxgui_fftsink2_0, 0))
+ self.connect((self.gr_mpsk_receiver_cc_0, 0), (self.gr_complex_to_real_0, 0))
+ self.connect((self.gr_complex_to_real_0, 0), (self.gr_binary_slicer_fb_0, 0))
+ self.connect((self.gr_binary_slicer_fb_0, 0), (self.gr_char_to_float_0, 0))
+ self.connect((self.gr_char_to_float_0, 0), (self.gr_add_const_vxx_0, 0))
+ self.connect((self.gr_add_const_vxx_0, 0), (self.gr_float_to_char_0, 0))
+ self.connect((self.gr_float_to_char_0, 0), (self.gr_file_sink_0, 0))
+
+ def set_config_filename(self, config_filename):
+ self.config_filename = config_filename
+ self._saved_decim_config = ConfigParser.ConfigParser()
+ self._saved_decim_config.read(self.config_filename)
+ if not self._saved_decim_config.has_section("main"):
+ self._saved_decim_config.add_section("main")
+ self._saved_decim_config.set("main", "decim", str(self.decim))
+ self._saved_decim_config.write(open(self.config_filename, 'w'))
+ self._saved_gain_config = ConfigParser.ConfigParser()
+ self._saved_gain_config.read(self.config_filename)
+ if not self._saved_gain_config.has_section("main"):
+ self._saved_gain_config.add_section("main")
+ self._saved_gain_config.set("main", "gain", str(self.gain))
+ self._saved_gain_config.write(open(self.config_filename, 'w'))
+ self._saved_freq_config = ConfigParser.ConfigParser()
+ self._saved_freq_config.read(self.config_filename)
+ if not self._saved_freq_config.has_section("main"):
+ self._saved_freq_config.add_section("main")
+ self._saved_freq_config.set("main", "freq", str(self.freq))
+ self._saved_freq_config.write(open(self.config_filename, 'w'))
+ self._saved_costas_alpha_config = ConfigParser.ConfigParser()
+ self._saved_costas_alpha_config.read(self.config_filename)
+ if not self._saved_costas_alpha_config.has_section("main"):
+ self._saved_costas_alpha_config.add_section("main")
+ self._saved_costas_alpha_config.set("main", "costas_alpha", str(self.costas_alpha))
+ self._saved_costas_alpha_config.write(open(self.config_filename, 'w'))
+ self._saved_gain_mu_config = ConfigParser.ConfigParser()
+ self._saved_gain_mu_config.read(self.config_filename)
+ if not self._saved_gain_mu_config.has_section("main"):
+ self._saved_gain_mu_config.add_section("main")
+ self._saved_gain_mu_config.set("main", "gain_mu", str(self.gain_mu))
+ self._saved_gain_mu_config.write(open(self.config_filename, 'w'))
+
+ def set_saved_decim(self, saved_decim):
+ self.saved_decim = saved_decim
+ self.set_decim(self.saved_decim)
+
+ def set_decim(self, decim):
+ self.decim = decim
+ self.set_samp_rate(64e6/self.decim)
+ self._decim_text_box.set_value(self.decim)
+ self._saved_decim_config = ConfigParser.ConfigParser()
+ self._saved_decim_config.read(self.config_filename)
+ if not self._saved_decim_config.has_section("main"):
+ self._saved_decim_config.add_section("main")
+ self._saved_decim_config.set("main", "decim", str(self.decim))
+ self._saved_decim_config.write(open(self.config_filename, 'w'))
+
+ def set_symbol_rate(self, symbol_rate):
+ self.symbol_rate = symbol_rate
+ self.set_sps(self.samp_rate/self.symbol_rate)
+
+ def set_saved_gain_mu(self, saved_gain_mu):
+ self.saved_gain_mu = saved_gain_mu
+ self.set_gain_mu(self.saved_gain_mu)
+
+ def set_saved_gain(self, saved_gain):
+ self.saved_gain = saved_gain
+ self.set_gain(self.saved_gain)
+
+ def set_saved_freq(self, saved_freq):
+ self.saved_freq = saved_freq
+ self.set_freq(self.saved_freq)
+
+ def set_saved_costas_alpha(self, saved_costas_alpha):
+ self.saved_costas_alpha = saved_costas_alpha
+ self.set_costas_alpha(self.saved_costas_alpha)
+
+ def set_samp_rate(self, samp_rate):
+ self.samp_rate = samp_rate
+ self.set_sps(self.samp_rate/self.symbol_rate)
+ self.wxgui_scopesink2_0.set_sample_rate(self.samp_rate)
+ self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate)
+ self.wxgui_scopesink2_1.set_sample_rate(self.samp_rate)
+
+ def set_sps(self, sps):
+ self.sps = sps
+ self.gr_mpsk_receiver_cc_0.set_omega(self.sps)
+
+ def set_gain_mu(self, gain_mu):
+ self.gain_mu = gain_mu
+ self.gr_mpsk_receiver_cc_0.set_gain_mu(self.gain_mu)
+ self.gr_mpsk_receiver_cc_0.set_gain_omega(self.gain_mu*self.gain_mu/4.0)
+ self._saved_gain_mu_config = ConfigParser.ConfigParser()
+ self._saved_gain_mu_config.read(self.config_filename)
+ if not self._saved_gain_mu_config.has_section("main"):
+ self._saved_gain_mu_config.add_section("main")
+ self._saved_gain_mu_config.set("main", "gain_mu", str(self.gain_mu))
+ self._saved_gain_mu_config.write(open(self.config_filename, 'w'))
+ self._gain_mu_slider.set_value(self.gain_mu)
+ self._gain_mu_text_box.set_value(self.gain_mu)
+
+ def set_gain(self, gain):
+ self.gain = gain
+ self._gain_slider.set_value(self.gain)
+ self._gain_text_box.set_value(self.gain)
+ self._saved_gain_config = ConfigParser.ConfigParser()
+ self._saved_gain_config.read(self.config_filename)
+ if not self._saved_gain_config.has_section("main"):
+ self._saved_gain_config.add_section("main")
+ self._saved_gain_config.set("main", "gain", str(self.gain))
+ self._saved_gain_config.write(open(self.config_filename, 'w'))
+
+ def set_freq(self, freq):
+ self.freq = freq
+ self.wxgui_fftsink2_0.set_baseband_freq(self.freq)
+ self._freq_slider.set_value(self.freq)
+ self._freq_text_box.set_value(self.freq)
+ self._saved_freq_config = ConfigParser.ConfigParser()
+ self._saved_freq_config.read(self.config_filename)
+ if not self._saved_freq_config.has_section("main"):
+ self._saved_freq_config.add_section("main")
+ self._saved_freq_config.set("main", "freq", str(self.freq))
+ self._saved_freq_config.write(open(self.config_filename, 'w'))
+
+ def set_costas_alpha(self, costas_alpha):
+ self.costas_alpha = costas_alpha
+ self.gr_mpsk_receiver_cc_0.set_alpha(self.costas_alpha)
+ self.gr_mpsk_receiver_cc_0.set_beta(self.costas_alpha*self.costas_alpha/4.0)
+ self._costas_alpha_slider.set_value(self.costas_alpha)
+ self._costas_alpha_text_box.set_value(self.costas_alpha)
+ self._saved_costas_alpha_config = ConfigParser.ConfigParser()
+ self._saved_costas_alpha_config.read(self.config_filename)
+ if not self._saved_costas_alpha_config.has_section("main"):
+ self._saved_costas_alpha_config.add_section("main")
+ self._saved_costas_alpha_config.set("main", "costas_alpha", str(self.costas_alpha))
+ self._saved_costas_alpha_config.write(open(self.config_filename, 'w'))
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+ (options, args) = parser.parse_args()
+ tb = usrp_rx_lrit()
+ tb.Run(True)
+
--
cgit