Block Interleavers
Section Overview
A block interleaver accepts a set of symbols and rearranges
them, without repeating or omitting any of the symbols in the set.
The number of symbols in each set is fixed for a given interleaver.
Back to Top
Block Interleaving Features of the Toolbox
The set of block interleavers in this toolbox includes a general
block interleaver as well as several special cases. Each special-case
interleaver function uses the same computational code that the general
block interleaver function uses, but provides a syntax that is more
suitable for the special case. The interleaver functions are described
below.
| Type of Interleaver | Interleaver Function | Description |
| General block interleaver | intrlv | Uses the permutation table given explicitly as an input argument. |
| Algebraic interleaver | algintrlv | Derives a permutation table algebraically, using the Takeshita-Costello
or Welch-Costas method. These methods are described in [4]. |
| Helical scan interleaver | helscanintrlv | Fills a matrix with data row by row and then sends the matrix
contents to the output in a helical fashion. |
| Matrix interleaver | matintrlv | Fills a matrix with data elements row by row and then sends
the matrix contents to the output column by column. |
| Random interleaver | randintrlv | Chooses a permutation table randomly using the initial state
input that you provide. |
Back to Top
Example: Block Interleavers
The following example illustrates how an interleaver improves
the error rate in a communication system whose channel produces a
burst of errors. A random interleaver rearranges the bits of numerous
codewords before two adjacent codewords are each corrupted by three
errors.
Three errors exceed the error-correction capability of the Hamming
code. However, the example shows that when the Hamming code is combined
with an interleaver, this system is able to recover the original message
despite the 6-bit burst of errors. The improvement in performance
occurs because the interleaving effectively spreads the errors among
different codewords so that the number of errors per codeword is within
the error-correction capability of the code.
st1 = 27221; st2 = 4831; % States for random number generator
n = 7; k = 4; % Parameters for Hamming code
msg = randint(k*500,1,2,st1); % Data to encode
code = encode(msg,n,k,'hamming/binary'); % Encoded data
% Create a burst error that will corrupt two adjacent codewords.
errors = zeros(size(code)); errors(n-2:n+3) = [1 1 1 1 1 1];
% With Interleaving
%------------------
inter = randintrlv(code,st2); % Interleave.
inter_err = bitxor(inter,errors); % Include burst error.
deinter = randdeintrlv(inter_err,st2); % Deinterleave.
decoded = decode(deinter,n,k,'hamming/binary'); % Decode.
disp('Number of errors and error rate, with interleaving:');
[number_with,rate_with] = biterr(msg,decoded) % Error statistics
% Without Interleaving
%---------------------
code_err = bitxor(code,errors); % Include burst error.
decoded = decode(code_err,n,k,'hamming/binary'); % Decode.
disp('Number of errors and error rate, without interleaving:');
[number_without,rate_without] = biterr(msg,decoded) % Error statisticsThe output from the example follows.
Number of errors and error rate, with interleaving:
number_with =
0
rate_with =
0
Number of errors and error rate, without interleaving:
number_without =
4
rate_without =
0.0020
Back to Top
 | Interleaving | | Convolutional Interleavers |  |
How much time do you spend on testing to ensure implementation meets system-level requirements?
Learn more