VisSim/Comm
Overview
Features
Technical Specs
C Code Option
Demo Software
Viewlets
Pricing

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.