Daniel Estévez

@destevez.net

Everything space & RF. Amateur radio operator (EA4GPZ / M0HXM). PhD in Mathematics from Univ. Autónoma de Madrid. he/him

This Sentinel-2 infrared image from yesterday shows the extent of the Madrid wildfires, which are now stable and do not show any smoke in satellite imagery. The false colour map shows two shortwave infrared bands (B12 and B11) in red and blue, and near infrared (B8) in green.

A false colour satellite image that shows the western half of Spain and all of Portugal. The tweets describe how the false colour map works and what fires can be seen. Besides that, it is noticeable the higher amount of vegetation in the north and northwest part of the Iberian peninsula, and also in a few small regions in the interior.

Muon Space is looking for an FPGA engineer for RF signal processing. Join a team of FPGA engineers and RF DSP engineers including myself to build state of the art RF instruments. Ability to access ITAR/EAR information required. DM me if you are interested or have questions.

New blog post: PLL coefficients for rate-only feedback. A couple years ago I wrote a post that extends a paper of Stephens and Thomas where they model PLLs in discrete time rather than transforming a continuous-time design.

Just a quick update on Tianwen-2. We saw several events before LOS- At 23:06:10 UTC the data rate was reduced, probably in preparation for some trajectory maneuvers.

Bild

New blog post: An update about Tianwen-2 telemetry. This is a quick update about Tianwen-2 telemetry decoding. First, I've figured out the format of the timestamps included in AOS frames. I explain what was confusing me yesterday.

A plot of space packet APIDs received over time by Bochum

More fun with the Ryzen AI NPU. I'm working on a more complex algorithm, and I'm seeing memory stalls that make me lose one cycle in each iteration. It turns out that the data memory of compute tiles is organized as 8x 256-bit wide 8 KiB memory banks.

A trace shown in the Perfetto UI that shows that the processor performs 8 cycles of vector instructions and then stalls waiting for memory for one cycle.A figure from the AIE-MLv2 documentation that shows the memory module organized as 8 banks.

New blog post: Getting peak TOPS on a Ryzen AI 7 350 NPU. This is an introduction to low-level programming on AMD NPUs using mlir-aie. I build an example that demonstrates 56 TOPS, very close to the max theoretical performance. These NPUs are identical to Xilinx AIE-MLv2 engines.

New blog post: NB-IoT downlink. This is another post in my series about V16 car warning beacons. Here I explain mostly everything about the LTE NB-IoT downlink. It's perhaps the longest post I've ever written. If you want to know more about NB-IoT this is the place to go.

An inspectrum waterfall that shows an NB-IoT uplink carrier and an NB-IoT downlink carrier aligned in time. The uplink carrier is sending NPRACH and then an NPUSCH containing an RRC connection request. The downlink has signals from many cells, and it is replying to the NPRACH, although it is barely visible.

Yesterday @amsat-dl.org received and decoded again telemetry from Tianwen-1. I have done an updated plot of the orbital parameters with the new state vector telemetry. This shows that there have been no manoeuvres during the 3 months in which we haven't seen any signals.

A plot of the orbital parameters for Tianwen-1 for the last 4 years.

Following up on yesterday's announcement by @amsat-dl.org about the lack of signals received from Tianwen-1 since 2025-12-23, I have published a short post that contains the orbital state based on telemetry received up to 2025-12-22.

A series of plots showing the evolution of orbital parameters over time. The data up to 2025-12-22 is based on decoded telemetry. The data afterwards is propagated.

On 2025 December 23 we received what appears to be the last clear signal and telemetry from China’s Tianwen-1 Mars mission using the 20 m radio telescope Bochum. Since then, now almost 3 months ago, there has apparently been radio silence.

Bild

New blog post: ESCAPADE telemetry. In November I posted about decoding the telemetry of this Mars twin orbiter mission. PistonMiner did additional reverse-engineering, and I wanted to revisit this and dig deeper in the telemetry.

New blog post: Tooling for CSP. CSP is the cubesat space protocol. It is a network protocol used in cubesat buses, RF communications, and groundstations. Here I showcase some tooling to perform CSP network performance analysis and debugging that I have open sourced.

A screenshot of a terminal where we can see csp-iperf running and showing TX and RX rates and packet counts, round trip time measurements, and number of lost packets.

New blog post: V16 beacon full uplink conversation. A follow up about my decoding of NB-IoT-connected car beacon warning lights (which is a thing starting this year in Spain). This time I have made a longer recording starting before the beacon is powered on.

A waterfall of the uplink transmissions of a beacon when it first begin transmitting. This is the message exchange that is needed to register the beacon in the cell network.

New blog post: Decoding a V16 beacon. Starting in 2026, the V16 beacon mandatorily replaces the emergency triangles in road vehicles in Spain. This beacon has a strobe light and an NB-IoT connection to the cell network that it uses to send a message containing its GNSS location.

A waterfall of the uplink of a V16 beacon. We can see an m-FSK signal that is the NPRACH, and then some single-tone and multi-tone NPUSCH transmissions.

New blog post: Notes on debugging Rust microcontroller stack usage. This is story about low-level debugging of a RISC-V baremetal application that was running out of stack depending on the compiler options.

I've released gr-satellites v5.9.0. gr-satellites is a collection of GNU Radio decoders for amateur satellites. This release adds support for recently launched satellites, as well as new blocks that can be used to put together an AX100-compatible modem with CSMA.

New blog post: First analysis of the Lunar GNSS Receiver Experiment data. I have developed a high-sensitivity GPS acquisition algorithm in CUDA and ran it on the experiment datasets. 1 to 3 satellites are detected in 60% of the recordings.

An image showing the cross ambiguity function of a GPS signal. The correlation peak has high SNR and is clearly visible.

I've added SatYAML (configuration) files to gr-satellites for 24 satellites launched during 2025 that transmit on amateur radio spectrum. I'd like to request help from the community to keep gr-satellites updated with new launches, as it is hard for me to keep track of everything.

New blog post: Decoding ESCAPADE. Here I decode a recording of the ESCAPADE spacecraft that I did with an Allen Telescope Array antenna the day after they were launched. The modulation is PCM/PSK/PM with rate=1/2 Turbo code. The telemetry uses CCSDS TM frames and Space Packets.

A waterfall of the ESCAPADE-Gold telemetry signal. It shows that there are significant changes in power over time. There is a gap caused by a problem with the recording. The signal resumes at a slower data rate after the gap.