Meteor M2 LRPT Decoder

A complete FPGA-based satellite ground station for receiving weather imagery from space. This document details the signal processing, orbital mechanics, and implementation challenges.

πŸ“‘ 137 MHz LRPT ⚑ FPGA Real-time Processing πŸ›°οΈ Polar Orbit Satellite πŸ“ Eugene, Oregon

πŸ“‘ 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.

137.1
MHz Frequency
72
ksps Symbol Rate
820
km Altitude
~12
min Pass Duration

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  β”‚
                                               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Add block diagram image once implementation is complete

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).

πŸ’‘ Why Sun-Synchronous?

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Β°.

ΞΈmax = |90Β° - (180Β° - i)| = |i - 90Β°|
Where i = orbital inclination. For Meteor M2: |98.7Β° - 90Β°| = 8.7Β° polar gap

Pass Geometry

Add diagram showing pass geometry, elevation angles, and footprint

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 VHF Legacy

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
FSPL(dB) = 32.45 + 20Γ—log₁₀(137.1) + 20Γ—log₁₀(820) = 133.5 dB
At zenith (820 km). At horizon (~2500 km path), loss increases to ~143 dB.
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.)
Measure actual received signal strength during first satellite pass to validate EIRP estimate

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
⚠️ Why the ~5 dB Worst Case Matters

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

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

Ξ”f = fβ‚€ Γ— (vradial / c)
Where fβ‚€ = 137.1 MHz, c = speed of light, vradial = radial velocity component
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.

🎯 Doppler-Based Elevation Measurement

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

Document AFC algorithm and FPGA implementation details
// 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.

e = I Γ— sgn(Q) - Q Γ— sgn(I)
Costas loop error signal for QPSK. Produces zero error when locked to constellation points.
⚠️ Phase Ambiguity

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).

e(n) = [x(n) - x(n-1)] Γ— x(n - Β½)
Gardner TED error signal. Uses the midpoint sample to detect timing error.
Add detailed Costas loop and Gardner TED implementation notes

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:

πŸ’‘ Why Soft Decisions Matter

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.

Document interleaver parameters (I, J values)

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)
πŸ”— Why Concatenated Codes?

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

Document MCU structure, APID filtering, and image assembly
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

Update with actual post-synthesis resource utilization
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

Document specific implementation challenges and solutions

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.

Add QFH construction guide with dimensions for 137 MHz

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.)
⚠️ LNA Placement

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.

January 2026
Project Kickoff

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.

planning documentation
TBD
QPSK Demodulator Simulation

DSP simulation
TBD
Viterbi Decoder Implementation

FPGA DSP
TBD
First Signal Lock

RF FPGA
TBD
First Decoded Image

milestone
Continue adding log entries as development progresses

11 References

Standards & Specifications

Software References

Technical Resources

Community