User:Duggabe: Difference between revisions

From GNU Radio
Jump to navigation Jump to search
(revise ADALM-PLUTO section)
Line 1: Line 1:
<!-- Guided_Tutorial_Hardware_Considerations -->
<!-- Guided_Tutorial_Hardware_Considerations -->
<!-- "Using GNU Radio with Hardware" -->
<!-- "Using GNU Radio with Hardware" -->
<!-- 05 May 2020 -->
<!-- 09 May 2020 -->
= DRAFT REVISION Guided_Tutorial_Hardware_Considerations =
= DRAFT REVISION Guided_Tutorial_Hardware_Considerations =
== Introduction ==
== Introduction ==
Line 75: Line 75:


* File Source - reads the pre-recorded FM station data file
* File Source - reads the pre-recorded FM station data file
** File: /home/barry/Downloads/fm_101.8MHz_1Msps.cfile    (use your file path; you also can browse to find the file by clicking the three dots next to the filename)
** File: $HOME/Downloads/fm_101.8MHz_1Msps.cfile    (use your file path; you also can browse to find the file by clicking the three dots next to the filename)
** Output Type: Complex
** Output Type: Complex
** Repeat: Yes
** Repeat: Yes
** leave the other parameters as default values
** leave the other parameters as default values


The Rational Resampler interpolates (multiplies) the sample rate by the Interpolation factor and decimates (divides) the sample rate by the Decimation factor to produce the output sample rate. In the initial case, the 1MB input is divided by 1000 and multiplied by 384 to produce an output rate of 384000 samples per second.
The Rational Resampler interpolates (multiplies) the sample rate by the Interpolation factor and decimates (divides) the sample rate by the Decimation factor to produce the output sample rate. In this case, the 1MB input is divided by 1000 and multiplied by 384 to produce an output rate of 384000 samples per second.
* Rational Resampler
* Rational Resampler
** Type: Complex -> Complex (Complex Taps)
** Type: Complex -> Complex (Complex Taps)
Line 100: Line 100:


* The speaker output is created by an Audio Sink block. The parameters are:
* The speaker output is created by an Audio Sink block. The parameters are:
** Sample rate: set to 48khz (use the pull-down)
** Sample rate: set to 48kHz (use the pull-down)
** Device name: for most speakers (or headphone jacks) built into the computer, the Device name can be left blank; for other cases, see [[Audio_Sink#Device_Name]]
** Device name: for most speakers (or headphone jacks) built into the computer, the Device name can be left blank; for other cases, see [[Audio_Sink#Device_Name]]
** OK to Block: Yes


==== Testing ====
<b>TESTING:</b> See [[#Testing|Testing]] section below.
 
Using GRC, click the Run icon or click Run -> Execute from the menu. After a few seconds, a GUI window will open with the Volume control and you should hear the radio station. If it doesn't appear, look at your terminal screen for error messages.
 
To terminate the process cleanly, click on the 'X' in the upper corner of the GUI rather than using Control-C.


=== Hardware Front End ===
=== Hardware Front End ===


Now that you have gotten this far, you need to save a copy of your flowgraph before proceeding.
Now that you have gotten this far, you need to save a copy of your flowgraph before proceeding.
* click on File -> Save Copy
* click on File -> Save Copy


Line 118: Line 116:
==== Preparation for hardware ====
==== Preparation for hardware ====


For each of the hardware blocks presented below, we will be replacing the File Source block with a hardware block. In addition, four of the five Variable blocks may need to have new values.
For each of the hardware blocks presented below, we will be replacing the File Source block with a hardware block. In addition, four of the five Variable blocks may need to have new values.
 
Also, for the Audio Sink block, set:
* OK to Block: No


==== ADALM-PLUTO ====
==== ADALM-PLUTO ====
Line 126: Line 127:
Using gnuradio-companion (GRC) and the following Block descriptions, build this flowgraph from our "Signal Processing" baseline.<br>
Using gnuradio-companion (GRC) and the following Block descriptions, build this flowgraph from our "Signal Processing" baseline.<br>


[[File:Pluto_FM_fg.png|841px]]
[[File:Pluto_FM_fg.png|800px]]


The actual source and sink blocks are created by an 'Industrial I/O' module. See https://wiki.analog.com/resources/tools-software/linux-software/gnuradio for details.
The actual source and sink blocks are created by an 'Industrial I/O' module. See https://wiki.analog.com/resources/tools-software/linux-software/gnuradio for details.
Line 134: Line 135:
** LO Frequency: tuning
** LO Frequency: tuning
** Sample Rate: samp_rate
** Sample Rate: samp_rate
** RF Bandwidth: 200000
** RF Bandwidth: 500000
** Buffer size: 8192
** Buffer size: 16384
** Quadrature: True
** Quadrature: True
** RF DC Correction: True
** RF DC Correction: True
** BB DC Correction: True
** BB DC Correction: True
** Gain Mode (Rx1): Manual
** Gain Mode (Rx1): Fast Attack
** Manual Gain (Rx1)(dB): 40
** Filter: (leave blank)
** Filter: (leave blank)
** Filter Auto: True
** Filter Auto: True


* Add a QT GUI Range block for the tuning control
* Add a QT GUI Chooser block for the tuning control
** id: tuning
** id: tuning
** Label: Frequency
** Label: Station
** Type: int
** Type: int
** default value: 102100000  (enter your favorite FM station)
** Num Options: 4
** start: 88000000
** Option 0 (Default): 102100000  (enter your favorite FM station)
** stop: 108000000
** Label 0: WDRM
** step: 200000
** Option 1: 99100000
** Widget: Counter + Slider (or you can choose whichever you like)
** Label 1: WAHR
** Option 2: 96900000
** Label 2: WRSA
** Option 3: 89300000
** Label 3: WLRH
** Widget: Radio Buttons
** Orientation: Horizontal


Change the following Variable block values.
Change the following Variable block values.
Line 162: Line 168:
* Variable block - defines the decimation factor for the rational resampler
* Variable block - defines the decimation factor for the rational resampler
** id: rf_decim
** id: rf_decim
** value: 10
** value: 5


* Variable block - defines the interpolation factor for the rational resampler
* Variable block - defines the interpolation factor for the rational resampler
Line 170: Line 176:
* Variable block - defines the audio decimation factor for the FM demodulator
* Variable block - defines the audio decimation factor for the FM demodulator
** id: audio_decim
** id: audio_decim
** value: 4
** value: 8


Using GRC, click the Run icon or click Run -> Execute from the menu. After a few seconds, a GUI window will open with the Frequency and Volume controls and you should hear the radio station. If it doesn't appear, look at your terminal screen for error messages.
<b>TESTING:</b> See [[#Testing|Testing]] section below.
 
To terminate the process cleanly, click on the 'X' in the upper corner of the GUI rather than using Control-C.


==== UHD / USRP ====
==== UHD / USRP ====
Line 232: Line 236:
* Optional: add a QT GUI Sink. Frequency, Waterfall, Time Domain, and Constellation displays will be shown.
* Optional: add a QT GUI Sink. Frequency, Waterfall, Time Domain, and Constellation displays will be shown.
** the default values are adequate.
** the default values are adequate.
** connect the QT GUI Sink 'freq' message output to the UHD: USRP Source block 'command' message input.
** when you double-click on the Frequency or Waterfall displays, the X-axis frequency will be used to re-tune the USRP


Change the following Variable block values.
Change the following Variable block values.
Line 251: Line 257:
** value: 4
** value: 4


Using GRC, click the Run icon or click Run -> Execute from the menu. After a few seconds, a GUI window will open with the Volume, Frequency and RF Gain controls. You should hear the radio station. If it doesn't appear, look at your terminal screen for error messages.
<b>TESTING:</b> See [[#Testing|Testing]] section below.
 
If you added the optional QT GUI Sink, the RF Gain should be adjusted to give an elipse on the Constellation Display which has a hole in the middle, but too much gain shows as a less defined hole and thicker edges.


==== RTL-SDR dongle ====
==== RTL-SDR dongle ====


==== FunCube Pro+ ====
==== FunCube Pro+ ====
=== Testing ===
Using GRC, click the Run icon or click Run -> Execute from the menu. After a few seconds, a GUI window will open with the Volume control and you should hear the radio station. If it doesn't appear, look at your terminal screen for error messages.
To terminate the process cleanly, click on the 'X' in the upper corner of the GUI rather than using Control-C.

Revision as of 00:12, 10 May 2020

DRAFT REVISION Guided_Tutorial_Hardware_Considerations

Introduction

One of the great strengths of GNU Radio is how easy it is to move from simulation to real-world operation. In this tutorial, we will build on what you have learned so far and create a complete FM radio receiver which you can use to listen to your local FM radio stations. Also we will discuss considerations that come into play when working with real-world radio hardware.

Prerequisites

What Will I Need?

Even if you don't have an actual radio to work with, this tutorial is still useful. The "Signal Processing" portion produces an FM radio with input from a pre-recorded file. To load that file, do the following steps:

This tutorial will be most useful, however, if you have a piece of radio hardware that you can use with GNU Radio. There are a large number of vendors who provide hardware with GNU Radio drivers. They span from very cheap $20 receivers to very high-performance tens-of-thousands-of-dollars systems. See Hardware for additional information.

Building an FM Radio Receiver

This tutorial is divided into two sections: "Signal Processing" and "Hardware". Various popular hardware devices are shown so that you can build with your available device.

In the "Signal Processing" section we will build the Software Defined Radio (SDR) portion of the flowgraph and test it. Then, using that as a base, we will "plug in" a hardware device of your choice. So, building the "Signal Processing" portion is required in any case. After that, substituting a hardware device will follow easily.

GNU Radio Signal Processing

Using gnuradio-companion (GRC) and the following Block descriptions, build this flowgraph:

FM receiver fg.png

Block descriptions

  • The Options block identifies the filename for the flowgraph, a title, author, etc.
    • id: FM_receive
    • Title: Broadcast FM receiver
    • enter other fields as desired
    • click Apply
    • click OK
    • click on File -> Save As  Use the file name 'FM_receive'. The extension '.grc' is added automatically
  • Variable block - defines the sample rate for the flowgraph
    • id: samp_rate
    • value: 384000
  • Variable block - defines the decimation factor for the rational resampler
    • id: rf_decim
    • value: 1000
  • Variable block - defines the interpolation factor for the rational resampler
    • id: interp
    • value: 384
  • Variable block - defines the FM modulation deviation in Hertz
    • id: deviation
    • value: 75000
  • Variable block - defines the audio decimation factor for the FM demodulator
    • id: audio_decim
    • value: 8
  • The QT GUI Range block creates an Audio gain (volume) control
    • id: volume
    • default value: 0.3
    • start: 0.0
    • stop: 1.0
    • step: 0.1
    • Widget: slider (or you can choose whichever you like)
  • File Source - reads the pre-recorded FM station data file
    • File: $HOME/Downloads/fm_101.8MHz_1Msps.cfile (use your file path; you also can browse to find the file by clicking the three dots next to the filename)
    • Output Type: Complex
    • Repeat: Yes
    • leave the other parameters as default values

The Rational Resampler interpolates (multiplies) the sample rate by the Interpolation factor and decimates (divides) the sample rate by the Decimation factor to produce the output sample rate. In this case, the 1MB input is divided by 1000 and multiplied by 384 to produce an output rate of 384000 samples per second.

  • Rational Resampler
    • Type: Complex -> Complex (Complex Taps)
    • Interpolation: interp
    • Decimation: rf_decim
    • Taps: leave blank
    • Fractional BW: 0
  • FM Demod - the 384kHz input signal is demodulated and then decimated by 8 to produce a 48kHz signal for the Audio Output.
    • Channel Rate: samp_rate
    • Audio Decimation: audio_decim
    • Deviation: deviation
    • Audio Pass: 16000
    • Audio Stop: 20000
  • The value of the volume control is used as a multiplier in the Multiply Const block.
    • IO Type: float
    • Constant: volume
  • The speaker output is created by an Audio Sink block. The parameters are:
    • Sample rate: set to 48kHz (use the pull-down)
    • Device name: for most speakers (or headphone jacks) built into the computer, the Device name can be left blank; for other cases, see Audio_Sink#Device_Name
    • OK to Block: Yes

TESTING: See Testing section below.

Hardware Front End

Now that you have gotten this far, you need to save a copy of your flowgraph before proceeding.

  • click on File -> Save Copy

That way you will have the baseline flowgraph if you choose to use a different hardware device.

Preparation for hardware

For each of the hardware blocks presented below, we will be replacing the File Source block with a hardware block. In addition, four of the five Variable blocks may need to have new values.

Also, for the Audio Sink block, set:

  • OK to Block: No

ADALM-PLUTO

The ADALM-PLUTO (PlutoSDR) is a portable, self-contained RF learning module which is supported by GNU Radio source and sink blocks. It can operate from 70MHz to 3.8GHz.

Using gnuradio-companion (GRC) and the following Block descriptions, build this flowgraph from our "Signal Processing" baseline.

Pluto FM fg.png

The actual source and sink blocks are created by an 'Industrial I/O' module. See https://wiki.analog.com/resources/tools-software/linux-software/gnuradio for details.

  • Delete the File Source block and replace it with a PlutoSDR Source block. Set the parameters as follows:
    • IIO context URI: "ip:192.168.2.1" (without the quotes)
    • LO Frequency: tuning
    • Sample Rate: samp_rate
    • RF Bandwidth: 500000
    • Buffer size: 16384
    • Quadrature: True
    • RF DC Correction: True
    • BB DC Correction: True
    • Gain Mode (Rx1): Fast Attack
    • Filter: (leave blank)
    • Filter Auto: True
  • Add a QT GUI Chooser block for the tuning control
    • id: tuning
    • Label: Station
    • Type: int
    • Num Options: 4
    • Option 0 (Default): 102100000 (enter your favorite FM station)
    • Label 0: WDRM
    • Option 1: 99100000
    • Label 1: WAHR
    • Option 2: 96900000
    • Label 2: WRSA
    • Option 3: 89300000
    • Label 3: WLRH
    • Widget: Radio Buttons
    • Orientation: Horizontal

Change the following Variable block values.

  • Variable block - defines the sample rate for the flowgraph
    • id: samp_rate
    • value: 1920000
  • Variable block - defines the decimation factor for the rational resampler
    • id: rf_decim
    • value: 5
  • Variable block - defines the interpolation factor for the rational resampler
    • id: interp
    • value: 1
  • Variable block - defines the audio decimation factor for the FM demodulator
    • id: audio_decim
    • value: 8

TESTING: See Testing section below.

UHD / USRP

The USRP B200 provides a fully integrated, single board Universal Software Radio Peripheral platform with continuous frequency coverage from 70 MHz to 6 GHz.

Using gnuradio-companion (GRC) and the following Block descriptions, build this flowgraph from our "Signal Processing" baseline.

USRP FM fg.png

  • Delete the File Source block and replace it with a UHD: USRP Source block. Set the parameters as follows:
    • General Tab
      • Output Type: Complex float32
      • Wire Format: Automatic
      • Stream args: (blank)
      • Stream channels: []
      • Device Address: "serial=xxxxxx" (supply your serial number)
      • Device Arguments: ""
      • Sync: No Sync
      • Clock Rate (Hz): Default
      • Num Mboards: 1
      • Mb0: Clock Source: Default
      • Mb0: Time Source: Default
      • Mb0: Subdev Spec: (blank)
      • Num Channels: 1
      • Samp rate (sps): samp_rate
    • Advanced Tab
      • Show LO Controls: False
    • RF Options Tab
      • Ch0: Center Freq (Hz): tuning
      • Ch0: AGC: Disabled
      • Ch0: Gain Value: rf_gain
      • Ch0: Gain Type: Absolute (dB)
      • Ch0: Antenna: TX/RX
      • Ch0: Bandwidth (Hz): 200000
  • Add a QT GUI Range block for the tuning control
    • id: tuning
    • Label: Frequency
    • Type: int
    • default value: 102100000 (enter your favorite FM station)
    • start: 88000000
    • stop: 108000000
    • step: 200000
    • Widget: Counter + Slider (or you can choose whichever you like)
  • Add a QT GUI Range block for the RF gain control
    • id: rf_gain
    • Label: RF Gain
    • Type: int
    • default value: 50
    • start: 0
    • stop: 70
    • step: 1
    • Widget: Counter + Slider (or you can choose whichever you like)
  • Optional: add a QT GUI Sink. Frequency, Waterfall, Time Domain, and Constellation displays will be shown.
    • the default values are adequate.
    • connect the QT GUI Sink 'freq' message output to the UHD: USRP Source block 'command' message input.
    • when you double-click on the Frequency or Waterfall displays, the X-axis frequency will be used to re-tune the USRP

Change the following Variable block values.

  • Variable block - defines the sample rate for the flowgraph
    • id: samp_rate
    • value: 1920000
  • Variable block - defines the decimation factor for the rational resampler
    • id: rf_decim
    • value: 10
  • Variable block - defines the interpolation factor for the rational resampler
    • id: interp
    • value: 1
  • Variable block - defines the audio decimation factor for the FM demodulator
    • id: audio_decim
    • value: 4

TESTING: See Testing section below.

RTL-SDR dongle

FunCube Pro+

Testing

Using GRC, click the Run icon or click Run -> Execute from the menu. After a few seconds, a GUI window will open with the Volume control and you should hear the radio station. If it doesn't appear, look at your terminal screen for error messages.

To terminate the process cleanly, click on the 'X' in the upper corner of the GUI rather than using Control-C.