In coding theory, a systematic code is any errorcorrecting code in which the input data is embedded in the encoded output. Conversely, in a nonsystematic code the output does not contain the input symbols.
Systematic codes have the advantage that the parity data can simply be appended to the source block, and receivers do not need to recover the original source symbols if received correctly – this is useful for example if errorcorrection coding is combined with a hash function for quickly determining the correctness of the received source symbols, or in cases where errors occur in erasures and a received symbol is thus always correct. Furthermore, for engineering purposes such as synchronization and monitoring, it is desirable to get reasonable good estimates of the received source symbols without going through the lengthy decoding process which may be carried out at a remote site at a later time.
Every nonsystematic linear code can be transformed into a systematic code with essentially the same properties (i.e., minimum distance). Because of the advantages cited above, linear errorcorrecting codes are therefore generally implemented as systematic codes. However, for certain decoding algorithms such as sequential decoding or maximumlikelihood decoding, a nonsystematic structure can increase performance in terms of undetected decoding error probability when the minimum free distance of the code is larger.
For a systematic linear code, the generator matrix,
G
, can always be written as
G
=
[
I
k

P
]
, where
I
k
is the identity matrix of size
k
.
Checksums and hash functions, combined with the input data, can be viewed as systematic errordetecting codes.
Linear codes are usually implemented as systematic errorcorrecting codes (e.g., ReedSolomon codes in CDs).
Convolutional codes are implemented as either systematic or nonsystematic codes. Nonsystematic convolutional codes can provide better performance under maximumlikelihood (Viterbi) decoding.
In DVBH, for additional error protection and power efficiency for mobile receivers, a systematic ReedSolomon code is employed as an erasure code over packets within a data burst, where each packet is protected with a CRC: data in verified packets count as correctly received symbols, and if all are received correctly, evaluation of the additional parity data can be omitted, and receiver devices can switch off reception until the start of the next burst.
Fountain codes may be either systematic or nonsystematic: as they do not exhibit a fixed code rate, the set of source symbols is diminishing among the possible output set.