ChangeSets

Version 23 (Tom Rondeau, 11/30/2011 02:15 pm) → Version 24/35 (Tom Rondeau, 12/14/2011 02:14 am)

h1. ChangeSets: API and Code Changes between Versions

h2. Version 3.5

h3. New Build Tool: CMake

GNU Radio is working to move away from the use of autotools and instead use cmake. Version 3.5 will have a parallel build of both systems while we make this switch. Cmake will be the default and preferred build, but anyone having issues getting it to work can fall back on using autotools.

Using cmake:

<pre>
mkdir build ; cd build
cmake [OPTIONS] ../
make [-jN]
make test
sudo make install
</pre>

The optional OPTIONS can be things like passing specific directories to locations of dependencies (like QWT, which may be installed in a non-standard place) or to turn components on of off. By default all components are enabled. To disable, use -DENABLE_COMPONENT=On/Off/True/False/Force, where COMPONENT is the directory name in all caps, like gr-qtgui becomes GR_QTGUI.

See [[CMakeWork]] for more details.

The old autotools way where $(top_srcdir) is the directory where the source is located and $(top_builddir) is where you want to build everything (they can be the same).

<pre>
cd $(top_srcdir)
./bootstrap
cd $(top_builddir)
$(top_srcdir)/configure [OPTIONS]
make [-jN]
make check
sudo make install
</pre>

h3. VOLK is a required component

The Volk component has been available for a while in GNU Radio but nothing inside has made use of it. That is changing with 3.5. Volk is now a requirement for GNU Radio blocks. Blocks inside gnuradio-core will start to use Volk functions, which will make it absolutely depend on Volk being built, much like the gruel package.

h3. New Documentation Directory

All new components must have a *doc* directory that contains a README that provides a basic overview of the component and a Doxygen-formatted main page that gives more detail, which is then build into the Doxygen manual. The Doxygen files are named component.dox, where 'component' is the name of that component. See gr-qtgui/doc/qtgui.dox for an example of this file.

h3. Digital Modulation

We are separating the digital modulation-specific blocks from gnuradio-core into their own top-level directory _gr-digital_. This creates a new *gnuradio* module in Python called *digital* that can be accessed as:

@from gnuradio import digital@

Many blocks have been moved from gnuradio-core and others have been removed completely as they were obsolete or duplicated elsewhere.

h4. New Blocks

* [[ChangeLogV3_6|Version 3.6]] digital_constellation_decoder_cb
* [[ChangeLogV3_5|Version 3.5]] digital_constellation
* digital_constellation_receiver_cb
* digital_cpmmod_bc
* digital_gmskmod_bc
* python/bpsk.py
* python/qpsk.py
* python/generic_mod_demod.py
* python/qam.py
* /python/utils/alignment.py
* /python/utils/gray_code.py
* /python/utils/mod_codes.py

h4. Moved Blocks

* digital_binary_slicer_fb
* digital_clock_recovery_mm_cc
* digital_clock_recovery_mm_ff
* digital_cma_equalizer_cc
* digital_correlate_access_code_bb
* digital_costas_loop_cc
* digital_crc32
* digital_fll_band_edge_cc
* digital_kurtotic_equalizer_cc
* digital_lms_dd_equalizer_cc
* digital_mpsk_receiver_cc (superseded in new blocks; may be removed)
* digital_ofdm_frame_acquisition
* digital_ofdm_frame_sink
* digital_ofdm_insert_preamble
* digital_ofdm_mapper_bcv
* digital_ofdm_sampler
* python/cpm.py
* python/gmsk.py
* python/crc.py
* python/modulation_utils.py (replaces modulation_utils2)
* python/ofdm_packet_utils.py
* python/ofdm.py
* python/ofdm_receiver.py
* python/ofdm_sync_fixed.py
* python/ofdm_sync_ml.py
* python/ofdm_sync_pnac.py
* python/ofdm_sync_pn.py
* python/packet_utils.py
* python/pkt.py
* python/psk.py

h4. Removed Blocks

* python/dbpsk.py
* python/dbpsk2.py
* python/dqpsk.py
* python/dqpsk2.py
* python/d8psk.py
* python/d8psk2.py

The dXpsk(2).py blocks have been replaced by the Xpsk.py blocks that allow both differential and non-differential operation. Use of dbspk in the past is now accessed through bpsk with --differential (on by default).

The files modulation_utils2.py and pkt2.py have been replaced with modulation_utils.py and pkt.py.

h3. Control Loops

All blocks that use a second-order control loop to track a phase and frequency are being replaced to inherit from the gri_control_loop parent class. This class takes care of setting the gains given a loop bandwidth and damping frequency. By default, it sets the damping frequency for a critically damped system so only the loop bandwidth is required. The constructor looks like:

@gri_control_loop(float loop_bw, float max_freq, float min_freq);@

All blocks that have this structure used to set the internal alpha and beta gains individually. Now, the constructors for their blocks have been replaced to accept the loop bandwidth instead of the two gains. All values, the loop bandwidth, damping factor, alpha, beta, current phase, and current frequency can all be retrieved (get_) and set (set_).

This affects the following blocks:
* gr_pll_carrier_tracking_cc
* gr_pll_freqdet_cf
* gr_pll_refout_cc
* *gr_pfb_clock_sync_ccf* (TBD)
* *gr_pfb_clock_sync_fff* (TBD)
* digital_costas_loop_cc
* digital_constellation_receiver_cb
* digital_mpsk_receiver_cc
* digital_fll_band_edge_cc

h3. Removing USRP and USRP2 libraries

All USRP-related activity is done using the Ettus Research UHD code (http://code.ettus.com/redmine/ettus/projects/uhd/wiki). The firmware and drivers are now provided by Ettus, and so libuhd has become an external dependency for GNU Radio when using USRPs. As such, libusrp (*usrp*), libusrp2 (*usrp2*), and the GNU Radio wrapper components (*gr-usrp* and *gr-usrp2*) have been REMOVED and are no longer supported.

All USRP-based examples/apps have been move to UHD, including:

h4. gnuradio-examples/python

* *apps/hf_explorer/hfx2.py*
* *apps/hf_radio/input.py*
* *apps/hf_radio/radio.py*
* *apps/hf_radio/ssbdemod.py*
* *digital/benchmark_qt_rx2.py*
* *digital/benchmark_qt_rx.py*
* *digital/benchmark_rx2.py*
* *digital/benchmark_rx.py*
* *digital/benchmark_tx2.py*
* *digital/benchmark_tx.py*
* *digital/rx_voice.py*
* *digital/tunnel.py*
* *digital/tx_voice.py*
* *digital/usrp_receive_path.py*
* *digital/usrp_transmit_path.py*
* *multi-antenna/multi_fft.py* (removed, easily redone in GRC)
* *multi-antenna/multi_file.py* (removed, easily redone in GRC)
* *multi-antenna/multi_scope.py* (removed, easily redone in GRC)
* *multi_usrp/multi_usrp_oscope.py* (removed, easily redone in GRC)
* *multi_usrp/multi_usrp_rx_cfile.py* (removed, easily redone in GRC)
* *ofdm/benchmark_ofdm_rx.py*
* *ofdm/benchmark_ofdm_tx.py*
* *ofdm/receive_path.py*
* *ofdm/transmit_path.py*
* *ofdm/tunnel.py*
* *usrp/fm_tx_2_daughterboards.py*
* *usrp/fm_tx4.py*
* *usrp/max_power.py*
* *usrp/usrp_am_mw_rcv.py*
* *usrp/usrp_benchmark_usb.py*
* *usrp/usrp_nbfm_ptt.py*
* *usrp/usrp_nbfm_rcv.py*
* *usrp/usrp_spectrum_sense.py*
* *usrp/usrp_test_loop_lfsr.py*
* *usrp/usrp_tv_rcv_nogui.py*
* *usrp/usrp_tv_rcv.py*
* *usrp/usrp_wfm_rcv2_nogui.py*
* *usrp/usrp_wfm_rcv_fmdet.py*
* *usrp/usrp_wfm_rcv_nogui.py*
* *usrp/usrp_wfm_rcv_pll.py*
* *usrp/usrp_wfm_rcv.py*
* *usrp/usrp_wfm_rcv_sca.py*
* *usrp/usrp_wxapt_rcv.py*
* *usrp2/usrp2_wfm_qt.py*
* *usrp2/usrp2_wfm_rcv.py*

h4. gr-utils/src/python

* *usrp_fft.py*
* *usrp2_fft.py*
* *usrp_oscope.py*
* *usrp_rx_nogui.py*
* *usrp_siggen_gui.py*
* *usrp_siggen.py*

h4. gr-noaa/apps

* usrp_rx_hrpt.grc
* usrp_rx_htpt_nogui.grc
* usrp_rx_lrit.grc

h4. gr-pager/apps

* usrp_flex_all.py
* usrp_flex_band.py
* usrp_flex.py
* usrp_rx_flex.grc

h4. gr-qtgui/apps

* *usrp_display.py*
* *usrp2_display.py*

h4. gr-radio-astronomy/src/python

Removed. The radio astronomy has been replaced by simple-ra in cgran (https://www.cgran.org/wiki/simple_ra)

* *usrp_psr_receiver.py*
* *usrp_ra_receiver.py*