Forward Error Correction (FEC) is a common technique used in telecommunication systems to control error in the data transmission over noisy transmission channels. The key concept is to encode the signal in a redundant way by using Error Correcting Code (ECC) in the transmitter; this allows the receiver to detect a limited number of error bits in the transmitted signal and often to correct these errors without the need of re-transmitting the signal. Because of the redundancy in the transmitted signal, FEC requires a higher forward channel bandwidth in general.
In this section, we demonstrate the forward error correction method by using the FEC Encoder and Decoder to transmit signal through a noisy channel. The FEC Encoder performs the linear encoding (linear block code) of the input signal using a generator matrix in the Alist format and the FEC Decoder performs the linear decoding of the input signal using a parity-check matrix. The generator matrix can be formed by using the constructgeneratormatrix command.
Example
The application example data_recovery_fec.icp demonstrates the operation of the FEC Endoder and FEC Decoder elements. A PRBS signal is first encoded using a Hamming(7,4) generator matrix, the signal propagates trough an additive white Gaussian noise (AWGN) channel. The signal is then filtered and recovered by the Data Recovery element and decoded with the Hamming(7,4) parity-check matrix in the FEC Decoder element. The circuit is shown below.
For a comparison, we measured the digital signal at 3 points in the circuit (A, B and C), and plotted the signal measured at point B and C overlaid with the original transmitted signal at point A. The results show great recovery of the signal through the noisy channel.
The generator and parity-check matrices for the Hamming(7,4) are provided as hamming_7_4_1_g.alist and hamming_7_4_1_h.alist. The matrices are generated by using the script command constructgeneratormatrix with Alist files. The script function may update the parity-check matrix to make sure they both follow the standard form for the generator matrix (identity matrix is at the beginning of the matrix). Following is the command line that used to generate the hamming_7_4_1_g.alist file in regarding to the hamming_7_4_1_h.alist file and update the hamming_7_4_1_h.alist file at the same time.
constructgeneratormatrix("hamming_7_4_1_h.alist", "hamming_7_4_1_g.alist", "hamming_7_4_1_h.alist");
The FEC Encoder and Decoder can also take in text files with the matrix in ordinary 1/0 format.