The invention relates to the field of interleaving and deinterleaving of data.
In the field of communications, forward error correction (FEC) coding is typically applied to blocks of data that are to be transmitted and this type of coding normally allows successful recovery from errors that affect relatively short parts of a received data block. Interleaving is a technique that is commonly used to reduce the chance that an error will affect a relatively long part of a received data block, as will now be explained.
Prior to transmission, the data items within an FEC encoded data block can be shuffled into a different order. This shuffling is referred to as interleaving and swaps the data items from a first pre-defined order to a second pre-defined order. After reception, the data items of the block are shuffled back into their original order. This shuffling is referred to as deinterleaving and swaps the data items from the second pre-defined order to the first pre-defined order. If interference during transmission causes an error over a part of the received version of the interleaved block, then the deinterleaving process distributes the error to various locations within the block. That is to say, after deinterleaving, the error is less likely to affect a contiguous part of the received block that is of sufficient length to impede recovery from the (dispersed) error by applying FEC decoding.
Recent wireless communications standards such as the Long Term Evolution (LTE) project by the Third Generation Partnership Project (3GPP) use large transport blocks. A channel interleaver/deinterleaver for such blocks will require considerable amounts of memory storage. A “single buffer” approach of writing a data block into an addressable memory in an interleaved order and then subsequently reading the data block out of the memory in a deinterleaved order may be undesirably slow, particularly where the block size is large. A “double buffer” approach of writing a data block into one addressable memory in an interleaved order whilst reading another data block out of another addressable memory in a deinterleaved order is faster but is costly in terms of silicon area.