On a cool, breezy evening I set up my SDRplay RSPdx on the balcony, the signal of the city pulsing around me. The panel lights flickered as I connected the wideband receiver to my laptop, booting up the SDRunet interface that had been updated last month to include the newest plug‑in for CSS analysis. I had learned from the recent SDRplay forums that the RSPdx, with its 1.5 GHz tunability and 122 kHz bandwidth, is well‑suited for hunting the slick waveforms of Chirp Spread Spectrum.
My curiosity was piqued when an old friend sent me a link to a 2025 tutorial that described how LoRa, a popular LoRaWAN network, relies upon CSS for low‑power, long‑range communication. I had always known CSS was a variation of spread‑spectrum techniques, but the video clarified that it is a form of chirp modulation in which the frequency of a single continuous signal linearly increases or decreases over time. The result is a distinctive waveform that spreads the same information over a wide band, making it resilient to interference and jamming.
After fine‑tuning the RSPdx to 915 MHz, I began scrolling the spectrum. A soft, slowly rising tone emerged from the noise floor—an unmistakable chirp. The software’s new CSS plug‑in, released in March 2025, allowed me to automatically detect the start and end of each chirp, then decode the underlying symbol. I watched the visualizer display dozens of CSS pulses, each carrying a tiny packet of data. The RSPdx’s low noise figure meant that even at the limits of the receiver’s range, the chirps were still legible.
The decoded packets told a story: an environmental sensor sending temperature readings back to a central cloud. Each packet differed in its frequency sweep, a coding technique that reduces the probability of collisions in dense networks. I realized how CSS’s inherent robustness—thanks to its slow, continuous frequency sweep—helps devices survive multipath and fading without needing a powerful transmitter.
By the end of the night, the RSPdx sat quietly beside me, its display glowing with captured chirps. I had turned a simple hardware setup into a window onto a world of low‑power communications. The combination of the SDRplay RSPdx’s wideband capability with the latest CSS software made it possible to not only see but also understand how devices like LoRa nodes communicate across vast distances. My next adventure will be mapping a fleet of drones communicating over the same chirp spectrum—an exciting, data‑rich field that would be impossible without this remarkable technology.
It starts on a rain‑kissed evening, when the city’s humming traffic is drowned out by the faint, rhythmic buzz of distant satellites and long‑range radios. At the back of a cramped garage, a lone enthusiast peers at a newly acquired SDRplay RSPdx, its metallic casing humming softly under a flickering fluorescent bulb.
For the first time in years, the RSPdx’s crystal‑clear screen reflects a spectrum plot that spans a huge stretch of the electromagnetic world. The enthusiast remembers the old days of multimeter marathons and line‑throw spectrographs, but now a single dongle holds the promise of exploring anything from my radio band to the UHF highways where LoRa islands drift. LoRa at 868 MHz and 915 MHz are fierce contenders, their low‑power whispers cruelly hidden in the shallows of broadband noise.
The RSPdx’s firmware update, released early 2024, added a LoRa‑support profile. This profile automatically tunes the receiver to a 125 kHz sub‑band, matching the bandwidth used by most LoRaWAN frames. As the enthusiast opens CubicSDR, the screen fills with a dense jungle of chirps, each a message from a field sensor, an agricultural relay, or a city traffic rail.
Turning the knobs, the RSPdx’s built‑in low‑noise amplifier, whose datasheet claims a noise figure of –13 dB at 915 MHz, is coaxed into a golden state of receptivity. The user notes that the RSPdx’s instant bandwidth of 30 MHz is more than generous for a narrowband protocol, allowing the SDR’s FFT engine to paint each LoRa symbol with unprecedented clarity.
With the gain locked, a clear burst appears on the spectrum. The user steps into the world of software‑defined decoders, launching a LoRa decoder plug‑in that parses the Phase Shift Keying stream into human‑readable data. Through a gentle tuning sweep, the investigator locates multiple dilated LoRa signals, each tagged with its unique 32‑bit DevAddr. The dynamic range of the RSPdx makes it possible to pick up a single sensor’s transmission from a point 15 kilometers away, even in a city full of other RF chatter.
As the story unfolds, the enthusiast discovers that the RSPdx’s automatic gain control (AGC) is a critical ally – no more banging the gain dial as the signal strength waxes and wanes. The RSPdx even allows fine‑tuning of the filter architecture, letting the user sculpt a narrow 50 kHz band around a frantic LoRa device. All of this translates into higher SNR, reduced demodulation errors, and a more reassuring confidence that the tiny wearable sensor in the quiet cottage out west is speaking up loud enough.
When I was tinkering in my garage, a hobbyist project that had me glued to the screens for weeks, a crack in my wall opened up. Inside was an SDRplay RSPdx that someone had left behind, dusty and forgotten. I lifted it out, wiped the dust off, and the wheel group on Reddit whispered that the RSPdx was suddenly capable of growing into something powerful. That whisper turned into a full-blown obsession with LoRa, the lightweight, long-range network that had taken rural communities by storm.
LoRa operates largely in the 860‑960 MHz band, a slice of the UHF spectrum that feels like a secret doorway for whispers between smart meters and cell service villages. The RSPdx’s 28 MHz bandwidth is a generous canvas, giving me the freedom to capture the entire LoRa uplink spectrum in one sweep. From the moment the magic chip in the RSPdx tuned to 868 MHz, I could hear the faint chirps that signify a heartbeat in the network.
The heart of the story was the antenna. I had to pick a needle that could train its focus like a hunter's eye. The first choice was the Catalina-ligo 9200 GHz and the second was a wide‑band Goldstone 5.5‑MHz jumper feed. Each offered a different narrative: the 9200 GHz was tough and narrow, perfect for picking whispers from a specific point; the Goldstone was a broad‑canted lover, ready to hang on the broader spectrum.
Bearing in mind the distance, I set up the 9200 GHz on a 1.5‑meter mast perched on a pole outside the house, pointing to the suspected LoRa emitter near the network hub. I had to shield it from the house’s interference, aligning the antenna like an arrow to a moving target. The Goldstone 5.5‑MHz, on the other hand, sat on a low‑profile tripod near the sidewalk, picking up general chatter from neighborhood devices.
The RSPdx’s companion software, SDR#, became my orchestra conductor. First, I set the suppressor to an ideal 30 dB to block out the distant cellular traffic. Then, I tuned the tuner— the LNB2 connector was perfectly aligned with a 25 MHz center frequency, letting the dream assets bleed into the SDR’s memory.
The challenge that emerged was not hearing LoRa at all— it was seeing the characteristic chirping of a remote module that announced itself only once per minute. Each chirp was a paragraph in a story only the RSPdx could read. That was when I realized that a directional antenna added richness to the story. The 9200 GHz, with its high gain, let me nudge the SDR towards the narrow singular footsteps of the LoRa device.
After a handful of cycles of adjusting rotors with the remote scribe in Gqrx (the SDRplay open‑source companion), a pattern emerged. The device was emitting at a clear 868.312 MHz, exactly matching the network's LoRaWAN frequency plan. The directional antenna caught the burst with a peak that was 12 dB higher than what the non‑directional anchor could provide.
Each time that burst occurred, I would jot it down, and it felt like a different chapter: the baby of a sensor, the grown‑up of a meter, the elder's voice of a gateway. This line of storytelling bridged my garage gear with real‑world deployments and rewired my perspective on radio.
Through this narrative, the RSPdx became more than just a piece of equipment. It turned into a storyteller, raising the voice of the LoRa network so that it could be appreciated by all those who used it for their everyday agriculture, conservation, smart home, and emergency mapping. My experience echoed the latest community discussions from 2024, where makers stress the need for high‑gain directional antennas to pick up the faint, infrequent whispers of networks situated at thousands of meters away.
Now, each night I sit by my window, the RSPdx humming softly as the directional antenna points toward the horizon. LoRa chirps me a lullaby, a subtle reminder that the stories of invisible networks can be heard if you listen with the right instrument and the right seeking heart.
When Sam first touched the SDRplay RSPdx, the excitement was palpable, but the reality soon set in. The world of Long‑Range (LoRa) is a vast wilderness of faint whispers, especially when the signal originates from hundreds of miles away. Sam needed a way to coax those whispers into a clear conversation. That was the beginning of a quest that turned an ordinary receiver into a detective.
The RSPdx is celebrated for its 35 MHz to 1.8 GHz flexibility, yet the most dramatic gains came from its firmware version 2.56, released in May 2024. This update introduced an adaptive IQ correction algorithm that reduced spurious intermodulation by up to 7 dB in the 900 MHz band. It was a turning point for anyone hunting for weak LoRa packets at 915 MHz.
Sam paired the RSPdx with a Hamamatsu LNA200, a low‑noise amplifier capable of 25 dB gain with 5 dB noise figure at 915 MHz. The amplifier, mounted on a custom shield, added a fresh cocktail of hum and 60‑Hz hiss – an annoying price for the clarity that followed.
While the LNA brought strength, it also demanded precision. Sam installed a military‑grade Butterworth band‑pass filter crafted for the 860 – 960 MHz range. The filter’s 1 MHz roll‑off created a biting edge that cut out the interference from weather radar and nearby Wi‑Fi channels. Equipped with a Q of 90, it delivered sharp discrimination without puffing up the already narrow LoRa bandwidth.
Between the RSPdx’s input and the preamp, a third‑stage RF isolator absorbed all unwanted reflected energy, letting upward‑propagating waves glide unimpeded into the chain. This small component wielded a 30 dB isolation, making the signal path feel as if it were carved from crystal.
Sampler’s radio engineer friend suggested a center frequency sweep hugging the 915 MHz region with a resolution of 30 kHz.
When I first encountered the name *LoRa*, I thought of little dots in a galaxy far away. It turned out to be a modest yet powerful radio modulation that lets tiny devices talk across cities while barely touching the battery. The allure was clear: broadband low power without the complexity of Wi‑Fi or Bluetooth. I was determined to listen, to hear what made that invisible web sing.
I surveyed a sea of software‑defined radios, each promising miracles for a price that could stretch a coffee budget. The SDRplay RSPdx emerged as a clear winner: six‑band, 10 MHz to 2.4 GHz, a 1.5 Msps sample rate, and a diameter that could fit in my pocket. Its firmware, updated in March 2024, extended the front‐end parameters, allowing clean reception even at the upper 2.4 GHz band where LoRa gateways often operate.
Installing the SDRplay driver was a breeze through the apt package manager, and the radio-fx plugin for GNU Radio worked like a charm. The real heart of the story, however, lies in gr‑lora_sdr. The latest 0.4.1 release, just a few weeks ago, added a dedicated block for the SDRplay device, resolving a sampled‑rate mismatch that had plagued earlier attempts. I set the sample rate to 1.125 Msps, mirroring the 125 kHz bandwidth LoRa uses, and let the block handle the intricacies of chirp‑spread demodulation.
My first successful reception landed on a 915 MHz channel, a quiet town where a weather station whispered its readings. The gr‑lora_sdr block extracted packets with a 99 % word‑error rate tolerance—perfect for the stubborn f=125 kHz bandwidth. The data decoded as a single temperature reading, a humble testament to a chain that bridged the sea of radio waves to my laptop’s LED screen.
The journey was not without its bumps. The RSPdx, while robust, required a careful IF offset to reduce the strong carrier bleed that plagued linearity at the lower 10 MHz range. I employed the ‘custom tuning’ feature in the device’s GUI
It began after a quiet evening of watching the sunset from my small balcony when a faint, almost inaudible buzz drifted up from the street. I stretched my RSPdx out of its little dish, piped it through a cheap ESP32‑based LoRa gateway receiver and hung onto the SDR++ console in the timing of a late‑night engineer. The SDR++ interface glowed with a promise I had almost given up on; a software‑defined radio capable of turning an affordable RSPdx into a sleight‑of‑hand listening post for the world’s under‑heard signals.
After a quick reset of the RSPdx firmware to 6.51‑beta, I opened SDR++ and set the frequency to 868 MHz, the primary LoRa band in most of the world. The spectral display offered a green‑neon sweep across the bandwidth. Spectra were not the key; the real test was demodulation. I ran the default demod module, but the screen dutifully showed an empty dot over 50 kHz — LoRa was missing in the grand orchestra of radio noise.
Guided by a GitHub thread dated March 2024, the devs of SDR++ had released a LoRa demod plugin that could perform the chirp‑spread‑spectrum demodulation needed for LoRa. I cloned the lora-demod-plugin repo, followed the instructions to build it with CMake and make clean. The build log was peppered with “CMAKE -DCMAKE_CXX_STANDARD=20” flags which meant the plugin was written using modern C++ features. Uploading the built lora_demod.dll into the SDR++ plugin folder lit up the interface’s plugin list with a new icon, the LoRa signal waiting to breathe.
I reloaded SDR++ and opened a new channel. The plugin’s UI was simple: set the data‑rate to 125 kHz, bandwidth to 125 kHz, and the spreading factor to 12. I watched the carrier climb and then spurt, a sweep of green indicating the LoRa chirps. Downstream of that, a here‑and‑now captured packet appeared: a ~1 kB payload with a CRC that held. The plug‑in verified the checksum, then printed out the SF12 LoRa packet in a neatly formatted hex dump, followed by a human‑readable string that matched the packet logged by an older gateway.
In the early spring of 2024, a new SDR++ version (2.12.0) shipped with a noise floor reduction algorithm that worked in harmony with the LoRa plugin. By adjusting the FilterWidth to 0.5 MHz and enabling the Auto‑Gain Control switch, the plugin began filtering out the ambient digital noise that usually obscured the thin tails of LoRa chirps. I was able to detect a near‑silent transmission coming from a neighbor’s LoRa environmental sensor, picking up the packet in full integrity, even though the device was condemned by a non‑visible spectrum interference from an adjacent 5G dump.
With the plugin now a trusted companion, the RSPdx transforms from a passive dish into a dynamic liaison between the business world of IoT and the explorative frontiers of amateur radio. New releases on the SDR++ GitHub page promise to add support for SAR‑LoRa, an alternate SF set tailored for short attacks, and for the Hytera LoRa lower‑band 433 MHz extensions. Every update gives me fresh knobs to tweak, subtle tweaks that underline how software-defined radio is a living ecosystem where hardware and code co‑ html
Yesterday I powered up the newest SDRplay RSPdx and felt a surge of anticipation as the cheap, high‑performance dongle waited in my hands. Its dual‑band operation can graciously cover the two LoRa bands (868 MHz in Europe and 915 MHz in North America), but the real magic happens once the software opens up its full potential.
After a quick search on the SDRangel GitHub page and a handful of recent forums, it became clear that only the latest v3.9.1 release is compatible with the RSPdx’s newest firmware. SDRangel acts as the bridge between hardware and the ChirpChat demodulation engine, giving us everything from raw FFT outputs to advanced decoders for industrial protocols.
Attach the RSPdx to a USB 3.0 port. Open SDRangel and select “SDRplay RSP” from the source list. In the configuration dialog, set the center frequency to 868.0 MHz and the sample rate to 2 MS/s—enough bandwidth to capture a full LoRa channel without overloading the spectrum analyzer. Turn on the Gain Control and leave the “Rf Gain” at its midpoint; the RSPdx performs well with automatic control of LO bias.
After installing the ChirpChat plugin from the SDRangel extras package, launch it from the “Plugins” tab. Configure the chirp parameters to match the LoRa transceivers you aim to capture. Beiž? (I’ll choose SF=9 and Bandwidth 125 kHz)—these settings will allow the plugin to correctly demodulate the typical 250 kHz module windows.
With the source locked and the chirp tuned, press the “Start” button in ChirpChat. A colourful waterfall will soon bloom across the screen, the grey bands are unmistakable side … d. Beside each burst, you’ll see a live display of decoded payloads and telemetry. The plugin’s Auto‑Detect function feeds back immediately: each packet is parsed, and the decoded text appears in a scrolling log that you can export for analysis.
To eliminate background chatter, use the Filter Floor slider. Set it to 60 dB below the maximum FFT level – that snips away all unwanted noise while preserving the faintest LoRa signals. For deeper analysis, enable Save as CSV and feed those files into a lightweight Python script that calculates duty cycle and burst lengths.
During my first live test, a factory sensor sent heartbeats every 30 seconds. ChirpChat decoded each packet instantly, and the Frequency Offset indicator—a small white bar on the waterfall—showed a jitter of only ±12 kHz. That level of precision is all thanks to the RSPdx’s 10‑micro
It began with a slow, rhythmic pulse drifting across the 915 MHz band. My SDRplay RSPdx lay on the bench, its 10‑to‑1700 MHz range ready to sift through the ocean of radio chatter. I hooked the device to my laptop, pulled up GNU Radio, and let curiosity guide my hands. The first subtle click in the gr‑lora flowgraph confirmed that I was indeed picking up a LoRa packet. The low‑rate, long‑range signal, invisible to the average amateur radio ear, was now a stream of bytes waiting to be decoded.
Before demodulation could begin, I verified that the RSPdx firmware was current with the latest SDRplay‑Core. With sudo make install I moved the new firmware into place and rebooted the “RealTime” plugin. The driver reported a stable 28 dB gain and 48‑kHz oversampling, which matched the LoRa (LoRaWAN) bandwidth of 125 kHz when down‑sampled to the 6‑kHz sub‑carrier spacing needed for demodulation.
Within GNU Radio, I assembled a flowgraph very similar to the one found in the official gr‑lora repository: an SRC: SDRplay CDR block feeding a Float to Complex, then passing through FFT filter and the LoRa Demodulator. The output was a Message Strobe that could be routed to a virtual serial port. I found that the simplest way to acheive this was to write the decoded payload to a named pipe, such as /dev/pts/3, creating the link with socat -d -d PTY,raw,echo=0 PTY,raw,echo=0.
While the RSPdx was busy breathing life into LoRa packets, I turned to the Reticulum framework, the open‑source Mesh‑Topology stack that lets small radios become a resilient network. I fetched the project with git clone https://github.com/antirez/reticulum.git and entered the directory. The build instructions on the README were straightforward: python3 setup.py install. I installed libcee and Pygtrtlab to ensure proper serial support. The important part for this application is the Popcorn SDK, which bridges the virtual serial port to a remote socket that Reticulum can listen to.
With the flowgraph running and the named pipe open, I launched a simple Python script that read bytes from the pipe and wrote them to /dev/pts/3. Reticulum, in turn, used its wradio interface to publish the data over an IP socket that Meshchat could consume. The chain looked like this:
At first the data seemed like raw noise, but after a few minutes of tuning the LoRaWAN‑SF9 settings, the packets began to look like coherent “hello world” strings, sometimes garbled but always a hint of a larger conversation. When Meshchat finally picked up the first coherent packet, it printed:
Node-05: 2026‑04‑10 22:15:12 — “Hello from the field”
That single line confirmed that the entire chain—RF capture, demodulation, serial bridge, and mesh routing—worked end to end. For the next few hours I spun up more RSPdx units, each listening on a slightly different frequency, and watched the network bloom with packets dancing through the air and through the local mesh.
The experience taught me that even a low‑cost, low‑power LoRa signal can become part of a resilient, self‑healing network when paired with the right tools. The <
Alex had recently stumbled upon a pair of SDRplay RSPdx receivers tucked away in the garage, a relic from a friend who had once wowed the local ham club with elaborate radio experiments. In the dim glow of the laptop screen, Alex’s curiosity was sparked by a flyer from Reticulum Meshchat, an open‑source mesh network protocol that promised voice, messaging, and even simple file transfers over irregular links. The challenge was clear: Could the ancient analog patterns of LoRa radio be captured by the avant‑garde SDR hardware and funneled into Reticulum?
First Alex powered on the RSPdx and ensured the latest RTS Driver was installed from the official vendor site. The device was instantly recognized by the OS; a quick rtl_eeprom command confirmed the chip’s firmware was up‑to‑date. Alex then launched the SDRplay SDRview GUI, selecting the RSPdx as the source and tuning to the cognitive band where LoRa traffic was expected. The GUI idly displayed the live waterfall; a faint, quasi‑static pattern emerged when the transmitter slid into frame – a tell‑tale of the chirp‑based LoRa modulation. With a few clicks, Alex set the gain ladder: a gentle RF gain of 0 dB followed by a calculated baseband boost, a configuration that kept the noise floor low enough to reveal the sparse bursts but high enough so the chirp didn’t discharge into digital silence.
While some anglers of the radio community prefer the instant visual delight of SDR#, Alex chose QRadio for its robust demodulator ecosystem. Inside the application Alex created a new pipeline: from the RSPdx receiver, the IQ data were flowed to a LoRa Demodulator block that was backed by the LibLoRa library. The block’s settings were tweaked: spreading factor 7, bandwidth 125 kHz, coding rate 4/5 – the canonical parameters that matched the local LoRa devices. A printout of the decoded payload surfaced in the console: hexadecimal bytes that were screaming for action.
At the heart of the pipeline lies the demodulation process. LoRa’s spread‑spectrum technique means each symbol is represented by a bootleg frequency chirp that drifts over a 125 kHz band. The RSPdx’s 2 MHz sampling rate faithfully captured the nuance of that chirp. The LoRa Demodulator extracted the phase shift from one chirp to the next, converting a hazy blur in the spectrum into a crisp vector of bytes. On the screen Alex saw not only the data, but the sequence number and CRC, every packet validated by a digital handshake that assured fidelity before any transmission of the payload northbound.
On a crisp evening, the white‑spotted RSPdx lay quietly among the array of antennas on the hilltop, its ever‑watchful tuner set to the 915 MHz band where rumors said the old ham operators still whispered. The SDRplay RSPdx, with its 1 MHz sampling rate and a pair of coaxial cables chirping from the ground, had been coaxed into life by a hand‑crafted Python script that sent it a sequence of sine waves and waited for return tones. But the real magic would come after the tuner had handed off the raw spectrum to the next actor in the story: the RnodeInterface.The RnodeInterface is a lightweight, cross‑platform module that falls between the SDR and the LoRa stack. It listens for the sinc‑shaped chirps that latch onto the 868/915 MHz ISM bands. When the RSPdx captures a LoRa packet, the interface decodes the time‑frequency sweeps, extracts the chirp symbols, and supplies them to the application as a stream of payload bytes. In practice, one connects the RSPdx to a PC, runs the play command of the SDRplay DSP utilities and lets the RnodeInterface run the loRaDecode.py script. The script, in turn, writes decoded packets to a ring buffer and checks the CRC of each packet. If the CRC validates, the payload is considered trustworthy and can be forwarded to the upper‑layer application.
The RnodeInterface does more than just decode. It forms a bi‑directional bridge: by listening to the SDR’s IQ data, pulling in the phase and amplitude of the chirps, and writing back to the same tuner a retransmission command – all within 5 ms of each other. This low latency is essential for building a two‑way LoRa link, because the network stack that follows, Reticulum Meshchat, relies on timely replies from nodes.
Reticulum is a generic, low‑bandwidth, self‑healing network stack originally written for the Raspberry Pi’s LoRa HATs. It turns each raw packet into a routable teleportation of data between nodes, even if the nodes hop around. When it sits atop the RnodeInterface, we get a mesh that can, for example, chat with a weather beacon, echo back a verification code, or coordinate a swarm of drones. The key is that Reticulum can run over any link that provides the RFC 2364 LoRa packet format – and that’s precisely what the RnodeInterface delivers.
To start, one creates a reticulum.conf file that designates the LoRa device as the default Link. A simple example looks like this:
Link:
Type : LoRa
Channel : 868.0
Frequency : 868.0
PayloadSize : 255
DutyCycle : 0.1
Enable : True
Next, we launch the Meshchat daemon. It discovers its peers by overhearing hello messages – packets that contain not just the node's public key but also a unique identification string. With the node alive in the network, we can fire a command: meshchat hello “Who’s there?”. The request posts over the LoRa channel, finds the nearest node, and returns an answer almost instantaneously. The RnodeInterface keeps the packets flowing, and the Reticulum stack takes care of packet routing, acknowledgments, and error‑free delivery.
The real test of the system was a low‑deluge, two‑way conversation with a base station in a remote valley. By dialling the modulation index to 0.3, we achieved a half‑kilometer range while maintaining an 0.85 packet error rate. At that stage, the RSPdx’s spectral noise floor dipped to –140 dBm, allowing the RnodeInterface to resolve signals even when a storm brought a 1 dB noise floor increase. The WaitTime in Reticulum was tuned to 750 ms, which matched the LoRa chirp duration and ensured that the ack packets sat comfortably in the air without overlapping the payload.
Now, under a starlit sky, the R
© 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.