L5 Lab — First Flowgraphs#

ECE 448 · Spring 2027

First Flowgraphs

Build a flowgraph from an empty canvas, measure aliasing, then find FM stations on the PlutoSDR and record the band in GNU Radio.

L5 Lab · Module 2: SDR & GNU Radio Foundations · Dr. Neil Rogers

Learning Objectives

  1. I can install GNU Radio and use GNU Radio Companion (GRC) to build, inspect, and run a basic flowgraph.
  2. I can capture a real RF signal using an SDR and interpret its time- and frequency-domain representations.

From Lesson to Bench

  • Pre-Lab: install radioconda and work out the numbers your settings fix.

  • Bench: build the tone flowgraph yourself, then receive and record the FM band on the PlutoSDR in GNU Radio.

  • Writeup: compare, and explain the differences.

Lesson 5 showed both flowgraphs running. Today you build one from an empty canvas and run the other against real signals. The lab packet has three parts, and you turn it in once, complete, before Lesson 6. Part 1, the Pre-Lab, is on your own before the period: install radioconda, confirm it sees your PlutoSDR, and work out where the tones will appear, the band the display shows, and the file size. Part 2 is your own measurements and observations in class. Part 3, the Writeup, explains what you saw.

Nothing in this lab transmits. The FM flowgraph uses only the PlutoSDR’s receiver, and the tone flowgraph never leaves your laptop.

Part 1: Before the Period

  • gnuradio-config-info --version reports 3.10.

  • iio_info -s finds your PlutoSDR, and the iio_attr check shows 70 MHz to 6 GHz.

  • L05-tone.grc runs and shows one spike at \(+1\) kHz.

Do the Pre-Lab before you arrive; the bench time assumes a working install. The three checks on the slide are the packet’s Question 1. The flowgraphs open the Pluto at ip:192.168.2.1. On Windows that needs Analog Devices’ PlutoSDR USB driver; on Linux it works as is; on macOS, switch the Pluto to NCM mode once or type the usb: URI from iio_info -s into the PlutoSDR Source, as the lesson page’s Connect frame shows. If any check fails, the L5 lesson page lists the fixes: the most common one on Windows is Analog Devices’ PlutoSDR USB driver, and a Pluto that fails the iio_attr check needs switching to extended-frequency mode. Bring the problem to EI before the lab rather than to the lab itself.

Question 2 is quick arithmetic from your block settings: where five tones appear at a 48 kHz sample rate, the band the FM display shows at a given center frequency, and the size of a 3 s recording. Part 2 checks the tones and the file size on the screen. The tone results are exact, because a computed tone has no noise or hardware in the way; if a measurement disagrees with your arithmetic, check samp_rate first.

Part 2: Build the Tone Flowgraph

  1. Start GRC and choose File, New, QT GUI. Do not open L05-tone.grc; build it yourself.

  2. Set the samp_rate variable to 48000.

  3. Add a QT GUI Range with ID freq, from \(-72000\) to \(72000\) in steps of 250, default 1000.

  4. Add a Signal Source: type complex, sample rate samp_rate, waveform cosine, frequency freq.

  5. Add a Throttle (complex, samp_rate), a QT GUI Time Sink (complex), and a QT GUI Frequency Sink (complex, bandwidth samp_rate).

  6. Connect source to throttle and throttle to both sinks. Every arrow must be black; a red arrow is a type mismatch.

  7. Run it. Screenshot the canvas for Question 3(a).

  8. Set the slider to 5, 20, 30, 40, and \(-35\) kHz in turn and record where the spike appears for Question 3(b).

Part 2: The FM Band

  1. Screw the course’s broadband whip onto the PlutoSDR’s RX port and plug the Pluto into your laptop.

  2. Open and run L05-fm-spectrum.grc. Drag the center frequency slowly from 88 to 108 MHz and record the tallest station’s frequency for Question 4(a).

  3. Center the display on that station, then drag across 88 to 108 MHz again. Record the three strongest stations’ frequencies and peak levels, and how wide each looks next to the others, for Question 4(b).

  4. Uncheck DC tracking. Center a station exactly on the spike in the middle of the display, then tune 300 kHz away. Note what moves, then check DC tracking again and note what changes, for Question 4(c).

  5. With the strongest station on screen, set the gain to 0, 20, 40, 60, and 71 dB. At each, record the noise floor away from any station, and whether new signals appear between stations, for Question 4(d).

Part 2: Record and Plot

  1. Stop the flowgraph. Right-click the gray File Sink and choose Enable. Set its file name to fm_capture.cfile in a folder you can find.

  2. Center the strongest station slightly off the DC spike and set the highest gain in your 4(d) table at which no spurs appeared.

  3. Run the flowgraph for about 3 s and stop it. Record the file size for Question 5(a).

  4. Disable the File Sink again so the next run does not overwrite the capture.

  5. From the radioconda prompt, run python L05-psd.py fm_capture.cfile --fs 2.4e6 --fc followed by your center frequency in hertz. Paste the plot for Question 5(b).

No Hardware?

If your PlutoSDR is missing or will not open

Do Question 3 on your laptop as written; it needs no hardware. For Questions 4 and 5, pair with a classmate whose PlutoSDR works, take turns at their laptop, and record your own numbers and your own capture. Say in the packet whose hardware you used. Bring the failed Pluto to EI so it is working before the L7 Lab.

Part 3: After the Lab

  • Explain why two of your tones give identical samples at 48 kHz.

  • Describe, in words, what raising the gain did to the floor and the stations.

  • Choose and justify a gain for weak stations.

The Writeup is three questions. The first connects your alias table to the sampling wheel of Lesson 5: adding \(f_s\) to a tone’s frequency adds a whole turn to every sample. The second asks what you watched happen as the gain went up: when the floor moved, when the stations stood out more, and when false signals appeared. The third asks you to defend a gain setting from your own gain table.

Looking Ahead

  • Lesson 6 adds the first processing blocks: AM modulation and demodulation.

  • Lesson 7 turns today’s FM capture into audio and decodes its RDS data.

Keep your fm_capture.cfile and the center frequency you recorded it at. Lesson 7 builds an FM receiver, and the first test of that receiver is the capture you made today, played back through a File Source before you point it at the live band.