Error Detection and Correction
Voice modes require the operator to manually request a repeat of any information required but not understood. Using proper phonetics makes the information more easily understood but takes longer to transmit.
If 100% accuracy is required, it may be necessary for the receiver to repeat the entire message back to the sender for verification. Computers can’t necessarily distinguish between valuable and unnecessary data or identify likely errors but they offer other options to detect and correct errors.
The first requirement of any accurate system is to be able to detect when an error has occurred. The simplest method is parity. With 7-bit ASCII data, it was common to transmit an additional 8th parity bit to each character. The parity bit was added to make the total number of 1 bits odd or even.
The binary representation for an ASCII letter Z is 1011010. Sent as seven bits with even parity, the parity bit would be 0 because there are already an even number of 1 bits and the result would be 01011010. The limitation of parity is that it only works with an odd number of bit inversions. If the last two bits were flipped to 01011001 (the ASCII letter Y), it would still pass the parity check because it still has an even number of bits.
Parity is also rarely used on 8-bit data so it cannot be used when transferring binary data files. Checksum is a method similar to the “check” value in an NTS message. It is generally a single byte (8-bit) value appended to the end of a packet or frame of data. It is calculated by adding all the values in the packet and taking the least significant (most unique) byte. This is a simple operation for even basic processors to perform quickly but can also be easily mislead.
If two errors occur in the packet of equal amounts in the opposite direction (A becomes B and Z becomes Y), the checksum value will still be accurate and the packet will be accepted as error-free. Cyclic redundancy check (CRC) is similar to checksum but uses a more sophisticated formula for calculating the check value of a packet.
The formula most closely resembles long division, where the quotient is thrown away and the remainder is used. It is also common for CRC values to be more than a single byte, making the value more unique and likely to identify an error. Although other error detection systems are currently in use, CRC is the most common.
There are two basic ways to design a protocol for an error correcting system: automatic repeat request (ARQ) and forward error correction (FEC). With ARQ the transmitter sends the data packet with an error detection code, which the receiver uses to check for errors. The receiver will request retransmission of packets with errors or sends an acknowledgement (ACK) of correctly received data, and the transmitter re-sends anything not acknowledged within a reasonable period of time.
With forward error correction (FEC), the transmitter encodes the data with an errorcorrecting code (ECC) and sends the encoded message. The receiver is not required to send any messages back to the transmitter. The receiver decodes what it receives into the “most likely” data. The codes are designed so that it would take an “unreasonable” amount of noise to trick the receiver into misinterpreting the data. It is possible to combine the two, so that minor errors are corrected without retransmission, and major errors are detected and a retransmission requested. The combination is called hybrid automatic repeat request (hybrid ARQ).
There are many error correcting code (ECC) algorithms available. Extended Golay coding is used on blocks of ALE data, for example, as described in the section below on G-TOR. In addition to the ability to detect and correct errors in the data packets, the modulation scheme allows sending multiple data streams and interleaving the data in such a way that a noise burst will disrupt the data at different points.