From: Johnathan Corgan Date: Sat, 15 Aug 2009 19:30:45 +0000 (-0700) Subject: Created new gr-noaa top-level component. X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=b6101982e270948b4a3185ee745ed76bb8661552;p=debian%2Fgnuradio Created new gr-noaa top-level component. Initial work: - Carrier recovery/mixer PLL block - Start of POES grc pipeline, recovers Manchester symbols only - Start of GOES grc pipeline, recovers BPSK symbols only --- diff --git a/config/Makefile.am b/config/Makefile.am index d6a3ad39..3aead353 100644 --- a/config/Makefile.am +++ b/config/Makefile.am @@ -61,6 +61,7 @@ m4macros = \ grc_gr_gcell.m4 \ grc_gr_gpio.m4 \ grc_gr_gsm_fr_vocoder.m4 \ + grc_gr_noaa.m4 \ grc_gr_radar_mono.m4 \ grc_gr_radio_astronomy.m4 \ grc_gr_sounder.m4 \ diff --git a/config/grc_gr_noaa.m4 b/config/grc_gr_noaa.m4 new file mode 100644 index 00000000..260d8d06 --- /dev/null +++ b/config/grc_gr_noaa.m4 @@ -0,0 +1,37 @@ +dnl Copyright 2009 Free Software Foundation, Inc. +dnl +dnl This file is part of GNU Radio +dnl +dnl GNU Radio is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3, or (at your option) +dnl any later version. +dnl +dnl GNU Radio is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with GNU Radio; see the file COPYING. If not, write to +dnl the Free Software Foundation, Inc., 51 Franklin Street, +dnl Boston, MA 02110-1301, USA. + +AC_DEFUN([GRC_GR_NOAA],[ + GRC_ENABLE(gr-noaa) + + dnl Don't do gr-noaa if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-noaa, gnuradio-core) + + AC_CONFIG_FILES([\ + gr-noaa/Makefile \ + gr-noaa/grc/Makefile \ + gr-noaa/lib/Makefile \ + gr-noaa/swig/Makefile \ + ]) + + GRC_BUILD_CONDITIONAL(gr-noaa,[ + dnl run_tests is created from run_tests.in. Make it executable. + #AC_CONFIG_COMMANDS([run_tests_noaa], [chmod +x gr-pager/lib/run_tests]) + ]) +]) diff --git a/configure.ac b/configure.ac index 2bb37935..6924a646 100644 --- a/configure.ac +++ b/configure.ac @@ -352,6 +352,7 @@ GRC_GR_COMEDI GRC_GR_CVSD_VOCODER GRC_GR_GPIO GRC_GR_GSM_FR_VOCODER +GRC_GR_NOAA GRC_GR_PAGER GRC_GR_RADAR_MONO GRC_GR_RADIO_ASTRONOMY diff --git a/gr-noaa/.gitignore b/gr-noaa/.gitignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/gr-noaa/.gitignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/gr-noaa/Makefile.am b/gr-noaa/Makefile.am new file mode 100644 index 00000000..fa03f108 --- /dev/null +++ b/gr-noaa/Makefile.am @@ -0,0 +1,31 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = lib + +if PYTHON +SUBDIRS += swig +endif + +SUBDIRS += grc + diff --git a/gr-noaa/grc/.gitignore b/gr-noaa/grc/.gitignore new file mode 100644 index 00000000..70845e08 --- /dev/null +++ b/gr-noaa/grc/.gitignore @@ -0,0 +1 @@ +Makefile.in diff --git a/gr-noaa/grc/Makefile.am b/gr-noaa/grc/Makefile.am new file mode 100644 index 00000000..18144040 --- /dev/null +++ b/gr-noaa/grc/Makefile.am @@ -0,0 +1,30 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +grcblocksdir = $(prefix)/share/gnuradio/grc/blocks +dist_grcblocks_DATA = \ + noaa_carrier_pll_cc.xml + +EXTRA_DIST = \ + rx_goes.grc \ + rx_poes.grc diff --git a/gr-noaa/grc/noaa_carrier_pll_cc.xml b/gr-noaa/grc/noaa_carrier_pll_cc.xml new file mode 100644 index 00000000..7b1fdc8f --- /dev/null +++ b/gr-noaa/grc/noaa_carrier_pll_cc.xml @@ -0,0 +1,34 @@ + + + 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/rx_goes.grc b/gr-noaa/grc/rx_goes.grc new file mode 100755 index 00000000..ebd21da4 --- /dev/null +++ b/gr-noaa/grc/rx_goes.grc @@ -0,0 +1,1454 @@ + + + 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 new file mode 100755 index 00000000..f3a483e6 --- /dev/null +++ b/gr-noaa/grc/rx_poes.grc @@ -0,0 +1,845 @@ + + + Sun Aug 9 17:39:05 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 + + + + variable + + id + mf_taps + + + _enabled + True + + + value + [0.5/hs,]*hs+[-0.5/hs,]*hs + + + _coordinate + (573, 15) + + + _rotation + 0 + + + + notebook + + id + displays + + + _enabled + True + + + style + wx.NB_TOP + + + labels + ['RX','Manchester'] + + + grid_pos + 1, 0, 1, 1 + + + notebook + + + + _coordinate + (9, 99) + + + _rotation + 0 + + + + gr_throttle + + id + throttle + + + _enabled + True + + + type + complex + + + samples_per_second + sample_rate + + + vlen + 1 + + + _coordinate + (79, 518) + + + _rotation + 0 + + + + import + + id + import_0 + + + _enabled + True + + + import + import math + + + _coordinate + (9, 202) + + + _rotation + 0 + + + + gr_file_source + + id + src + + + _enabled + True + + + file + /home/jcorgan/test/poes/poes-d16.dat + + + type + complex + + + repeat + True + + + vlen + 1 + + + _coordinate + (34, 423) + + + _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 + (438, 612) + + + _rotation + 0 + + + + variable + + id + max_offset + + + _enabled + True + + + value + 2*math.pi*100e3/sample_rate + + + _coordinate + (307, 93) + + + _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 + (438, 244) + + + _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 + (270, 494) + + + _rotation + 0 + + + + wxgui_fftsink2 + + id + rx_fftsink_0 + + + _enabled + True + + + type + float + + + title + Baseband Spectrum + + + samp_rate + sample_rate + + + baseband_freq + 0 + + + y_per_div + 10 + + + y_divs + 8 + + + ref_level + 10 + + + fft_size + 1024 + + + fft_rate + 30 + + + peak_hold + False + + + average + True + + + avg_alpha + 0.1 + + + grid_pos + 0, 0, 1, 1 + + + notebook + displays, 1 + + + _coordinate + (1069, 243) + + + _rotation + 0 + + + + wxgui_scopesink2 + + id + wxgui_scopesink2_0_0 + + + _enabled + True + + + type + float + + + title + Baseband 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, 1 + + + _coordinate + (1069, 624) + + + _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 + (437, 502) + + + _rotation + 0 + + + + gr_complex_to_imag + + id + gr_complex_to_imag_0 + + + _enabled + True + + + vlen + 1 + + + _coordinate + (866, 522) + + + _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 + (157, 94) + + + _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 + (645, 502) + + + _rotation + 0 + + + + agr + wxgui_scopesink2_0 + 0 + 0 + + + agr + rx_fftsink + 0 + 0 + + + throttle + agr + 0 + 0 + + + src + throttle + 0 + 0 + + + agr + gr_moving_average_xx_0 + 0 + 0 + + + gr_complex_to_imag_0 + rx_fftsink_0 + 0 + 0 + + + gr_complex_to_imag_0 + wxgui_scopesink2_0_0 + 0 + 0 + + + gr_moving_average_xx_0 + noaa_carrier_pll_cc_0 + 0 + 0 + + + noaa_carrier_pll_cc_0 + gr_complex_to_imag_0 + 0 + 0 + + diff --git a/gr-noaa/lib/.gitignore b/gr-noaa/lib/.gitignore new file mode 100644 index 00000000..02b05239 --- /dev/null +++ b/gr-noaa/lib/.gitignore @@ -0,0 +1,4 @@ +Makefile +Makefile.in +.deps +.libs diff --git a/gr-noaa/lib/Makefile.am b/gr-noaa/lib/Makefile.am new file mode 100644 index 00000000..39a4f115 --- /dev/null +++ b/gr-noaa/lib/Makefile.am @@ -0,0 +1,40 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_INCLUDES) + +lib_LTLIBRARIES = \ + libgnuradio-noaa.la + +libgnuradio_noaa_la_SOURCES = \ + noaa_carrier_pll_cc.cc + +libgnuradio_noaa_la_LIBADD = \ + $(GNURADIO_CORE_LA) + +libgnuradio_noaa_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 + +grinclude_HEADERS = \ + noaa_carrier_pll_cc.h diff --git a/gr-noaa/lib/noaa_carrier_pll_cc.cc b/gr-noaa/lib/noaa_carrier_pll_cc.cc new file mode 100644 index 00000000..d6a86faa --- /dev/null +++ b/gr-noaa/lib/noaa_carrier_pll_cc.cc @@ -0,0 +1,82 @@ +/* -*- 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#define M_TWOPI (2*M_PI) + +noaa_carrier_pll_cc_sptr +noaa_make_carrier_pll_cc(float alpha, float beta, float max_offset) +{ + return gnuradio::get_initial_sptr(new noaa_carrier_pll_cc(alpha, beta, max_offset)); +} + +noaa_carrier_pll_cc::noaa_carrier_pll_cc(float alpha, float beta, float max_offset) + : gr_sync_block("noaa_carrier_pll_cc", + gr_make_io_signature(1, 1, sizeof(gr_complex)), + gr_make_io_signature(1, 1, sizeof(gr_complex))), + d_alpha(alpha), d_beta(beta), d_max_offset(max_offset), + d_phase(0.0), d_freq(0.0) +{ +} + +float +phase_wrap(float phase) +{ + while (phase < -M_PI) + phase += M_TWOPI; + while (phase > M_PI) + phase -= M_TWOPI; + + return phase; +} + +int +noaa_carrier_pll_cc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) { + + // Adjust PLL phase/frequency + float error = phase_wrap(gr_fast_atan2f(in[i].imag(), in[i].real()) - d_phase); + d_freq = gr_branchless_clip(d_freq + error*d_beta, d_max_offset); + d_phase = phase_wrap(d_phase + error*d_alpha + d_freq); + + // Generate and mix out carrier + float re, im; + gr_sincosf(d_phase, &im, &re); + out[i] = in[i]*gr_complex(re, -im); + } + + return noutput_items; +} diff --git a/gr-noaa/lib/noaa_carrier_pll_cc.h b/gr-noaa/lib/noaa_carrier_pll_cc.h new file mode 100644 index 00000000..8e6de866 --- /dev/null +++ b/gr-noaa/lib/noaa_carrier_pll_cc.h @@ -0,0 +1,55 @@ +/* -*- 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_CARRIER_PLL_CC_H +#define INCLUDED_NOAA_CARRIER_PLL_CC_H + +#include + +class noaa_carrier_pll_cc; +typedef boost::shared_ptr noaa_carrier_pll_cc_sptr; + +noaa_carrier_pll_cc_sptr +noaa_make_carrier_pll_cc(float alpha, float beta, float max_offset); + +class noaa_carrier_pll_cc : public gr_sync_block +{ + friend noaa_carrier_pll_cc_sptr noaa_make_carrier_pll_cc(float alpha, float beta, float max_offset); + noaa_carrier_pll_cc(float alpha, float beta, float max_offset); + + float d_alpha; // 1st order loop constant + float d_beta; // 2nd order loop constant + float d_max_offset; // Maximum frequency offset, radians/sample + float d_phase; // Instantaneous carrier phase + float d_freq; // Instantaneous carrier frequency, radians/sample + + public: + virtual int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + void set_alpha(float alpha) { d_alpha = alpha; } + void set_beta(float beta) { d_beta = beta; } + void set_max_offset(float max_offset) { d_max_offset = max_offset; } +}; + +#endif /* INCLUDED_NOAA_CARRIER_PLL_CC_H */ diff --git a/gr-noaa/swig/.gitignore b/gr-noaa/swig/.gitignore new file mode 100644 index 00000000..d18a966d --- /dev/null +++ b/gr-noaa/swig/.gitignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.deps +.libs +noaa_swig.cc +noaa_swig.py diff --git a/gr-noaa/swig/Makefile.am b/gr-noaa/swig/Makefile.am new file mode 100644 index 00000000..927c6cfb --- /dev/null +++ b/gr-noaa/swig/Makefile.am @@ -0,0 +1,65 @@ +# +# Copyright 2004,2005,2006,2008,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. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = \ + $(STD_DEFINES_AND_INCLUDES) \ + $(PYTHON_CPPFLAGS) \ + $(WITH_INCLUDES) \ + -I$(top_srcdir)/gr-noaa/lib + +if PYTHON +# ---------------------------------------------------------------- +# The SWIG library +# TESTS = run_tests + +TOP_SWIG_IFILES = \ + noaa_swig.i + +# Install so that they end up available as: +# import gnuradio.noaa +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/noaa +noaa_swig_pythondir_category = \ + gnuradio/noaa + +# additional libraries for linking with the SWIG-generated library +noaa_swig_la_swig_libadd = \ + $(top_builddir)/gr-noaa/lib/libgnuradio-noaa.la + +# additional Python files to be installed along with the SWIG-generated one +noaa_swig_python = \ + __init__.py + +# additional SWIG files to be installed +noaa_swig_swiginclude_headers = \ + noaa_swig.i \ + noaa_carrier_pll_cc.i + +include $(top_srcdir)/Makefile.swig + +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) + +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) +endif diff --git a/gr-noaa/swig/Makefile.swig.gen b/gr-noaa/swig/Makefile.swig.gen new file mode 100644 index 00000000..3d7102fe --- /dev/null +++ b/gr-noaa/swig/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- Makefile -*- +# +# 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. +# + +# Makefile.swig.gen for noaa_swig.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/noaa_swig +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/noaa_swig +## +## The following can be overloaded to change the install location, but +## this has to be done in the including Makefile.am -before- +## Makefile.swig is included. + +noaa_swig_pythondir_category ?= gnuradio/noaa_swig +noaa_swig_pylibdir_category ?= $(noaa_swig_pythondir_category) +noaa_swig_pythondir = $(pythondir)/$(noaa_swig_pythondir_category) +noaa_swig_pylibdir = $(pyexecdir)/$(noaa_swig_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +noaa_swig_swigincludedir = $(swigincludedir) + +## This is a template file for a "generated" Makefile addition (in +## this case, "Makefile.swig.gen"). By including the top-level +## Makefile.swig, this file will be used to generate the SWIG +## dependencies. Assign the variable TOP_SWIG_FILES to be the list of +## SWIG .i files to generated wrappings for; there can be more than 1 +## so long as the names are unique (no sorting is done on the +## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i +## file will generate .cc, .py, and possibly .h files -- meaning that +## all of these files will have the same base name (that provided for +## the SWIG .i file). +## +## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the +## right thing. For more info, see < +## http://sources.redhat.com/automake/automake.html#Multiple-Outputs > + +## Stamps used to ensure parallel make does the right thing. These +## are removed by "make clean", but otherwise unused except during the +## parallel built. These will not be included in a tarball, because +## the SWIG-generated files will be removed from the distribution. + +STAMPS += $(DEPDIR)/noaa_swig-generate-* + +## Other cleaned files: dependency files generated by SWIG or this Makefile + +MOSTLYCLEANFILES += $(DEPDIR)/*.S* + +## Add the .py and .cc files to the list of SWIG built sources. The +## .h file is sometimes built, but not always ... so that one has to +## be added manually by the including Makefile.am . + +swig_built_sources += noaa_swig.py noaa_swig.cc + +## Various SWIG variables. These can be overloaded in the including +## Makefile.am by setting the variable value there, then including +## Makefile.swig . + +noaa_swig_swiginclude_HEADERS = \ + noaa_swig.i \ + $(noaa_swig_swiginclude_headers) + +noaa_swig_pylib_LTLIBRARIES = \ + _noaa_swig.la + +_noaa_swig_la_SOURCES = \ + noaa_swig.cc \ + $(noaa_swig_la_swig_sources) + +_noaa_swig_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(noaa_swig_la_swig_libadd) + +_noaa_swig_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(noaa_swig_la_swig_ldflags) + +_noaa_swig_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(noaa_swig_la_swig_cxxflags) + +noaa_swig_python_PYTHON = \ + noaa_swig.py \ + $(noaa_swig_python) + +## Entry rule for running SWIG + +noaa_swig.h noaa_swig.py noaa_swig.cc: noaa_swig.i +## This rule will get called only when MAKE decides that one of the +## targets needs to be created or re-created, because: +## +## * The .i file is newer than any or all of the generated files; +## +## * Any or all of the .cc, .h, or .py files does not exist and is +## needed (in the case this file is not needed, the rule for it is +## ignored); or +## +## * Some SWIG-based dependecy of the .cc file isn't met and hence the +## .cc file needs be be regenerated. Explanation: Because MAKE +## knows how to handle dependencies for .cc files (regardless of +## their name or extension), then the .cc file is used as a target +## instead of the .i file -- but with the dependencies of the .i +## file. It is this last reason why the line: +## +## if test -f $@; then :; else +## +## cannot be used in this case: If a .i file dependecy is not met, +## then the .cc file needs to be rebuilt. But if the stamp is newer +## than the .cc file, and the .cc file exists, then in the original +## version (with the 'test' above) the internal MAKE call will not +## be issued and hence the .cc file will not be rebuilt. +## +## Once execution gets to here, it should always proceed no matter the +## state of a stamp (as discussed in link above). The +## $(DEPDIR)/noaa_swig-generate stuff is used to allow for parallel +## builds to "do the right thing". The stamp has no relationship with +## either the target files or dependency file; it is used solely for +## the protection of multiple builds during a given call to MAKE. +## +## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM +## (15). At a caught signal, the quoted command will be issued before +## exiting. In this case, remove any stamp, whether temporary of not. +## The trap is valid until the process exits; the process includes all +## commands appended via "\"s. +## + trap 'rm -rf $(DEPDIR)/noaa_swig-generate-*' 1 2 13 15; \ +## +## Create a temporary directory, which acts as a lock. The first +## process to create the directory will succeed and issue the MAKE +## command to do the actual work, while all subsequent processes will +## fail -- leading them to wait for the first process to finish. +## + if mkdir $(DEPDIR)/noaa_swig-generate-lock 2>/dev/null; then \ +## +## This code is being executed by the first process to succeed in +## creating the directory lock. +## +## Remove the stamp associated with this filename. +## + rm -f $(DEPDIR)/noaa_swig-generate-stamp; \ +## +## Tell MAKE to run the rule for creating this stamp. +## + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/noaa_swig-generate-stamp WHAT=$<; \ +## +## Now that the .cc, .h, and .py files have been (re)created from the +## .i file, future checking of this rule during the same MAKE +## execution will come back that the rule doesn't need to be executed +## because none of the conditions mentioned at the start of this rule +## will be positive. Remove the the directory lock, which frees up +## any waiting process(es) to continue. +## + rmdir $(DEPDIR)/noaa_swig-generate-lock; \ + else \ +## +## This code is being executed by any follower processes while the +## directory lock is in place. +## +## Wait until the first process is done, testing once per second. +## + while test -d $(DEPDIR)/noaa_swig-generate-lock; do \ + sleep 1; \ + done; \ +## +## Succeed if and only if the first process succeeded; exit this +## process returning the status of the generated stamp. +## + test -f $(DEPDIR)/noaa_swig-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/noaa_swig-generate-stamp: +## This rule will be called only by the first process issuing the +## above rule to succeed in creating the lock directory, after +## removing the actual stamp file in order to guarantee that MAKE will +## execute this rule. +## +## Call SWIG to generate the various output files; special +## post-processing on 'mingw32' host OS for the dependency file. +## + if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(noaa_swig_swig_args) \ + -MD -MF $(DEPDIR)/noaa_swig.Std \ + -module noaa_swig -o noaa_swig.cc $(WHAT); then \ + if test $(host_os) = mingw32; then \ + $(RM) $(DEPDIR)/noaa_swig.Sd; \ + $(SED) 's,\\\\,/,g' < $(DEPDIR)/noaa_swig.Std \ + > $(DEPDIR)/noaa_swig.Sd; \ + $(RM) $(DEPDIR)/noaa_swig.Std; \ + $(MV) $(DEPDIR)/noaa_swig.Sd $(DEPDIR)/noaa_swig.Std; \ + fi; \ + else \ + $(RM) $(DEPDIR)/noaa_swig.S*; exit 1; \ + fi; +## +## Mess with the SWIG output .Std dependency file, to create a +## dependecy file valid for the input .i file: Basically, simulate the +## dependency file created for libraries by GNU's libtool for C++, +## where all of the dependencies for the target are first listed, then +## each individual dependency is listed as a target with no further +## dependencies. +## +## (1) remove the current dependency file +## + $(RM) $(DEPDIR)/noaa_swig.d +## +## (2) Copy the whole SWIG file: +## + cp $(DEPDIR)/noaa_swig.Std $(DEPDIR)/noaa_swig.d +## +## (3) all a carriage return to the end of the dependency file. +## + echo "" >> $(DEPDIR)/noaa_swig.d +## +## (4) from the SWIG file, remove the first line (the target); remove +## trailing " \" and " " from each line. Append ":" to each line, +## followed by 2 carriage returns, then append this to the end of +## the dependency file. +## + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/noaa_swig.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/noaa_swig.d +## +## (5) remove the SWIG-generated file +## + $(RM) $(DEPDIR)/noaa_swig.Std +## +## Create the stamp for this filename generation, to signal success in +## executing this rule; allows other threads waiting on this process +## to continue. +## + touch $(DEPDIR)/noaa_swig-generate-stamp + +# KLUDGE: Force runtime include of a SWIG dependency file. This is +# not guaranteed to be portable, but will probably work. If it works, +# we have accurate dependencies for our swig stuff, which is good. + +@am__include@ @am__quote@./$(DEPDIR)/noaa_swig.d@am__quote@ + diff --git a/gr-noaa/swig/__init__.py b/gr-noaa/swig/__init__.py new file mode 100644 index 00000000..d8d337e6 --- /dev/null +++ b/gr-noaa/swig/__init__.py @@ -0,0 +1,28 @@ +# +# 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. +# + +# The presence of this file turns this directory into a Python package + +# Add SWIG generated code to this namespace +from noaa_swig import * + +# Add other content from pure-Python modules here + diff --git a/gr-noaa/swig/noaa_carrier_pll_cc.i b/gr-noaa/swig/noaa_carrier_pll_cc.i new file mode 100644 index 00000000..4d61f393 --- /dev/null +++ b/gr-noaa/swig/noaa_carrier_pll_cc.i @@ -0,0 +1,37 @@ +/* -*- 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. + */ + +GR_SWIG_BLOCK_MAGIC(noaa,carrier_pll_cc) + +noaa_carrier_pll_cc_sptr +noaa_make_carrier_pll_cc(float alpha, float beta, float max_offset); + +class noaa_carrier_pll_cc : public gr_sync_block +{ +private: + noaa_carrier_pll_cc(); + +public: + void set_alpha(float alpha); + void set_beta(float beta); + void set_max_offset(float min_freq); +}; diff --git a/gr-noaa/swig/noaa_swig.i b/gr-noaa/swig/noaa_swig.i new file mode 100644 index 00000000..384f4e6a --- /dev/null +++ b/gr-noaa/swig/noaa_swig.i @@ -0,0 +1,29 @@ +/* -*- 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. + */ + +%include "gnuradio.i" + +%{ +#include +%} + +%include "noaa_carrier_pll_cc.i"