π Contents
1 System Overview
The Meteor M2 decoder is a complete digital ground station implemented primarily in FPGA fabric, capable of receiving and decoding Low Rate Picture Transmission (LRPT) signals from Russian Meteor-M series weather satellites.
System Architecture
βββββββββββββββ βββββββββββ βββββββββββ ββββββββββββββββββββββββββββββββββββ
β QFH Antenna βββββΆβ LNA βββββΆβ SAW βββββΆβ RTL-SDR β
β (137 MHz) β β +20 dB β β Filter β β (2.4 MSPS I/Q samples) β
βββββββββββββββ βββββββββββ βββββββββββ ββββββββββββββββ¬ββββββββββββββββββββ
β USB
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ZYNQ FPGA β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Programmable Logic (PL) β β
β β β β
β β βββββββ βββββββ βββββββββ βββββββββββ βββββββββββ ββββββββββ β β
β β β DDC ββββΆβ RRC ββββΆβCostas ββββΆβ Gardner ββββΆβ Viterbi ββββΆβ Reed β β β
β β β β βFilterβ β Loop β β TED β β Decoder β βSolomon β β β
β β βββββββ βββββββ βββββββββ βββββββββββ βββββββββββ ββββββ¬ββββ β β
β β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββ β
β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββ β
β β Processing System (PS) βΌ β β
β β ββββββββββββ β β
β β βββββββββββββββ ββββββββββββββββ ββββββββββββββββ β Frame β β β
β β β RTL-SDR β β Pass β β Image βββββ Sync & β β β
β β β Driver β β Prediction β β Assembly β β Parse β β β
β β βββββββββββββββ ββββββββββββββββ ββββββββ¬ββββββββ ββββββββββββ β β
β β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ β
β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββ
β Output β
β HDMI / Web β
βββββββββββββββ
2 Orbital Mechanics
Understanding the satellite's orbit is crucial for pass prediction, antenna tracking, and interpreting the received imagery.
Sun-Synchronous Orbit
Meteor M2 operates in a sun-synchronous orbit at 98.7Β° inclination. This special orbit precesses at exactly the rate Earth orbits the Sun, meaning the satellite crosses the equator at the same local solar time each day (~09:30 ascending node).
Consistent lighting conditions are essential for weather imagery. The low morning sun angle creates shadows that enhance cloud texture and terrain features. This same orbit type is used by Landsat, Sentinel, and most Earth observation satellites.
Orbital Parameters
| Parameter | Value | Notes |
|---|---|---|
| Altitude | ~820 km | Varies slightly (812-830 km) |
| Inclination | 98.7Β° | Retrograde (westward precession) |
| Orbital Period | ~101 minutes | ~14.2 orbits per day |
| Ground Track Shift | ~25Β° westward | Per orbit (Earth rotation during one orbit) |
| Max Latitude | Β±81.3Β° | Never passes directly over poles |
The Polar Gap
Due to the 98.7Β° inclination (not exactly 90Β°), there's a circular polar cap of approximately 8.7Β° radius at each pole that the satellite never passes directly over. The maximum latitude reached is 180Β° - 98.7Β° = 81.3Β°.
Pass Geometry
From Eugene, Oregon (44.05Β°N, 123.09Β°W), typical pass characteristics:
| Pass Type | Max Elevation | Duration | Signal Quality |
|---|---|---|---|
| Overhead | 80-90Β° | 12-14 min | Excellent |
| High | 45-80Β° | 10-12 min | Good |
| Medium | 20-45Β° | 6-10 min | Moderate |
| Low | 5-20Β° | 2-6 min | Poor (atmospheric effects) |
3 Signal Characteristics
RF Parameters
| Parameter | Value |
|---|---|
| Frequency | 137.1 MHz or 137.9 MHz (satellite dependent) |
| Polarization | Right-Hand Circular (RHCP) |
| Modulation | QPSK (Quadrature Phase Shift Keying) |
| Symbol Rate | 72,000 symbols/second |
| Bit Rate | 144,000 bits/second (2 bits per QPSK symbol) |
| Bandwidth | ~120 kHz (occupied) |
| EIRP | ~5-7 dBW |
Why 137 MHz?
The 137-138 MHz band was allocated for meteorological satellites in the 1960s. This frequency was chosen because it:
- Penetrates clouds and light precipitation
- Allows simple, low-gain antennas (like the QFH)
- Is relatively immune to Faraday rotation in the ionosphere
- Has manageable antenna sizes for satellites
Link Budget
A link budget accounts for all gains and losses in the signal path from satellite to receiver. Understanding where each value comes from is essential for validating the design.
Physics-Derived Values (Calculated from Formulas)
These values are computed from well-established physics equations and are highly reliable.
| Parameter | Value | Formula / Source |
|---|---|---|
| Free Space Path Loss | -133 to -143 dB | FSPL = 32.45 + 20Γlogββ(f_MHz) + 20Γlogββ(d_km) |
| Thermal Noise Floor | -153 dBW (theoretical) | N = 10Γlogββ(kTB), k = Boltzmann's constant |
Reference: ITU-R P.525 - Free-space attenuation
Specification-Based Values (From Standards & Datasheets)
These values come from equipment specifications or industry standards.
| Parameter | Value | Source |
|---|---|---|
| Atmospheric Loss | ~1 dB | ITU-R P.676 (gaseous attenuation) |
| QFH Antenna Gain | +3 dBi | Antenna design literature, simulation (4NEC2, EZNEC) |
| RTL-SDR Noise Figure | ~4-6 dB | RTL-SDR V3/V4 specifications |
| LNA Noise Figure | ~0.5-1.5 dB | LNA datasheet (device dependent) |
Estimated Values (Require Verification)
These values are approximations from community observations or incomplete documentation. They should be validated during development through actual signal measurements.
| Parameter | Estimated Value | Notes |
|---|---|---|
| Satellite EIRP | +5 to +7 dBW | Not officially published by Roscosmos; derived from reception reports |
| System Noise Figure | ~3-5 dB | Depends on LNA, cable loss, SDR; measure with calibrated source |
| Implementation Loss | ~1-2 dB | Real-world losses (connectors, impedance mismatch, etc.) |
Complete Link Budget Summary
// Link budget calculation (zenith pass)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// TRANSMIT SIDE
Satellite EIRP: +7 dBW // β Estimated - verify
// PATH LOSSES
Free space loss (820 km): -134 dB // Physics: ITU-R P.525
Atmospheric loss: -1 dB // Standard: ITU-R P.676
// RECEIVE SIDE
Antenna gain (QFH): +3 dBi // Spec: antenna design
Cable loss (short run): -1 dB // Spec: coax datasheet
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Received signal power: -126 dBW
// NOISE
Noise floor (120 kHz BW): -148 dBW // Physics + ~5 dB system NF
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Signal-to-Noise Ratio: ~22 dB // At zenith, good conditions
SNR at horizon: ~12 dB // Additional 10 dB path loss
SNR (worst case): ~5 dB // Low elevation + interference
QPSK demodulation typically requires 8-10 dB SNR for reliable decoding without FEC. At low elevation angles with interference, SNR can drop to ~5 dB. This is why the concatenated Viterbi + Reed-Solomon coding is essentialβit provides ~7 dB of coding gain, making the system viable even in marginal conditions.
References
- ITU-R P.525 - Free-space propagation
- ITU-R P.676 - Atmospheric attenuation
- ITU-R P.618 - Earth-space propagation
- SatNOGS Database - Community satellite observations
- Antenna-Theory.com - Antenna fundamentals
4 Doppler Processing
At 7.5 km/s orbital velocity, the satellite's signal experiences significant Doppler shift that must be tracked by the receiver.
Doppler Shift Calculation
| Position | Radial Velocity | Doppler Shift |
|---|---|---|
| Rising (horizon) | ~+7.5 km/s (approaching) | ~+3.4 kHz |
| Closest approach | ~0 km/s | ~0 Hz |
| Setting (horizon) | ~-7.5 km/s (receding) | ~-3.4 kHz |
Doppler Rate
The rate of Doppler change is highest at closest approach (when the satellite is moving most perpendicular to the line of sight). This can be used to determine elevation angle.
By comparing predicted Doppler curves (from TLE data) with measured AFC corrections, we can validate our receiver's frequency accuracy and detect:
- Constant offset: Local oscillator calibration error
- Timing shift: TLE staleness or clock drift
- Curve shape differences: Atmospheric refraction effects
- Asymmetry: Ionospheric effects (different at rising vs. setting)
AFC Implementation
// AFC tracking loop (pseudocode)
module afc_tracker (
input clk,
input [15:0] phase_error, // From Costas loop
output [31:0] freq_correction // To NCO
);
// Second-order loop filter for frequency tracking
// Bandwidth ~100 Hz to track Doppler rate
endmodule
5 QPSK Demodulation
QPSK Constellation
QPSK encodes 2 bits per symbol using four phase states separated by 90Β°. The Meteor M2 signal uses standard Gray-coded QPSK.
Q (Imaginary)
β
01 β 00
β² β β±
β² β β±
β² β β±
ββββββββββΌβββββββββββ I (Real)
β± β β²
β± β β²
β± β β²
11 β 10
β
Symbol mapping (Gray coded):
00 β 45Β° = (+1, +1)
01 β 135Β° = (-1, +1)
11 β 225Β° = (-1, -1)
10 β 315Β° = (+1, -1)
Carrier Recovery: Costas Loop
The Costas loop simultaneously tracks carrier frequency and phase for QPSK signals. It uses a characteristic S-curve error detector that is insensitive to data transitions.
The Costas loop can lock to any of four phase states (0Β°, 90Β°, 180Β°, 270Β°). This 4-way ambiguity must be resolved using the CCSDS sync word after symbol decisions.
Symbol Timing Recovery: Gardner TED
The Gardner Timing Error Detector (TED) works on the received samples to align the sampling instant with the optimal point (center of symbol).
6 Forward Error Correction
Meteor M2 uses concatenated coding: an inner convolutional code (decoded with Viterbi) and an outer Reed-Solomon code. This combination provides robust error correction for the noisy satellite channel.
Convolutional Code (Inner)
| Parameter | Value |
|---|---|
| Constraint length (K) | 7 |
| Rate (R) | 1/2 |
| Generator polynomials | G1 = 0x79, G2 = 0x5B (octal: 171, 133) |
| States | 64 (2^(K-1)) |
Viterbi Decoder
The Viterbi algorithm finds the maximum likelihood path through the code trellis. Key implementation considerations:
- Soft decisions: Using 3-4 bit soft symbols provides ~2 dB gain over hard decisions
- Path metrics: Need sufficient bit width to prevent overflow
- Traceback depth: Typically 5Γ constraint length = 35 symbols minimum
- Survivor path storage: Major FPGA resource consumer
Soft decision decoding passes confidence information (not just 0/1) to the Viterbi decoder. A sample right at the decision boundary is marked as "uncertain" while a sample far from the boundary is "confident." This ~2 dB coding gain is essentially free in an FPGA implementation.
Convolutional Deinterleaver
Between the inner and outer codes, a convolutional interleaver spreads burst errors across multiple Reed-Solomon codewords. The deinterleaver reverses this process.
Reed-Solomon Code (Outer)
| Parameter | Value |
|---|---|
| Code | RS(255, 223) |
| Symbol size | 8 bits |
| Parity symbols | 32 |
| Error correction | Up to 16 symbol errors per block |
| Field polynomial | 0x187 (CCSDS standard) |
Viterbi (inner) excels at correcting random bit errors from noise. Reed-Solomon (outer) excels at correcting burst errors (signal fades, interference). Together, they achieve near-Shannon-limit performance. This same coding scheme was used on Voyager, Mars rovers, and most deep space missions.
7 LRPT Protocol
Frame Structure
After FEC decoding, the data is organized into CCSDS-compatible frames:
ββββββββββββββββ¬ββββββββββββββ¬ββββββββββββββββββββββββββββ¬ββββββββββ
β Sync Word β Header β Payload β Parity β
β (32 bits) β (48 bits) β (8144 bits) β(128 bits)β
ββββββββββββββββ΄ββββββββββββββ΄ββββββββββββββββββββββββββββ΄ββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββ
β VCID (6 bits) - Virtual Chan ID β
β SCID (8 bits) - Spacecraft ID β
β Frame Count (24 bits) β
β etc. β
ββββββββββββββββββββββββββββββββββ
CCSDS Sync Word
// 32-bit sync word (and bit-inverted version for phase ambiguity)
localparam SYNC_WORD = 32'h1ACFFC1D;
localparam SYNC_WORD_INV = 32'hE53003E2; // 180Β° phase
Image Data Organization
| Channel | APID | Description |
|---|---|---|
| 1 | 65 | Visible (0.5-0.7 ΞΌm) |
| 2 | 66 | Near-IR (0.7-1.1 ΞΌm) |
| 3 | 67 | Near-IR (1.6-1.8 ΞΌm) |
| 4 | 68 | Thermal IR (3.5-4.1 ΞΌm) |
| 5 | 69 | Thermal IR (10.5-11.5 ΞΌm) |
| 6 | 70 | Thermal IR (11.5-12.5 ΞΌm) |
8 FPGA Implementation
Target Platform
| Component | Specification |
|---|---|
| Board | RealDigital Blackboard (Zynq-7000) |
| FPGA | XC7Z007S |
| Logic | ~23,000 LUT6 equivalent |
| DSP Slices | 66 DSP48E1 |
| Block RAM | 50 Γ 36Kb |
| Processor | Dual-core ARM Cortex-A9 |
Resource Estimates
| Module | LUTs | FFs | DSP | BRAM |
|---|---|---|---|---|
| DDC + Filters | ~2,000 | ~1,500 | 8 | 2 |
| Costas Loop | ~1,500 | ~1,000 | 4 | 0 |
| Gardner TED | ~800 | ~600 | 2 | 0 |
| Viterbi Decoder | ~4,000 | ~3,000 | 0 | 8 |
| RS Decoder | ~2,500 | ~2,000 | 4 | 4 |
| Frame Sync | ~500 | ~400 | 0 | 1 |
| Total (est.) | ~11,300 | ~8,500 | 18 | 15 |
Clock Domains
// Clock structure
sample_clk : 2.4 MHz // RTL-SDR sample rate
symbol_clk : 72 kHz // Symbol rate
system_clk : 100 MHz // Main processing clock
ps_clk : 667 MHz // ARM processor clock
Implementation Notes
9 Hardware Setup
Bill of Materials
| Component | Model/Specs | Est. Cost |
|---|---|---|
| SDR Receiver | RTL-SDR V3 or V4 | $35-50 |
| LNA | 137 MHz optimized, NF < 1.5 dB | $15-25 |
| SAW Filter | 137 MHz bandpass | $10-15 |
| Antenna | QFH (DIY, RHCP) | $20-30 |
| Coax Cable | RG-58 or better, N/SMA connectors | $15-20 |
| FPGA Board | RealDigital Blackboard (owned) | - |
| Total | ~$95-140 |
QFH Antenna Construction
The Quadrifilar Helix (QFH) antenna provides right-hand circular polarization with a hemispherical pattern - perfect for tracking satellites from horizon to horizon.
RF Chain
QFH Antenna βββΆ Short Coax βββΆ LNA βββΆ SAW Filter βββΆ Coax βββΆ RTL-SDR
β β β β β
β < 1m to +20 dB Bandpass Route to
β minimize gain 137Β±5 MHz indoor
β loss location
β
Mount with clear sky view
(rooftop, pole, etc.)
The LNA should be mounted as close to the antenna as possible (ideally at the antenna feed point). Every dB of cable loss before the LNA directly degrades the system noise figure. After the LNA, cable loss is less critical.
10 Development Log
Chronological record of development progress, challenges, and insights.
Started the Meteor M2 decoder project as part of the FPGA portfolio roadmap. Created the interactive orbital animation for the portfolio website and began gathering technical documentation.
11 References
Standards & Specifications
- CCSDS 131.0-B-3: TM Synchronization and Channel Coding
- CCSDS 132.0-B-2: TM Space Data Link Protocol
- ECSS-E-ST-50-05C: Radio Frequency and Modulation
Software References
- LeanHRPT - Open source LRPT decoder
- meteor_demod - Software demodulator reference
- SatSignal - David Taylor's weather satellite resources
Technical Resources
- PySDR - SDR fundamentals
- The Scientist and Engineer's Guide to DSP - Free DSP textbook
- Proakis & Salehi - Digital Communications (textbook)
Community
- r/amateursatellites
- RTL-SDR.com - SDR tutorials and news