Hybrid ARQ (HARQ) is a variation of the ARQ error control method, which gives better performance than ordinary ARQ, particularly over wireless channels, at the cost of increased implementation complexity.
The simplest version of HARQ, Type I HARQ, simply combines FEC and ARQ by encoding the data block plus error-detection information (such as CRC) with an error-correction code (such as Reed-Solomon code or Turbo code) prior to transmission. When the coded data block is received, the receiver first decodes the error-correction code. If the channel quality is good enough, all transmission errors should be correctable, and the receiver can obtain the correct data block. If the channel quality is bad and not all transmission errors can be corrected, the receiver will detect this situation using the error-detection code, then the received coded data block is discarded and a retransmission is requested by the receiver, similar to ARQ.
In practice, the incorrectly received coded data blocks are often stored at the receiver rather than discarded, and when the retransmitted coded data block is received, the information from both coded data blocks are combined (Chase combining) before being fed to the decoder of the error-correction code, which can increase the probability of successful decoding. To further improve performance, Type II/III HARQ, or incremental redundancy HARQ, has also been proposed. In this scheme, different (re)transmissions are coded differently rather than simply repeating the same coded bits as in Chase combining, which gives better performance since coding is effectively done across retransmissions. The difference between type III HARQ and type II HARQ is that the retransmission packets in Type III HARQ can be decoded by themselves.
An example of incremental redundancy HARQ is HSDPA: the data block is first coded with a punctured 1/3 Turbo code, then during each (re)transmission the coded block is (usually) punctured further (i.e. only a fraction of the coded bits are chosen) and sent. The punctuation pattern used during each (re)transmission is different, so different coded bits are sent at each time.
HARQ can be used in stop-and-wait mode or in selective repeat mode. Stop-and-wait is simpler, but waiting for the receiver's acknowledgement reduces efficiency, thus multiple stop-and-wait HARQ processes are often done in parallel in practice: when one HARQ process is waiting for an acknowledgement, another process can use the channel to send some more data