STARLINK REFERENCE TEMPLATE SUPPLEMENTAL MATERIALS The University of Texas at Austin - Radionavigation Laboratory Associated with: "Pilots and Other Predictable Elements of the Starlink Ku-Band Downlink" This package contains decoded Starlink Ku-band downlink frames (1009 frames from STARLINK-31848, v2.0-mini, captured January 21, 2025) and MATLAB scripts for reference template analysis, modulation mapping, and signal research. DIRECTORY STRUCTURE =================== . |-- exemplar-frames-data | |-- decodedExemplarFrames_20251019T2214.mat ... MAT file with 1009 decoded frames | | (yDataDec, yDataSoft, modEst, SINRs, | | betas, TOAs, phiEstFrames, zEstFrames, | | hasTemplate, and configuration fields) | `-- EXEMPLAR_FRAMES_GUIDE.txt ................ Detailed field-by-field documentation | of dataset structure and processing | pipeline | |-- reference-template | |-- correlateEdgePilots.m .................... Correlate IQ samples against edge pilot | | local replica in the time domain | |-- genEdgePilots.m .......................... Generate edge pilot matrix (16 subcarriers | | x 302 symbols) from hex codes in Appendix A | |-- genPss.m ................................. Generate Primary Synchronization Sequence | | (PSS), the LFSR-based chirp-like waveform | |-- genSss.m ................................. Generate Secondary Synchronization Sequence | | (SSS), the first OFDM symbol in every frame | |-- genReferenceTemplate.m ................... Main function to generate time-domain | | reference template from reference QPSK | | rotations (302 symbols, 319,104 samples) | |-- GUIDE.txt ................................ Reference template generator documentation, | | use cases, and technical details | |-- referenceTemplate.mat .................... Reference template rotations [1024 x 301] | | extracted from consensus across exemplar | | frames (LFSR-based QPSK pattern) | `-- sssVec.mat ............................... Pre-computed SSS vector in frequency | domain [1024 x 1] QPSK symbols | |-- utils | |-- complexConstellations | | |-- gen4QAMconst.m ....................... Generate 4-QAM (pi/4-rotated QPSK) | | | constellation points | | |-- genQPSKconst.m ....................... Generate QPSK constellation points | | | on unit circle | | |-- modEnum.m ............................ Enumeration of modulation types | | | (QPSK, 4QAM, 8PSK, 16QAM, 32QAM) | | `-- modulationMap.m ...................... Map modulation estimates to types | | for visualization | `-- signalProcessing | |-- fftcorr.m ............................ Fast cross-correlation using FFT | | (equivalent to xcorr but faster) | |-- qpsk2rotations.m ..................... Convert QPSK symbols to rotation | | indices (0, 1, 2, 3 for 0deg, 90deg, | | 180deg, 270deg) | `-- starlinkConstants.m .................. Starlink signal parameters (Fs=240MHz, | N=1024, Ng=32, Ff=750Hz, etc.) | |-- loadAndPlotExemplarFrames.m ................... Main visualization script that loads | dataset and generates 8 diagnostic | plots (modulation map, SINR, constellation, | Doppler, template rotation, autocorrelation, | edge pilots, frame structure) |-- GUIDE.txt ..................................... This file `-- startup.m ..................................... MATLAB startup script to configure paths and dependencies GETTING STARTED =============== Prerequisites: - MATLAB R2020a or later Setup: 1. Download and extract this folder to your workspace 2. Start MATLAB and navigate to this directory 3. Run: startup 4. Run: loadAndPlotExemplarFrames This will generate 8 diagnostic plots showing modulation patterns, signal quality, constellations, Doppler shift, template rotation pattern, autocorrelation, edge pilot pattern, and frame structure diagram. DATASET SUMMARY =============== Exemplar Frames Dataset (decodedExemplarFrames_20251019T2214.mat): - 1009 decoded frames from STARLINK-31848 (v2.0-mini) - Captured: January 21, 2025 - Sampling rate: 240 MHz - Frame rate: 750 Hz - SINR range: 8-30 dB - Each frame: 301 OFDM symbols (1 SSS + 300 data symbols) - Dimensions: [1024 subcarriers x 301 symbols x 1009 frames] Primary Fields: - yDataDec: Hard-decoded symbols (complex double) - yDataSoft: Soft-decoded symbols before hard decision (complex double) - modEst: Estimated modulation constellation per symbol (cell array) - hasTemplate: Boolean flag for reference template identification (logical) - SINRs: Signal quality in dB (double) - betas: Doppler shift estimates (double) - zRates: Timing drift rates (double) - TOAs: Time of arrival for each frame (double) - phiEstFrames: Phase estimates per symbol [301 x nFrames] (double) - zEstFrames: Timing estimates per symbol [301 x nFrames] (double) See exemplar-frames-data/EXEMPLAR_FRAMES_GUIDE.txt for detailed field documentation. REFERENCE TEMPLATE OVERVIEW =========================== The reference template is a reference all-QPSK frame with a deterministic LFSR-based pattern, used for: - Frame detection and synchronization - Channel estimation - Modulation classification - Signal identification Generate template: [templateFrame, rotations] = genReferenceTemplate(); Returns: templateFrame: Time-domain IQ samples [319104 x 1] rotations: Frequency-domain QPSK rotations [1024 x 301] See reference-template/GUIDE.txt for detailed usage examples and technical details. EDGE PILOTS =========== Edge pilots are 16 subcarriers (8 on each side of DC) that carry a deterministic 4QAM pattern identical across all frames and all satellites. These are located at subcarrier indices 488-495 and 528-535. Generate edge pilots: [edgePilotMatrix, pilotIndices] = genEdgePilots(); Returns: edgePilotMatrix: Frequency-domain edge pilots [1024 x 302] pilotIndices: Subcarrier indices where pilots are located [16 x 1] Correlate against edge pilots: [Cy, lags, localReplica] = correlateEdgePilots(yVec); The edge pilot hex codes are defined in Appendix A of the paper. SIGNAL PARAMETERS ================= Based on starlinkConstants.m: - Sampling rate (Fs): 240 MHz - FFT size (N): 1024 subcarriers - Cyclic prefix (Ng): 32 samples - Frame rate (Ff): 750 Hz - Symbols per frame: 301 (1 SSS + 300 data symbols) - Active subcarriers: 3:1022 (1020 subcarriers) - Band center: 10.7-12.7 GHz (Ku-band downlink) DATA PROCESSING PIPELINE ======================== 1. IQ Capture -> Raw baseband samples from SDR 2. Frame Acquisition -> Detect frame boundaries, estimate CFO and SINR 3. Doppler Compensation -> Resample and frequency-shift to remove satellite motion 4. ML Estimation -> Joint timing (z) and phase (phi) estimation 5. Modulation Detection -> Identify constellation per OFDM symbol 6. Decoding -> Channel equalization, normalization, hard decisions 7. Template Matching -> Flag all-QPSK reference frames NOTES ===== - Subcarrier indexing: This documentation uses 0-based indexing (as in the paper). MATLAB code uses 1-based indexing internally (add 1 to convert). - Reference templates: All-QPSK modulation with LFSR-based pattern, used for calibration - NaN values: Indicate invalid/skipped subcarriers or symbols (pilot tones, failed decodes) - Phase/timing correction: Applied in frequency domain via exp(-1j*2*pi*d*z/N + 1j*phi) CONTACT ======= The University of Texas at Austin Radionavigation Laboratory https://radionavlab.ae.utexas.edu