Adaptive Physical Communication System (APCS)

Glossary

The terms and abbreviations used across the documentation and the code, in alphabetical order. Where a term maps to a class or constant, the code name is given in backticks.

Back to the documentation index.


Term Meaning      
ACK / NACK Acknowledgement / negative acknowledgement packets in the protocol path. A NACK asks for one missing sequence number to be resent      
Adaptive engine AdaptiveDecisionEngine: scores channels and decides whether to switch. See Adaptive Engine      
APCF Adaptive Physical Communication Fountain frame: the binary payload of each Light QR code (magic APCF, version 3, 22-byte header, CRC-32)      
APCM Adaptive Physical Communication Message envelope: APCM + type + name + MIME + data. Carried by every channel. Text and links leave name and MIME empty (7 bytes of overhead)      
Band Where in the spectrum a Sound profile plays: Audible (1.2–7.2 kHz chords) or Silent (18.3–19.9 kHz, one tone at a time). AcousticBand      
APCS The project name, Adaptive Physical Communication System      
APCS1 The first-generation text QR format (base64 carousel), now legacy      
α (alpha) The primitive element 0x02 of GF(256). All non-zero field elements are powers of α      
Auto density The Light profile that picks 160/240/330-byte blocks so a transfer needs at most about 48 symbols      
Berlekamp–Massey The algorithm that finds the Reed-Solomon error-locator polynomial from the syndromes      
Bin One frequency slot of an N-point analysis: bin b is at b × 44 100 / 1 024 ≈ b × 43.07 Hz      
Binarizer The zxing2 stage that turns a grey image into black and white modules (GlobalHistogramBinarizer, HybridBinarizer)      
Block / blockLen One fixed-size piece of the file in a fountain transfer (Light 160–600 B, Sound 32–64 B, Silent 24 B)      
Broadcast One sender, any number of receivers, no replies. Light and Sound always work this way      
Burst 2–4 Sound frames played back-to-back from one generated WAV      
CAP / DEC / DROP / GOOD Light HUD figures: camera captures/s, successful QR decodes/s, frames skipped while the decoder was busy, and goodput in KB/s      
Carousel Repeating the same N frames in a loop (the old approach); needs every specific frame, unlike a fountain      
Chien search Finding the roots of the error-locator polynomial by trying every field element      
Codeword A Reed-Solomon block: data bytes + parity bytes (e.g. 99 bytes for Standard)      
CRC-16 / CRC-32 Cyclic redundancy checks: CRC-16/CCITT-FALSE on Sound frames, CRC-32 (IEEE) on Light frames and packets      
CSK Colour-shift keying: data sent as coloured screen flashes. Legacy      
dBFS Decibels relative to full scale. 0 dBFS is the loudest sine the audio format can hold, so real levels are negative (the readout ignores anything below −85 dBFS)      
Degraded A channel whose score is below 0.65      
Difference tone An audible tone at f₁ − f₂ produced when a non-linear speaker plays two tones at once; the reason Silent profiles play one tone at a time      
Degree The number of source blocks XOR-ed into one repair symbol      
Density How many bytes one QR carries; more bytes means a larger QR version with smaller modules      
Envelope See APCM      
Erasure A Reed-Solomon symbol known to be unreliable; it costs half as much parity to repair as an unknown error      
ETA Estimated transfer time: ceil((K + 2) / (fps × yield)) for Light      
EV Exposure value; −0.7 EV means about 40% less light, used to keep QR edges sharp      
FFT Fast Fourier transform: the power at every frequency bin at once. SpectrumAnalyzer runs a 1 024-point FFT for the live Hearing now readout; decoding uses Goertzel instead      
Finder pattern The three large squares in QR corners (1:1:3:1:1 ratio) used to locate the code. Also the centre of the app logo      
Forney algorithm Computes error magnitudes once the error positions are known      
Fountain code A rateless code: the sender can produce unlimited distinct symbols, and any ≈K of them rebuild the file      
fps Frames per second (Light display rate: 12, Safe 8)      
FSK / MT-FSK Frequency-shift keying / multi-tone FSK: data carried by which tone(s) are playing. The app uses 16-ary FSK (4 bits per tone); ASK and PSK were rejected because loudness and phase don’t survive speaker, room and microphone (see ADR-10)   Gauss-Jordan elimination Row reduction used by the LT decoder over GF(2) (XOR arithmetic)
GF(2), GF(256) Galois (finite) fields with 2 and 256 elements. GF(2) is used for fountain coding, GF(256) for Reed-Solomon (polynomial 0x11D)      
GMD Generalised minimum-distance decoding: retry Reed-Solomon while erasing the 4, 8, 12… least-confident bytes      
Goertzel algorithm Measures the power at one frequency bin cheaply; used for every tone decision      
Goodput Useful payload bytes per second, excluding overhead and duplicates      
Group 16 tone bins carrying one nibble (4 bits) in MT-FSK: adjacent bins on Audible, every second bin on Silent      
Guard frame The first 1 024 samples of each Silent symbol, ignored by the demodulator so echoes of the previous tone have decayed      
Hann window A raised-cosine taper applied before an FFT so a tone between two bins doesn’t smear across the whole spectrum (first sidelobe about 31 dB down)      
Hearing now / Sending now The live frequency readout (LiveToneMeter): what the receiver’s microphone picks up, and what the sender is playing, in kHz      
High-pass filter Removes low frequencies. A 4th-order 16 kHz Butterworth high-pass keeps voices out of the Silent receiver and drives the Silent band meter      
Hysteresis The 0.15 score margin an alternative channel must beat before a switch      
Isolate A Dart thread with its own memory; QR decoding runs in one so the UI stays smooth      
K The number of source blocks in a fountain transfer      
Leading edge The first sample where the sync-marker score reaches 50% of its peak; defines Sound frame timing      
LT code Luby Transform code, the fountain code family used here (systematic, with custom degree rules)      
M-ary A scheme with M possible symbols, each carrying log₂M bits. The three M-ary keying families are ASK (amplitude), PSK (phase) and FSK (frequency)      
Marker The sync burst at the start of every Sound frame: bins 28 and 36 together (Audible), or bin 424 then bin 427 (Silent)      
Maskable icon A web icon with a full-bleed background, so the platform can crop it to any shape      
Module One black or white square of a QR code      
Near-ultrasound Roughly 18–20 kHz: above most adults’ hearing but still reproduced by most phone speakers and microphones. The Silent band lives here      
NEW / DUP / RED Light HUD counters: symbols that added rank, repeated indices, linearly dependent symbols      
Nibble 4 bits; one MT-FSK group carries one nibble per symbol      
Overhead Extra symbols beyond K needed to decode (mean 0–2.2 here)      
Parity (P) Reed-Solomon check bytes per frame (20 or 24; 16 on Silent)      
Processing gain The SNR improvement from integrating a tone over many samples: 10·log10(L/2) dB      
Profile A named parameter set: Light Auto/Safe/Standard/Fast; Sound Rugged/Safe/Standard/Fast (Audible) and Silent Robust/Silent      
pureBarcode A zxing2 hint that reads the grid from the black bounding box, rescuing frames with fake finder patterns      
Quiet zone The white margin (4 modules) around a QR code      
Rank The number of independent symbols the LT decoder holds; decoding completes at rank = K      
Reed-Solomon (RS) The error-correcting code on each Sound frame      
Resume streaming Restarting a Light send with the same session ID and new symbol indices; the receiver keeps its progress      
Session ID Identifies one transfer. Light: derived from the content CRC and block size (32-bit). Sound: time-based (8-bit)      
SNR Signal-to-noise ratio in dB      
Symbol One fountain unit: a source block (systematic) or an XOR of several (repair). For MT-FSK, one tone-chord time slot: 70–139 ms on Audible (24–32 bits), 46–70 ms on Silent (4 bits)      
Tone timeline ToneTimeline: the list of tones in a rendered burst and when each plays, used by Sending now      
Syndrome The Reed-Solomon codeword evaluated at α^0…α^(P−1); all zero means no detected errors      
Systematic The first K fountain symbols are the source blocks themselves      
Unicast One sender, one receiver, with ACKs (protocol path only)      
Yield The fraction of displayed Light frames the camera typically decodes (0.70 / 0.65 / 0.55 / 0.35 by density)      
zxing2 The pure-Dart port of the ZXing barcode library, used to decode QR codes