docs: add comprehensive README with satellite constellation info
This commit is contained in:
parent
5867c54de3
commit
91bef4ea63
161
README.md
161
README.md
@ -1,64 +1,151 @@
|
||||
# gr-sarsat-modern
|
||||
|
||||
GNU Radio 3.10+ compatible Cospas-Sarsat 406 MHz beacon decoder.
|
||||
GNU Radio 3.10+ blocks for decoding **Cospas-Sarsat** 406 MHz emergency distress beacons.
|
||||
|
||||
Ported from [zleffke/gr-sarsat](https://github.com/zleffke/gr-sarsat) (2018, GNU Radio 3.7).
|
||||
|
||||
## What is Cospas-Sarsat?
|
||||
|
||||
**Cospas-Sarsat** is the international satellite-based search and rescue (SAR) system that has helped save over **60,000 lives** since 1982. It detects and locates emergency beacons carried by:
|
||||
|
||||
- **EPIRBs** (Emergency Position Indicating Radio Beacons) - Maritime
|
||||
- **ELTs** (Emergency Locator Transmitters) - Aviation
|
||||
- **PLBs** (Personal Locator Beacons) - Hikers, adventurers
|
||||
|
||||
When activated, these beacons transmit a 406 MHz signal that is picked up by a constellation of satellites and relayed to ground stations (LUTs) for position determination.
|
||||
|
||||
## The Satellite Constellation
|
||||
|
||||
Cospas-Sarsat uses **three types of satellites** to provide global coverage:
|
||||
|
||||
### LEOSAR (Low Earth Orbit)
|
||||
| Satellite | Operator | Orbit |
|
||||
|-----------|----------|-------|
|
||||
| NOAA-15, 18, 19 | USA | ~850 km polar |
|
||||
| MetOp-A, B, C | EUMETSAT | ~817 km polar |
|
||||
| COSMOS (Sarsat-10,11,12) | Russia | ~1000 km polar |
|
||||
|
||||
LEO satellites can **Doppler-locate** beacons (no GPS needed) but only see a portion of Earth at any time.
|
||||
|
||||
### MEOSAR (Medium Earth Orbit)
|
||||
| Constellation | Satellites | Coverage |
|
||||
|---------------|------------|----------|
|
||||
| GPS | Block IIF/III (18 SAR payloads) | Global |
|
||||
| Galileo | 24 satellites | Global |
|
||||
| GLONASS | 24 satellites | Global |
|
||||
|
||||
MEOSAR provides **near-instantaneous global coverage** and can locate GPS-equipped beacons within minutes.
|
||||
|
||||
### GEOSAR (Geostationary)
|
||||
| Satellite | Position | Coverage |
|
||||
|-----------|----------|----------|
|
||||
| GOES-16/17 | 75°W / 137°W | Americas |
|
||||
| MSG (Meteosat) | 0° / 41.5°E | Europe/Africa |
|
||||
| INSAT-3D/3DR | 82°E / 74°E | Indian Ocean |
|
||||
| MTSAT/Himawari | 140°E | Asia-Pacific |
|
||||
|
||||
GEO satellites provide **immediate alerting** but cannot determine position (beacon must have GPS).
|
||||
|
||||
## Signal Specifications
|
||||
|
||||
| Parameter | Value |
|
||||
|-----------|-------|
|
||||
| **Frequency** | 406.025 MHz (±1 kHz) |
|
||||
| **Modulation** | Phase modulation, Biphase-L encoded |
|
||||
| **Bit Rate** | 400 bps |
|
||||
| **Power** | 5W (37 dBm) minimum |
|
||||
| **Message Length** | 112 or 144 bits |
|
||||
| **Burst Duration** | ~440 ms every 50 seconds |
|
||||
|
||||
### Frame Structure
|
||||
|
||||
```
|
||||
┌─────────────┬──────────────────────────────────────────────────────┐
|
||||
│ Frame Sync │ PDS Frame (576 bits) │
|
||||
│ 15 bits │ │
|
||||
│ 0x7FF ├──────────────────┬──────────────────┬────────────────┤
|
||||
│ │ SARP Msg 1 │ SARP Msg 2 │ SARP Msg 3 │
|
||||
│ │ (24 bytes) │ (24 bytes) │ (24 bytes) │
|
||||
│ │ Sync: 0xD60 │ Sync: 0xD60 │ Sync: 0xD60 │
|
||||
└─────────────┴──────────────────┴──────────────────┴────────────────┘
|
||||
```
|
||||
|
||||
## Blocks
|
||||
|
||||
| Block | Description |
|
||||
|-------|-------------|
|
||||
| **Biphase-L Decoder** | Decodes Manchester/Biphase-L encoded bit stream |
|
||||
| **PDS Frame Sync** | Synchronizes and extracts 72-byte PDS frames |
|
||||
| **SARP Message Extractor** | Splits PDS frames into 24-byte SARP messages |
|
||||
| Block | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| **Biphase-L Decoder** | `decim_block` | Decodes Manchester/Biphase-L symbols (2:1 decimation) |
|
||||
| **PDS Frame Sync** | `sync_block` | Detects frame sync, extracts 72-byte PDS frames |
|
||||
| **SARP Message Extractor** | `basic_block` | Splits frames into 24-byte SARP messages, validates sync |
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# Install Python package
|
||||
# Clone
|
||||
git clone https://git.supported.systems/rf/gr-sarsat-modern.git
|
||||
cd gr-sarsat-modern
|
||||
|
||||
# Install Python package
|
||||
pip install -e .
|
||||
|
||||
# Copy GRC blocks to GNU Radio
|
||||
# Install GRC blocks
|
||||
cp grc/*.yml ~/.local/share/gnuradio/grc/blocks/
|
||||
```
|
||||
|
||||
## Signal Chain
|
||||
|
||||
```
|
||||
RF Input (406 MHz)
|
||||
|
|
||||
v
|
||||
[FM Demod] -> [Clock Recovery] -> [Slicer]
|
||||
|
|
||||
v
|
||||
[Correlate Access Code - Tag] (Frame sync: 0x7FF, tag: "pds_sync")
|
||||
|
|
||||
v
|
||||
[Biphase-L Decoder]
|
||||
|
|
||||
v
|
||||
[PDS Frame Sync]
|
||||
|
|
||||
v
|
||||
[SARP Message Extractor]
|
||||
|
|
||||
+---> valid (sync word OK)
|
||||
+---> invalid (sync word mismatch)
|
||||
┌──────────────┐ ┌──────────────┐ ┌─────────────────┐
|
||||
│ RTL-SDR │────▶│ FM Demod │────▶│ Clock Recovery │
|
||||
│ 406.025 MHz │ │ │ │ MM, 400 bps │
|
||||
└──────────────┘ └──────────────┘ └────────┬────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ Correlate Access Code - Tag │
|
||||
│ Pattern: 0x7FF (15 ones), Tag: "pds_sync" │
|
||||
└──────────────────────────────────────────────────┬───────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐
|
||||
│ Biphase-L Decode │────▶│ PDS Frame Sync │────▶│ SARP Extract │
|
||||
│ (2:1 decim) │ │ (PDU out) │ │ valid/invalid │
|
||||
└──────────────────┘ └──────────────────┘ └────────────────┘
|
||||
```
|
||||
|
||||
## Protocol Background
|
||||
## Example Flowgraph
|
||||
|
||||
Cospas-Sarsat is the international satellite-based search and rescue system:
|
||||
A minimal flowgraph for receiving SARSAT beacons:
|
||||
|
||||
- **Frequency**: 406.025 MHz
|
||||
- **Modulation**: Phase-modulated carrier, Biphase-L encoded
|
||||
- **Bit rate**: 400 bps
|
||||
- **Frame structure**:
|
||||
- 15-bit frame sync (0x7FF)
|
||||
- 576-bit PDS frame (3 × 24-byte SARP messages)
|
||||
- Each SARP message starts with 0xD60 sync word
|
||||
1. **Source**: RTL-SDR @ 406.025 MHz, 250 kHz sample rate
|
||||
2. **Filter**: Low-pass, 15 kHz bandwidth
|
||||
3. **FM Demod**: Quadrature demod
|
||||
4. **Clock Recovery**: M&M, omega=625 (250k/400), mu=0.5
|
||||
5. **Binary Slicer**: Threshold at 0
|
||||
6. **Correlate Access Code - Tag**: Pattern `0x7FF`, Threshold 0
|
||||
7. **Biphase-L Decoder**: Our block
|
||||
8. **PDS Frame Sync**: Our block, tag_name="pds_sync"
|
||||
9. **SARP Message Extractor**: Our block
|
||||
|
||||
## Beacon Message Contents
|
||||
|
||||
A decoded SARP message contains:
|
||||
|
||||
- **Protocol Flag**: Standard or National Location
|
||||
- **Country Code**: 10-bit MID (Maritime Identification Digit)
|
||||
- **Beacon ID**: Unique identifier (MMSI for EPIRBs)
|
||||
- **Position**: Encoded lat/lon or GPS coordinates
|
||||
- **BCH Codes**: Error correction (can recover from bit errors)
|
||||
|
||||
## References
|
||||
|
||||
- [Cospas-Sarsat System Overview](https://www.cospas-sarsat.int/en/system-overview)
|
||||
- [406 MHz Beacon Specification (T.001)](https://www.cospas-sarsat.int/en/documents-pro/t-001-specification-for-cospas-sarsat-406-mhz-distress-beacons)
|
||||
- [Original gr-sarsat by zleffke](https://github.com/zleffke/gr-sarsat)
|
||||
|
||||
## License
|
||||
|
||||
MIT License - Original work (c) 2018 zleffke
|
||||
MIT License
|
||||
|
||||
- Original work (c) 2018 zleffke
|
||||
- GNU Radio 3.10 port (c) 2025 supported.systems
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user