Astro~/0.3
** Conformance / TC Sync and Channel Coding * PAGE 15 / 23
** Astro * Conformance
** /conformance/tcsc

TC Sync and Channel Coding

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

Conformance Statement for pkg/tcsc, CCSDS 231.0-B-4


A2.1 GENERAL INFORMATION

A2.1.1 Identification of PICS

FieldValue
Date of Statement (DD/MM/YYYY)25/08/2026
PICS Serial NumberASTRO-TCSC-PICS-002
System Conformance Statement Cross-ReferenceThis document

A2.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/tcsc
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationNone
Other InformationGo library implementing CCSDS TC Synchronization and Channel Coding sublayer. Provides CLTU wrapping/unwrapping with BCH(63,56) forward error correction per codeblock (SEC and TED decoding modes), CCSDS pseudo-randomization, configurable start/tail sequences, and PLOP-1/PLOP-2 acquisition and idle sequence assembly.

A2.1.3 Identification of Supplier

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

A2.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 231.0-B-4 (TC Synchronization and Channel Coding, Blue Book, Issue 4, November 2019)
Have any exceptions been required?Yes [X] No [ ]

NOTE, Non-supported optional capabilities (LDPC and convolutional coding) are identified in section A2.2. Clause references follow the Issue 4 numbering: section 3 (BCH coding), section 4 (LDPC coding), section 5 (CLTU), section 6 (randomizer), section 7 (physical layer operations procedures), section 8 (managed parameters).

NOTE: CCSDS 231.0-B-4 publishes no PICS proforma; its annex A is the service definition. This document is therefore a coverage matrix written against the clauses above, not a filled-in proforma, and the item numbers (TCSC-n) are local to this repository.


A2.2 REQUIREMENTS LIST

Table A-1: BCH(63,56) Coding (section 3)

ItemDescriptionReferenceStatusSupportNotes
TCSC-1BCH Generator Polynomial3.3MYesg(x) = x^7 + x^6 + x^2 + 1, represented as bchPoly = 0xC5.
TCSC-2BCH Codeblock Structure3.2MYes64 bits per codeblock: 56 information bits (7 bytes) + 7 parity bits + 1 filler bit. Constants: InfoBytes = 7, CodeblockBytes = 8.
TCSC-3BCH Systematic Encoding with Complemented Parity3.3MYesBCHEncode(info), 7-bit LFSR systematic encoding. The transmitted parity bits are the COMPLEMENT of the LFSR remainder (parity = ^sr & 0x7F), per the standard. Information bytes unchanged in first 7 bytes; parity in high 7 bits of the 8th byte. Pinned to the known vector: all-zeros information octets encode to last octet 0xFE.
TCSC-4BCH Filler Bit3.3.2MYesFiller bit (bit 0 of byte 7) is always '0' per 3.3.2. Pinned by TestBCHEncode_FillerBitAlwaysZero.
TCSC-5BCH Syndrome Computation3.5MYesBCHDecodeWithMode() complements the received parity bits (undoing the on-the-wire inversion) before the LFSR syndrome pass over all 63 code bits. Zero syndrome indicates no errors.
TCSC-6SEC Decoding Mode3.5MYesBCHDecode() / ModeSEC corrects 1 bit error per codeblock; findErrorPosition() searches all 63 bit positions for a syndrome match. Returns corrected information bytes and correction count. NOTE: in SEC mode a 3-bit error pattern can miscorrect; guaranteed detection of up to 3 bit errors requires TED mode.
TCSC-7TED Decoding Mode3.5MYesBCHDecodeWithMode(cb, ModeTED), Triple Error Detection: no correction attempted; any non-zero syndrome returns ErrUncorrectable. Guaranteed detection of up to 3 bit errors per codeblock. Also selectable end-to-end via UnwrapCLTUWithMode().
TCSC-8BCH Uncorrectable Detection3.5MYesSEC mode returns ErrUncorrectable when the syndrome is non-zero and no single-bit error position matches (2+ bit errors).
TCSC-9BCH Error-Free Pass-Through3.5MYesZero syndrome: information bytes returned with 0 corrections and nil error.

Table A-2: Pseudo-Randomization (section 6)

ItemDescriptionReferenceStatusSupportNotes
TCSC-10PN Sequence Generation6.2MYesGeneratePNSequence(length), 8-bit LFSR, h(x) = x^8 + x^6 + x^4 + x^3 + x^2 + x + 1, preset to all ones. Pinned to the published first 40 digits (0xFF 0x39 0x9E 0x5A 0x68). This is the TC polynomial; the TM randomizer of CCSDS 131.0-B-5 clause 10.4.2 is a different sequence and is not used here.
TCSC-11Randomization (Send)6.3MYesRandomize(data) XORs data with the PN sequence. Returns new slice; input not modified.
TCSC-12De-Randomization (Receive)6.3MYesSame Randomize() function, XOR is self-inverse. Integrated into UnwrapCLTU() when randomize=true.
TCSC-13Randomization Coverage in the CLTU6.3MYesWrapCLTU() pads to the codeblock boundary with 0x55 fill FIRST, then randomizes the padded buffer, so the fill octets go out randomized like the rest of the data. UnwrapCLTU() de-randomizes the full recovered buffer (fill included). Pinned by TestWrapCLTU_RandomizesFillOctets.

Table A-3: CLTU (section 5)

ItemDescriptionReferenceStatusSupportNotes
TCSC-14CLTU Start Sequence5.2.2MYesDefaultStartSequence() returns the standard 2-byte start sequence 0xEB90. Custom sequences supported via WrapCLTU() parameter.
TCSC-15CLTU Tail Sequence5.2.4MYesDefaultTailSequence() returns the standard 8-byte tail sequence 0xC5C5C5C5C5C5C579. The pattern is chosen so that it fails BCH decoding even after any single bit error, which is what terminates reception.
TCSC-16CLTU Assembly (Send)5.2MYesWrapCLTU(frameData, startSeq, tailSeq, randomize): 0x55 padding to the 7-byte boundary, optional randomization of the padded buffer, BCH encoding of each block, start sequence prepend, tail sequence append.
TCSC-17CLTU Data Padding3.4, 5.2MYesFrame data padded to a multiple of InfoBytes (7) with the fill data of 3.4 (0x55 octets) before randomization and BCH encoding, as part of CLTU assembly.
TCSC-18CLTU Reception and Termination5.3MYesUnwrapCLTU() / UnwrapCLTUWithMode(): validates the start sequence, decodes codeblocks, and terminates on the tail sequence or on the FIRST codeblock that fails to decode, an exact tail match is not required, so bit errors in the tail are tolerated. Trailing octets after the CLTU are ignored.
TCSC-19Start Sequence Validation5.3MYesUnwrapCLTU() validates the start sequence; returns ErrStartSequenceMismatch otherwise.
TCSC-20Minimum Length Validation5.3MYesUnwrapCLTU() requires at least the start sequence plus one codeblock; returns ErrDataTooShort otherwise.

Table A-4: Acquisition, Idle, and PLOP (section 7)

ItemDescriptionReferenceStatusSupportNotes
TCSC-21Acquisition Sequence7.2.2MYesAcquisitionSequence(octets), alternating '01' pattern (0x55 octets); defaults to the recommended minimum of 16 octets (128 bits).
TCSC-22Idle Sequence7.2.4MYesIdleSequence(octets), alternating '01' pattern between CLTUs. The length is unconstrained by 7.2.4 and is a managed parameter; DefaultIdleOctets = 8 is this library's practical default, not a requirement.
TCSC-23PLOP-17.4MYesUplinkSequence(PLOP1, ...), each CLTU preceded by its own acquisition sequence (session ends after each CLTU).
TCSC-24PLOP-27.5MYesUplinkSequence(PLOP2, ...), one acquisition sequence starts the session; idle sequence keeps the channel modulated between CLTUs. CCSDS-recommended procedure.
TCSC-25Carrier Modulation Modes (CMM state machine)7MNoThe CMM-1..CMM-4 state machine itself is not modeled; the library assembles the symbol stream (acquisition/idle/CLTU ordering) and leaves carrier control to the ground station equipment.

Table A-5: Optional Coding Schemes

ItemDescriptionReferenceStatusSupportNotes
TCSC-26LDPC Coding4ONoNot implemented.
TCSC-27Concatenated BCH + Convolutional-ONoConvolutional inner code not implemented. BCH outer code is available.

A2.3 CONFORMANCE SUMMARY

Overall Statistics

CategoryTotal ItemsSupportedNot Supported
Mandatory (M)25241
Optional (O)202
Total27243

Non-Conformances (Mandatory Items Not Supported)

ItemDescriptionReason
TCSC-25CMM state machineThe library produces the physical-channel symbol stream (UplinkSequence) but does not model the carrier modulation mode transitions; carrier on/off control belongs to the transmitting equipment, not to a codec library.

Non-Supported Optional Items

ItemDescriptionReason
TCSC-26LDPC CodingNot implemented. Specialized application for high-data-rate TC links.
TCSC-27Concatenated BCH + ConvolutionalConvolutional inner code not implemented.

Key Implementations

AreaItemsImplementation
BCH(63,56) CodingTCSC-1-9BCHEncode() (complemented parity, filler '0', all-zeros -> 0xFE vector), BCHDecode() / BCHDecodeWithMode() with SEC and TED modes.
Pseudo-RandomizationTCSC-10-13GeneratePNSequence(), Randomize(); fill-then-randomize order in WrapCLTU().
CLTUTCSC-14-20WrapCLTU(), UnwrapCLTU() / UnwrapCLTUWithMode() terminating on the first failed codeblock.
Acquisition/Idle/PLOPTCSC-21-24AcquisitionSequence(), IdleSequence(), UplinkSequence() for PLOP-1 and PLOP-2.