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