xref: /aosp_15_r20/external/fec/README (revision 638691a093b4f9473cd6ee8f3e0139deef159a86)
1*638691a0SAndroid Build Coastguard WorkerCOPYRIGHT
2*638691a0SAndroid Build Coastguard Worker
3*638691a0SAndroid Build Coastguard WorkerThis package is copyright 2006 by Phil Karn, KA9Q. It may be used
4*638691a0SAndroid Build Coastguard Workerunder the terms of the GNU Lesser General Public License (LGPL). See
5*638691a0SAndroid Build Coastguard Workerthe file "lesser.txt" in this package for license details.
6*638691a0SAndroid Build Coastguard Worker
7*638691a0SAndroid Build Coastguard WorkerINTRODUCTION
8*638691a0SAndroid Build Coastguard Worker
9*638691a0SAndroid Build Coastguard WorkerThis package provides a set of functions that implement several
10*638691a0SAndroid Build Coastguard Workerpopular forward error correction (FEC) algorithms and several low-level routines
11*638691a0SAndroid Build Coastguard Workeruseful in modems implemented with digital signal processing (DSP).
12*638691a0SAndroid Build Coastguard Worker
13*638691a0SAndroid Build Coastguard WorkerThe following routines are provided:
14*638691a0SAndroid Build Coastguard Worker
15*638691a0SAndroid Build Coastguard Worker1. Viterbi decoders for the following convolutional codes:
16*638691a0SAndroid Build Coastguard Worker
17*638691a0SAndroid Build Coastguard Workerr=1/2 k=7 ("Voyager" code, now a widely used industry standard)
18*638691a0SAndroid Build Coastguard Workerr=1/2 k=9 (Used on the IS-95 CDMA forward link)
19*638691a0SAndroid Build Coastguard Workerr=1/6 k=15 ("Cassini" code, used by several NASA/JPL deep space missions)
20*638691a0SAndroid Build Coastguard Worker
21*638691a0SAndroid Build Coastguard Worker2. Reed-Solomon encoders and decoders for any user-specified code.
22*638691a0SAndroid Build Coastguard Worker
23*638691a0SAndroid Build Coastguard Worker3. Optimized encoder and decoder for the CCSDS-standard (255,223)
24*638691a0SAndroid Build Coastguard WorkerReed-Solomon code, with and without the CCSDS-standard "dual basis"
25*638691a0SAndroid Build Coastguard Workersymbol representation.
26*638691a0SAndroid Build Coastguard Worker
27*638691a0SAndroid Build Coastguard Worker4. Compute dot product between a 16-bit buffer and a set of 16-bit
28*638691a0SAndroid Build Coastguard Workercoefficients. This is the basic DSP primitive for digital filtering
29*638691a0SAndroid Build Coastguard Workerand correlation.
30*638691a0SAndroid Build Coastguard Worker
31*638691a0SAndroid Build Coastguard Worker4. Compute sum of squares of a buffer of 16-bit signed integers. This is
32*638691a0SAndroid Build Coastguard Workeruseful in DSP for finding the total energy in a signal.
33*638691a0SAndroid Build Coastguard Worker
34*638691a0SAndroid Build Coastguard Worker5. Find peak value in a buffer of 16-bit signed integers, useful for
35*638691a0SAndroid Build Coastguard Workerscaling a signal to prevent overflow.
36*638691a0SAndroid Build Coastguard Worker
37*638691a0SAndroid Build Coastguard WorkerSIMD SUPPORT
38*638691a0SAndroid Build Coastguard Worker
39*638691a0SAndroid Build Coastguard WorkerThis package automatically makes use of various SIMD (Single
40*638691a0SAndroid Build Coastguard WorkerInstruction stream, Multiple Data stream) instruction sets, when
41*638691a0SAndroid Build Coastguard Workeravailable: MMX, SSE and SSE2 on the IA-32 (Intel) architecture, and
42*638691a0SAndroid Build Coastguard WorkerAltivec on the PowerPC G4 and G5 used by Power Macintoshes.
43*638691a0SAndroid Build Coastguard Worker
44*638691a0SAndroid Build Coastguard Worker"Altivec" is a Motorola trademark; Apple calls it "Velocity Engine",
45*638691a0SAndroid Build Coastguard Workerand IBM calls it "VMX". Altivec is roughly comparable to SSE2 on the
46*638691a0SAndroid Build Coastguard WorkerIA-32.
47*638691a0SAndroid Build Coastguard Worker
48*638691a0SAndroid Build Coastguard WorkerMany of the SIMD versions run more than an order of
49*638691a0SAndroid Build Coastguard Workermagnitude faster than their portable C versions. The available SIMD
50*638691a0SAndroid Build Coastguard Workerinstruction sets, if any, are determined at run time and the proper
51*638691a0SAndroid Build Coastguard Workerversion of each routine is automatically selected. If no SIMD
52*638691a0SAndroid Build Coastguard Workerinstructions are available, the portable C version is invoked by
53*638691a0SAndroid Build Coastguard Workerdefault. On targets other than IA-32 and PPC, only the portable C
54*638691a0SAndroid Build Coastguard Workerversion is built.
55*638691a0SAndroid Build Coastguard Worker
56*638691a0SAndroid Build Coastguard WorkerThe SIMD-assisted versions generally produce the same results as the C
57*638691a0SAndroid Build Coastguard Workerversions, with a few minor exceptions. The Viterbi decoders in C have
58*638691a0SAndroid Build Coastguard Workera very slightly greater Eb/No performance due to their use of 32-bit
59*638691a0SAndroid Build Coastguard Workerpath metrics. On the other hand, the SIMD versions use the
60*638691a0SAndroid Build Coastguard Worker"saturating" arithmetic available in these instructions to avoid the
61*638691a0SAndroid Build Coastguard Workerinteger wraparounds that can occur in C when argument ranges are not
62*638691a0SAndroid Build Coastguard Workerproperly constrained. This applies primarily to the "dotprod" (dot
63*638691a0SAndroid Build Coastguard Workerproduct) function.
64*638691a0SAndroid Build Coastguard Worker
65*638691a0SAndroid Build Coastguard WorkerThe MMX (MultiMedia eXtensions) instruction set was introduced on
66*638691a0SAndroid Build Coastguard Workerlater Pentium CPUs; it is also implemented on the Pentium II and most
67*638691a0SAndroid Build Coastguard WorkerAMD CPUs starting with the K6. SSE (SIMD Streaming Extensions) was
68*638691a0SAndroid Build Coastguard Workerintroduced in the Pentium III; AMD calls it "3D Now! Professional".
69*638691a0SAndroid Build Coastguard WorkerIntel introduced SSE2 on the Pentium 4, and it has been picked up by
70*638691a0SAndroid Build Coastguard Workerlater AMD CPUs. SSE support implies MMX support, while SSE2 support
71*638691a0SAndroid Build Coastguard Workerimplies both SSE and MMX support.
72*638691a0SAndroid Build Coastguard Worker
73*638691a0SAndroid Build Coastguard WorkerThe latest IA-32 SIMD instruction set, SSE3 (also known as "Prescott
74*638691a0SAndroid Build Coastguard WorkerNew Instructions") was introduced in early 2004 with the latest
75*638691a0SAndroid Build Coastguard Worker("Prescott") revision of the Pentium 4. Relatively little was
76*638691a0SAndroid Build Coastguard Workerintroduced with SSE3, and this library currently makes no use of it.
77*638691a0SAndroid Build Coastguard Worker
78*638691a0SAndroid Build Coastguard WorkerSee the various manual pages for details on how to use the library
79*638691a0SAndroid Build Coastguard Workerroutines.
80*638691a0SAndroid Build Coastguard Worker
81*638691a0SAndroid Build Coastguard WorkerCopyright 2006, Phil Karn, KA9Q
82*638691a0SAndroid Build Coastguard Worker[email protected]
83*638691a0SAndroid Build Coastguard Workerhttp://www.ka9q.net/
84*638691a0SAndroid Build Coastguard Worker
85*638691a0SAndroid Build Coastguard WorkerThis software may be used under the terms of the GNU Lesser General
86*638691a0SAndroid Build Coastguard WorkerPublic License (LGPL); see the file lesser.txt for details.
87*638691a0SAndroid Build Coastguard Worker
88*638691a0SAndroid Build Coastguard WorkerRevision history:
89*638691a0SAndroid Build Coastguard WorkerVersion 1.0 released 29 May 2001
90*638691a0SAndroid Build Coastguard Worker
91*638691a0SAndroid Build Coastguard WorkerVersion 2.0 released 3 Dec 2001:
92*638691a0SAndroid Build Coastguard WorkerRestructured to add support for shared libraries.
93*638691a0SAndroid Build Coastguard Worker
94*638691a0SAndroid Build Coastguard WorkerVersion 2.0.1 released 8 Dec 2001:
95*638691a0SAndroid Build Coastguard WorkerIncludes autoconf/configure script
96*638691a0SAndroid Build Coastguard Worker
97*638691a0SAndroid Build Coastguard WorkerVersion 2.0.2 released 4 Feb 2002:
98*638691a0SAndroid Build Coastguard WorkerAdd SIMD version override options
99*638691a0SAndroid Build Coastguard WorkerTest for lack of SSE2 mnemonic support in 'as'
100*638691a0SAndroid Build Coastguard WorkerBuild only selected version
101*638691a0SAndroid Build Coastguard Worker
102*638691a0SAndroid Build Coastguard WorkerVersion 2.0.3 released 6 Feb 2002:
103*638691a0SAndroid Build Coastguard WorkerFix to parityb function in parity.h
104*638691a0SAndroid Build Coastguard Worker
105*638691a0SAndroid Build Coastguard Workerfeclib version 1.0 released November 2003
106*638691a0SAndroid Build Coastguard WorkerMerged SIMD-Viterbi, RS and DSP libraries
107*638691a0SAndroid Build Coastguard WorkerChanged SIMD Viterbi decoder to detect SSE2/SSE/MMX at runtime rather than build time
108*638691a0SAndroid Build Coastguard Worker
109*638691a0SAndroid Build Coastguard Workerfeclib version 2.0 (unreleased) Mar 2004
110*638691a0SAndroid Build Coastguard WorkerGeneral speedups and cleanups
111*638691a0SAndroid Build Coastguard WorkerSwitch from 4 to 8-bit input symbols on all Viterbi decoders
112*638691a0SAndroid Build Coastguard WorkerSupport for Altivec on PowerPC
113*638691a0SAndroid Build Coastguard WorkerSupport for k=15 r=1/6 Cassini/Mars Pathfinder/Mars Exploration Rover/STEREO code
114*638691a0SAndroid Build Coastguard WorkerChanged license to GNU Lesser General Public License (LGPL)
115*638691a0SAndroid Build Coastguard Worker
116*638691a0SAndroid Build Coastguard Workerfeclib version 2.1 June 5 2006
117*638691a0SAndroid Build Coastguard WorkerAdded error checking, fixed alignment bug in SSE2 versions of Viterbi decoders causing segfaults
118*638691a0SAndroid Build Coastguard Worker
119*638691a0SAndroid Build Coastguard Workerfeclib version 2.1.1 June 6 2006
120*638691a0SAndroid Build Coastguard WorkerFix test/benchmark time measurement on Linux
121