Thank you to Zoltán Dóczi (HA7DCD) from Z2Labs for writing in and sharing 'SatHunterSDR', a new satellite-hunting SDR receiver app for Android. You pick a satellite, the app tunes to it and follows its Doppler shift, and a sky radar turns with your phone to help point the antenna. Nearby satellites are also labeled on the waterfall at their Doppler-shifted frequencies.
The app works with RTL-SDRs (tested with our RTL-SDR Blog V3) and ESP32-S3 ESP-SDR devices over USB OTG, and includes CW, APRS, 9600 bd G3RUH telemetry and SSTV decoders. It's aimed at classrooms, so it can run with a simulated pass and no hardware, and students can write their own decoder plugins.
The code is open-source under GPLv3, with APKs available on GitHub. The plan is to create a STEM kit with the Spacewalker LNA 434 MHz, which has a Crowd Supply campaign coming soon.
Thank you to Simpli for writing in and sharing a set of free radio decoders that run entirely in the browser. There are pages for Morse, RTTY, PSK31, SSTV, weather fax, NAVTEX, APRS and the DCF77/MSF time signals, plus a signal identifier that tries to name an unknown mode and links to the matching decoder.
Audio can come from your SDR program via a virtual audio cable, a microphone, a WAV or MP3 recording, or a WebSDR playing in another browser tab (this needs a desktop browser with screen sharing), so no hardware is needed to try them. Simpli tested them on DWD RTTY on 4583 kHz and DWD weather fax on 3855 kHz via the Twente WebSDR, as well as on live PSK31 and an ISS SSTV recording in PD120 mode.
Simpli writes:
A detail you might find interesting: the WebSDR player inserts 128 zero samples about once a second, and its playback speed wanders by up to half a percent. That's enough to tear a fax picture apart. The fax decoder cuts those gaps out and tracks the speed from the white tone, so the chart comes out straight. The RTTY page also switches to reversed polarity by itself when it sees too many framing errors.
All decoding happens locally with nothing uploaded, and the tools are free with no sign-up. This is similar in spirit to OFFgrid-SDR, which we just posted about, as both run in the browser and can automatically identify a mode. However, OFFgrid-SDR connects directly to an RTL-SDR via WebUSB and is open source under the GPLv3, while Clever Quest Lab's decoders work on audio from any receiver and do not appear to be open source.
Thank you to Przemysław Wcisło (SO5DZ) for writing and sharing rxx_lora, a command-line LoRa receiver for RTL-SDR and SDRplay RSP devices. Przemysław notes that it was designed in the spirit of rtl_fm, so there are no GNU Radio flowgraphs to build or maintain. Instead, it is a single small C binary (rtl_lora or rsp_lora, plus file_lora for saved I/Q captures). Decoded packets are printed as JSONL to stdout, so you can pipe them into other programs.
Przemysław writes:
It's fast. The entire receive chain (detection, sync, demodulation, FEC) runs from dozens to hundreds times real-time, depending on the PHY parameters and hardware, of course.
It's sensitive. I've benchmarked the binary end-to-end over AWGN, and it comes within ~1-2 dB of ideal theoretical LoRa performance. It can easily demodulate Meshtastic's MediumFast preset at -14 dB SNR. I can also vouch for this based on real-world observations. Valid decodes regularly pop up at -12 to -14 dB. I even saw a frame at -17 dB SNR, although it had a bad CRC :)
It's stable. It's never crashed on me, apart from when I accidentally wiggled the dongle out of the USB port ;) It should also be stable from a software quality perspective. I've put together an extensive suite of quality gates and tests, including noise tests, tests against previously recorded over-the-air captures... This should make it quite unlikely that an upcoming change will accidentally introduce a major regression.
It doesn't require much: librtlsdr, FFTW, a C compiler, and make. Most who have dabbled with RTL-SDRs probably won't need to install a single package on top of what they already have. Python and a few libraries are used for the tests and extra tools, but they're not required for normal operation.
The receiver implements the standard LoRa PHY, so it can be used for Meshtastic, LoRaWAN, MeshCore, APRS-over-LoRa and other LoRa signals. An included Python script also decrypts Meshtastic packets with the default or configured channel keys and prints them in a readable form.
The demodulation core is derived from the gr-lora and gr-lora_sdr GNU Radio projects. The code is open source under GPLv3 and available on GitHub. It runs on Linux, and the README says macOS "probably" works too. The SDRplay version also requires the SDRplay API. For Meshtastic reception, it covers similar ground to the GNU Radio-based Meshtastic_SDR project, which we previously posted about, but with a much smaller footprint.
rxx_lora Decoding Meshtastic Packets with an RTL-SDR
AI Disclaimer: Przemysław notes that the sensitivity improvements came from "patient and deliberate use of strong AI tools", and the README states that the project made heavy use of AI for both coding and theoretical exploration.
Thank you to Luis Lopez Martinez for writing in and sharing the release of his open-source software, IC-SDR, a new multi-mode SDR application for Windows written in Gowith a focus on performance and efficiency. Luis writes:
IC-SDR supports AM, NFM, WFM, LSB and USB demodulation, along with several integrated digital decoders:
AIS
ADS-B (1090 MHz and UAT 978 MHz)
Radiosondes
APRS
RTL_433
DMR
SSTV
TETRA
It also includes a memory bank, real-time spectrum and waterfall displays, an audio recorder with automatic silence removal, and a frequency-segment scanner with instant triggering.
Over on GitHub, Richard YO3GND has released a Flipper Zero APRS TX application that pushes the device's onboard CC1101 radio into transmitting Bell 202 AFSK, despite FM not really being what that chip was designed to do.
The author is upfront that this is very impractical: it is transmit-only, the transmitted signal is imperfect and not recognized by some APRS hardware (software decoders seem to work well), and the joystick text entry is painful.
The implementation builds the full APRS stack on the Flipper itself, handling packet type construction, AX.25 framing, and waveform generation in software, and supports status, position, bulletins, and direct APRS messages. There are also some low-level settings exposed in the UI, including 300 baud operation, preamble length, and lead-in tuning, alongside the standard APRS settings.
While this may be impractical for any real use case, the idea of implementing the protocol properly on a constrained device is an interesting read.
Thank you to Sarah Rose Giddings (aka Signals Everywhere) for submitting to us her latest project called aprs.chat. This is a web service that allows ham radio operators to have all of their incoming APRS (Automatic Packet Reporting System) messages (regardless of SSID) saved in history on the web platform. This will enable operators to never miss a message, even when their radios are turned off. The service works over the APRS-IS (APRS Internet Service) network, which bidirectionally connects APRS radios to the internet.
Sarah notes that the service currently works through the website, but an Android app is planned for release in the near future. Patreons of Sarah/Signals Everywhere can get early access to the Android app on request.
More information about the service can be found on this post on the Signals Everywhere blog.
GreenCube is a CubeSat by the Sapienza University of Rome, and it is designed to demonstrate an autonomous biological laboratory for cultivating plants onboard a CubeSat.
While this is an interesting mission in itself, for amateur radio operators there is another interesting facet to the satellite. Unlike most CubeSats which are launched in Low Earth Orbit (LEO), GreenCube was launched higher in Medium Earth Orbit (MEO) which provides a larger radio reception footprint over the earth. The satellite also contains a digital repeater (digipeater) at 435.310 MHz, which allows amateur radio operators to transmit digital radio packets up, and have the satellite repeat the packet back over a wide area footprint on earth.
Over on his latest video, Matt, from the TechMinds YouTube channel shows us how to receive and decode the packets from the GreenCube digipeater. In his demonstration Matt uses an SDRPlay RSPdx as the receiver, SDR++ as the receiver software, SoundModem as the packet decoder, GreenCube Terminal for displaying the messages, and GPredict for tracking the satellite and compensating for the doppler effect. He also notes that while a directional antenna on a motorized tracker is recommended, he was able to still receive packets with his omnidirectional terrestrial antennas without much issue.
Since the famous takedown of a suspected Chinese spy balloon, US jets have shot down a total of three more unidentified balloon objects, now suspected by officials to be 'commercial or benign'. There is speculation that at least one these three objects may have been an amateur radio 'pico' balloon.
One part of the amateur radio hobby is launching high altitude balloons with various radio and other payloads. Larger amateur radio balloons launched in the USA require FAA clearance, need a radar reflector attached, and usually continually transmit APRS telemetry before naturally popping and falling back to earth after a few hours, just like a weather balloon.
However there is also the simpler 'pico' ballooning hobby, which involves the use of mylar helium party balloons to launch small solar powered payloads that are only a few grams in weight. They typically transmit low power WSPR at HF frequencies and can only transmit whenever there is sufficient solar power available. Amateur radio or SDR hobbyist stations around the world can pick up these transmissions, and report them on amateur.sondehub.org and/or wsprnet.org. Well built balloons can totally circumnavigate the globe several times over several months before degrading.
While termed 'pico', the party balloons used can still be roughly a meter in diameter on the ground, with some latex balloons potentially expanding further at high altitudes due to the low atmospheric pressure. These balloons can be legally launched from almost anywhere in the world. In particular in the USA there is no FAA clearance required to launch them due to their payload being much less than the limit of 4 lbs (1.8kg).
32" Silver Orb Shaped Mylar Balloon used for Pico Ballooning
There is speculation that at least one of the objects shot down over Canada, Yukon by a US Air Force jet may have been amateur radio pico balloon K9YO-15 which was launched from Illinois on October 10 2022. It was on it's seventh circumnavigation of the globe after being aloft for 123 days.
The launch blog post indicates that the K9YO-15 balloon was flying a silver mylar 32" sphere SAG balloon which appears to be this one from balloons.online. Unlike latex or rubber weather balloons which inflate and stretch as they rise into lower atmospheric pressures, these mylar balloons can't stretch, so their fully inflated ground size will be the same as their size at high altitudes, meaning the pico balloon won't get much bigger than 32". The payload was a GPS module, Arduino, SI5351 used as a WSPR and APRS transmitter and a solar panel, all together weighing 16.4 grams. A pentagon memo notes that the object shot down over Canada was a "small metallic balloon with a tethered payload" which fits the description of the pico balloon exactly.
The K9YO-15 Pico Balloon PayloadAn (unrelated to this story) example Amateur Radio Pico Balloon launched by a Naval Academy (Source: http://www.aprs.org/balloons.html)
The K9YO-15 balloon ceased all WSPR telemetry transmissions while flying just below Alaska since Feb 11 00:18 UTC (just before sunset in Alaska when the solar panels would stop working).
By using NOAA wind models and the last known location by Alaska, K9YO-15 was projected to have been over Yukon when the US Air Force shot down the unknown balloon object at Feb 11 20:41 UTC (3:41 PM EST / 1:41 PM Yukon time according to Canadian Defense Minister Anand). Reports put the altitude of the shot down object at approximately 40,000ft (~12000 meters), which matches the projected ~11500 meters of K9YO-15. Based on the previous days transmission times, it is suspected that if it were operational, the balloon would have begun transmitting again sometime later in the Yukon afternoon when the sun was stronger, but no transmissions have been seen.
K9YO projected location at the time the object was shot down.
The search area for the fallen balloon debris is reported to be in difficult to access terrain between Dawson City and Mayo. If we do a rough overlay of the predicted trajectory over a Google map, we can see that the predicted location of KY9O-15 at the reported time of the missile impact matches this description very well.
Rough trajectory overlay
Over on Twitter @ikluft (KO6YQ) has been reporting on this speculation, and has been keeping an eye on K9YO-15, awaiting telemetry transmission. We recommend following his account for further updates.
NIBBB #HamRadio club of Illinois🇺🇸 declared K9YO #balloon "missing in action" after no telemetry was received for 5 days. It was projected to be over Yukon Saturday when NORAD🇺🇸🇨🇦 shot down an "unknown object", close enough to raise questions. https://t.co/9ZkRqkc6Zr#aviation
Twitter user and ex project Google Loon engineer @BalloonSciDan has also speculated that the objects shot down may have been pico balloons.
These tiny amateur pico balloons are some of what the US shot down, and Romania sent jets up after. The rest of this group will wander in the air for months until they fail or are destroyed.
I see you're all talking about my tweet. Yes, we are still watching to see if K9YO-15 transmits any telemetry today.
So far K9YO-15 has not sent any new telemetry since Friday before sunset over Alaska. Some have misread confusing data presentation on Sondehub which lists last known telemetry as covering a time range from then to now. Currently the last we've heard from K9YO-15 was Friday Feb 10 before sunset over Alaska (00:48 GMT Feb 11). But the map on Sondehub does show the last reported position.
These floater balloons often use only solar panels, no batteries. Batteries were dropped from the projects early on because they have limited charging cycles before they stop accepting a charge, especially in the harsh temps at altitude, -40F/-40C or worse. When the battery stops accepting a charge, it ends telemetry from the mission. So they only report telemetry during daylight, when the sun is at a high enough angle to illuminate the tiny solar panels. In the Arctic winter, the days are short and the sun might not get high enough to wake up the electronics. So it stays dormant for one or more days until it drifts back down to lower latitudes where there's more sunlight. So K9YO-15 was in a period where watchers didn't expect to hear from it for a few days. But we expected it today. So far nothing. As I write this, daylight is almost done way up there for Tuesday, Feb 14.
We (the Amateur Radio balloon community) only expect any telemetry from it today would be via WSPR, none via APRS. WSPR uses HF and can be received at long distances, where it's relayed to Internet map sites. APRS is (usually) on VHF and UHF, only received by line of sight. There are no relay stations in range of today's projected flight course in northern Ontario and James Bay, Canada. So APRS-fed sites wouldn't show updates today anyway.
For an introduction, I'm Ian KO6YQ. I was involved in the first Ham Radio balloons that circumnavigated the globe starting in 2016, launched from San Jose, California. I had roles on them including tracking analyst and social media spokesman. I also organized and led the Ham Radio tracking teams which recovered the Civilian Space eXploration Team (CSXT) first amateur rocket to (suborbital) space in 2004.
Explaining a discrepancy with time reporting on Sondehub, KO6YQ notes:
Time has run out for solar power to provide any telemetry on Wednesday, February 15. So far, no new data. For those who were confused by it, remember that Sondehub has problematic data presentation so don't use it for anything other than mapping the last known position. A reliable place to check for K9YO on WSPR is the WSPR Spots: https://www.wsprnet.org/olddb?mode=html&band=all&limit=200&findcall=k9yo&findreporter=&sort=date
Frequently asked Questions (FAQ):
Since this story has gone viral and now entered the mainstream media, we thought we'd answer a few common questions that we're seeing in the media and comments.
Who is launching pico balloons and why?
Pico balloons are typically launched by ham/amateur radio hobbyists, universities, researchers, schools or kids STEM programs. The idea of launching a low cost balloon that can be tracked while travelling the world is a fun project for hobbyists and a great STEM learning experience for kids.
You might also be interested in tracking regular weather balloons which are launched by meteorological agencies around the world usually twice per day. These are designed to only last a few hours in the air before popping. They can be tracked at https://sondehub.org. A popular hobby of radio enthusiasts is chasing these weather balloons and being the first to recover the fallen sensor package called a radiosonde.
A pico balloon is essentially a kids party balloon. Why aren't there thousands of kids party balloons circumnavigating the globe?
Balloons will inflate more as they rise into the atmosphere, since higher altitudes have lower pressure. A kids party balloon would typically be inflated fully on the ground. If a careless child released a balloon it would rise up, and pop within a few hours, as it reaches an altitude of around 5000ft - 30,000ft (1500m - 9000m) or higher where the internal pressure of the balloon is too great for the balloon's material to hold it.
Pico balloons are weighted by their payloads, and are only partially inflated on the ground. The goal is to inflate with enough Helium or Hydrogen to get the payload to rise at ground level, but allow enough internal space for the balloon to expand without popping as it rises. The weighted balloon will eventually reach an equilibrium point at some altitude where it's fully inflated, but can't rise any higher due to the weighting. This is called being 'neutrally buoyant'. The balloon launcher can use a calculator (such as this one) to determine the right amount of helium to use based on the balloon size and payload weight.
Mylar balloons are used because helium atoms will leak out of the walls of latex/rubber balloons, and they will be flat within a few days. With Mylar balloons the leakage is much slower and they can stay inflated for months.
How can a pico balloon circumnavigate the globe?
As mentioned in the previous question, it's possible to engineer the height that the balloon will fly at by only partially inflating the balloon on the ground. Once at the desired altitude, winds will eventually pull the balloon into global jet streams that take the balloon all around the earth at an average speed of 80 - 140 mph (129 - 225 km/h).
A website like Ventusky can be used to view the current jet streams at 40,000ft (12,000m), the altitude that KY9O-15 was neutrally buoyant at.
In California helium balloons in general have been banned, to stop pollution, damage to wildlife, and to protect power lines.
The transmission of the WSPR and APRS telemetry radio signals would be allowed under amateur radio rules. UK, Yemen and North Korea are countries that prohibit transmissions from balloons, and compliance can be achieved via geofencing the transmissions in the software.
All information suggests that the NIBBB hobby club and KY9O's balloon were operating perfectly legally.
What exactly was the payload on the KY9O-15 pico balloon?
The payload was a GPS receiver, an Arduino microcontroller, a radio transmitter and some solar panels. The solar panels power the electronics when in sun, and the GPS receiver determines the global coordinates of the balloon. The microcontroller is the 'brain' of the payload which reads the GPS coordinates from the GPS receiver, and tells the transmitter to send out a WSPR radio signal advertising the balloons ID and coordinates.
These are all common off the shelf, small components that could all fit in the palm of a hand. They would in total cost under $100. K9YO's payload in total only weighed 16.4g (0.58 oz).
An F22 with all it's radio sensors should have picked up the transmissions from the pico balloon. Why didn't it?
Pico balloons usually don't carry batteries because they are heavy and degrade over time. So instead they carry paper thin solar panels. So the balloon circuits and transmitter are only active when in strong sunlight, any other time it is completely quiet and powered down. It's possible that in the weak Yukon sun at high latitude wouldn't have been strong enough to power the WSPR transmitter until later in the day.
How could a tiny 32" balloon be spotted by radar? How could a sidewinder missile lock onto it?
The pico balloon was made out of metallic mylar material which would easily show up on a modern radar system. It's possible that in the past before the Chinese spy balloon incident, radar operators would ignore or filter out slow moving small objects like insects/birds/balloons that pose no threat.
The sidewinder has a fragmentation warhead, so an explosion near the balloon would easily take it out. The metallic mylar material would easily reflect the sun's infrared, and against the cold background of the sky/space it would be easy for the IR heat seeker sensor on the sidewinder missile to track it.
The K9YO balloon was flying at altitudes used by commercial airliners. Is there any risk to them?
A jet coming across a pico balloon in the first place would be very unlikely, and even more unlikely for it to make it's way in to an engine even if an aircraft flew directly at it. But there is some risk that a balloon ingested by an jet engine could cause issues. However given their lightweight nature it seems unlikely that there would be any massive damage, if any at all.
What is WSPR and APRS?
WSPR (pronounced as 'whisper') stands for Weak Signal Propagation Reporter. It is a type of radio signal protocol used by amateur radio hobbyists. Because of the way it is designed, it is possible for WSPR to be transmitted with very low power (such as the tiny amount of power possible from small solar panels), and still be received by amateur radio ground stations all over the world. The WSPR signal encodes it's callsign ID, and the transmitters GPS location. Amateur ground stations will upload received WSPR data to sites like wsprnet.org.
APRS or "Automatic Packet Reporting System" is another protocol used by amateur radio hobbyists. However, these signals don't travel globally, rather they can only be received locally with line of sight. The advantage is that APRS signal can be transmitted much faster (assuming sufficient power).
Are we 100% certain that the object was the K9YO pico balloon?
No, despite the circumstantial evidence, there is still some doubt. The balloon was already old and probably near the end of it's life. The sun in the high Yukon latitudes is also weaker, meaning that the solar panels might not be getting sufficient sun to power the circuits. The balloon had previously gone missing for 30 days before reappearing. And the transmitter was showing signs of drifting in frequency.
Are there any other globe trotting radio projects?
Yes, there are small autonomous boats or 'drift buoys' travelling the seas through natural currents. These also use WSPR and APRS to report their location. hitchBOT was a hitchhiking robot that relied on travelling strangers to find and carry it around the world. It had a GPS receiver and 3G radio.