Integrators and flatsat labs
Exercise the RF link of your flatsat on a repeatable bench, long before a ground station is booked.
Stellar Link is a software-defined radio test bench for satellite links. It speaks CCSDS and CSP over BPSK, QPSK and GMSK, plays a LEO pass with its Doppler, path loss, AOS and LOS, measures the link, asserts on it and writes the report. Profiles, scenarios and campaigns are YAML, versioned with the rest of your tests.
| t+0.5 s | traffic | CSP downlink 10 → 1, 200 B every 200 ms | started |
| t+15 s | set | channel.link_state up | AOS |
| t+15 s | curve | channel.path_loss_db 11.2 → 0.0 → 11.2 | slant range |
| t+45 s | inject | CSP telecommand 1 → 10 | uplink |
| t+289 s | curve | channel.doppler_hz −686 | TCA |
| t+562 s | assert | rx.lock.max ≥ 1.0 | PASS · verified |
Exercise the RF link of your flatsat on a repeatable bench, long before a ground station is booked.
Check your radio against known modulations, framings and impairments, and keep the report of every campaign.
Inject and capture frames from your own software, and develop your control centre against a real modem.
A link test capability that fits on the bench, driven by an API, a command line and a web console.
A scenario is a YAML timeline. The pass is derived from its geometry, the bench plays it in the FPGA, and the run ends with measured assertions and a report.
Modulation, symbol rate, framing and packets of your link, in one file.
Altitude, maximum elevation, mask and carrier turned into path loss and Doppler curves.
Traffic, ramps, curves and injected telecommands at their time in the pass.
Lock, CFO, BER, AGC and frame counters sampled live, with Prometheus metrics.
Assertions passed and verified, in a JSON report kept with the run.
# leo_doppler_pass_v1 — LEO pass, 500 km, 60° max elevation, UHF 437.2 MHz
version: "satlink.scenario/v1"
profile_ref: "spaceinventor_uhf_csp_loopback"
channel:
initial: { link_state: "down", path_loss_db: 11.2, freq_offset_hz: 350 }
timeline:
- id: "aos"
at: "15s"
set: { channel.link_state: "up" }
- id: "doppler_residual"
from: "15s"
to: "562s"
curve:
channel.doppler_hz:
points: [{ t: "15s", value: -10 }, …, { t: "289s", value: -686 }, …] Stellar Link is in development. Implemented features are validated on the reference board, byte for byte on the loopback path; over-the-air links have been exercised against our own transmitter and a third-party SDR.
A modem in the FPGA, from 19.5 kbaud to 2.5 Mbaud. QPSK is the reference; GMSK is a non-coherent approximation whose interoperability with third-party radios is still to be shown.
Attached sync marker, CCSDS randomiser, preamble and fill; TM, AOS and USLP transfer frames with their frame error control.
CubeSat Space Protocol (v1) headers and CCSDS space packets, built and decoded on the board.
Convolutional K=7 rate 1/2 with Viterbi decoding, Reed-Solomon (255,223) and their concatenation; decoding of the coded path is being fixed.
Doppler and frequency offset, attenuation, noise, burst errors and link cuts, applied in the FPGA on the loopback path.
A LEO pass derived from its geometry: AOS and LOS at the elevation mask, path loss following the slant range, residual Doppler after station tracking.
The same impairments between the bench and your transceiver over cable or air; today they apply to the loopback path only.
Fading and propagation delay models, and pass geometry propagated from TLEs.
YAML profiles, scenarios and campaigns: a timeline of settings, ramps, curves, traffic and injected packets, campaigns with gates and schedules.
Thresholds on lock, CFO, BER, AGC, frame counters and registers, and expected packets; each result says whether it passed and whether it was verified.
A JSON report for every run, telemetry at 5 Hz, Prometheus metrics for your dashboards.
The production board is being validated to the level of the reference board.
REST and WebSocket API with OpenAPI, the satlinkctl command line, and a web console: monitor, radio, protocol, scenarios, IQ, reports.
Inject frames to transmit and receive decoded frames over ZeroMQ or WebSocket, from your own ground software.
The bench answers telecommands and sends telemetry like the spacecraft would, to test a ground segment without it.
Replay of recorded IQ; CAN, RS-485, UART and Ethernet links to the on-board side.
Stellar Link as a gateway of Stellar Control: telecommands and telemetry of the flatsat carried over the RF link, passes and impairments driven by procedures.
Stellar Link is designed to join the Stellar Control chain: the procedure that commands the flatsat goes through a real modem and a played pass, and the verdict carries the link measurements with it.
In the topology, the RF link of the flatsat names Stellar Link as its gateway, with its profile per environment.
Telecommands and telemetry of Stellar Control go through the modem, framed as on the flight link.
A procedure starts the pass at AOS, ramps the impairments and cuts the link at LOS.
Steps expect telemetry through the degraded link, and lock, CFO and frame counters within limits.
The link measurements end up in the AIT and IVV evidence of the run, next to the procedure verdict.
| Hardware | AMD Zynq-7020 and Analog Devices AD9361 transceiver, one transmit and one receive channel |
|---|---|
| Validated band | UHF, around 437 MHz |
| Modulations | BPSK, QPSK, GMSK (non-coherent approximation) |
| Symbol rates | 19.53, 39.06, 78.13, 156.25, 312.5, 625 kbaud, 1.25 and 2.5 Mbaud |
| Framing | CCSDS sync marker and randomiser; TM, AOS and USLP transfer frames; CSP v1 and CCSDS space packets |
| Channel | Doppler and frequency offset, attenuation, noise, burst errors, link cuts (loopback path) |
| Control | REST and WebSocket API with OpenAPI, ZeroMQ frame streams, satlinkctl CLI, web console |
| Outputs | JSON reports, 5 Hz telemetry, Prometheus metrics, IQ capture |
We help you describe your link, play your first pass and read the report.