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.
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.
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.
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.
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.
A calm yet scalable step left Alex feeling in control: the decoding. The flowgraph ended in a custom WFAX_Decoder block, written in Python
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.”
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.