|
Encoder/Decoder Category
Block Listing
The following blocks are included in the Encoder/Decoder
category :
Block
Interleaver
Convolutional
Encoder
Convolutional
Interleaver
Depuncture
Gray
Encoder/Decoder
Hamming
Encoder/Decoder
Puncture
Reed-Solomon
Encoder/Decoder
Trellis
Encoder/Decoder
Viterbi Decoder
Block Interleaver
This block implements block interleaving or de-interleaving.
It is normally used to scramble encoded channel bits in order
to spread out the effects of burst type channel errors. It
is particularly useful when used in conjunction with a Convolutional
Encoder, Viterbi Decoder (Hard), or Viterbi Decoder (Soft)
block.
When the interleave mode is selected, the input data is written
in rows and read out by columns, starting at location [1,
1]. The opposite occurs when the deinterleave mode is selected.
Convolutional Encoder
This block implements a convolutional encoder. Block parameters
include the numbers of input bits (k) and coded bits (n),
the encoder constraint length (L), the input bit rate, and
the generator coefficients.
The Convolutional Encoder block requires that the simulation
step divide evenly into both the input and output (coded)
bit durations.
Convolutional Interleaver
This block implements convolutional interleaving or de-interleaving.
It is normally used to scramble encoded channel bits in order
to spread out the effects of burst type channel errors. It
is particularly useful when used in conjunction with the Convolutional
Encoder, Viterbi Decoder (Hard), or Viterbi Decoder (Soft)
blocks.
When using convolutional interleaving, data is written into
rows of increasing buffer length, starting with a no delay
path. The depth of the interleaver (number of rows) and the
row increment can both be set by the user. When the interleave
mode is selected, the input data is written in rows of increasing
length. The opposite occurs when the deinterleave mode is
selected, i.e. the size of the row decreases from row to row,
with the last row being a straight through path. An external
input clock controls reading of the data.
Depuncture
This block performs depuncturing of an input data vector as
specified by an external puncture pattern file. This operation
is commonly used in conjunction with a coding block to achieve
a variety of different code rates.
At each external frame clock event, the Depuncture block reads
in a previously punctured data vector and inserts erasures
at all the punctured locations as specified by the puncture
pattern. As each element of the input vector is read, successive
elements of the puncture mask are read and used to determine
where to insert the erasures. A mask value of 1 indicates
that an element was transmitted, while a 0 indicates that
an element was omitted and thus an erasure should be inserted.
The mask is applied in cyclical fashion (that is, once the
end of the mask is reached, it restarts from the beginning).
Block parameters include the output vector size, the number
of encoders used, erasure value, and the file path to the
puncture specification file. The number of encoders information
is only used for display purposes to compute the effective
coding rate provided by the puncturing.
Gray Encoder/Decoder
This pair of blocks performs Gray mapping (encoding) or demapping
(deconding) on the input signal. The input signal is first
rounded to the closest integer. Gray coding is used to map
neighboring integer input values into encoded symbols which
differ by only one bit.
For example, the sequence (0, 1, 2, 3, 4, 5, 6, 7) would map
to the following (0, 1, 3, 2, 6, 7, 5, 4)
Hamming
This pair of blocks implements Hamming encoding and decoding.
Hamming codes are a form of block codes, and operate on binary
symbols (bits). In an Hamming (n, k) code, n - k parity bits
are added to the k input bits, resulting in a total of n output
bits. Hamming codes are capable of correcting a single bit
error in each data frame.
These blocks support Hamming codes in the range of (3, 1)
to (255, 247). The decoder input is assumed to be in systematic
form (data bits followed by parity bits). An external clock
is used to signal when each encodig or decoding operation
should take place.
Note: A Buffer block can be used to pack serial bits into
the required vector format, while an Unbuffer block can be
used for the reverse operation.
Puncture
This block performs puncturing of an input data vector as
specified by an external puncture pattern file. This operation
is commonly used in conjunction with a coding block to achieve
a variety of different code rates.
At each external frame clock event, the block reads in a data
vector and applies the specified puncture pattern, thus removing
a number of the elements of the original vector. As each element
of the input vector is read, successive elements of the puncture
mask are read and used to determine whether each data element
is to be kept or removed. A mask value of 1 indicates to keep
the element, while a 0 is used to indicate its removal. The
mask is applied in cyclical fashion (that is, once the end
of the mask is reached, it restarts from the beginning). The
new data vector thus formed is then output.
Block parameters include the input vector size, the number
of encoders used, and the file path to the puncture specification
file. The number of encoders information is only used for
display purposes to compute the effective coding rate provided
by the puncturing.
Reed-Solomon Encoder/Decoder
These blocks implement a Reed-Solomon (RS) encoder and decoder.
RS codes are a type of block code and are a subclass of BCH
codes. RS codes use nonbinary symbols from a Galois Field
(GF) and are systematic. In an RS(n, k) code, n - k parity
symbols are added at the end of the k input symbols, resulting
in a total of n output symbols. An RS(n, k) code is capable
of correcting up to (n - k)/2 errors.
Standard RS block sizes are 2^M -1, where M is the symbol
size in bits (e.g. n= 255 for M= 8). When n is less than 2^M
-1, the corresponding RS code is referred to as a shortened
code. Such codes provide a higher degree of error protection
by applying the FEC properties of the code over fewer transmitted
symbols.
Shortened codes are implemented internally by zero padding
the input prior to the encoding stage, and then omitting these
zeros from the systematic coded output. An example is the
RS(204, 188) used in the DVB specification. This code is implemented
by using 51 padded zeros and an RS(255, 239) code. The resulting
code is capable of correcting up to eight errors out of the
204 output symbols.
Block parameters include the symbol size (M) in bits, which
also specifies the sizes of the underlying RS block length
and GF size, and the number of information and coded symbols
(k and n respectively). These blocks accept data vectors for
their input and output. An input clock is used to trigger
each encoding or decoding operation on a data block. The Buffer
and Unbuffer blocks can be used to pack serial symbols into
the required vector format.
The error output (decoder only) indicates the total number
of corrected symbol errors found in each block. If the decoder
detects an uncorrectable number of symbol errors, then it
simply outputs the received systematic symbols and the error
output is set to a value of -1.
Trellis Encoder/Decoder
These blocks implement trellis-coded modulation and decoding.
In trellis-coded modulation, the encoding process and modulation
scheme are designed together. The mapping of the output constellation
points is selected to maximize the minimum Euclidean distance
between coded signal pairs. The CCITT V.32 modem communication
standard is an example of trellis-coded modulation.
Block parameters include the numbers of input data bits (k)
and encoded output bits (n), the number of states in the trellis,
and the trellis truncation length (decoder only).
Unlike the Convolutional Encoder block, the Trellis Encoder
block accepts k input bits simultaneously as a symbol value.
The coded output symbol value (n bits) is then determined
internally and the corresponding constellation point in (I,
Q) space is output. The specific trellis state transition
mapping and corresponding constellation output points are
specified via an external file.
The Trellis Encoder block accepts a symbol number and outputs
a baseband (I, Q) pair corresponding to the output constellation
point. This block is typically followed by an I/Q Mapper block.
The Trellis Decoder block accepts a baseband (I, Q) pair as
its input and outputs a decoded stream of symbol values.
Viterbi Decoder
Two versions of this block are provided; one that employs
hard decisions and another that employs soft decisions. Both
blocks are used to decode convolutionally encoded data.
Block parameters include the numbers of input bits (k) and
coded bits (n), the encoder constraint length (L), the trellis
truncation length (M), the number of quantization bits (soft
version only), the output bit rate, and the generator coefficients.
An external metric file must also be specified for the soft
decoder version.
The Viterbi Decoder blocks require the simulation step size
to divide evenly into both the input and output (coded) bit
duration.
|
|