diff --git a/contrib/README.md b/contrib/README.md index 341e2aad..672e5d06 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -4,3 +4,4 @@ This is an open-source directory of real hardware that has been modeled in Space For example: - [loon/antenna_pattern.textproto](loon/antenna_pattern.textproto): An antenna pattern specified using phi, theta, and gain, with separate patterns for near- and far- field. This pattern models the millimeter-wave antennas used by Loon's balloons for gateway and inter-platform links. +- [sda_oct_class_terminal/](sda_oct_class_terminal/): a free-space optical terminal of the class defined by the public SDA Optical Communication Terminal Standard 3.1.0 (ITU C-band grid, irradiance and BER requirements taken from the standard, optics and detector values assumed and tagged as such), with a matching optical ground station: antenna patterns, band profile, platform definitions and network nodes. diff --git a/contrib/sda_oct_class_terminal/README.md b/contrib/sda_oct_class_terminal/README.md new file mode 100644 index 00000000..76d3fd60 --- /dev/null +++ b/contrib/sda_oct_class_terminal/README.md @@ -0,0 +1,50 @@ +# SDA OCT Standard 3.1.0 class optical terminal, modeled in Spacetime + +Entities for a free-space optical communication terminal of the class defined by the Space Development Agency's +Optical Communication Terminal (OCT) Standard, version 3.1.0 (public document, June 2023), plus a ground optical +station to close a space-to-ground link. The standard defines interoperability requirements, not a hardware design, +so every number below is tagged either **spec** (taken from the standard, requirement number given) or **assumed** +(a representative value consistent with the standard). Replace the assumed values with your terminal's datasheet. + +## Files + +| File | Entity | Notes | +| --- | --- | --- | +| `oct_antenna_pattern.textproto` | ANTENNA_PATTERN | Gaussian optical aperture, space terminal | +| `ogs_antenna_pattern.textproto` | ANTENNA_PATTERN | Gaussian optical aperture, ground station | +| `oct_band_profile.textproto` | BAND_PROFILE | One ITU C-band channel, rate table from the irradiance requirement | +| `oct_platform_definition.textproto` | PLATFORM_DEFINITION | Satellite transceiver model: transmitter, APD receiver, antenna, targeting | +| `ogs_platform_definition.textproto` | PLATFORM_DEFINITION | Ground station transceiver model with an elevation mask | +| `oct_network_node.textproto`, `ogs_network_node.textproto` | NETWORK_NODE | Interfaces bound to the transceiver models | + +## Values and their provenance + +| Quantity | Value | Source | +| --- | --- | --- | +| Spectral grid | ITU-T G.694.1, 193.1 THz + M x 100 GHz, C-band 1530 to 1565 nm, 100 GHz channel width | spec, OCT-022 | +| Channel modeled | M = 0, 193.1 THz (1552.52 nm) | spec grid, channel choice assumed | +| Modulation | OOK-NRZ | spec, section 2 | +| Required irradiance at the remote aperture | at least 25 uW/m^2 mean, including platform jitter, at 5,500 km | spec, OCT-038 | +| Maximum irradiance at the remote aperture | 10 mW/m^2 at any established link distance | spec, OCT-037 | +| Receiver performance | post-FEC BER <= 1e-6 at 25 uW/m^2 at all required rates | spec, OCT-039 | +| User throughput | continuous 1 Gbps bidirectional Ethernet through turbulence fades | spec, section 3 | +| Transmit power | 1.0 W | assumed | +| Transmit 1/e^2 half-angle divergence | 20 urad | assumed | +| Pointing error (rms) | 4 urad | assumed | +| Space terminal aperture | 0.08 m, 60 percent efficiency | assumed | +| Ground station aperture | 0.40 m, 60 percent efficiency, 20 deg elevation mask | assumed | +| Photodetector | APD, 80 percent quantum efficiency, 2.5 GHz bandwidth, 100 urad field of view, 100 GHz optical bandpass | assumed (bandpass = channel width, spec) | +| Minimum sun angle | 5 deg | assumed | +| Slew rates | 2 deg/s azimuth and elevation | assumed | + +Consistency check (Gaussian beam, far field): with 1.0 W and a 20 urad 1/e^2 half-angle the beam radius at 5,500 km +is 110 m and the on-axis irradiance 52.6 uW/m^2; averaged over a 4 urad rms pointing error the mean irradiance is +48.7 uW/m^2, which meets OCT-038 (25 uW/m^2) with 2.9 dB of margin. The rate table's top step is the received power +that 25 uW/m^2 delivers through the modeled aperture: -69.0 dBW for the 0.08 m space terminal and -55.0 dBW for the +0.40 m ground station. Lower steps are assumed. + +## What is not modeled here + +Acquisition and tracking (spiral search, beacon), the burst-mode waveform of version 4.0.0, atmospheric attenuation +and turbulence on the ground link (those belong to the link evaluation, not the terminal), and any specific vendor's +terminal. The SDA standard is cited from the public web version; see the standard for the authoritative text. diff --git a/contrib/sda_oct_class_terminal/oct_antenna_pattern.textproto b/contrib/sda_oct_class_terminal/oct_antenna_pattern.textproto new file mode 100644 index 00000000..41e07b9d --- /dev/null +++ b/contrib/sda_oct_class_terminal/oct_antenna_pattern.textproto @@ -0,0 +1,28 @@ +# Copyright 2026 James Sweeney. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# SDA OCT Standard 3.1.0 class space terminal aperture. Aperture and divergence are ASSUMED representative +# values (see README.md); the standard fixes the delivered irradiance (OCT-038), not the optics. +group { + type: ANTENNA_PATTERN +} +id: "gain/payload/optical/sda-oct-class-terminal" +antenna_pattern { + gaussian_optical_pattern: { + diameter_m: 0.08 # assumed + efficiency_percent: 0.60 # assumed + divergence_angle_rad: 0.00002 # assumed, 20 urad 1/e^2 half-angle + pointing_error_rad: 0.000004 # assumed, 4 urad rms + } +} diff --git a/contrib/sda_oct_class_terminal/oct_band_profile.textproto b/contrib/sda_oct_class_terminal/oct_band_profile.textproto new file mode 100644 index 00000000..99d6b831 --- /dev/null +++ b/contrib/sda_oct_class_terminal/oct_band_profile.textproto @@ -0,0 +1,40 @@ +# Copyright 2026 James Sweeney. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# One ITU-T G.694.1 C-band channel (SDA OCT Standard 3.1.0, OCT-022): 193.1 THz + M x 100 GHz, M = 0 here. +# Rate table: the top step is the received power delivered by the required irradiance of 25 uW/m^2 (OCT-038) +# through the modeled 0.08 m space-terminal aperture, -69.0 dBW, at which the receiver must reach a post-FEC +# BER of 1e-6 at all required rates (OCT-039); the user throughput target is 1 Gbps (section 3). Lower steps +# are ASSUMED fallback rates. +group { + type: BAND_PROFILE +} +id: "band/optical/sda-oct-c-band-ch0" +band_profile { + channel_width_hz: 100000000000 # spec, OCT-022: 100 GHz + rate_table: { + received_signal_power_steps: { + min_received_signal_power_dbw: -79 + tx_data_rate_bps: 1e8 # assumed fallback + } + received_signal_power_steps: { + min_received_signal_power_dbw: -74 + tx_data_rate_bps: 5e8 # assumed fallback + } + received_signal_power_steps: { + min_received_signal_power_dbw: -69 + tx_data_rate_bps: 1e9 # spec: 1 Gbps at 25 uW/m^2 through a 0.08 m aperture + } + } +} diff --git a/contrib/sda_oct_class_terminal/oct_network_node.textproto b/contrib/sda_oct_class_terminal/oct_network_node.textproto new file mode 100644 index 00000000..3959d93c --- /dev/null +++ b/contrib/sda_oct_class_terminal/oct_network_node.textproto @@ -0,0 +1,31 @@ +# Copyright 2026 James Sweeney. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +group { + type: NETWORK_NODE +} +id: "node/leo/sda-oct-class-terminal" +network_node { + name: "leo-oct" + type: "LEO" + node_interface: { + interface_id: "optical-link" + wireless: { + transceiver_model_id: { + platform_id: "platform/leo/sda-oct-class-terminal" + transceiver_model_id: "oct-optical-transceiver" + } + } + } +} diff --git a/contrib/sda_oct_class_terminal/oct_platform_definition.textproto b/contrib/sda_oct_class_terminal/oct_platform_definition.textproto new file mode 100644 index 00000000..22eb58a4 --- /dev/null +++ b/contrib/sda_oct_class_terminal/oct_platform_definition.textproto @@ -0,0 +1,76 @@ +# Copyright 2026 James Sweeney. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# SDA OCT Standard 3.1.0 class space terminal on a low-Earth-orbit platform. Motion is left to the scenario +# (attach a TLE or ephemeris in `coordinates`); the transceiver model is what this contribution provides. +group { + type: PLATFORM_DEFINITION +} +id: "platform/leo/sda-oct-class-terminal" +platform { + name: "leo-oct" + type: "LEO" + transceiver_model: { + id: "oct-optical-transceiver" + transmitter: { + name: "oct-tx" + channel_set: { + key: "band/optical/sda-oct-c-band-ch0" + value: { + channel: { + key: 193100000000000 # spec grid, M = 0: 193.1 THz (1552.52 nm) + value: { + max_power_watts: 1.0 # assumed + } + } + } + } + } + receiver: { + name: "oct-rx" + channel_set: { + key: "band/optical/sda-oct-c-band-ch0" + value: { + center_frequency_hz: 193100000000000 + } + } + signal_processing_step: { + photodetector: { + avalanche_photodiode: { + field_of_view_rad: 0.0001 # assumed + bandwidth_hz: 2500000000 # assumed, 2.5 GHz + noise_temperature_k: 300 # assumed + efficiency_percent: 0.80 # assumed + dark_current_amp: 1e-9 # assumed + load_impedance_ohm: 50 # assumed + noise_factor: 4 # assumed + gain_db: 10 # assumed + optical_bandpass_filter_bandwidth_hz: 100000000000 # spec channel width, OCT-022 + wavelength_m: 0.0000015525 # spec grid, M = 0 (193.1 THz) + } + } + } + } + antenna: { + name: "oct-aperture" + antenna_pattern_id: "gain/payload/optical/sda-oct-class-terminal" + targeting: {} + constraints: { + azimuth_angle_rate: { maximum_rate_deg_per_sec: 2.0 } # assumed + elevation_angle_rate: { maximum_rate_deg_per_sec: 2.0 } # assumed + minimum_sun_angle_deg: 5.0 # assumed + } + } + } +} diff --git a/contrib/sda_oct_class_terminal/ogs_antenna_pattern.textproto b/contrib/sda_oct_class_terminal/ogs_antenna_pattern.textproto new file mode 100644 index 00000000..5ee54a42 --- /dev/null +++ b/contrib/sda_oct_class_terminal/ogs_antenna_pattern.textproto @@ -0,0 +1,27 @@ +# Copyright 2026 James Sweeney. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Optical ground station aperture for the space-to-ground link. All values ASSUMED (see README.md). +group { + type: ANTENNA_PATTERN +} +id: "gain/ground/optical/ogs-0.4m" +antenna_pattern { + gaussian_optical_pattern: { + diameter_m: 0.40 # assumed + efficiency_percent: 0.60 # assumed + divergence_angle_rad: 0.00002 # assumed (uplink beacon-class beam) + pointing_error_rad: 0.000004 # assumed + } +} diff --git a/contrib/sda_oct_class_terminal/ogs_network_node.textproto b/contrib/sda_oct_class_terminal/ogs_network_node.textproto new file mode 100644 index 00000000..74fb0e17 --- /dev/null +++ b/contrib/sda_oct_class_terminal/ogs_network_node.textproto @@ -0,0 +1,31 @@ +# Copyright 2026 James Sweeney. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +group { + type: NETWORK_NODE +} +id: "node/ground/ogs-0.4m" +network_node { + name: "ogs" + type: "GROUND_STATION" + node_interface: { + interface_id: "optical-link" + wireless: { + transceiver_model_id: { + platform_id: "platform/ground/ogs-0.4m" + transceiver_model_id: "ogs-optical-transceiver" + } + } + } +} diff --git a/contrib/sda_oct_class_terminal/ogs_platform_definition.textproto b/contrib/sda_oct_class_terminal/ogs_platform_definition.textproto new file mode 100644 index 00000000..d8b855ad --- /dev/null +++ b/contrib/sda_oct_class_terminal/ogs_platform_definition.textproto @@ -0,0 +1,83 @@ +# Copyright 2026 James Sweeney. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Optical ground station for the space-to-ground link. Place it with `coordinates.geodetic_wgs84` in the scenario. +group { + type: PLATFORM_DEFINITION +} +id: "platform/ground/ogs-0.4m" +platform { + name: "ogs" + type: "GROUND_STATION" + transceiver_model: { + id: "ogs-optical-transceiver" + transmitter: { + name: "ogs-tx" + channel_set: { + key: "band/optical/sda-oct-c-band-ch0" + value: { + channel: { + key: 193100000000000 + value: { + max_power_watts: 1.0 # assumed + } + } + } + } + } + receiver: { + name: "ogs-rx" + channel_set: { + key: "band/optical/sda-oct-c-band-ch0" + value: { + center_frequency_hz: 193100000000000 + } + } + signal_processing_step: { + photodetector: { + avalanche_photodiode: { + field_of_view_rad: 0.0002 # assumed + bandwidth_hz: 2500000000 # assumed, 2.5 GHz + noise_temperature_k: 300 # assumed + efficiency_percent: 0.80 # assumed + dark_current_amp: 1e-9 # assumed + load_impedance_ohm: 50 # assumed + noise_factor: 4 # assumed + gain_db: 10 # assumed + optical_bandpass_filter_bandwidth_hz: 100000000000 # spec channel width, OCT-022 + wavelength_m: 0.0000015525 # spec grid, M = 0 (193.1 THz) + } + } + } + } + antenna: { + name: "ogs-aperture" + antenna_pattern_id: "gain/ground/optical/ogs-0.4m" + targeting: {} + azimuth_elevation_mask: { + azimuth_deg: 0 + maximum_obscured_elevation_deg: 20 # assumed 20 deg elevation mask, all azimuths + } + azimuth_elevation_mask: { + azimuth_deg: 360 + maximum_obscured_elevation_deg: 20 + } + constraints: { + azimuth_angle_rate: { maximum_rate_deg_per_sec: 5.0 } # assumed + elevation_angle_rate: { maximum_rate_deg_per_sec: 5.0 } # assumed + minimum_sun_angle_deg: 5.0 # assumed + } + } + } +}