Add reference links and credit CuriousMarc restoration team
This commit is contained in:
parent
a06f5e8dc1
commit
200fa4e6dc
@ -7,6 +7,8 @@ import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
|||||||
|
|
||||||
The PCM (Pulse Code Modulation) telemetry system converts analog sensor readings and digital status words from the spacecraft into a serial bit stream. This stream is organized into fixed-length frames, each beginning with a sync word that lets the ground station find the frame boundaries in the raw data. Understanding the frame structure is essential for interpreting anything the spacecraft sends.
|
The PCM (Pulse Code Modulation) telemetry system converts analog sensor readings and digital status words from the spacecraft into a serial bit stream. This stream is organized into fixed-length frames, each beginning with a sync word that lets the ground station find the frame boundaries in the raw data. Understanding the frame structure is essential for interpreting anything the spacecraft sends.
|
||||||
|
|
||||||
|
Frame formats, sync word structure, and A/D converter specifications are from the [NAA Telecommunication Systems Study Guide (Course A-624)](https://archive.org/details/apollo-telecommunications). AGC channel assignments are from the [Virtual AGC project](https://www.ibiblio.org/apollo/).
|
||||||
|
|
||||||
## Frame layout
|
## Frame layout
|
||||||
|
|
||||||
Each high-rate frame contains exactly 128 eight-bit words, for a total of 1024 bits. The first four words (32 bits) are the sync word. The remaining 124 words carry telemetry data.
|
Each high-rate frame contains exactly 128 eight-bit words, for a total of 1024 bits. The first four words (32 bits) are the sync word. The remaining 124 words carry telemetry data.
|
||||||
|
|||||||
@ -7,6 +7,8 @@ import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
|||||||
|
|
||||||
The Apollo Unified S-Band (USB) system multiplexes voice, telemetry, and ranging onto a single 2287.5 MHz carrier using nested modulation layers. Understanding these layers -- and the reasons behind each design choice -- is the key to understanding what gr-apollo does and why its blocks are structured the way they are.
|
The Apollo Unified S-Band (USB) system multiplexes voice, telemetry, and ranging onto a single 2287.5 MHz carrier using nested modulation layers. Understanding these layers -- and the reasons behind each design choice -- is the key to understanding what gr-apollo does and why its blocks are structured the way they are.
|
||||||
|
|
||||||
|
All parameters in this section are from the [NAA Telecommunication Systems Study Guide (Course A-624)](https://archive.org/details/apollo-telecommunications).
|
||||||
|
|
||||||
## The downlink signal, inside out
|
## The downlink signal, inside out
|
||||||
|
|
||||||
The spacecraft transmitter begins with a stable carrier at 2287.5 MHz. Multiple information streams are combined onto this carrier through a two-level modulation scheme: subcarriers are first individually modulated with their data, then the composite subcarrier signal phase-modulates the RF carrier.
|
The spacecraft transmitter begins with a stable carrier at 2287.5 MHz. Multiple information streams are combined onto this carrier through a two-level modulation scheme: subcarriers are first individually modulated with their data, then the composite subcarrier signal phase-modulates the RF carrier.
|
||||||
@ -48,7 +50,7 @@ At small modulation indices, the relationship between the modulating signal and
|
|||||||
|
|
||||||
This linearity means the PM demodulator output is a faithful reproduction of the composite subcarrier signal. There is no need for pre-distortion or nonlinear correction -- the receiver just extracts the phase and gets the subcarriers back, ready for filtering and demodulation.
|
This linearity means the PM demodulator output is a faithful reproduction of the composite subcarrier signal. There is no need for pre-distortion or nonlinear correction -- the receiver just extracts the phase and gets the subcarriers back, ready for filtering and demodulation.
|
||||||
|
|
||||||
The tradeoff is signal power. Most of the transmitted power remains in the carrier rather than the sidebands. The spacecraft burns roughly 20 watts of RF power (via the traveling-wave tube amplifier), but only a fraction of a watt ends up in each subcarrier. The Deep Space Network's 26-meter dishes made up the difference with raw antenna gain.
|
The tradeoff is signal power. Most of the transmitted power remains in the carrier rather than the sidebands. The spacecraft burns roughly 20 watts of RF power (via the traveling-wave tube amplifier), but only a fraction of a watt ends up in each subcarrier. The [Deep Space Network's](https://www.nasa.gov/communicating-with-missions/dsn/) 26-meter dishes made up the difference with raw antenna gain.
|
||||||
|
|
||||||
<Aside type="note">
|
<Aside type="note">
|
||||||
The 0.133 rad deviation is for the combined PCM mode (voice + telemetry). During FM-only mode (used for pre-launch checkout), the spacecraft switches to wideband FM with much higher deviation, and the subcarrier oscillator system is used instead of PCM.
|
The 0.133 rad deviation is for the combined PCM mode (voice + telemetry). During FM-only mode (used for pre-launch checkout), the spacecraft switches to wideband FM with much higher deviation, and the subcarrier oscillator system is used instead of PCM.
|
||||||
|
|||||||
@ -283,3 +283,7 @@ The default TCP port is 19697 (`AGC_PORT_BASE`). If you are running multiple yaA
|
|||||||
</Aside>
|
</Aside>
|
||||||
|
|
||||||
The GNU Radio wrapper (`agc_bridge` block) exposes three message ports: `uplink_data` (input), `downlink_data` (output), and `status` (output). The status port emits the connection state string whenever it changes, which can be connected to a QT GUI label or logged for monitoring.
|
The GNU Radio wrapper (`agc_bridge` block) exposes three message ports: `uplink_data` (input), `downlink_data` (output), and `status` (output). The status port emits the connection state string whenever it changes, which can be connected to a QT GUI label or logged for monitoring.
|
||||||
|
|
||||||
|
## Hardware restoration
|
||||||
|
|
||||||
|
While gr-apollo works with the Virtual AGC *emulator*, others have gotten the real hardware running. [CuriousMarc (Marc Verdiell)](https://www.curiousmarc.com/space), along with Mike Stewart, [Ken Shirriff](https://www.righto.com/search/label/Apollo), and a team of volunteers, have restored actual Apollo Guidance Computers and S-Band telecommunications equipment to operational status. Their work provides invaluable validation that the specifications gr-apollo implements match the behavior of real flight hardware.
|
||||||
|
|||||||
@ -85,6 +85,19 @@ from apollo import pm_demod, bpsk_demod, pcm_frame_sync, usb_downlink_receiver
|
|||||||
You can use the signal generator and frame processing engines without GNU Radio installed. This is useful for offline analysis, unit testing, or environments where GR is hard to install.
|
You can use the signal generator and frame processing engines without GNU Radio installed. This is useful for offline analysis, unit testing, or environments where GR is hard to install.
|
||||||
</Aside>
|
</Aside>
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
gr-apollo is based on these primary sources:
|
||||||
|
|
||||||
|
- [NAA Telecommunication Systems Study Guide (Course A-624, 1965)](https://archive.org/details/apollo-telecommunications) -- the original North American Aviation training manual for the Apollo USB system. Defines all frequencies, modulation parameters, frame formats, and SCO specifications used in gr-apollo.
|
||||||
|
- [Virtual AGC Project](https://www.ibiblio.org/apollo/) -- Ron Burkey's Apollo Guidance Computer emulator and document archive. The AGC bridge protocol and downlink list decoding are based on the [yaAGC source code](https://github.com/virtualagc/virtualagc).
|
||||||
|
- [NASA Technical Reports Server](https://ntrs.nasa.gov/) -- primary source for Apollo spacecraft telecommunications system descriptions and MSFN ground station specifications.
|
||||||
|
|
||||||
|
### Community
|
||||||
|
|
||||||
|
- [CuriousMarc (Marc Verdiell)](https://www.curiousmarc.com/space) — Marc and his team (Mike Stewart, Ken Shirriff, and others) have been restoring and operating original Apollo S-Band flight hardware. Their [YouTube channel](https://www.youtube.com/@CuriousMarc) documents the restoration process in detail.
|
||||||
|
- [Ken Shirriff's Blog](https://www.righto.com/search/label/Apollo) — detailed reverse-engineering posts on Apollo-era hardware, from AGC core rope memory to the USB signal processing chains.
|
||||||
|
|
||||||
## Next step
|
## Next step
|
||||||
|
|
||||||
<LinkCard
|
<LinkCard
|
||||||
|
|||||||
@ -5,7 +5,7 @@ description: "Complete reference for all Apollo Unified S-Band system constants
|
|||||||
|
|
||||||
import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
All constants are defined in `apollo.constants` and trace directly to the 1965 NAA Telecommunication Systems Study Guide (Course A-624) via the IMPLEMENTATION_SPEC.md section references noted in each table.
|
All constants are defined in `apollo.constants` and trace directly to the [1965 NAA Telecommunication Systems Study Guide (Course A-624)](https://archive.org/details/apollo-telecommunications) via the IMPLEMENTATION_SPEC.md section references noted in each table.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from apollo.constants import DOWNLINK_FREQ_HZ, PCM_HIGH_BIT_RATE, SCO_FREQUENCIES
|
from apollo.constants import DOWNLINK_FREQ_HZ, PCM_HIGH_BIT_RATE, SCO_FREQUENCIES
|
||||||
@ -253,7 +253,7 @@ AGC_TELECOM_CHANNELS = frozenset({
|
|||||||
|
|
||||||
### Downlink List Type IDs
|
### Downlink List Type IDs
|
||||||
|
|
||||||
From `DecodeDigitalDownlink.c` in the Virtual AGC project:
|
From `DecodeDigitalDownlink.c` in the [Virtual AGC project](https://github.com/virtualagc/virtualagc):
|
||||||
|
|
||||||
| Constant | Value | Description |
|
| Constant | Value | Description |
|
||||||
|----------|-------|-------------|
|
|----------|-------|-------------|
|
||||||
|
|||||||
@ -214,7 +214,7 @@ def bits_to_sync_word(bits: list[int]) -> int
|
|||||||
|
|
||||||
The Apollo Guidance Computer emulator (yaAGC) communicates over TCP using a 4-byte packet format. Each packet carries one I/O channel update: a 9-bit channel number and a 15-bit data value.
|
The Apollo Guidance Computer emulator (yaAGC) communicates over TCP using a 4-byte packet format. Each packet carries one I/O channel update: a 9-bit channel number and a 15-bit data value.
|
||||||
|
|
||||||
These functions are direct ports of `FormIoPacket()` and `ParseIoPacket()` from `yaAGC/SocketAPI.c`.
|
These functions are direct ports of `FormIoPacket()` and `ParseIoPacket()` from [`yaAGC/SocketAPI.c`](https://github.com/virtualagc/virtualagc) in the Virtual AGC project.
|
||||||
|
|
||||||
### Packet Bit Layout
|
### Packet Bit Layout
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user