In this blog post, which is the first in a series of two, we’ll introduce Hybrid ARQ (HARQ). This is a key component of data communication that ensures reliability and performance. We won’t focus on the algorithms themselves, but instead will attempt to simplify the various concepts to provide a better understanding of the different types of HARQ, so that you’ll be better equipped to read more advanced documentation and understand what it’s all about when browsing wireless standard specifications.
Hybrid ARQ, as its name implies, is the combination of automatic repeat request (ARQ) and something else. This something else is forward error correction (FEC). These are the two main error control strategies used for data communication, and when used together, they provide great flexibility to adapt to any propagation condition.
Forward Error Correction
Forward error correction (FEC) is a coding technique that uses redundancy bits to protect the data being transmitted. Under poor transmission conditions, a decoder implemented in the receiver is able to use these redundancy bits to repair the errors and recover the original data sequence. Typically, FEC is implemented in the physical layer (PHY) and is part of the channel encoding.
Various codes can be used to generate the redundancy. Convolutional codes were widely used a few years ago by standards like GSM, but have tended to be replaced by turbo codes, which are used extensively in 3G and 4G telephony standards. But these are only two of the many possible codes available.
Selecting the Right Code
One of the most important parameters of code is its rate. The code rate determines how many bits are produced at the output of the encoder for each bit at the input. A lower code rate means more redundancy and therefore more robustness. For example a code rate of 1/3 produces 3 bits for each bit at the input of the encoder. But it also means that 2/3 of the bandwidth is wasted because it doesn’t transport any new data, just redundancy. The selection of the code rate is therefore critical for a system. We want a code strong enough to repair the errors caused by the channel impairments, but at the same time with minimum overhead to maximize the throughput.
A very simple example code would be repeating each bit three times. Therefore, to send the sequence 0, 1, 0 you would transmit 000, 111, 000. Let’s suppose that a terminal receives the following sequence: 010, 110, 001. Knowing the code used by the transmitter, a decoder can easily decode the original sequence by choosing the most likely bit for each triplet. As we can see, even if one third of the bits are received in error, a receiver can easily recover the original sequence without requiring a retransmission, which would have introduced latency.
The second component of the HARQ is the ARQ itself. Classical ARQs, which are typically implemented in the link layer, and use techniques like CRC or parity bits to detect errors in the sequence of data at the receiver. The receiver requires this error detection to acknowledge the receipt of transmitted sequences. If the receiver judges a received sequence to be error free, it sends a positive acknowledgement (ACK) to the transmitter. If the sequence is suspected to contain errors, the receiver sends a negative acknowledgement (NAK) to the transmitter. If the transmitter receives a NAK, or doesn’t receive any acknowledgement after a certain amount of time, it retransmits the same sequence.
In this post, we introduced the components of HARQ. We talked about the importance of selecting the right code, and introduced ARQ. In the next post, we’ll dive into more details about the different types of ARQ, and how HARQ provides a flexible mechanism for recovering from transmission errors and maintaining high data throughput.