ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Algorithm-FEC/README.fec
Revision: 1.1
Committed: Tue Sep 9 05:52:49 2003 UTC (23 years ago) by root
Branch: MAIN
CVS Tags: rel-1_1, rel-1_0, HEAD
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 -------- Erasure codes based on Vandermonde matrices ---------
2     -------- (C) 1996-1998 Luigi Rizzo (luigi@iet.unipi.it) ---------
3    
4     See fec.c for other contributors.
5    
6     fec.c contains an implementation of an encoder/decoder for an erasure
7     code based on Vandermonde matrices computed over GF(2^m), m=2..16
8    
9     PRINCIPLE OF OPERATION
10    
11     The encoded data is computer as
12    
13     y = E x
14    
15     where x is a k-vector with source data, y is an n-vector with the
16     redundant info, and E is an n*k matrix derived from a Vandermonde
17     matrix. The code is systematic.
18    
19     At the receiver, any subset y' of k elements from y allows the
20     reconstruction of the whole x by solving the system
21    
22     y' = E' x
23    
24     where E' is made of rows from E corresponding to the received
25     elements.
26    
27     The complexity of matrix inversion is O(k*l^2) where l is the number
28     of elements not in x available at the receiver. This might seem
29     large, but data elements are in fact be packets of large size, so
30     the inversion cost can be amortized over the size of the packet.
31     For practical applications (k and l as large as 30, packet sizes
32     of 1KB) the cost can be neglected.
33    
34     In addition, each of the l lost data packets has a reconstruction
35     cost O(k), (obviously) similar to the cost of the encoding phase.
36     Being the code systematic, you can express encoding and decoding costs
37     roughly as
38    
39     Encoding speed: (c_e/l) MB/s
40     Decoding speed: (c_d/l) MB/s
41    
42    
43     PERFORMANCE
44    
45     The values of c_d and c_e (similar) are very sensitive to issues
46     such as cache hit rate, memory speed, field size (8 or 16 bits),
47     etc. Also some machines are better than others in working with
48     bytes or 16-bit words. With the June'98 implementation I have
49     measured the following values for c_e and c_d (8-bit version; 16-bit
50     version has a penalty between 3 and 4).
51    
52     Hardware C version Optimized version(*)
53    
54     PentiumII 266 62 33
55     PentiumPRO 200 56 30
56     Pentium133 14.5 18
57     486dx2/66 4.05 4.55
58    
59     (*) The 'optimized' version has some manual optimizations of the assembly
60     code generated by the compiler. It is generally faster for machines
61     with a single instruction pipeline, and generally slower for
62     machines with multiple pipelines.
63    
64     See the manpage for detailed usage information.
65