OpenFEC library content

Library structure

The OpenFEC library contains several components:
Stable codecs This library gathers several stable, well evaluated, and sometimes standardized, AL-FEC codecs. This is the priviledged library for those who want to want to use these AL-FEC codes in operational environments.
Advanced codecs This library gathers several codecs that are less stable by nature, e.g. because they are used to evaluate new codes or decoding techniques. This is the priviledged library for those who want to evaluate their own proposals using the facilities provided by
Performance evaluation tools These tools are meant to evaluate the performance of the various codes/codecs under several circunstances, for several metrics, in an automatic way. This is the priviledged set of tools for those who want to evaluate their own proposals. They can also be used with external codecs after minimal modifications.
Code generation tools These tools are meant to ease the creation of new codes. Associated to the performance evaluation tools, they are a powerful way for testing new ideas.
Demonstration applications These applications provide examples of how to use the library and its codecs.
Documents The library includes both man pages that describe the various API for the users, and doxygen documentation for those who want to better understand its inner structure.

Additional information, not included in the distribution, is available in the web site.

Provided codecs

Here is the list of provided codecs:

  • Reed-Solomon stable codec over GF(28)
  • Reed-Solomon stable codec over GF(2m)
  • 1D-2D parity check matrix stable codec
  • LDPC-staircase stable codec
  • LDPC from file advanced codec


The LDPC-staircase codec implements a subset of RFC 5170. See the licences for more informations.

Codec name Stable codec Advanced codec Encoding speed Decoding speed Inefficiency ratio
Reed-Solomon over GF(28)
Reed-Solomon over GF(2m)
1D-2D parity check matrix
LDPC from file n/a n/a n/a

Using the library and its API

OpenFEC API definition

The following header file defines the API (Application Programming Interface) of the OpenFEC library. This is the one and only file that needs to be included by applications, regardless of the code(s)/codec(s) used.

of_openfec_api.h (generic API header file, provided for example, see the distribution for the latest version)

Additionally there are per-code/codec API header files, in order to complement the generic file with specific definitions. These files can be found for instance in src/lib_stable/ldpc_staircase/of_ldpc_staircase_api.h (or similar).

Examples of use

A demo server/client application is available in the distribution (applis/howto_examples/simple_client_server/), which explains how to use the OpenFEC codecs. This demo application opens a UDP socket, the server performs FEC encoding and sends (a subset of) encoding symbols, while the client receives them and tries to FEC decode the object. The selection of the codec to use is based on the object size. The API being generic, most of the code is similar no matter the nature of the code/codec, which facilitates the use of the OpenFEC library.

Using the performance evaluation tools  

The performance evaluation tools is a set of Perl scripts. They allow you to test different codecs and codes with many metrics like inefficiency ratio, decoding speed or decoding failure probability.

A first script is used to run a code and log results into a database. You have to fill a parameters file with all tests you want to run.
A second script allows you to automatically graph results with Gnuplot. Here are example of curves you can generate :

Decoding speed curve

loss percentage

Open this image

This curve represents both decoding speed for Reed-Solomon and LDPC-Staircase codecs. You can generate automatically this king of curves. The performance evaluation tools detect the presence of many codecs to make only one graph with all curves.

graph: decoding speed for loss percentage

Open this image

Here, is represented decoding speed for Reed_solomon and LDPC-Staircase codecs with differents code configurations. As you can see, you can decode several gigabits per second.

Erasure recovery curves

inefficiency ratio

Open this image

You also can determine the inefficiency ratio for a given code. You only have to run a sufficient number of iterations, and generate the graph.
Here is the inefficiency ratio for LDPC QC Band, LDPC QC and LDPC QC constant band witdth codecs.

decoding failure probability

Open this image

You can easily graph the decoding failure probability (it could be so long !) for the loss percentage. Here, you have the decoding failure probability of LDPC QC Band codec, LDPC QC constant bandwidth codec and LDPC QC codec for the loss percentage (with de 2/3 code rate).

For LDPC codecs, you have to choose the Maximum Likelihood decoder (not the Iterative decoder) and the script automatically compute the maximum loss percentage (with dichotomy) for a given code.

Decoding complexity curve

number of operations

Open this image

You also can compare number of operations over symbols for different codecs. Here is the number of operations over symbols for the LDPC-QC Band , the LDPC-QC, the LDPC-QC constant band width, and LDPC codecs.

Generate this kind of curves is so easy ! You just have to choose the correct parameters and launch scripts. You can find more informations into the archive in the downloads page.