Unequal Loss Protection

Unequal Loss Protection (ULP) is the name that we have given to a scheme that uses explicit Forward Error Correction (FEC) to protect data from packet losses in store-and-forward networks. This page attempts to explain our motivation and present some of the reasoning behind the approach, as well as providing documentation for the ULP Simulator. This research was supported in part by NSF Grant EIA-9973531.


We've published a conference paper at DCC 1999 that outlines the framework and presents a local-search algorithm that finds an allocation of FEC for a given estimate of network loss conditions.

A second conference paper at ICIP 1999 outlines how the ULP framework and assignment algorithm are an alternative solution to the Generalized Multiple Description Problem.

At ICIP 2000, we presented a new assignment algorithm that runs much more quickly and has good theoretical justification.

A journal article appeared in the June 2000 issue of JSAC. It provides more detail than the DCC 1999 paper.

All are available from my publications page.


The ULP Simulator is available in source form and as precompiled binaries for linux. This package includes two utilities, ulpsim and ulpmatch. The first of these utilities can find an allocation of forward error correction to progressively coded source data such that the expected utility over a packet erasure channel is maximized. It takes as input a description of the source's utility (psnr/mse) vs cost (bit rate, byte count, etc) curve, a PMF of expected channel/network loss conditions, the number of packets/descriptions transmitted, and the length of each packet/description. It runs an algorithm to maximize utility and reports the results.

The second utility, ulpmatch, is more useful for researchers who would like to compare their own approaches for multiple description coding or joint source/channel coding with the performance of an FEC-based baseline. It takes as input the utility-cost curve of a source, the number of packets/descriptions transmitted, and the utility achieved by the proposed algorithm for each number of packets/descriptions received. It then reports how many bytes an FEC-based system would require to achieve (and slightly exceed) those same utilities.

You can view the README or change log from the source.


Note: the source is research prototype code. It's not heavily commented, though there are some and I tried to use elegant implementations where I could. It also doesn't do extensive (or graceful) error checking. If you run into problems, let me know.


Binaries are for Redhat 6.2, based on linux 2.2. The dynamic The dynamically linked version requires libc and libm version 6 (glibc 2.1). The statically linked version should run no matter which version of linux you have, but is significantly larger.

Data files

Some utility-cost data files are available. If you'd like one not listed here, send me mail and I'll do what I can to generate it for you.

Obsolete source

I generally move obsolete and older source files to a separate page.


Feel free to email me if you have any questions about the papers or the simulator. Further information is available from my homepage or publication list.

Alex Mohr
June 17, 2004