Field Guide · algorithm

Also known as: FICH, frame information channel, YSF FICH

The YSF FICH (Frame Information Channel) is the header block that opens the payload of every Yaesu System Fusion frame.1 Where the frame sync word identifies that a YSF transmission is on-air, the FICH identifies what kind: the call type (group or radio ID), the data mode (voice, data, or the mixed V/D modes), and the frame’s position inside its block and transmission sequence. Because everything downstream depends on reading it correctly, its 32 information bits are wrapped in a CRC-16 and a heavy convolutional FEC chain so it survives a fading, mobile 4-FSK channel.2

32 info + 16 CRC = 48 + 4 tail bits K=5 ½-rate trellis → 104 channel bits puncture {0,1,102,103} → 100 bits 10×10 column interleave → FICH region
The FICH's 32 info bits plus a 16-bit CRC are trellis-encoded, punctured, and interleaved into 100 on-air channel bits — the protection a decoder reverses before it can trust the header.

How it works

A YSF frame is 480 symbols of 4800-baud 4-level C4FM. The first 20 dibits are the 40-bit frame sync word 0xD471C9634D, the next 100 dibits carry the FICH, and the rest is the DCH voice/data payload. A sliding detector locks onto the FSW, then the decoder reverses the FICH’s FEC chain:

  1. De-interleave. The 100 on-air bits are permuted by a column-major 10×10 interleaver (output bit k pulls from input bit (k%10)*10 + (k/10)), which spreads a burst of channel errors across the codeword so no single trellis section takes them all.
  2. Depuncture. Four channel bits punctured on the wire — positions {0, 1, 102, 103}, flanking the trellis’s tail-bit boundary — are re-inserted as erasures, restoring the full 104-bit trellis output.
  3. Viterbi decode. A K=5 ½-rate Viterbi decoder over the 104 channel bits recovers the 48 information bits (32 FICH + 16 CRC); its path metric reports how many bit-flips it had to repair.
  4. Check the CRC. The 16-bit trailer is a CRC-16 CCITT (poly 0x1021, initial value 0x0000) over the four leading info octets. A mismatch drops the frame.

FICH fields

The 32 information bits pack MSB-first across four octets:

Field Bits Meaning
FT 2 Frame Type — Header, Communications, Terminator, Test
CT 2 Call Type / call-sign mode — Group, Radio ID, reserved
BN 2 Block Number within the transmission
BT 2 Block Total
FN 3 Frame Number within the current block
FT (total) 3 Frame Total inside the block
DT 2 Data Type — V/D mode 1, Data FR, V/D mode 2, Voice FR
VoIP 1 1 = transmission carries WIRES-X / VoIP
DT2 2 Data Type 2 / mode-2 sub-field
SQM 1 Squelch mode — 0 open, 1 code-squelch active
SQ 7 Squelch code (split across octets 2 and 3)
DEV 2 Device / reserved

The DT field is what tells a decoder how to treat the DCH region — the V/D modes multiplex half-rate voice and data, while the full-rate modes carry only one of the two.

In practice

The field packing matches what the open-source YSF decoders (DSDcc, MMDVMHost, Pi-Star) use, and the four implementations agree byte-for-byte on the puncture schedule. That schedule’s exact origin is the JARL CAI reference; GopherTrunk flags it as best-effort pending real-air capture validation — if a captured YSF transmission fails FICH CRC after Viterbi decode, the puncture positions are the two lines most likely to need adjusting. The whole point of the chain is robustness: interleaving turns a fading burst into isolated section errors, the ½-rate trellis mops those up, and the CRC is the final gate that keeps a mis-decoded header from steering the rest of the frame wrong.

Relevance to SDR

internal/radio/ysf/fich.go holds the field parse and CRC check (ParseFICH, AssembleFICH); fich_trellis.go implements the K=5 ½-rate encode/decode, the puncture schedule, and the 10×10 interleave (EncodeFICHOnAir / DecodeFICHOnAir); and sync.go holds the FSW and its detector. Together they let GopherTrunk recognise a YSF transmission and read its metadata — enough to surface a ham repeater’s activity in the active-systems view.

Sources

  1. System Fusion — Wikipedia, on Yaesu System Fusion (C4FM) and its frame structure. 

  2. Convolutional code — Wikipedia, on the trellis coding the FICH uses for forward error correction. 

See also