Astro~/0.3
** Conformance / Optical Coding and Sync * PAGE 17 / 23
** Astro * Conformance
** /conformance/ocsc

Optical Coding and Sync

PICS proforma: what this package implements, clause by clause.

Conformance Statement for pkg/ocsc, CCSDS 142.0-B-1


A1.1 GENERAL INFORMATION

A1.1.1 Identification of PICS

FieldValue
Date of Statement (DD/MM/YYYY)23/08/2026
PICS Serial NumberASTRO-OCSC-PICS-001
System Conformance Statement Cross-ReferenceThis document

A1.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/ocsc
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationCode rate is a caller parameter; Recover takes the mission's frame length
Other InformationGo library implementing the deterministic data-conditioning chain of the High Photon Efficiency scheme: sync marker attachment, slicing with zero fill, pseudo-randomization, CRC-32 attachment, and termination bits: batch (Condition) or streaming (Conditioner). On the receive side, Recover performs the post-decoder steps of clause 3.14 and clause 3.15: frame synchronization with a lock on the expected marker position, a per-frame quality indicator, and a per-frame sequence indicator. The SCPPM encoder, everything modulation-coupled, and the SCPPM decoder are out of scope. All operations are bit-addressable, because the block lengths of table 3-1 are not multiples of eight.

A1.1.3 Identification of Supplier

FieldValue
SupplierRavi Suhag
Contact Point for QueriesGitHub, github.com/ravisuhag/astro
Implementation Name(s) and Version(s)astro/pkg/ocsc (Go package)
System Name(s)Astro

A1.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 142.0-B-1 (Optical Communications Coding and Synchronization, Blue Book, Issue 1, August 2019)
Have any exceptions been required?Yes [X] No [ ], see A1.5

A1.2 DATA CONDITIONING

FeatureReferenceStatusSupport
CCSDS transfer frames as input (HPE-1)clause 3.2MY: caller-supplied TM/AOS/USLP frames; the clause 3.2 NOTE's streaming encoding is supported by Conditioner
ASM attachment to form SMTFsclause 3.3.1MY
ASM sequence 1ACFFC1Dclause 3.3.2MY
Slicing into k-digit information blocksclause 3.4.1MY
Information block sizes of table 3-1table 3-1MY: 5006, 7526, 10046 for rates 1/3, 1/2, 2/3
Zero fill to a multiple of kclause 3.4.2.1.1MY
Pseudo-randomizationclause 3.5.1.1MY
Generator g(D) = D^8+D^7+D^5+D^3+1clause 3.5.2.1MY: verified against the published 40-digit vector
Sequence period 255clause 3.5.3.1MY
Register initialized to all ones per blockclause 3.5.3.2MY
CRC-32 attachmentclause 3.6.1.1MY
Generator h(X) = X^32+X^29+X^18+X^14+X^3+1clause 3.6.2.2MY: 0x20044009, register preset to all ones
Two termination digitsclause 3.7MY
Encoder input block of k-hat digitsclause 3.7MY: 5040, 7560, 10080

A1.3 CODE RATES

FeatureReferenceStatusSupport
Code rate 1/3table 3-1OY
Code rate 1/2table 3-1OY
Code rate 2/3table 3-1OY

A1.4 CHANNEL CODING AND MODULATION

FeatureReferenceStatusSupport
SCPPM encoderclause 3.8MN: see A1.5
Code interleaverclause 3.8MN
Accumulator and PPM mappingclause 3.8MN
Channel interleaverclause 3.9MN
Codeword synchronization markerclause 3.10MN
Repeat factor (HPE-11)clause 3.111+N
Slot mapperclause 3.12MN
Guard slot insertionclause 3.13MN

A1.4a TRANSFER FRAME VALIDATION AND SEQUENCE INDICATION

FeatureReferenceStatusSupport
Transfer frame validation (HPE-14)clause 3.14MP: the sync-marker synchronization of clause 3.14.1 and the quality indicator of clause 3.14.2 are implemented in Recover; the SCPPM decoding that precedes them is out of scope (see A1.5), so block correctness comes from the attached CRC-32 rather than from a decoder
Quality Indicator per transfer frameclause 3.14.2MY: RecoveredFrame.Valid is false when any block carrying the frame's bits failed its CRC
Optional FECF in transfer frameclause 3.14.3ON: the Data Link Protocol Sublayer's concern; see pkg/crc
Sequence Indicatorclause 3.15MY: RecoveredFrame.Gap is 'zero' (false) when the frame is the direct successor of the previous one, 'one' (true) when a gap was detected

A1.4b MANAGED PARAMETERS FOR TELEMETRY SIGNALING (table 5-1)

Managed ParameterReferenceAllowed ValuesSupport
TM/AOS/USLP transfer frame length (octets)clause 5.2Integer (max 65536)Y: enforced as MaxFrameLength on AttachASM, Condition, Conditioner.Push, and Recover
PPM order, Mclause 5.24, 8, 16, 32, 64, 128, 256N: SCPPM stages out of scope (see A1.5)
Code rate, rclause 5.21/3, 1/2, 2/3Y: all three
Channel interleaver rows N, shift increment Bclause 5.2see table 5-1N: channel interleaver out of scope (see A1.5)
Repeat factor, q_dclause 5.21, 2, 3, 4, 8, 16, 32N: repeat stage out of scope (see A1.5)

A1.5 EXCEPTIONS AND UNSUPPORTED FEATURES

FeatureReferenceSupportRationale
SCPPM encoder and all later stagesclause 3.8 to clause 3.13NThese stages are coupled to the pulse-position modulation and to the physical layer. This package deliberately stops at the SCPPM encoder input block, which is the last purely deterministic bit transform in the chain.
Iterative SCPPM decodingclause 2NDecoding SCPPM is a research-grade soft-decision problem. This library ships no soft-decision decoder in any package, and a wire-format library is the wrong home for one. The post-decoder steps of clause 3.14, ASM synchronization, frame recovery, the quality indicator, and the clause 3.15 sequence indicator are implemented in Recover.
Slot and symbol synchronization, channel estimationclause 2NReceiver signal processing, not data format.
HPE beacon and optional accompanying data transmission signaling (uplink beacon, AOS or USLP transfer frames, LDPC-coded)clause 4NA separate signaling scheme using different codes and a different CSM. A follow-up.
CLI subcommands-NA follow-up once the API settles.

A1.6 IMPLEMENTATION NOTES

NoteDetail
Bit-addressable throughoutTable 3-1's block lengths are 5006, 7526 and 10046 binary digits, none a multiple of eight. Every operation works on a BitString.
CRC-32 implemented locallyThe generator of clause 3.6.2.2 is 0x20044009, which differs from IEEE CRC-32, from CRC-32C in pkg/crc, and from the Proximity-1 CRC in pkg/pxsc.
Randomizer verified against the spec vectorclause 3.5.2.1's note publishes the first 40 digits. A short polynomial admits several register layouts producing different sequences, so the published vector is the only safe check.
Recover requires a frame lengthThe slicer's zero fill is indistinguishable from frame data once in the stream. Frame length is a managed parameter, so a real receiver has it. With it, Recover locks frame synchronization: after each frame the next marker is checked at the one expected offset (clause 3.14.1), falling back to a bit-by-bit hunt, and a raised sequence indicator, only on mismatch.
Quality indicator without a decoderclause 3.14.2 marks a frame invalid when it is recovered from an incorrectly decoded codeword. With no SCPPM decoder here, Recover uses the attached CRC-32 of clause 3.6 as the per-block correctness signal and maps failing blocks onto the frames whose bits they carry, sync marker included.
Streaming conditioningCondition is a batch call: its input is one complete transmission, and the zero fill of clause 3.4.2.1.1 lands in its final block. Conditioner implements the clause 3.2 NOTE's streaming encoding: partial blocks carry between Push calls, and fill is inserted only at explicit Close.