AB9IL.net: Using the ADALM-Pluto Revision D SDR

Site Contents:
HOME Software Defined Radio WiFi Antennas Air and Space Radio Linux or Windows Digital Audio Liberation Tech Live Internet SDRs
Tune in live signals:
Radio Amazonia Radio Caroline Channel 292 BBC Radio 4 LW RNZ-Auckland

 how to receive NAVTEX on Linux how to receive weather fax (WEFAX) on Linux how to receive NAVTEX on Windows how to receive weather fax (WEFAX) on Windows how to receive NAVTEX macOS how to receive weather fax (WEFAX) on macOS how to tune in weather satellite downlinks how to receive weather information from VOLMET stations how to monitor maritime radio signals how to capture aviation communications on oceanic flights how to monitor aviation communications on VHF how to monitor aviation communications on INMARSAT how to receive aviation digital communications like ACARS,VDL how to receive aviation digital communications like HFDL how to receive the DRM (Digital Radio Moniale) on Linux how to receive the DRM (Digital Radio Moniale) on Windows how to receive the DRM (Digital Radio Moniale) on macOS how to monitor telemetry and sensors in the 433 MHz ISM band

Getting the Pluto on the Ground

When I first unpackaged the ADALM‑Pluto Revision D, I knew it was a powerful, low‑cost tool for a wide range of radio experiments. On Linux this device is plug‑and‑play once the SoapySDR backend is installed, but the trick lies in turning it into a NAVTEX listener. The NAVTEX broadcasts are at 518 kHz—well below the Pluto’s native 30 MHz lower limit—so a little hardware creativity is required.

My go‑to solution was to build a one‑stage heterodyne front end. I wired a crystal oscillator at 10 MHz to the Pluto’s external antenna port via a 50 Ω matching network, then used a non‑inverting mixer stage to down‑convert 518 kHz to 9.482 MHz. A low‑pass filter followed the mixer to suppress images, leaving a clean 518 kHz signal that the Pluto's 1 MHz sample rate could accommodate. Though this step adds a few centimeters to the desk, it is the simplest way to get the low‑frequency signal into the SDR.

Tuning the Software Engine

With the hardware ready, I installed the necessary Linux packages: sudo apt install libsoapysdr-dev soapysdr-module-plutosdr soapysdr

The Beginning of a Quiet Night

It was a calm evening, the kind that invites experimentation and quiet curiosity. Alex sat down at the desk, his laptop humming softly, and opened a terminal window. The task was clear: hear the faint voice of the weather, transmitted as a weather fax, and perceive the subtle shifts in the ionosphere that had nothing to do with the usual radio chatter. The instrument of choice—a rugged ADALM‑Pluto Revision D—was a familiar friend, but this was the first time Alex had used it to receive the low‑frequency, analog‑style weather fax signals.

Preparing the Pluto

Alex began by checking the firmware. The Revision D ships with an updated driver that supports a dedicated low‑frequency band down to 3 MHz with a noisy envelope that must be carefully filtered. He flashed the latest firmware update, which added a 10 kHz, 8‑bit I/Q stream and reduced the in‑band noise of the receiver chain. Following the upgrade, a quick SoapySDR_test confirmed that the device reported a center frequency setting as low as 7.5 MHz, a welcome milestone for WEFAX enthusiasts.

The Brass Tower Connection

With the Pluto primed, Alex’s next step was the antenna. The weather fax usually travels around **5.6 MHz**, a stubborn band that the Pluto cannot directly accommodate. Instead, Alex borrowed a licensed AMSAT HackRF One—a pocket‑sized direct‑sampling receiver—to perform a simple heterodyne. The HackRF captured the 5.6 MHz band and mixed it down to a 1.5 MHz intermediate frequency, then fed that signal into a low‑noise tuner that in turn moved the spectrum into the 15 MHz band that the Pluto could comfortably sample. The careful balancing of gain stages ensured a clean, non‑saturated data path.

Streaming the Quiet Voice

In the terminal, Alex launched SoapySDR_source, pointed at the 15 MHz axis, and set the sample rate to 250 kHz—just enough to capture the 4 kHz tone that breathes life into a weather fax. The Pluto released raw I/Q packets, a continuous stream of data that Alex piped into a GNU Radio Companion flowgraph. Recognizing the need for a tight narrowband filter + de‑emphasis filter, he inserted an LowPassFilter block tuned to 5 kHz and a matched DeEmphasis block to flatten the radiated spectrum.

Decoding the Weather Fax

A calm yet scalable step left Alex feeling in control: the decoding. The flowgraph ended in a custom WFAX_Decoder block, written in Python

The Quest Begins

When the sun rose over the harbor, a quiet aroma of salt lingered in the air and a lone ADALM‑Pluto Revision D sat on a dockside table, its small crystal‑like board glowing with potential. The skipper, a seasoned navigator with an eye for modern tools, had heard whispers—recent constellations of data about receiving NAVTEX with open‑source electronics—and decided it was time to turn theory into practice.

Setting the Sail

The first step was to align the hardware with the waves it would listen to. With a gentle tap on the USB port, the Pluto locked into place atop a Rasberry‑Pi hub running the latest Linux Wheezy. The entire system, though Linux‑centric at the heart, would eventually send its clarion calls to a Windows 10 workstation for further processing. On the hinge of this plan lay the choice of software: SDR#, a Windows favourite, had become the gateway for countless novices.

Navigating the Signal

In the virtual cockpit of SDR#, the skipper entered the 518 kHz centre frequency, the maritime VHF anchor for NAVTEX. The software’s bandwidth slider was set to a tight 100 kHz, mirroring the narrow NBDS channel used by ships. To keep the chirps of other VHF traffic away, a notch filter was engaged above 520 kHz. A sample rate of 250 ksps was chosen, the sweet spot for single‑sideband demodulation, leaving enough headroom for the 1 kHz bandwidth of NAVTEX messages.

The Pluto’s internal low‑noise amplifier was unlocked, delivering a clean canvas, while the antenna—an inexpensive 0.7‑meter magnetic loop—was positioned over the post‑sail only a few centimetres from the device. The ocean’s surface shimmered like a screen around the passing wind. A slip of the tweak dial on the PC controlled the gain; two stows later, the stack of faint carrier waves resolved into a steady tone, a clear sign that the receiver had anchored on the right frequency.

Harvesting the Message

At the 518 kHz line, NAVTEX sends a flood of encoded messages in the ARC 44177 format. To unspool these, the skipper applied the NRZ‑L demodulator block in SDR#. This converts the baseband sine wave into a binary stream. From there, the ASCII decoder turned the stream into readable text, the heart of the mariner’s compass: weather alerts, port notices, and occasional sea‑faring humor. A quick comparison with the NOAA's live feed confirmed that the messages matched perfectly, their timeliness a testament to the Pluto’s precision.

Reflections on the Journey

By dusk, the skipper had not only received several NAVTEX broadcasts, but also captured the raw IQ stream, saved it as a .wav file, and fed it into a GNURadio flowgraph on a portable laptop. The graph, while a visual anchor for those who prefer diagrams

Setting the Stage

On a crisp spring morning, Emily strapped the ADALM‑Pluto Revision D SDR to her MacBook Air, its sleek black casing gleaming under the kitchen light. She had just received the device at the university’s electronics lab, and she was eager to test its limits. The little board hummed quietly, a promise of signal space waiting to be explored.

Her mission was clear: to finally hear the faint, life‑saving messages of NAVTEX on macOS. Those warnings, whistles, and maritime safety announcements resonated on a frequency around 231.5 MHz. The task was not trivial—macOS was not the native environment for most SDR software, yet Emily was determined to make it work.

Deploying the Software

Emily began by installing SoapySDR, a flexible driver that supports the Pluto SDR, and its companion SoapyPluto kernel module. She opened Terminal, typed “brew install soapysdr” and followed the automated script to set compile flags for the ARM and Intel variants of macOS. Once the driver was up, she verified the connection with the command “SoapySDRUtil --detect”. The terminal bloomed with a short line confirming the device, a green checkmark and the phrase ADALM‑Pluto Revision D.

Next came the interface. Emily chose GNU Radio Companion for a graphical flowgraph approach, installing it via Homebrew with “brew install gnuradio”. In the flowgraph editor, she dragged a Soapy Plutod Source block onto the canvas, set the sample rate to 2 Msps and the center frequency to 231.5 MHz, that sweet spot where NAVTEX lives. A follow‑up WFM Demod block would capture the wide‑band FM carrier, while a Null Sink fed the output to an external text decoder script that parsed the encoded navtex packets into plain sentences.

Tuning In to the Tides

When she launched the flowgraph, a soft beep rang out, then a cascade of static slowly gave way to a faint chirp. The SDR, now listening at 231.5 MHz, was picking up the maritime VHF broadcast. Emily widened the Scope view in GNU Radio to see the training pattern that NAVTEX used before each message—a series of short bursts. Within seconds, the decoded text leapt onto the terminal: SMS, ITTN, and regular weather updates, all in the familiar format of "VTXA 1130 UTC WINDS at 15 knots".

She had to fine‑tune the gain, setting the Pluto to 18 dB while the filter bandwidth hovered at 1 MHz. After a brief moment, the ambient rippleed into a clear drive‑line, and the messages were crisp, as if they had just digitised until now. Through this process, Emily realised how the Revision D’s integrated LNA and improved RF front‑end provided a significant jump in sensitivity, especially noticeable in the low‑frequency NAVTEX band.

Bringing the Maritime World Into the Office

With the system smoothing to perform, Emily folded the SDR back into the MacBook case, logged into a remote vessel’s Wi‑Fi, and opened a small web app that displayed the upcoming broadcasts. When the next NAVTEX packet arrived, the system timed it to a notification sound, allowing nearby crew to be immediately aware without scanning a screen.

The turn of the tiny SDR has become her quiet hero. Each time the ceded airwaves flicker with a message about a sudden weather shift or a navigational hazard, Emily feels the invisible threads of safety stretch across oceans. And on that regular, brisk evening, she sat back, turning on a cup of tea, grateful that her macOS could now listen to the maritime sea’s lullaby in its own tone.

A Quiet Saturday Night in Sunnyvale

By the time the city lights flickered on, I settled into my home study with a steaming cup of coffee and the ADALM‑Pluto Revision D sitting on the counter, its sleek black chassis a silent promise of adventure. I had spent the previous week reading forums, watching the analog‑devices blog posts, and finally decided that the world of weather fax would be my next childhood‑era exploration.

Getting the Device Ready

The first step, as always, was to make sure the Pluto was recognized by macOS. I opened System Information, scrolled to the USB section, and saw a line that read “Analog Devices, Inc. – ADALM‑Pluto”. New drivers were installed automatically from the device’s web page, thanks to the Universal Driver package released in early 2024. The device’s internal antenna phone jack was already populated, but I slid a patch cable onto the 50 mm SMA in case I needed a different antenna in the future.

Signal Capture With SoapySDR

With the hardware confirmed, I launched gqrx, a favorite front‑end that works seamlessly with the SoapySDR backend on macOS. In the interface, the Pluto appeared as the sole source. I set the center frequency to 4100 kHz, the symbol rate to 9 kHz, and the bandwidth to 12 kHz, mindful of the 9 kHz image bandwidth that WEFAX requires. The Software Defined Radio’s tuner read 22 dB gain, and I kept a eye on the waterfall: a steady tone, too quiet for a radio casual, yet alive with the faint echoes of distant thunderstorms.

Tuning to WEFAX Frequencies

WEFAX transmissions usually occupy the range 4100–4300 kHz. I started at the lower edge, 4100 kHz, and listened with the LoRaICsound plugin, which quickly rendered the analog voice that the fax transmitter echoed. Every so often, amid the hiss, the satellite band’s faint whine dissolved into clear page breaks, hinting that a transmission was underway. On a quiet weekend, the Nano Weather Satellite, the “Space Weather Telemetry” beacon, used exactly that frequency band to send 120 kHz bandwidth data in a 15‑minute cycle each hour.

Processing With wefax‑mac

Now to the heart of the story: decoding the fax. I pulled the open‑source wefax tool from its GitHub repository, https://github.com/sourcelabs/wefax. The repo’s README was generous, telling me that installing Homebrew was the quickest route to fetch dependencies: brew install libsox libsndfile fftw. Next came the tedious but satisfying step of compiling the C++ program. With make -j4 I watched the terminal spin and, after a minute, see the completion message: “wefax

The First Glimpse of the Sky

It was a quiet evening when the ADALM‑Pluto Revision D sat on the bench, its sleek copper chassis reflecting the lamplight. The user powered it up, heard the familiar whir of the tiny pins that held the ADC in place, and felt a surge of possibility. This was no longer the modest, 4 GHz device of old; the Revision D promised a bridge from the lab to the far reaches of the ionosphere.

Discovering the Weather Satellite’s Pulse

In the world of amateur radio, the best teacher is a real signal. The weather satellites above Earth, especially the NOAA series, quietly beam Earth‑observing data at a frequency near 137.1 MHz. That frequency lies comfortably inside the Pluto’s reception band. The user remembered a note in the product documentation: the Revision D’s LNA is fine‑tuned for low‑frequency signals, giving the device an exceptional sensitivity at 137 MHz.

Tuning the Pluto SDR

With software like Gqrx or SDR#, the user loaded the Pluto connection string and opened the frequency window. A gentle drag slid the tunable frequency marker to 137.050 MHz. The Pluto’s external chip amplified the slice of the spectrum, and the software displayed a calm white line drifting across the waterfall view.

Next the user adjusted the sample rate to 1 kHz, which offered enough resolution to capture the narrow, regular bursts that characterize the weather satellite’s telemetry. The Pluto’s built‑in DC blocker was left on, eliminating unwanted bias tones. The display lit up as the faint modulation rose from the quiet.

Listening to the Satellite’s Language

Every 15 seconds, the satellite returned a packet. The user knew the name of the file type—WRF data in NOAA format—and switched the spectrum mode to amplitude. A delicate rise and fall indicated the start of the packet. Each packet comprised a 5‑second burst of audio containing binary data disguised as a seasoned Morse code pattern.

Decoding took a bit of patience, but the intuitive SatNAstro or Gradio flow allowed the user to apply a Fast Fourier Transform, turning the rainbow spectrum into a list of bits. Once the packet was reassembled, the satellite’s telemetry, including temperature, cloud cover and wind speed, appeared in clear text.

Reflecting on the Experience

By the time the night turned to dawn, the user’s Pluto had captured dozens of packets. Each burst felt like the planet’s own heartbeat, and the calm sense of having listened to a faint signal released from orbit was profound. The Revision D's improved low‑frequency performance and clean RF front‑end had turned a spare development board into a weather‑satellite listening post. No arrays or elaborate antennas were needed, and the triumph was the simple satisfaction that a piece of modest hardware could reach into the sky and bring the data back to Earth.

The Whisper of the Skies

Amid the endless blue of the Atlantic, a lone pilot perched beside the cockpit's instrument panel, the ADALM‑Pluto Revision D SDR warmly humming in the pocket of his flight bag. Its latest firmware update, released in early 2024, granted it an even sharper vision into the 118‑137 MHz window traditionally reserved for aircraft voice and ACARS communications. The pilot's mission was simple yet bold: to listen to the hidden conversations that drifted across oceanic airspace.

Setting Up the Tracker

In the cramped confines of the aircraft, he unfolded a small USB‑to‑UART cable that bridged the SDR to the cockpit’s data bus. With a quick line of gnuradio scripts, he could tune the device to 118.515 MHz, the exact carrier used for the ACARS voice channel. The Revision D's upgraded RF front‑end, featuring a 14‑bit ADC, allowed the pilot to capture even the faintest echoes that bounce between the aircraft and the ocean’s surface.

Listening to the Oceanic Communications

Below the horizon, where radar coverage fades, the pilot listened for the characteristic two‑channel modulation of ACARS. Using the pyADALM library, he decoded the raw IQ samples, applied a band‑limiting filter, and then employed a custom Deep Neural Network trained on recent training data from the ICAO repository. The AI consumer flagged the distinct airplane identifiers, frequencies, and the spectral spread of each payload, producing a readable log of messages in real time.

Capturing the Phoenix of Flight

On that particular flight, a North Atlantic crossing from New York to Vancouver, the SDR picked up a busy traffic of 118‑MHz chirps. From a routine weather report to a terse navigation correction, each transmission carried vital context for air traffic control over the oceanic corridor. By annotating the timestamps against the flight’s attitude data, the pilot could correlate the origin of each voice segment with the aircraft's latitude, revealing the exact look‑ahead point used for the final approach.

Glowing Reviews from the Community

When the pilot uploaded the captured dataset to the c4fov forum, a wave of enthusiasts shared their own strategies for building a low‑cost oceanic station. Some praised the SDR’s USB‑to‑UART auto‑config, while others noted that the most demanding part was handling the Doppler shift caused by the plane’s hf mode. Together, they crafted a lightweight Python plugin that could be run on a Raspberry Pi aboard the aircraft, extending the ADALM‑Pluto Revision D into a complete “wing‑out” listening system.

Why the Revision D Matters

The latest Revision D tipped the scales in favor of the pilot's objectives. Its built‑in Intel® Low‑Power RF TAP feature eliminated the need for external amplifiers, and its narrow‑bandshielding firmware reduced the noise floor by 2 dB, a difference that, as the pilot discovered, makes the difference between a clear ACARS chatterroom and a static‑laden husk. With these advantages, the SDR drew from a “raw” spectrum, capturing not only the dedicated voice channel but also the subtle VHF telemetry that slips under the radar of conventional receivers.

Beyond the Horizon

When the oceanic cruise ended and the plane landed in Victoria, the pilot shut down the ADALM‑Pluto and archived the data. By comparing new oceanic telemetry to old data, he identified a pattern: the frequency drifting of the aircraft’s voice channel increased in thermally dynamic air masses, a subtle phenomenon that would have gone unnoticed without the Revision D's chronicling power. He then shared the findings through a NASA Mars APL paper, underscoring how a small, low‑cost SDR could illuminate the vast, often overlooked airspace of our atmosphere.

It started on a sunny afternoon when I, an amateur radio enthusiast, returned from a weekend hiking trip and heard the faint whisper of a distant aircraft. My curiosity sparked, and I rummaged through my desk drawer for the tools that would allow me to listen to the world above.

Gathering the Pieces

I opened the drawer to find the ADALM‑Pluto Revision D SDR, a compact device originally designed for educational use but capable of exploring a staggering bandwidth from 10 MHz to 6 GHz. Next to it lay a USB‑C cable, a half‑meter SMA adapter, and a flight‑theory notebook that reminded me of the famous phrase, “learning is a journey, not a destination.”

Setting the Stage

To keep the story flowing, let me walk you through the first scene. I powered on the Pluto, connected it to my laptop with the USB‑C cable, and watched the green LEDs blink alive as the firmware acknowledged the new device. The Revision D update added a subtle improvement: a built‑in RF reference clock that gave the device a smoother sweep across the VHF band, a feature highlighted in the latest user manual released in early 2024.

Choosing the Right Software

While the hardware was ready, I needed a protagonist’s companion – an elegant signal viewer. I chose Gqrx, the open‑source graphical GnuRadio frontend, known for its intuitive interface and robust support for the Pluto. After launching the software, I set the FM mode to 12.5 kHz, matching the standard aviation FM bandwidth. Beneath the GUI’s firmware selection, I veered the Pluto’s sampling rate to 2 MS/s, a choice that balances sensitivity with the bandwidth needed to listen to the 118–137 MHz corridor.

Preparing the Antenna

The next chapter had the character moving to the rooftop, where an omnidirectional dipole hangs ready. I twisted the SMA connector to the dipole's center pin, then braided the last two meters of coax over the rooftop’s edge, ensuring that the feed line did not pick up road traffic noise. The final touch? A pair of ferrite beads on the SMA cable, reducing local interference but allowing the strong whine of air traffic control towers to permeate the signal to the Pluto.

Scanning the Skies

With the equipment poised like a telescope aimed at the heavens, I opened the band scan window in Gqrx. I parceled the VHF band into 5‑MHz sections, letting the software step through them automatically. In the first flashing window, the familiar 121.5 MHz band jolted into view. My eyes followed the text “ATC,” as a voice hissed comfort about airport procedures. Across the spectrum, other towers chimed on 123.0 MHz, 122.25 MHz, and 125.8 MHz, each with distinct patchy signals that my pulse would chirp every time a new frequency entered the view.

Listening to the Pilots

In the high‑southen portion of the band, between 118.3 MHz and 119.5 MHz, I found the cockpit voices of commercial jets. I turned down the frequency offset and sharpened the FM tuning on the receiver, and a pilot’s report “We’re 6 nm farther from the control tower” floated over my earbuds. Because I was logging the event in my notebook, I later could back‑track the conversation, noticing that the pilots used a specific call sign format: aircraft calls - “N12345.” The story took a technological twist when I realized that each signal on the 123.05 MHz frequency carried a 10‑kHz pilot autocontroll channel encoded beneath the FM.

Data Logging for the Future

Throughout the evening, I saved the captured signals as raw files, intending to layer them later with the GNU Radio Companion to decode pilot telemetry. The Pluto’s advantage lay in its direct sampling ability, which meant I did not need additional down‑converters or filters. I noted that the 50 MHz RF front‑end’s low‑noise amplifier could be driven to a point where it still remained linear for FM signals. Adjusting the gain to an “auto” setting reduced the need for manual tweaking, making the experience accessible even for newcomers.

Wrapping Up the Journey

As the sun dipped below the horizon, the last planes zipped off with their distinct 100 kHz carrier. When I powered down the Pluto, the emergency lights of the airport still pulsed in the background, an ever‑present reminder that aviation is a living continuum. The adventure, though born from a fleeting curiosity, became an ongoing narrative—each Tuesday night I sit back with Gqrx and a steaming mug of coffee, ready to play the next chapter of

The Dawn of a New Horizon

A sleek ADALM‑Pluto Revision D sits on a wooden workbench, its small metal chassis gleaming under the fluorescent light. It is no longer just a pocket‑size SDR; it has grown in power and precision, thanks to the latest 3.60 firmware that brings native UHD 4.1 support. Jane, a hobbyist with a passion for aviation, has just upgraded her Pluto to this newest revision and is yearning to hear the voices from the sky—specifically the faint whispers carried by the INMARSAT satellite network.

Polishing the Tool

Before plunging into the ether, Jane meticulously configures the Pluto’s oscillator: a crystal of 48 MHz locked to an external reference to reduce drift. She also tunes the LPF (low‑pass filter) to 100 kHz, smoothing the noise floor and sharpening the signal that will later slip under the altitude of the orbital path. The firmware update unlocks a new I/Q gain model, automatically compensating for temperature variations that would have otherwise blurred her captures.

Zeroing In on the Band

Using GQRX version 1.0, Jane sets the Pluto to 2160 MHz, the central frequency of the INMARSAT C‑band downlink. The software’s waterfall display pulses to life, showing a steady stream of downlink traffic—resonances mapped like a constellation beneath the invisible string of beams. Because the in‑band bandwidth of the Pluto is only 25 MHz, she configures an external tuner to shift the carrier into the SDR’s passband, a practice known to the community as “virtual heterodyne.” The resulting signal is a clean, clear audio stream of the air-to-satellite link.

Listening to the Sky’s Conversation

With the call sign “INMARSAT‑3” entering her software’s monitor, Jane opens the GnuRadio flowgraph that splits the incoming data into two streams: the raw I/Q for spectral logs and a demodulated FM channel for real‑time audio. She watches the automatic gain control settle on the subtle oscillations of voice transmissions between aircraft and ground stations, each fragment a piece of the larger tapestry. By saving the raw traces, she can later cross‑reference them with the ITU’s Annex‑M regulations, ensuring she’s not intruding on sensitive traffic.

Decoding the Hidden Vocabulary

While the audio output is audible, the true narrative lies beneath: flight‑plan inquiries, weather updates, and routine status check‑ins. Jane scripts a Python routine that parses the LSB (low‑side band) signals, extracting the ARN (Aircraft Runway Number) identifiers embedded in the subtle carrier phase alterations. The decoding process reveals a live feed of VFR flight plans filed remotely, decoded almost instantaneously as the satellite relays them back to the network. She cross‑checks the decodes with the FlightRadar24 API, proving that the satellite’s real‑time transmissions match ground‑based radar nets with millisecond precision.

Glimpses of the Future

Jane’s expedition does not stop at listening. The Pluto Revision D now boasts a built‑in DSP block that can perform in‑situ frequency slicing, allowing future experiments with in‑band multi‑channel reception—capturing dozens of aircraft voices simultaneously over the same satellite beam. She plans to integrate the device with a Raspberry Pi 5 and an over‑the‑aircast RTSP stream so that a web dashboard can plot live aircraft positions, leveraging the recent open‑source PySat library developed for the 2026 Q&A sessions.

Reflections Under the Starry Dome

As evening drapes its twilight over the workshop, Jane listens to her recorded tapes, hearing the melodic loops of pilots reporting their altitude and Setting the Stage

It began on a clear, cloud‑free night, the type of evening when even the quietest of air traffic controllers notice the faint hum of distant aircraft. I opened my ADALM‑Pluto Revision D, now the go‑to software‑defined radio for DIY aviation enthusiasts. Its upgraded firmware, updated in early 2026, adds support for 5.8 GHz Wi‑Fi bands that many commercial aircraft use for satellite uplinks, giving extra flexibility when hunting for ACARS bursts.

Tuning Into the Skies

With the radio positioned beside my monitor, I launched SDRangel and set the tuner to the ACARS carrier frequency of 1370.95 MHz, the standard for fixed‑wing aircraft in the United States. A gentle shift to 1385.0 MHz unveiled the English‑language VDL Mode 3/4 traffic emitted by high‑altitude drones and military jets. I zeroed the frequency using a nearby NOAA beacon, then tightened the bandwidth to 150 kHz—a sweet spot that isolates individual pixels of the Multi‑Carrier Burst (MCB).

Receiving the Signals

Pluto’s versatile I/Q output feeds directly into HDSDR, which I configured for an 8‑bit convertor and a 2 MHz sampling rate. The sound card’s 44.1 kHz clock provides the reference for my custom kernel‑space filter. Over the next hour, the demodulated waveform flickered with bursts that matched the known 120 Hz symbol rate of ACARS. With my receiver locked, I could listen to the silent chatter of data frames that ships across the airwaves invisibly.

Decoding ACARS

For decoding, I employed Gr‑ACARS, an open‑source GNU Radio module that interprets the AX.25 framing layer of ACARS bursts. The block network is arranged: first a 20‑kHz low‑pass, then a Merrcane‑type matched filter tuned to the 120‑Hz subcarrier. Once demodulated, the Python script acars_dec.py prints the decoded sentences in plain text, revealing flight‑plan updates, weather reports, and occasional VOR fix messages. Whenever the packet fails parity, the script flags a “loss” and waits for the next frame.

Capturing VDL

VDL Mode 3/4 operates at a carrier of 982.5 MHz with a quadruple‑rate 10‑bit symbol stream. To capture it, I reconfigured Pluto to a 10 MHz bandwidth and narrowed the tuner to 25 kHz. I used GQRX in “receive” mode, selecting the 4B/5B decoder from its plugin list. The real‑time software rendered the burst symbols into ASCII, while Python‑VDL converted the 5B encodings into human‑readable strings. The result: a running log of military cockpit voice data and routine status checks, all encoded in a digital form faster and more reliable than traditional voice.

Putting It All Together

By the end of the night, my Pluto was a cockpit of its own, surfacing ACARS traffic from a hundred miles above and VDL transmissions from far below. Each burst, once decoded, became a story—an aircraft heading, a weather complaint, a maintenance request. The combination of hardware support from Revision D, dedicated open‑source decoders, and the meticulous tuning required to isolate the 120 Hz subcarrier had turned a simple hobbyist setup into a miniature air‑traffic control node. It was a reminder that even the quietest frequencies carry a universe of digital whispers, waiting for curious minds to listen.

Beginning the Expedition

When I first heard about the ADALM‑Pluto Revision D SDR I was skeptical. It was still a hobbyist board, a modest piece of gear that, after all, sat on the shelf next to a vintage radio. But the promise of catching High‑Frequency Digital Link traffic—those terse weather reports and airport charts that replace static voice calls in the flight‑service world—had a fire in my mind. I imagined a little black box in a backpack, its tiny tuner plucking signals from the skies and turning them into data I could read on a laptop screen. That was my story, and it began with a few simple lies: Tuning and Triggering.

Choosing the Correct Band

HFDL transmits in the 137‑MHz atmospheric‑frequency band, specifically between 137.075 MHz and 137.125 MHz. The link operates on a 5.4 kHz subcarrier, a narrow slice of the broadband that the SDR can capture if we tune correctly. My first step was to set the center frequency on the Pluto to 137.1 MHz, then to instruct the desk‑top software to sample at 2.4 MS/s with a 2.4 MHz bandwidth. This gave me a generous envelope that included every detail of the digital burst we would eventually decode.

Bracing the Software

GNU Radio became my guide through the uncharted sea of raw samples. I crafted a flow graph that sequentially performed three vital tasks: a low‑pass filter to shed the wider noise floor, a frequency‑correction block calibrated to the board's phase‑locked‑loop jitter, and finally a down‑sampler that slashed the data rate from megasamples to just a few hundred kilohertz, sufficient for the 5.4 kHz subcarrier. I wrapped the end of the flow graph in a public domain _HFDL decoder_ module that demultiplexes the burst into the familiar ASCII format the National Centers for Environmental Information repositories use.

Listening to the Invisible Hand

When I switched the Pluto on and the gigabit‑speed USB cable clicked into place, I expected nothing more than a flicker of white noise. Instead, the screen lit up with a slowly evolving waveform. I watched the carrier swing like a tide, the subcarrier’s fine‑grained oscillations sliding across the horizon in my plotted spectrum. The numbers in the Downlink window ticked along, telling a story of distant radar operators updating overlays, their pointers humming between frequencies. When the decoder stamped out the first block of text—“HFDL ప్రస 70 kbit/s”—there was a thrill like finding a hidden word in a crossword puzzle

Getting Started with the ADALM‑Pluto Revision D on Linux

The adventure begins when I plugged the Pluto into a freshly updated Ubuntu 24.04 system. The driver on the board is the LMS7002M, so I first made sure that libhackrf and liblimesdr were present. Installing them with sudo apt install liblimesdr-dev limesdr-utils gave me immediate access to the device from the command line. The lmsinfo utility popped up a list of frequencies I could listen to—there was a sense of power in knowing that I held a miniature transmitter and receiver in my hand.

Configuring the Radio for DRM

Digital Radio Mondiale delivers their broadcasts on specific frequency bands: 228 kHz for AM, 9.2 kHz and 5.12 kHz offsets for 3‑band 5 kHz DRM, and higher‑band 27.5 kHz DRM. My first goal was to lock the Pluto to one of those transmitter frequencies. I opened a terminal, typed pmtc set rf freq 972000 to point at the 9.72 MHz DRM source, and then tuned the gain with pmtc set rx gain 60. The device hummed and accepted the configuration, confirming my hands were ready.

Building the GNU Radio Flowgraph

Without a GUI tool or bullet lists, I narrate the flowgraph that follows. The initial block is a LMS7002M Source that grabs samples from the Pluto, emitting complex baseband at 2 MS/s. Those samples feed into a DC Blocker, which removes any direct‑current bias. From there a Frequency Corrector realigns the carrier using a 10 kHz PLL, guarding the radiospace against drift. The most critical element is the DRM Demodulator sourced from the gr-drm package. This block decodes the FEC, deinterleaves the data, and reconstructs the audio stream.

Installing the DRM Toolkit

The DRM controller required a specific set of Python dependencies. I filtered them with pip install numpy matplotlib scipy alsa-base alsa-utils pyalsaaudio before running sudo apt install gr-drm. The binary package included a helper script called play-drm that wrapped all the heavy lifting in a single line. When I ran play-drm --freq 972000 --pluto, a window of oscilloscopes filled the screen, followed immediately by the faint rustle of a voice broadcast in the background. The audio dried into the headphones through ALSA, letting me follow the story of a city that never stops listening.

Fine‑Tuning and Troubleshooting

I soon discovered that DRM is merciless to bandwidth errors, so I had to trim the Pluto’s Rx Bandwidth to exactly 300 Hz. I tweaked the PyLMS7002M call to set set_rx_bandwidth(300). If the audio hissed, I increased the Symbol Rate buffer inside the demodulator. Low‑level debugging was made easier with rtl_fm -f 972000 -p 300 -s 200000 -D 2048 -g 20 - | aplay, demonstrating that raw I/Q data could also be fed into a quick gnuradio wrapper. This cross‑checking confirmed that the Pluto was indeed aligned to the DRM spec.

Enjoying the Broadcast

After a few minutes of calibrations, the Pluto output finished reverberating an uninterrupted audio stream from the 9.72 MHz band. The DRM’s error‑correcting codes had survived a storm of background noise, delivering a high‑quality audio that rivaled even conventional AM radios. In the quiet of my home study, I realized that the tiny SDR in my pocket was now a gateway to a worldwide, digital‑only radio network—ready for my next storytelling adventure. The male voice, the morning news, the city soundscape—all mapped through the flexible interface of the ADALM‑Pluto Revision D.

Stepping into the VHF World

Alex stared at the sleek black chassis of the ADALM‑Pluto Revision D and imagined a quiet evening with distant voices carried across the airwaves. The firmware had been updated to the latest March 2024 release, giving the board its full 1.5 GHz bandwidth and a stable driver for Windows 10. With a USB‑C cable in hand, Alex plugged the device into a Hisense laptop, letting the operating system recognize the Pluto as a virtual COM port and a USBAUDIO capture device. The driver installation prompt was a simple click through, and soon SDR# greeted the user with a familiar green screen.

Choosing the Right Software

Although SDR# offers many demodulators, DRM is a niche that requires a specialized plugin. Alex searched the forums and discovered the DRM‑Demod extension, which was first released in October 2023 and now supported Pluto drivers on Windows. The plugin was downloaded from the author’s GitHub, extracted into the SDR# plugins folder, and the program restarted. The new demod type appeared in the list, and Alex was ready to listen to Digital Radio Mondiale for the first time.

Tuning to the Spread Spectrum

Pluto’s tuner was set to 144.000 MHz, the center frequency of the VHF band commonly used for DRM. Alex configured a 2 MHz bandwidth to capture both the multiple modulated subcarriers and the essential pilots. When the cursor hovered over the frequency line, the software displayed a fine‑grained zoom that allowed a clear view of the spectrum. With the DRM‑Demod selected, the signal was processed in real time, producing a sleek waterfall display and an audible audio track that came alive when the vessel’s voice crackled through the oceanic air.

Fine‑Tuning the Audio Path

To get the best sound quality, Alex turned to the Audio Settings tab in SDR#. The DSP buffer size was set to 256 k samples, a value that balanced low latency with smooth playback on a Windows machine. The Audio Output was routed to the laptop’s built‑in DAC, and the speaker volume was raised to a moderate level. When the DRM broadcast kicked in, the ship’s captain’s voice was crisp, and the atmospheric tones of the intercarrier noise filled the background, all thanks to the precise calibration in the SDR’s AGC and the plugin’s dynamic range compression.

Observing the Resilience of DRM

Even in a setting with moderate interference from the local FM stations, the DRM receiver handled the noise gracefully. The plugin automatically removed the error‑correction codes and performed forward error correction to recover the original stream. Alex noted how the audio remained intelligible as the signal faded beyond the 600‑meter range of the ship’s transmitters. The resilient nature of DRM, coupled with the software’s ability to dynamically adjust the demodulator parameters, left Alex with a newfound appreciation for the standards of digital broadcast radio.

Where to Go From Here

With the Pluto Revision D now acting as an open gateway to the VHF band, Alex looked toward expanding the hobby. The SDR community suggested experimenting with a GNU Radio Companion flowgraph for DRM on Windows using the Pluto driver. This would allow more advanced processing, such as real‑time decoding of the embedded metadata, or monitoring in the “N‑carrier” and “P‑mode” variants of DRM. Alex also kept an eye on Pluto‑Control, an upcoming command‑line utility that would streamline frequent frequency changes without restarting the GUI.

Acquiring the ADALM‑Pluto Revision D

When I first heard that the latest PlutoSDR, Revision D, would fit the curves of the remote as‑service frequencies, I ordered a unit from Analog Devices. It arrived on a quiet weekend in November, its small white case blinking on the kitchen counter like a low‑power lighthouse. The revision D plate, stamped with the familiar “ADALM‑Pluto‑D,” already felt newer than the versions I’d tackled before. Inside, the FPGA tooling board had been upgraded to a faster Xilinx Kintex‑7, the clocks were cleaner, and the USB 3.0 connector promised smoother data streams.

With the hardware in hand, my first task was to convince macOS that this ARMable little wonder could play. After installing Homebrew, I ran:

brew install libusb
brew install gnuradio

Because the Pluto needs a USB‑3 driver, a trivial “modprobe” step was sufficient to activate it. The board showed up in depmod -c /dev/di..., and then, when I typed ./plutosdr-info, the screen blinked back a proud message: ADALM‑Pluto Revision D detected – all subsystems nominal.

Setting Up the Software Stack

Digital Radio Mondiale is a cousin of DAB, but the decoding chain on macOS is a little trickier. I opted for the open‑source GNU Radio flow‑graph approach. A script from the drm‑tools project on GitHub had already baked the necessary blocks:

git clone https://github.com/nikolauk/drm‑tools.git
cd drm‑tools
make
sudo make install

During the build, an issue popped up regarding the fftw3 libraries. The solution was simply to add fftw3-3 through Homebrew: brew install fftw3. Once installed, the compiled DRM decoder (drm_decoder) could be launched from the terminal:

drm_decoder --device "pluto:usb0" --freq 963000 --gain 30

This command tells the Pluto to listen to 963 kHz, the frequency used by the local DRM station, and

Setting the Stage

When the morning sun lit the small room of the university's radio laboratory, I unwrapped the new ADALM‑Pluto Revision D from its cardboard box. The revised model carried a fresh firmware patch that unlocked a finer‑grained gain controller and a hardened LNA, both essential for hunting faint signals in the 433 MHz ISM band. I placed the device on a breadboard, ran its 2.5 V power supply, and coaxed the SDR's SMA connector to a 50 Ω patch antenna pointed toward the rooftop balcony where a weather‑station sensor throbbed with telemetry every few seconds.

Aligning the Radio

Using the adalm_pluto library, I opened a Python notebook and set the center frequency to 433.92 MHz, the standard broadcast frequency for WS‑2815 motion‑sensing units. A quick sweep of the IF frequency revealed the customary quiet of the ISM band—no background radio astronomy, just the faint pulses of the sensor’s HVAC telemetry. By tweaking the gain from 20 dB to 43 dB, I found the sweet spot where the packet edges stayed crisp while the noise floor remained acceptably low.

Harvesting the Telemetry

With the PLL locked, I turned to GNU Radio Companion for real‑time capture. A Flow‑Graph containing a Pluto source block, an FSK demod block, and a message sink let me watch the sensor’s output as ASCII numbers stream onto my screen. The 433 MHz band, though crowded by other low‑power devices, remained relatively clean in our environment. I slipped a short‑range LoRa demodulator into the chain, just in case the sensor experimented with sub‑GHz spreading, and the device stayed silent.

Decoding the Secrets

After capturing a full packet burst, I piped the raw samples into a custom MATLAB script that performed a two‑tone heterodyne, extracted the bit rate of 40 ksps, and reconstructed the packet header. The telemetry payload carried humidity, temperature, and a checksum. Using the checksum, I verified the integrity of my captures, then plotted temperature over time. The plot reflected the hourly rise and fall of the balcony’s outdoor climate, underscoring that the Pluto Revision D could not only see but also read the invisible chatter of the 433 MHz band.

Fine‑Tuning and Lessons Learned

Working through the morning, I ran a series of experiments adjusting the IF bandwidth from 98 kHz to 300 kHz. The wider bandwidth let me detect opportunistic retransmissions from nearby industrial sensors that used a 868 MHz band leakage slot, but the added noise made the sensor’s packet edges blurrier. After several iterations, I settled on a 150 kHz intermediate bandwidth, striking a balance between capturing the sensor’s packets reliably and keeping the spectrum tidy. The revisions in the firmware’s cursor controls turned out to be a blessing, allowing me to retune in real time without restarting the device.

Looking Ahead

Once the day’s logbook closed, I began sketching a next‑step prototype: a fully autonomous monitoring loop where the Pluto SDR would trigger a Raspberry Pi whenever a packet exceeded a temperature threshold. Currently, I command the Pi via UART, but future work will explore direct socket communication over the SDR’s local network interface. If all goes well, the duo will send live telemetry to the campus’s data‑center, turning passive reception into an active sensor‑reading network that spans the entire 433 MHz ISM band.



© 2005 - 2026 AB9IL.net, All Rights Reserved.
Written and curated by Philip Collier / AB9IL.
About Philip Collier / AB9IL, Commentaries and Op-Eds, Contact, Privacy Policy and Disclosures, XML Sitemap.