Internet DRAFT - draft-andersen-ilbc

draft-andersen-ilbc





                                                         S. V. Andersen 
                                                               A. Duric 
                                                               R. Hagen 
                                                           W. B. Kleijn 
                                                              J. Linden 
                                                           M. N. Murthi 
                                                            J. Skoglund 
                                                             J. Spittka 
   Internet Draft                                                       
   Document: draft-andersen-ilbc-01.txt                 Global IP Sound 
   Category: Experimental                       
   July 1st 2002                                
   Expires: Jan. 1st 2003 
 
 
                        Internet Low Bit Rate Codec 
 
 
Status of this Memo 
 
   This document is an Internet-Draft and is in full conformance 
   with all provisions of Section 10 of RFC2026. 
 
   Internet-Drafts are working documents of the Internet Engineering 
   Task Force (IETF), its areas, and its working groups. Note that 
   other groups may also distribute working documents as Internet-
   Drafts. 
    
   Internet-Drafts are draft documents valid for a maximum of six 
   months and may be updated, replaced, or obsoleted by other documents 
   at any time.  It is inappropriate to use Internet-Drafts as 
   reference material or to cite them other than as "work in progress." 
    
   The list of current Internet-Drafts can be accessed at 
        http://www.ietf.org/ietf/1id-abstracts.txt 
   The list of Internet-Draft Shadow Directories can be accessed at 
        http://www.ietf.org/shadow.html. 
    
    
Abstract 
    
   This document specifies a speech codec suitable for robust voice 
   communication over IP. The codec is developed by Global IP Sound 
   (GIPS) and is designed for narrow band speech and results in a 
   payload bit rate of 13.867 kbit/s with an encoding frame length of 
   30 ms. The codec enables graceful speech quality degradation in the 
   case of lost frames, which occurs in connection with lost or delayed 
   IP packets.  
 
 
     
   Andersen et. al.                                                  1 
    
                     Internet Low Bit Rate Codec            July 2002 
    
Table of Contents 
    
   Status of this Memo................................................1 
   Abstract...........................................................1 
   Table of Contents..................................................2 
   1. INTRODUCTION....................................................5 
   2. OUTLINE OF THE CODEC............................................5 
   2.1 Encoder........................................................5 
   2.2 Decoder........................................................7 
   3. ENCODER PRINCIPLES..............................................8 
   3.1 LPC Analysis and Quantization..................................8 
   3.1.1 Computation of Autocorrelation Coefficients..................8 
   3.1.2 Computation of LPC Coefficients..............................9 
   3.1.3 Computation of LSF Coefficients from LPC Coefficients.......10 
   3.1.4 Quantization of LSF Coefficients............................10 
   3.1.5 Stability Check of LSF Coefficients.........................12 
   3.1.6 Interpolation of LSF Coefficients...........................12 
   3.2 Calculation of the Residual...................................12 
   3.3 Perceptual Weighting Filter...................................13 
   3.4 Start State Encoder...........................................13 
   3.4.1 Start State Estimation......................................13 
   3.4.1 All-Pass Filtering and Scale Quantization...................13 
   3.4.2 Scalar Quantization.........................................14 
   3.5 Codebook Encoding.............................................14 
   3.5.1 Perceptual Weighting of Codebook Memory and Target..........14 
   3.5.2 Codebook Creation...........................................15 
   3.5.2.1 Creation of a Base Codebook...............................15 
   3.5.2.2 Codebook Augmentation.....................................15 
   3.5.2.3 Codebook Expansion........................................16 
   3.5.3 Codebook Search.............................................17 
   3.5.3.1 The Codebook Search at Each Stage.........................17 
   3.5.3.2 The Gain Quantization at Each Stage.......................18 
   3.5.3.3 Preparation of Target for Next Stage......................18 
   3.6 Gain Correction Encoding......................................18 
   3.7 Bitstream Definition..........................................18 
   4. DECODER PRINCIPLES.............................................18 
   4.1 LPC Filter Reconstruction.....................................18 
   4.2 Start State Reconstruction....................................18 
   4.3 Excitation Decoding Loop......................................18 
   4.4 Multistage Adaptive Codebook Decoding.........................18 
   4.4.1 Construction of the Decoded Excitation Signal...............18 
   4.5 Packet Loss Concealment.......................................18 
   4.5.1 Block Received Correctly and Previous Block also Received...18 
   4.5.2 Block Not Received..........................................18 
   4.5.3 Block Received Correctly When Previous Block Not Received...18 
   4.6 Enhancement...................................................18 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003           2 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   4.6.1 Outline of the Enhancement Unit.............................18 
   4.6.2 Determination of the Pitch-Synchronous Sequences............18 
   4.6.3 Re-estimation of the Current Sample-Sequence................18 
   4.7 Synthesis Filtering...........................................18 
   5. SECURITY CONSIDERATIONS........................................18 
   6. REFERENCES.....................................................18 
   7. ACKNOWLEDGEMENTS...............................................18 
   8. AUTHOR'S ADDRESSES.............................................18 
   APPENDIX A REFERENCE IMPLEMENTATION...............................18 
   A.1 iLBC_test.c...................................................18 
   A.2 iLBC_encode.h.................................................18 
   A.3 iLBC_encode.c.................................................18 
   A.4 iLBC_decode.h.................................................18 
   A.5 iLBC_decode.c.................................................18 
   A.6 iLBC_define.h.................................................18 
   A.7 constants.h...................................................18 
   A.8 constants.c...................................................18 
   A.9 anaFilter.h...................................................18 
   A.10 anaFilter.c..................................................18 
   A.11 createCB.h...................................................18 
   A.12 createCB.c...................................................18 
   A.13 doCPLC.h.....................................................18 
   A.14 doCPLC.c.....................................................18 
   A.15 enhancer.h...................................................18 
   A.16 enhancer.c...................................................18 
   A.17 filter.h.....................................................18 
   A.18 filter.c.....................................................18 
   A.19 FrameClassify.h..............................................18 
   A.20 FrameClassify.c..............................................18 
   A.21 gaincorr_Encode.h............................................18 
   A.22 gaincorr_Encode.c............................................18 
   A.23 gainquant.h..................................................18 
   A.24 gainquant.c..................................................18 
   A.25 getCBvec.h...................................................18 
   A.26 getCBvec.c...................................................18 
   A.27 helpfun.h....................................................18 
   A.28 helpfun.c....................................................18 
   A.29 hpInput.h....................................................18 
   A.30 hpInput.c....................................................18 
   A.31 hpOutput.h...................................................18 
   A.32 hpOutput.c...................................................18 
   A.33 iCBConstruct.h...............................................18 
   A.34 iCBConstruct.c...............................................18 
   A.35 iCBSearch.h..................................................18 
   A.36 iCBSearch.c..................................................18 
   A.37 LPCdecode.h..................................................18 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003           3 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   A.38 LPCdecode.c..................................................18 
   A.39 LPCencode.h..................................................18 
   A.40 LPCencode.c..................................................18 
   A.41 lsf.h........................................................18 
   A.42 lsf.c........................................................18 
   A.43 packing.h....................................................18 
   A.44 packing.c....................................................18 
   A.45 StateConstructW.h............................................18 
   A.46 StateConstructW.c............................................18 
   A.47 StateSearchW.h...............................................18 
   A.48 StateSearchW.c...............................................18 
   A.49 syntFilter.h.................................................18 
   A.50 syntFilter.c.................................................18 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003           4 
    
                     Internet Low Bit Rate Codec            July 2002 
    
1. INTRODUCTION  
 
   This document contains the description of an algorithm for the 
   coding of speech signals sampled at 8 kHz. The iLBC codec has a bit 
   rate of 13.867 kbit/s using a block-independent linear-predictive 
   coding (LPC) algorithm. The codec operates at block lengths of 30 ms 
   and produces 416 bits per block which can be packetized in 52 bytes. 
   The described algorithm results in a speech coding system with a 
   controlled response to packet losses similar to what is known from 
   pulse code modulation (PCM) with packet loss concealment (PLC), such 
   as the ITU-T G.711 standard [3] which operates at a fixed bit rate 
   of 64 kbit/s. At the same time, the described algorithm enables 
   fixed bit rate coding with a quality-versus-bit rate tradeoff close 
   to what is known from code-excited linear prediction (CELP). A 
   suitable RTP payload format for this codec is specified in [1]. 
    
   Some of the applications for which this coder is suitable are: real 
   time communications such as telephony and videoconferencing, 
   streaming audio, archival and messaging. 
    
   This document is organized as follows. In Section 2 a brief outline 
   of the codec is given. The specific encoder and decoder algorithms 
   are explained in Sections 3 and 4, respectively. A c-code reference 
   implementation is provided in Appendix A. 
    
   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
   "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and "OPTIONAL" in 
   this document are to be interpreted as described in RFC 2119 [2]. 
 
    
2. OUTLINE OF THE CODEC 
 
   The codec consists of an encoder and a decoder described in Section 
   2.1 and 2.2, respectively. 
    
   The essence of the codec is LPC and block based coding of the LPC 
   residual signal. For each 240 sample block, the following major 
   steps are done. An LPC filter is computed to produce the residual 
   signal. The codec uses DPCM coding of the dominant part, in terms of 
   energy, of the residual signal for the block. The dominant state is 
   of length 58 samples and forms a start state for dynamic codebooks 
   constructed from the already coded parts of the residual signal. 
   These dynamic codebooks are used to code the remaining parts of the 
   residual signal. By this method, coding independence between blocks 
   is achieved, resulting in elimination of propagation of perceptual 
   degradations due to packet loss. The method facilitates high-quality 
   packet loss concealment (PLC). 
 
2.1 Encoder  
 
   The input to the encoder is 16 bit uniform PCM sampled at 8 kHz.  
   The input is partitioned into blocks of BLOCKL=240 samples. Each 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003           5 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   block is divided into NSUB=6 consecutive sub-blocks of SUBL=40 
   samples each. 
    
   For each input block, the encoder performs two FILTERORDER=10 
   linear-predictive coding (LPC) analyses. The first analysis applies 
   a smooth window centered over the 2nd sub-block and extending to the 
   end of the 6'th sub-block. The second LPC analysis applies a smooth 
   window centered over the 5'th sub-block and extending to the end of 
   the 6'th sub-block. For both LPC analyses, sets of line-spectral 
   frequencies(LSF)'s are obtained, quantized and interpolated to 
   obtain LSF coefficients for each sub-block. 
    
   Subsequently, the LPC residual is computed using the quantized and 
   interpolated LPC analysis filters. The two consecutive sub-blocks of 
   residual exhibiting the maximal energy are identified. Within these 
   2 sub-blocks, the start state (segment) is selected from two 
   choices: the first 57 samples or the last 57 samples of the 2 
   consecutive sub-blocks. The selected segment is the one of higher 
   energy. The start state is encoded with a DPCM method.  
    
   For encoding of the remaining 23 samples of the 2 sub-blocks 
   containing the start state and the remaining four sub-blocks, 
   gain-shape coding is performed using a codebook generated from the 
   available already coded samples. The codebook is used in NSTAGES=3 
   stages in a successive refinement approach. The resulting 3 gain 
   factors are encoded with 4, 3, and 3 bit scalar quantization, 
   respectively. The codebook search method employs noise 
   shaping derived from the LPC filters and minimization of the squared 
   error between the target vector and the code vectors. Each code 
   vector in this codebook comes from one of NSECTION=4 codebook 
   sections. The first section is filled with delayed, already encoded 
   residual vectors. The code vectors of the remaining 3 codebook 
   sections are constructed by predefined linear combinations of 
   vectors in the first section of the codebook. The linear combination 
   coefficients differ from one section to the next. 
    
   The codebook encoding is done in 3 steps: 
    
   1. The remaining 23 samples of the 2 sub-blocks containing the start 
   state are encoded using a codebook of size 256 constructed from the 
   57 samples of the encoded start state. 
    
   2. If the block contains sub-blocks later in time than the ones 
   containing the start state, each of these sub-blocks are 
   subsequently encoded using a codebook encoding method. A new 
   codebook is constructed for each sub-block since the available 
   encoded residual signal samples increases. 
    
   3. If the block contains sub-blocks earlier in time than the ones 
   encoded for the start state then a procedure equal to the one 
   applied for sub-blocks later in time is applied, but with time-
   reversed signals since encoding is now performed backwards in time. 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003           6 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   Within steps 2. and 3. above, 4 sub-blocks are encoded. The 
   codebooks have code vector dimension 40 and construction of the 
   codebook for the 4 coding instances is performed as follows: 1) A 
   codebook of size 256 is created from the 80 samples of the already 
   coded residual signal; 2) A codebook of size 512 is created from the 
   120 samples of the already coded residual signal; 3) A codebook of 
   size 512 is created from the 147 samples of the already coded 
   residual signal closest to the sub-blocks to be encoded; 4) A 
   codebook of size 512 is created from the 147 samples of the already 
   coded residual signal closest to the sub-blocks to be encoded. The 
   only difference between step 2. and 3. is that the 40 sample signal 
   to be encoded, as well as the already coded signal for codebook 
   construction, is time-reversed before encoding in step 3. 
    
   Since codebook encoding with squared-error matching is known to 
   produce a coded signal of less power than the scalar DPCM coded 
   signal, a gain correction factor is calculated by comparing the 
   power loss in the codebook encoding to the power loss in the scalar 
   DPCM coding. The gain correction factor is quantized with 4 bits and 
   is used to scale down the start state to produce a signal with a 
   smooth power contour over the block. 
 
2.2 Decoder  
    
   For packet communications, typically a jitter buffer placed at the 
   receiving end decides whether packet containing an encoded signal 
   block has been received or lost. This logic is not part of the codec 
   described here. For each received encoded signal block the decoder 
   performs a decoding. For each lost signal block the decoder performs 
   a PLC operation. 
    
   The decoding for each block starts by a decoding and interpolation 
   of the LPC coefficients. Subsequently the start state is decoded.  
    
   For codebook encoded segments, each segment is decoded by 
   constructing the 3 code vectors given by the received codebook 
   indices in the same way as the code vectors were constructed in the 
   encoder. The 3 gain factors are also decoded and the resulting 
   decoded signal is given by the sum of the 3 codebook vectors scaled 
   with respective gain. 
    
   An enhancement algorithm is applied on the reconstructed excitation 
   signal. This enhancement augments the periodicity of voiced speech 
   regions. The enhancement is optimized under the constraint that the 
   enhancement signal (defined as the difference between the enhanced 
   excitation and the excitation signal prior to enhancement) has a 
   short-time energy that does not exceed a preset fraction of the 
   short-time energy of the speech signal. 
    
   A packet loss concealment (PLC) operation is easily embedded in the 
   decoder. The PLC operation can, e.g., be based on repetition of LPC 
   filters and obtaining the LPC residual signal using a long term 
   prediction estimate from previous residual blocks.  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003           7 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
    
3. ENCODER PRINCIPLES 
    
   This section describes the principles of each component of the 
   encoder algorithm. 
 
3.1 LPC Analysis and Quantization 
    
   The input to the LPC analysis module is a high-pass filtered speech 
   buffer, speech_hp, that contains 300 (LOOKBACK + BLOCKL = 60 + 240 
   =300) speech samples, where samples 0 through 59 are from the 
   previous block and samples 60 through 299 are from the current 
   block. No look-ahead into the next block is used. For the very first 
   block processed, the look back samples are assumed to be zeros. 
    
   For each input block, the LPC analysis calculates two sets of 
   FILTERORDER=10 LPC filter coefficients using the autocorrelation 
   method and the Levinson-Durbin recursion. The first set, lsf1, 
   represents the spectral properties of the input signal at the center 
   of the second subblock while the other set, lsf2, represents the 
   spectral characteristics as measured at the center of the fifth 
   subblock. The details of the computation shall be executed as 
   described in 3.1.1 through 3.1.6. 
 
 3.1.1 Computation of Autocorrelation Coefficients 
    
   The first step in the LPC analysis procedure is to calculate 
   autocorrelation coefficients using windowed speech samples. This 
   windowing is the only difference in the LPC analysis procedure for 
   the two sets of coefficients. For the first set, a 240 sample long 
   standard symmetric Hanning window is applied to samples 0 through 
   239 of the input data. In c-like pseudo code, the first window, 
   win1, is hence calculated as: 
    
         win1[i] = 0.5 * (1.0 - cos((2 * PI * (i + 1))/(BLOCKL + 1)));  
                  i=0,...,119 
         win1[BLOCKL - i - 1] = win1[i]; i=120,...,239 
    
   The windowed speech speech_hp_win1 is then obtained by multiplying 
   the 240 first samples of the input speech buffer with the window 
   coefficients: 
    
         speech_hp_win1[i] = speech_hp[i] * win1[i]; i=0,...,BLOCKL-1 
    
   From these 240 windowed speech samples, 11 (FILTERORDER + 1) 
   autocorrelation coefficients, acf1, are calculated: 
    
         acf1[lag] += speech_hp_win1[n] * speech_hp_win1[n + lag]; 
                  lag=0,...,FILTERORDER; n=0,...,BLOCKL-lag 
    
   In order to make the analysis more robust against numerical 
   precision problems, a spectral smoothing procedure is applied by 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003           8 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   windowing the autocorrelation coefficients with a Gaussian window 
   before the LPC coefficients are computed. Also, a white noise floor 
   is added to the autocorrelation function by multiplying coefficient 
   zero by 1.0001 (40dB below the energy of the windowed speech 
   signal). These two steps are implemented by multiplying the 
   autocorrelation coefficients with the following window: 
    
         win3[0] = 1.0001;  
         win3[i] = exp(-0.5 * ((2 * PI * 60.0 * i) /FS)^2);  
                  i=1,...,FILTERORDER 
    
   Then, the windowed acf function acf1_win is obtained by: 
    
         acf1_win1[i] = acf1[i] * win3[i]; i=0,...,FILTERORDER 
    
   The second set of autocorrelation coefficients, acf2_win are 
   obtained in a similar manner. The window, win2, is applied to 
   samples 60 through 299, i.e., the entire current block. The window 
   consists of two segments; The first (samples 0 to 220) being half a 
   Hanning window with length 440 and the second being a quarter of a 
   cycle of a cosine wave. By using this asymmetric window, an LPC 
   analysis centered in the fifth subblock is obtained without the need 
   for any look-ahead, which would have added delay. The asymmetric 
   window is defined as: 
    
         win2[i] = (sin(PI * (i + 1) / 441))^2; i=0,...,219 
         win2[i] = cos((i - 220) * PI / 10); i=220,...,239 
    
   and the windowed speech is computed by: 
    
         speech_hp_win2[i] = speech_hp[i + LOOKBACK] * win2[i];  
                  i=0,....BLOCKL-1 
    
   The windowed autocorrelation coefficients are then obtained in 
   exactly the same way as for the first analysis instance. 
    
   The generation of the windows win1, win2, and win3 are typically 
   done in advance and the arrays are stored in ROM rather than 
   repeating the calculation for every block. 
 
 3.1.2 Computation of LPC Coefficients 
    
   From the 11 smoothed autocorrelation coefficients, acf1_win and 
   acf2_win, the 11 LPC coefficients, lp1 and lp2, are calculated in 
   the same way for both analysis locations using the well known 
   Levinson-Durbin recursion. The first LPC coefficient is always 1.0, 
   resulting in 10 unique coefficients. 
    
   After determining the LPC coefficients, a bandwidth expansion 
   procedure is applied in order to smooth the spectral peaks in the 
   short-term spectrum. The bandwidth addition is obtained by the 
   following modification of the LPC coefficients: 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003           9 
    
                     Internet Low Bit Rate Codec            July 2002 
    
         lp1_bw[i] = lp1[i] * chirp^i; i=0,...,FILTERORDER 
         lp2_bw[i] = lp2[i] * chirp^i; i=0,...,FILTERORDER 
    
   where "chirp" is a real number between 0 and 1 that typically has a 
   value of around 0.8. 
    
 3.1.3 Computation of LSF Coefficients from LPC Coefficients 
    
   Thusfar, two sets of LPC coefficients that represent the short-term 
   spectral characteristics of the speech signal for two different time 
   locations within the current block have been determined. These 
   coefficients should be quantized and interpolated. Before 
   doing so, it is advantageous to convert the LPC parameters into 
   another type of representation called the Line Spectral Frequencies 
   (LSF). The LSF parameters are used because they are better suited 
   for quantization and interpolation than the regular LPC 
   coefficients. Many computationally efficient methods for calculating 
   the LSFs from the LPC coefficients have been proposed in the 
   literature. The detailed implementation of one applicable method can 
   be found in Appendix A.42. The two arrays of LSF coefficients 
   obtained, lsf1 and lsf2, are of dimension 10 (FILTERORDER). 
 
 3.1.4 Quantization of LSF Coefficients 
    
   Since the LPC filters defined by the two sets of LSFs are needed 
   also in the decoder, the LSF parameters need to be quantized and 
   transmitted as side information. The total number of bits required 
   to represent the quantization of the two LSF representations for one 
   block of speech is 52 with 24 and 28 bits for lsf1 and lsf2, 
   respectively. For computational reasons, both LSF vectors are 
   quantized using 3-split vector quantization (VQ). That is, the LSF 
   vectors are split into three subvectors which are each quantized 
   with a regular VQ. First, the quantized version of lsf2, qlsf2, is 
   obtained by memoryless split VQ. Then qlsf1 is obtained by 
   predictive split VQ of lsf1. The prediction of the (mean-removed) 
   lsf1 is calculated by multiplying qlsf2 by a set of predictor 
   coefficients (one for each of the 10 components of the vector). 
   After subtracting the resulting prediction from lsf1 the resulting 
   prediction error is quantized with a second 3-split VQ. 
    
   The following c-like definitions explain how each LSF vector (lsf1 
   and lsf2) is split by defining the position of the first coefficient 
   for each split vector (for added clarity, we additionally provide 
   the corresponding dimension for each split vector): 
    
         lsf1_splitfirst[LSF_NSPLIT] = {0, 3, 6}; 
         lsf1_splitdim[LSF_NSPLIT] = {3, 3, 4}; 
         lsf2_splitfirst[LSF_NSPLIT] = {0, 4, 7}; 
         lsf2_splitdim[LSF_NSPLIT] = {4, 3, 3}; 
    
   For each of the split vectors, a separate codebook of quantized 
   values has been designed using a standard VQ training method for a 
   large database containing speech from a large number of speakers 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          10 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   recorded under various conditions. The size of each of the six 
   codebooks associated with the split definitions above is: 
    
        int lsf1_cbsize[LSF_NSPLIT] = {256, 256, 256}; 
        int lsf2_cbsize[LSF_NSPLIT] = {512, 512, 1024}; 
    
   The second set of LSF coefficients, lsf2, are quantized with a 
   standard memoryless split vector quantization (VQ) structure using 
   the squared error criterion in the LSF domain. The split VQ 
   quantization consists of the following steps: 
    
   1) Quantize the first 4 LSF coefficients with a VQ codebook of size 
   512. 
   2) Quantize the LSF coefficient 5, 6, and 6 with VQ a codebook of 
   size 512. 
   3) Quantize the last 3 LSF coefficients with a VQ codebook of size 
   1024. 
    
   This procedure gives 3 quantization indices and the quantized second 
   set of LSF coefficients qlsf2. 
    
   The quantization of the first set of LSF coefficients is done on the 
   prediction error obtained by predicting the first set of LSF 
   coefficients from the quantized second set of LSF coefficients. The 
   prediction error, e, is obtained by: 
    
        lsfhat[i] = lsfpred[i] * (qlsf2[i] - lsfmean[i]); 
        i=0,...,FILTERORDER-1 
         e[i] = lsf1[i] - lsfmean[i] - lsfhat[i]; i=0,...,FILTERORDER-1 
    
   where lsfhat is the predicted, mean-removed first set of LSF 
   coefficients. The prediction coefficients, lsfpred, and the mean 
   vector, lsfmean, are pre-computed and stored values. 
    
   The prediction error e is quantized with a standard memoryless split  
   vector quantization (VQ) structure using the squared error criterion 
   in the LSF domain. The split VQ quantization consists of the 
   following steps: 
    
   1) Quantize the first 3 prediction error values with a VQ codebook 
   of size 256.   
   2) Quantize the prediction error values 4, 5 and 6 with VQ a 
   codebook of size 256.   
   3) Quantize the last 4 prediction error values with a VQ codebook of  
   size 256. 
    
   This procedure gives 3 quantization indices and the quantized 
   prediction error values qe. The first set of LSF coefficients qlsf1 
   is given by: 
    
        qlsf1[i] = qe[i] + lsfmean[i] + lsfhat[i];  
                  i=0,...,FILTERORDER-1 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          11 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   The result of the quantization of each of the two LSF coefficient 
   sets is a set of 3 indices. A first set of indices represents qlsf1 
   and is encoded with 8+8+8=24 bits. A second set of indices 
   represents qlsf2 is encoded with 9+9+10=28 bits. The total number of 
   bits used for LSF quantization in a block is thus 52 bits.  
 
 3.1.5 Stability Check of LSF Coefficients 
    
   The LSF representation of the LPC filter has the nice property that 
   the coefficients are ordered by increasing value, i.e., lsf(n) > 
   lsf(n-1), 0 < n < 10, if the corresponding synthesis filter is 
   stable. Since we are employing a split VQ scheme it is possible that 
   at the split boundaries the LSF coefficients are not ordered 
   correctly and hence the corresponding LP filter is unstable. To 
   ensure that the filter used is stable, a stability check is 
   performed for the quantized LSF vectors. If it turns out that the 
   coefficients are not ordered appropriately (with a safety margin of 
   50 Hz to ensure that formant peaks are not too narrow) they will be 
   moved apart. The detailed method for this can be found in Appendix 
   A.42. The same procedure is performed in the decoder. This ensures 
   that exactly the same LSF representations are used in both encoder 
   and decoder. 
 
 3.1.6 Interpolation of LSF Coefficients 
    
   From the two sets of LSF coefficients that are computed for each 
   block of speech, different LSFs are obtained for each subblock by 
   means of interpolation. This procedure is performed for the original 
   LSFs, lsf1 and lsf2 as well as the quantized versions qlsf1 and 
   qlsf2 since both versions are used in the encoder. Here follows a 
   brief summary of the interpolation scheme while the details are 
   found in the c-code of Annex B. In the first sub-block, the average 
   of the second LSF vector from the previous block and the first LSF 
   vector in the current block is used. For sub-blocks two through five 
   the LSFs used are obtained by linear interpolation from lsf1 (and 
   qlsf1) to lsf2 (and qlsf2) with lsf1 used in subblock two and lsf2 
   in subblock five. In the last subblock, lsf2 is used. For the very 
   first block it is assumed that the previous block has the same LSF 
   vectors as the current one. 
    
   The interpolation method is standard linear interpolation in the LSF 
   domain. The interpolated LSF values are converted to lpc 
   coefficients for each sub-block. 
    
   A reference implementation of the lsf encoding is given in Appendix 
   A.40. A reference implementation of the corresponding decoding can 
   be found in Appendix A.38.  
 
3.2 Calculation of the Residual 
    
   The block of speech samples is filtered by the quantized and 
   interpolated LPC filters to yield the residual signal. In 
   particular, the corresponding LPC analysis filter for each subblock 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          12 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   is used to filter the speech samples for the same subblock. The 
   filter memory at the end of each subblock is carried over to the LPC 
   filter of the next subblock.  The signal at the output of each LP 
   analysis filter constitutes the residual signal for the 
   corresponding subblock.  
    
   A reference implementation of the residual calculating filter is 
   found in Appendix A.10. 
 
3.3 Perceptual Weighting Filter  
    
   In principle any good design of perceptual weighting filter can be 
   applied in the encoder without compromising this codec definition. 
    
   A simplified design with low complexity is to apply the filter 
   1/A(z/0.4) in the LPC residual domain. Here A(z) is the filter 
   obtained from unquantized but interpolated LSF coefficients. 
 
3.4 Start State Encoder  
    
   The start state containing STATE_SHORT_LEN=57 maximum energy 
   residual samples is quantized using a common 6-bit scale quantizer 
   for the block and a 3-bit scalar quantizer operating on the scaled 
   samples in the weighted speech domain. Now we describe the state 
   encoding in greater detail. 
 
 3.4.1 Start State Estimation 
    
   The two sub-blocks containing the start state are determined by 
   finding the two consecutive sub-blocks in the block having the 
   highest power, i.e., the following measure is computed: 
    
         nsub=1,...,NSUB-1  
         ssqn[nsub] = 0.0;  
         for (i=(nsub-1)*SUBL; i<nsub*SUBL; i++)  
                  ssqn[nsub] += residual[i]*residual[i]; 
    
   and the maximum value of ssqn[nsub] is selected. Since there are 5 
   possible positions of the two-sub-block length maximum power 
   segment, the position is encoded using 3 bits. 
    
   The above calculations are performed on the first 23 samples and the 
   last 23 samples of the 80 samples segment and the 23 sample segment 
   with least energy is excluded from the start state. The position of 
   the 57 samples state within the two sub-blocks is encoded with one 
   bit. 
 
 3.4.1 All-Pass Filtering and Scale Quantization 
    
   The block of residual samples is first filtered by an all-pass 
   filter with the quantized LPC coefficients as numerator and reversed 
   denominator coefficients. The purpose of this phase-dispersion 
   filter is to remove the peakiness of the residual signal. The 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          13 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   filtering is performed by circular convolution. The all pass 
   filtered block is searched for its largest magnitude sample. The 10-
   logarithm of this magnitude is quantized with a 6-bit quantizer 
   resulting in an index SMAXIND corresponding to a quantized value 
   QMAX. The all-pass filtered residual samples in the block are then 
   multiplied with a scaling factor SCAL=4.5/10^QMAX to yield 
   normalized samples. 
 
 3.4.2 Scalar Quantization  
    
   The normalized samples are quantized in the perceptually weighted 
   speech domain by a sample-by-sample D*PCM scheme. Each sample in[n] 
   in the block is filtered by a weighting filter to form a weighted 
   speech sample weightin[n]. The target sample target[n] is formed by 
   subtracting a zero-input response sample of the weighting filter 
   from weightin[n]. The coded state sample out[n] is obtained by 
   quantizing target[n] with a 3-bit quantizer. Since the procedure 
   operates on individual samples, the ringing-removed weighted speech 
   samples are actually in the same domain as the input residual 
   samples. The state of the weighting filter is then updated by 
   filtering coded sample out[n]. The quantized samples are transformed 
   back to the residual domain by scaling with 1/SCAL and filtered by 
   the inverse allpass filter. 
    
   A reference implementation of the start state encoding can be found 
   in Appendix A.48. 
 
3.5 Codebook Encoding 
    
   A dynamic codebook encoding procedure is used to encode 1) the 22 
   remaining samples in the 2 sub-blocks containing the start state; 2) 
   encoding of the sub-blocks after the start state in time; 3) 
   encoding of the sub-blocks before the start state in time. Thus, the 
   encoding target can be either a 23 samples remaining part of start 
   state or a 40 sample sub-block. This target can consist of samples 
   that are indexed forwards in time or backwards in time. The length 
   of the target is denoted by lTarget. The coding is based on an 
   adaptive codebook that is built from a codebook memory which 
   contains decoded LPC excitation samples indexed in the same time 
   direction as the target vector and ending at the sample instant 
   prior to the first sample instant represented in the target vector. 
   The codebook memory has length lMem which is equal to MEML=147 or 
   the maximum number of samples within the block for which a decoded 
   representation of the LPC excitation exists, depending on which one 
   is the lower of the two. 
    
 3.5.1 Perceptual Weighting of Codebook Memory and Target 
    
   To provide a perceptual weighting of the coding error, a 
   concatenation of the codebook memory and target are filtered with 
   the perceptual weighting filter specified in section 3.3: 
    
         base_size=lMem-lTarget+1; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          14 
    
                     Internet Low Bit Rate Codec            July 2002 
    
         if (lTarget==SUBL) base_size=lMem-lTarget+1+lTarget/2; 
         memcpy(buf,weightState,sizeof(float)*FILTERORDER);  
         memcpy(&buf[FILTERORDER],mem,lMem*sizeof(float)); 
         memcpy(&buf[FILTERORDER+lMem],target,lTarget*sizeof(float)); 
        AllPoleFilter(&buf[FILTERORDER],weightDenum,lMem+lTarget,FILTER
        ORDER); 
         memcpy(target,&buf[FILTERORDER+lMem], lTarget*sizeof(float)); 
            
   In the above c-code example weightState is a zero vector of length 
   FILTERORDER. weightDenum contains the coefficients of the perceptual 
   weighting filter defined in section 3.3 and AllPoleFilter is a 
   function that does an all pole filtering of buf and returns the 
   result in the same vector. 
 
 3.5.2 Codebook Creation 
    
   The codebook is created from the lMem first samples of the vector 
   buf. Each codebook vector has a length equal to the variable 
   cbveclen. Codebook vectors are stored sequentially in the codebook 
   memory. The codebook is created in a process consisting of three 
   stages: 1) Creation of a base codebook, 2) Codebook augmentation, 
   and 3) Codebook expansion. 
 
 3.5.2.1 Creation of a Base Codebook 
    
   The n'th codebook vector is a copy of the (lMem-cbveclen-n)'th to 
   (lMem-n)'th sample from buf, for n going from 0 to lMem-cbveclen, 
   i.e., producing lMem-cbveclen+1 codebook vectors. This is obtained, 
   e.g., by the following example c-code: 
    
         cb_index=0; 
         for (k=cbveclen; k<=lMem; k++) { 
                  for (j=0; j<cbveclen; j++) 
                           cb[cb_index*cbveclen+j]=buf[lMem-k+j]; 
                  cb_index++; 
         } 
 
 3.5.2.2 Codebook Augmentation 
    
   For the cases when encoding entire sub-blocks, i.e. cbveclen==SUBL, 
   the first section is also augmented by vectors produced by 
   interpolation of segments in order to increase codebook richness. 
   The base codebook, constructed above, consists of vectors copied out 
   of the vector buf corresponding to sample delays in the range from 
   cbveclen to lMem. The codebook augmentation attempts to augment this 
   codebook with vectors corresponding to sample delays from cbveclen/2 
   to cbveclen-1. However, not all these samples are present in buf. 
   Instead, the augmentation vectors are constructed as linear 
   combinations between samples corresponding to sample delays k in the 
   range cbveclen/2 to cbveclen-1 and the double delay 2*k. The details 
   of this procedure are as follows: 
    
   For each k from cbveclen/2 to cbveclen-1, the vector index range is 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          15 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   separated into 3 sets: 0 to ilow-1, ilow to ihigh, and ihigh+1 to 
   cbveclen-1, where ihigh is determined as k-1 and ilow equates ihigh-
   4. 
    
   For the first range the basic codebook vector construction applies: 
    
                  for (j=0; j<ilow; j++) 
                           cb[cb_index*cbveclen+j]=buf[lMem-k+j]; 
    
   For the second range an interpolation with shifting interpolation 
   weight alpha, between sample delay k and sample delay 2*k is evoked: 
    
                  alfa1=(float)1.0/(float)ilen; 
                  alfa=0.0; 
                  for (j=ilow; j<=ihigh; j++) { 
                           cb[cb_index*cbveclen+j]=((float)1.0-alfa)* 
                              buf[lMem-k+j]+ 
                           alfa*buf[lMem-2*k+j]; 
                                    alfa+=alfa1; 
                  } 
    
   Finally, for the third range the basic codebook vector construction 
   is reapplied, but for the double delay 2*k: 
    
                  for (j=ihigh+1; j<cbveclen; j++) 
                           cb[cb_index*cbveclen+j]=buf[lMem-2*k+j]; 
    
   At the end of each codebook vector construction the indexing in the 
   codebook is increased by the statement 
    
                  cb_index++; 
    
   before continuing with the next value of k. 
    
   After augmentation, the number of vectors in the first section of 
   the codebook is lMem-cbveclen+1+cbveclen/2. This is provided that 
   augmentation is evoked, i.e., that cbveclen==SUBL.  
 
 3.5.2.3 Codebook Expansion 
    
   The codebook as given by the potentially augmented basic codebook is 
   expanded by a factor 4 by creating 3 additional sections in the 
   codebook. Each of these new sections is obtained by filtering the 
   buffer buf above with a FIR filter with impulse response 
    
         cbfilters[filtno-1][j], filtno=1,..,3, j=0,...,FILTLEN-1 
    
   of length FILTLEN coefficients to result in a filtered version 
   tmpbuf of the buffer. The procedure above for creating a base 
   codebook and augmenting it is then repeated 3 additional times, one 
   each filter, where the buffer tmpbuf is used instead of the original 
   buffer buf. 
 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          16 
    
                     Internet Low Bit Rate Codec            July 2002 
    
 3.5.3 Codebook Search 
    
   The target after the perceptual weighting of section 3.5.1 is now 
   matched with vectors in the codebook cb build in section 3.4.2. A 
   multi-stage gain-shape matching is applied at this point. At each 
   stage the shape vector is first identified, then the gain is 
   calculated and quantized, and finally the target is updated in 
   preparation for the next codebook search stage. The number of stages 
   is NSTAGES=3. 
 
 3.5.3.1 The Codebook Search at Each Stage 
    
   At the beginning of the search a search measure and index is 
   initialized to low values: 
    
        max_measure = (float)-10000000.0; 
        best_index = 0; 
    
   At each evaluating of a codebook vector, its cross product with the 
   target and inverse inner product are calculated: 
    
         crossDot=0.0; 
         invDot=0.0; 
         for (j=0;j<lTarget;j++) { 
                  crossDot += target[j]*cb[icount*lTarget+j]; 
                  invDot += cb[icount*lTarget+j]* 
                                 cb[icount*lTarget+j]; 
         } 
         invDot = (float)1.0/(invDot+EPS); 
    
   These cross- and inverse inner products then define a measure for 
   the codebook vector: 
    
                  measure = crossDot*crossDot*invDot; 
    
   In the first stage of the search, a shape vector which yields a 
   positive gain is desired. Therefore, in the first stage the measure 
   is set to the low value -10000000.0 whenever the cross-product is 
   zero or negative. 
    
   A first part of the search finds the best shape candidate in the, 
   potentially augmented, base codebook, i.e., by iterative search over 
   codebook index cb_index from 0 to base_size-1, where base_size is 
   the number of vectors in the base codebook. In the iterative search, 
   the best shape vector, identified by best_index, is isolated by 
   registering a new max_measure and best_index whenever the previously 
   registered max_measure is surpassed: 
    
         if(measure>max_measure){ 
                  best_index = cb_index; 
                  max_measure = measure; 
                  gain = crossDot*invDot; 
         } 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          17 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   Upon search in the base codebook, the iterative search loop is 
   continued into the 3 expanded sections of the adaptive codebook. 
   This can be done as a full search. However, to save computations 
   this part of the search can be constrained to indexes in restricted 
   range RESRANGE around the best_index identified in the base 
   codebook. This is obtained by identifying a start index sInd and an 
   end index eInd as: 
    
        base_index = best_index; 
         sInd=base_index-RESRANGE/2; 
         if (sInd < 0) sInd=0; 
         eInd = sInd+RESRANGE; 
         if (eInd>=base_size) { 
                  eInd=base_size-1; 
                  sInd=eInd-RESRANGE; 
         } 
    
   With these definitions, the iterative search can be continued over 
   the following 3 intervals:  
   1) cb_index=sInd+base_size to cb_index=eInd+base_size;  
   2) cb_index=sInd+2*base_size to cb_index=eInd+2*base_size;  
   3) cb_index=sInd+2*base_size to cb_index=eInd+2*base_size;  
    
   After these iterations the best codebook index, best_index, has been 
   distilled. A good compromise between computational complexity and 
   speech quality is obtained by choosing RESRANGE=33. 
 
 3.5.3.2 The Gain Quantization at Each Stage 
    
   The gain follows as a result of the registration  
    
           gain = crossDot*invDot;  
    
   each time the max_measure is surpassed in the search procedure 
   outlined in section 3.5.3.1. 
    
   In the first stage, the gain is limited to the range 0.0 to 1.0. 
    
         if (gain<0.0) gain = 0.0;  
         if (gain>1.0) gain = 1.0; 
    
   Subsequently this gain is quantized by finding the nearest 
   representation value in the quantization table gain_sq4. The 
   resulting gain index is the index to this representation value in 
   the quantization table. 
    
   The gains of subsequent stages are quantized using a quantization 
   table which is obtained by multiplication of the values in the table 
   gain_sq3 with a scale value. This value equates 0.1 or the absolute 
   value of the quantized gain representation value obtained in the 
   previous stage, whichever is the larger. Again, the resulting gain 
   index is the index to the nearest representation value in the 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          18 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   quantization table. 
 
 3.5.3.3 Preparation of Target for Next Stage 
    
   Before redoing the search for the next stage the target vector is 
   updated by subtracting from it the selected shape vector times the 
   corresponding quantized gain. 
    
   A reference implementation of the codebook encoding is found in 
   Appendix A.36.   
 
3.6 Gain Correction Encoding 
    
   The start state is quantized in a relatively model independent 
   manner using 3 bits per sample. Different form this, the remaining 
   parts of the block is encoded using an adaptive codebook. This 
   codebook will produce high matching accuracy whenever there is a 
   high correlation between the target and a segment found in the buf 
   variable. For unvoiced speech segments, this is not necessarily so. 
   The result becomes a signal block for which the start state is 
   encoded with much higher accuracy than the remaining block. 
   Perceptually, the main problem with this is that the time envelope 
   of the signal energy becomes unsteady. To overcome this problem, the 
   start state is scaled down with a factor that approximates the 
   energy loss in the remaining parts of the signal block. The 
   determination of this scale factor is the last step in the encoding 
   process. 
    
   First the energy per sample in the start state target, Esst, in the 
   decoded start state, Ess, in the remaining parts of the excitation 
   signal target, Eet, and in the remaining part of the decoded 
   excitation signal, Ee are determined. 
    
   If the ratio sqrt(Eet/Esst) is larger than or equal to 0.25, a 
   correction factor is determined as  
    
         correction_factor = sqrt( (Ee/Eet)  / (Ess/Esst) );  
    
   The correction factor is uniformly quantized in the range from 0.0 
   to 1.0 using 4 bit quantization as obtained, e.g., by the following 
   lines of c-code: 
    
         if(correction_factor > 1) correction_factor = 1; 
         index=(int)(correction_factor*16)-1; 
         if (index<0) index=0; 
    
   However, if the ratio sqrt(Eet/Esst) is less than 0.25, it is taken 
   as an indication that even the original signal energy did not have a 
   steady time envelope. In this case the correction factor is forced 
   to 1.0 by selecting the index equal to 15. 
    
   A reference implementation of the gain correction encoding is listed 
   in Appendix A.22. 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          19 
    
                     Internet Low Bit Rate Codec            July 2002 
    
 
3.7 Bitstream Definition 
    
   The total number of bits used to describe one block of 30 ms speech 
   is 416, which is equal to 52 bytes and results in a bit rate of 
   13.867 kbit/s. In the bitstream definition the bits are distributed 
   into three classes according to their bit error or loss sensitivity. 
   The most sensitive bits (class 1) is placed first in the bitstream 
   for each frame. The less sensitive bits (class 2) is placed after 
   the class 1 bits. The least sensitive bits (class 3) are placed at 
   the end of the bitstream for each frame. The class 1 bits occupy a 
   total of 8 bytes (64 bits), the class 2 bits occupy 12 bytes (96 
   bits), and the class 3 bits occupy 32 bytes (256 bits). This 
   distribution of the bits enable the use of uneaven level protection 
   (ULP) as is exploited in the payload format definition for iLBC [1]. 
   The detailed bit allocation is shown in the table below. When a 
   quantization index is distributed between more classes the more 
   significant bits belong to the lowest class.  
 
 
   Bitstream structure: 
    
    
   Parameter                                       Bits    Class 1,2,3 
    
   ------------------------------------------------------------------- 
                                    Split 1           8        8,0,0 
                  LSF 1             Split 2           8        8,0,0 
   LSF                              Split 3           8        8,0,0 
                  ---------------------------------------------------- 
                                    Split 1           9        9,0,0 
                  LSF 2             Split 2           9        9,0,0 
                                    Split 3           10       10,0,0 
                  ---------------------------------------------------- 
                  Sum                                 52 
   ------------------------------------------------------------------- 
   Block Class.                                       3        3,0,0 
   ------------------------------------------------------------------- 
   Scale Factor State Coder                           6        6,0,0 
   ------------------------------------------------------------------- 
                  Sample 0                            3        0,1,2 
   Quantized      Sample 1                            3        0,1,2 
   Residual          :                                :        : 
   State             :                                :        : 
   Samples           :                                :        : 
                  Sample 55                           3        0,1,2 
                  Sample 56                           3        0,1,2 
                  ---------------------------------------------------- 
                  Sum                               174 
   ------------------------------------------------------------------- 
                                         Stage 1      8        0,6,2 
                  Indices sub-block 1    Stage 2      8        0,0,8 
                                         Stage 3      8        0,0,8 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          20 
    
                     Internet Low Bit Rate Codec            July 2002 
    
                  ---------------------------------------------------- 
                                         Stage 1      9        0,7,2 
                  Indices sub-block 2    Stage 2      9        0,0,9 
                                         Stage 3      9        0,0,9 
   CB sub-blocks  ---------------------------------------------------- 
                                         Stage 1      9        0,7,2 
                  Indices sub-block 3    Stage 2      9        0,0,9 
                                         Stage 3      9        0,0,9 
                  ---------------------------------------------------- 
                                         Stage 1      9        0,7,2 
                  Indices sub-block 4    Stage 2      9        0,0,9 
                                         Stage 3      9        0,0,9 
                  ---------------------------------------------------- 
                  Sum                               105 
   ------------------------------------------------------------------- 
                                         Stage 1      4        0,1,3 
                  Gains sub-block 1      Stage 2      3        0,0,3 
                                         Stage 3      3        0,0,3 
                  ---------------------------------------------------- 
                                         Stage 1      4        0,1,3 
                  Gains sub-block 2      Stage 2      3        0,0,3 
                                         Stage 3      3        0,0,3 
   Gain sub-blocks --------------------------------------------------- 
                                         Stage 1      4        0,1,3 
                  Gains sub-block 3      Stage 2      3        0,0,3 
                                         Stage 3      3        0,0,3 
                  ---------------------------------------------------- 
                                         Stage 1      4        0,1,3 
                  Gains sub-block 4      Stage 2      3        0,0,3 
                                         Stage 3      3        0,0,3 
                  ---------------------------------------------------- 
                  Sum                                40 
   ------------------------------------------------------------------- 
                                         Stage 1      8        2,5,1 
   CB for 23 samples in start state      Stage 2      8        0,0,8 
                                         Stage 3      8        0,0,8 
                  ---------------------------------------------------- 
                  Sum                                24 
   ------------------------------------------------------------------- 
                                         Stage 1      4        0,1,3 
   Gain for 23 samples in start state    Stage 2      3        0,0,3 
                                         Stage 3      3        0,0,3 
                  ---------------------------------------------------- 
                  Sum                                10 
   ------------------------------------------------------------------- 
   Position 23 sample segment                         1        1,0,0 
   ------------------------------------------------------------------- 
   Gain correction factor                             4        0,2,2 
   ------------------------------------------------------------------- 
   SUM                                              416 
    
    
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          21 
    
                     Internet Low Bit Rate Codec            July 2002 
    
4. DECODER PRINCIPLES 
    
   This section describes the principles of each component of the 
   decoder algorithm.  
    
4.1 LPC Filter Reconstruction 
    
   The decoding of the LP filter parameters is very straightforward. 
   For a set of six indices the corresponding LSF vectors are found by 
   simple table look up. The three split vectors are concatenated to 
   obtain qlsf2 and the quantized prediction error vector for the first 
   LSF. The prediction vector is calculated from qlsf2 and added 
   together with the LSF mean vector to the decoded prediction error 
   vector to obtain qlsf1 in the same way as was described for the 
   encoder in Section 3.1.4. The next step is the stability check 
   described in Section 3.1.5 followed by the interpolation scheme 
   described in Section 3.1.6. The only difference is that only the 
   quantized LSFs are known at the decoder and hence the unquantized 
   LSFs are not processed. 
    
   A reference implementation of the LPC filter reconstruction is given 
   in Appendix A.38. 
 
4.2 Start State Reconstruction 
    
   The scalar encoded SCLEN state samples are reconstructed by first 
   forming a set of samples from the index stream SINDEX[n], 
   multiplying the set with 1/SCAL=10^QMAX/4.5, and then filtering the 
   block with the inverse dispersion (all-pass) filter used in the 
   encoder (as described in section 3.4). 
    
   The remaining STATE_ACBLEN samples in the state are reconstructed by 
   the same adaptive codebook technique as described in section 4.3. 
   The location bit determines whether these are the first or the last 
   STATE_ACBLEN samples of the state vector. If the remaining 
   STATE_ACBLEN are the first samples of the state vector, then the 
   scalar encoded SCLEN state samples are time-reversed before 
   initialization of the adaptive codebook memory vector. 
    
   A reference implementation of the start state reconstruction is 
   given in Appendix A.46. 
 
4.3 Excitation Decoding Loop 
    
   The decoding of the LPC excitation vector proceeds in the same order 
   in which the residual was encoded at the encoder. That is, after the 
   decoding of the entire state vector, the forward subblocks 
   (corresponding to samples occurring after the state vector samples) 
   are decoded, and then the backward subblocks (corresponding to 
   samples occurring before the state vector) are decoded, resulting in 
   a fully decoded block of excitation signal samples. 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          22 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   In particular, each subblock is decoded using the multistage 
   adaptive codebook decoding module which is described in section 4.4.  
   This module relies upon an adaptive codebook memory that is 
   constructed before each run of the adaptive codebook decoding. The 
   construction of the adaptive codebook memory in the decoder is 
   identical to the method outlined in section 3.5.2. Therefore for the 
   initial forward subblock, the last STATLEN=80 samples of the length 
   LMEM=147 adaptive codebook memory are filled with the samples of the 
   state vector. For subsequent forward subblocks, the first SUBL=40 
   samples of the adaptive codebook memory are discarded, the remaining 
   samples are shifted by SUBL samples towards the beginning of the 
   vector, while the newly decoded SUBL=40 samples are placed at the 
   end of the adaptive codebook memory. For backward subblocks, the 
   construction is similar except that every vector of samples involved 
   is first time-reversed. 
    
   A reference implementation of the excitation decoding loop is found 
   in Appendix A.5. 
 
4.4 Multistage Adaptive Codebook Decoding 
    
   The Multistage Adaptive Codebook Decoding module is used at both the 
   sender (encoder) and the receiver (decoder) ends to produce a 
   synthetic signal in the residual domain that is eventually used to 
   produce synthetic speech. The module takes the index values used to 
   construct vectors that are scaled and summed together to produce a 
   synthetic signal that is the output of the module. 
 
 4.4.1 Construction of the Decoded Excitation Signal 
    
   The unpacked index values provided at the input to the module are 
   references to extended codebooks, which are constructed as described 
   in Section 3.5.2 with the only difference that it is based on the 
   codebook memory without the perceptual weighting. The unpacked 3 
   indexes are used to look up 3 codebook vectors. The unpacked 3 gain 
   indexes are used to decode the corresponding 3 gains. In this 
   decoding the successive rescaling described in Section 3.5.3.2. 
    
   A reference implementation of the adaptive codebook decoding is 
   listed in Appendix A.34. 
 
4.5 Packet Loss Concealment 
    
   If packet loss occurs, the decoder receives a signal saying that 
   information regarding a block is lost. For such blocks a Packet Loss 
   Concealment (PLC) unit can be used to create a decoded signal which 
   mask the effect of that packet loss. In the following we will 
   describe an example of a PLC unit that can be used with the iLBC 
   codec. As the PLC unit is used only at the decoder, the PLC unit 
   does not affect interoperability between implementations. Other PLC 
   implementations can therefore be used. 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          23 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   The example PLC described operates on the LP filters and the 
   excitation signals and is based on the following principles: 
 
 4.5.1 Block Received Correctly and Previous Block also Received 
    
   If the block is received correctly, the PLC only records state 
   information of the current block that can be used in case the next 
   block is lost.  The LP filters for each subblock, each first stage 
   adaptive codebook lag (which can be construed as pitch) for each 
   subblock that runs the adaptive codebook decoding, and the entire 
   decoded excitation signal are all saved in the PLCState structure. 
   All this information will be needed if the following block is lost. 
 
 4.5.2 Block Not Received 
    
   If the block is not received, the block substitution is based on 
   doing a pitch synchronous repetition of the excitation signal which 
   is filtered by modified versions of the previous block's LP filters. 
   The previous block's information is stored in the structure 
   PLCState. 
    
   First, the previous block's LP filters are bandwidth expanded (the 
   effect of which is to pull the roots away from the unit circle to 
   mute the resonance of the filters) to produce the LP filters that 
   are used in the synthesis of the substituted block. 
    
   A correlation analysis is performed on the previous block's 
   excitation signal in order to detect the amount of pitch periodicity 
   and a pitch value. The correlation measure is also used to decide on 
   the voicing level (the degree to which the previous block's 
   excitation was a voiced or roughly periodic signal).  The excitation 
   in the previous block is used to create an excitation for the block 
   to be substituted such that the pitch of the previous block is 
   maintained. Therefore, the new excitation is constructed in a pitch 
   synchronous manner. In order to avoid a buzzy sounding substituted 
   block, a random excitation is mixed with the new pitch periodic 
   excitation and the relative use of the two components is computed 
   from the correlation measure (voicing level). 
    
   For the block to be substituted, the newly constructed excitation 
   signal is then passed through the newly constructed LP filters to 
   produce the speech that will be substituted for the lost block. 
    
   For several consecutive lost blocks, the packet loss concealment 
   continues in a similar manner. The correlation measure of the last 
   received block is still used along with the same pitch value. The LP 
   filters of the last received block are also used again, but the 
   bandwidth expansion is increased for consecutive lost blocks (as the 
   length in time from the last received block increases).  This 
   increases the muting of the resonance of the spectral envelope.  The 
   energy of the substituted excitation for consecutive lost blocks is 
   decreased, leading to a dampened excitation, and therefore dampened 
   speech. 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          24 
    
                     Internet Low Bit Rate Codec            July 2002 
    
 
 4.5.3 Block Received Correctly When Previous Block Not Received 
    
   For the case in which a block is received correctly when the 
   previous block was not received, the correctly received block's 
   directly decoded speech (based solely on the received block) is not 
   used as the actual output. The reason for this is that the directly 
   decoded speech does not necessarily smoothly merge into the 
   synthetic speech generated for the previous lost block. If the two 
   signals are not smoothly merged, an audible discontinuity is 
   accidentally produced. Therefore, a correlation analysis between the 
   two blocks of excitation signal (the excitation of the previous 
   concealed block and the excitation of the current received block) is 
   performed to find the best phase match. Then a simple overlap-add 
   procedure is performed to smoothly merge the previous excitation 
   into the current block's excitation. 
    
   The exact implementation of the packet loss concealment does not 
   influence interoperability of the codec.  
    
   A reference implementation of the packet loss concealment is 
   suggested in Appendix A.34. Exact compliance with this suggested 
   algorithm is not needed for a reference implementation to be fully 
   compatible with the overall codec specification.  
    
 
4.6 Enhancement  
    
   The decoder contains an enhancement unit that operates on the 
   reconstructed excitation signal. The enhancement unit increases the 
   perceptual quality of the reconstructed signal by reducing the 
   speech-correlated noise (more accurately: speech-dependent noise) 
   in the voiced speech segments. The enhancement unit has advantages 
   over the postfilters that are conventionally used to a similar 
   purpose. 
    
   To understand the motivation for the enhancement unit, it is useful 
   to define an enhancement signal that is the subtraction of the 
   distorted input signal from the enhanced output signal. In 
   conventional postfiltering operators, the relative power of the 
   enhancement signal will vary strongly as a function of time. In 
   certain time intervals the enhancement signal has (too) much energy, 
   and in others it has (too) little. The enhancement operation 
   settings usually form a heuristic compromise between such time 
   regions. The need for a compromise results from the postfiltering 
   operation being based on the input signal only, except for signal 
   power conservation. In other words, the conventionally used 
   postfilters operate in open-loop fashion. 
 
 4.6.1 Outline of the Enhancement Unit 
    
   The enhancement unit of iLBC introduces a second constraint on the 
   enhanced signal, in addition to the first constraint that conserves 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          25 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   the short-term power between the input and output of the enhancer. 
   The second constraint is that the enhancement signal (which is 
   defined as a difference signal resulting from subtracting the 
   distorted signal from the enhanced signal) is constrained to have a 
   power that is less than or equal to a certain fraction of the power 
   of the distorted speech signal. The second constraint prevents the 
   common artifacts resulting from "over-enhancement" during some time 
   intervals that are common to conventional postfilters. Yet, the 
   second constraint does not significantly affect the effectiveness of 
   the enhancement in sustained voiced regions environments, where 
   enhancement of speech signals corrupted by speech-correlated noise 
   is typically most needed. 
    
   The speech enhancement unit includes two basic steps, each performed 
   for each current time sample of the signal. The pitch track or delay 
   track that is determined and used in the iLBC coder is an input to 
   the first step. The first step consists of refining the pitch track 
   so as to allow a sampling of the distorted input signal using 
   sampling intervals of precisely one pitch period, starting from the 
   current sample, to obtain a pitch-period-synchronous sequence. Thus, 
   the procedure creates such a pitch-period-synchronous sequence for 
   each sample of the coded excitation (the sample of the distorted 
   speech signal being also a sample of the corresponding 
   pitch-period-synchronous sequence). 
    
   To simplify processing, the pitch-period-synchronous sequence is 
   determined simultaneously for a set of consecutive samples of the 
   distorted input signal (i.e., for a block of that signal). We refer 
   to such a set of consecutive excitation-signal samples (block) as a 
   sample-sequence. Our simultaneous determination of pitch-period-
   synchronous sequences for an entire sample-sequence results in a 
   pitch-period-synchronous sequence of sample-sequences. 
    
   The second step of our enhancement operator includes re-estimating 
   each sample based on the corresponding pitch-period-synchronous 
   sequence, the first signal-power constraint, and the second 
   constraint operating on the enhancement signal. The sequence of re-
   estimated samples (the re-estimated signal block) forms the enhanced 
   excitation signal. The enhanced speech signal is more periodic than 
   the distorted speech signal, when the signal is voiced (and the 
   pitch-period-synchronous sequence corresponds to a nearly periodic 
   sampling of the distorted signal). To simplify the processing, the 
   re-estimation procedure is also performed simultaneously for a 
   sample-sequence, rather than for each sample individually. 
   Concatenation of the re-estimated sample sequences (excitation 
   signal blocks) results in the reconstructed excitation signal. 
    
   It is noted that in regions where the speech signal is not 
   nearly-periodic, the speech enhancement system does not change the 
   distorted signal significantly because of the second constraint. 
   However, whenever the distorted speech signal is nearly periodic, 
   the speech enhancement system effectively removes or reduces the 
   audible distortion. It is also noted that the second constraint not 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          26 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   only results in a reduction of artifacts, but that it also results 
   in an insensitivity to lack of robustness of determination of pitch-
   period-synchronous sequences. 
    
   In the following two subsections, we first discuss the determination 
   of the pitch-synchronous sequence of sample-sequences for the 
   current 
   sample-sequence and then the re-estimation of the sample-sequence. 
   Concatenation of the re-estimated sample-sequences forms the 
   reconstructed excitation signal of the iLBC coder. 
 
 4.6.2 Determination of the Pitch-Synchronous Sequences 
    
   Upon receiving the pitch track, the enhancer refines this for a 
   particular block (sample sequence), to obtain a pitch-period-
   synchronous sequence of sample-sequences. Such a pitch-period-
   synchronous sequence of sample-sequences is determined for each 
   consecutive block of samples (each block forms a sample-sequence). 
   The pitch-period-synchronous sequence of sample-sequences is 
   determined recursively, both forward- and backward-in-time. 
    
   We describe the procedure to determine the pitch-synchronous-
   sequence determiner in more detail for the backward iterative 
   procedure. The forward iterative procedure is analogous. The 
   sequence of sample-sequences is determined in a computationally 
   efficient, recursive manner. 
    
   The reference sample-sequence of an iteration step is initially, 
   i.e., for the first iteration step) defined as the current block of 
   samples. Each subsequent reference sample-sequence is found 
   recursively in the following steps. In a first step, a signal 
   segment is up-sampled to create a set of polyphase signals that have 
   identical sampling rate as the original signal. Each polyphase 
   signal is offset by a different fractional sampling interval. In a 
   second step, a subset of sample-sequences of the various polyphase 
   signals is then identified as candidate sample-sequences. This 
   subset of sample sequences falls within a certain range of time 
   delays that is close to the pitch period obtained from the iLBC 
   decoder. In a third step, one sample sequence is selected from the 
   set of candidate sample sequences. The selected sample-sequence is 
   the sample-sequence that has the highest correlation coefficient 
   with the reference sample-sequence. In the final step of each 
   iteration, the selected sample-sequence replaces the reference 
   sample-sequence to prepare for the next iteration. The procedure is 
   repeated until the required number of sample-sequences backward-in-
   time is found, which depends on the parameter settings used for the 
   iLBC coder. 
    
   The forward-in-time part of the pitch-period-synchronous sequence 
   process is determined in a manner analogous to the backward-in-time 
   part of the pitch-period-synchronous sequence. The number of sample-
   sequences forward-in-time and the number of sample-sequences 
   backward-in-time can be varied individually, to obtain the desired 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          27 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   delay and performance characteristics. 
 
 4.6.3 Re-estimation of the Current Sample-Sequence 
    
   For each successive sample-sequence (i.e., each successive block of 
   the excitation signal), a re-estimation of the sample-sequence is 
   performed. This re-estimation is determined from the current pitch-
   synchronous sequence of sample-sequences, through a constrained 
   optimization procedure. 
    
   Let x_m be a vector representing a sample-sequence with index m 
   within the current pitch-synchronous sequence of sample-sequences. 
   The determination of this pitch-synchronous sample sequence was 
   described in section X.1. Furthermore, let z be the re-estimated 
   current sample sequence. We then define the following cross-
   correlation based periodicity criterion that defines a measure of 
   periodicity for the pitch-period-synchronous sequence: 
    
        e = sum_{m=-W, m!=0}^{m=W} a_m z^T x_m, (1) 
    
   where T indicates conjugate transpose, != indicates not equal, and 
   the set of coefficients a_m form a weighting window that specifies 
   the weightings of the respective inner product between the re-
   estimated sample-sequence and the sample-sequences. We use a 
   centered Hanning weighting modified so as to set a_0 to 0. 
    
   The objective of the re-estimation procedure is to find the modified 
   current sample-sequence z that maximizes the periodicity criterion 
   (1) under two constraints. The first constraint is the constraint 
   that the modified vector have the same energy as the original vector 
    
        z^T z= x_0^T x_0 .  (2) 
    
   The second constraint is that the difference vector, i.e., the 
   modification, have relative low energy: 
    
        (z-x_0)^T (z-x_0) <= b x_0^T x_0 ,  (3) 
    
   where the value selected for b is positive and less than unity, with 
   a larger value resulting generally in stronger enhancement of the 
   signal periodicity. It is clear that, for small b, non-periodic 
   signals cannot generally be converted into nearly-periodic signals. 
   The purpose of the second constraint is to prevent production of an 
   enhanced signal that is significantly different from the original 
   signal. This also means that the second constraint limits the 
   numerical size of the errors that the enhancement procedure can 
   make. 
    
   To achieve constrained optimization, the Lagrange multiplier 
   technique can be used. We distinguish two solution regions for the 
   optimization: 1) the region where the second constraint is not 
   activated (in this solution region inequality (3) is a true 
   inequality) and 2) the region where the second constraint is 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          28 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   activated (in this solution region (3) is an equality constraint). 
   Let us define 
    
        y = sum_{m=-W, m!=0}^{m=W} a_m x_m, (4) 
    
   Then, in the first case, where the second constraint is not  
   activated, the optimized re-estimated vector is simply a scaled 
   version of y: 
    
        z =  y sqrt( x_0^T x_0 / (y^T y)). (5) 
    
   In the second case, where the second constraint is activated and 
   becomes an equality constraint, we have that 
    
        z= Ay + B x_0 (6)  
     
   where 
    
   A = sqrt((b-b^2/4)  x_0^T x_0/(y^Ty - (y^T x_0)^2/(x_0^T x_0))) (7) 
    
   and  
    
        B = 1 - b/2 - A (y^T x_0)/(x_0^T x_0). (8) 
    
   It is now seen that the entire re-estimation of the current sample-
   sequence, from a given pitch-synchronous sequence of sample-
   sequences, can be performed in three simple steps. In a first step, 
   we find the determine that optimizes the periodicity with only the 
   first constraint activated. The resulting trial solution is given by 
   equation (5). In a second step, we check if this trial solution 
   satisfies the second constraint given by inequality (3). If it does, 
   this trial solution for is used and the third step is omitted. If 
   this is not the case, then we determine solution (6) of the 
   optimization, where both the first and the second constraint are 
   considered as equality constraints. 
    
   As was mentioned before, the reconstructed excitation signal 
   consists of the concatenation of the re-estimated current sample-
   sequences. 
    
   Appendix A.16 contains a listing of a reference implementation for 
   the enhancement method. 
 
4.7 Synthesis Filtering 
 
   Upon decoding or PLC of the LP excitation block, the decoded speech 
   block is obtained by running the decoded LP synthesis filter over 
   the block. For decoded signal blocks the LP coefficients are changed 
   at the first sample of every sub block. For PLC blocks, one solution 
   is to apply the last LP coefficients of the last decoded speech 
   block for all sub blocks. 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          29 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   The reference implementation for the synthesis filtering can be 
   found in appendix A.50. 
 
 
5. SECURITY CONSIDERATIONS 
 
   This algorithm for the coding of speech signals is not subject of 
   any known security consideration; however, its RTP payload format 
   [1] is subject of several considerations which are addressed there. 
    
 
6. REFERENCES 
    
   [1] A. Duric and S. V. Andersen, "RTP Payload Format for iLBC 
      Speech", draft-duric-rtp-ilbc-01.txt, July 2002. 
    
   [2] S. Bradner, "Key words for use in RFCs to Indicate requirement 
      Levels", BCP 14, RFC 2119, March 1997. 
    
   [3] ITU-T Recommendation G.711, available online from the ITU 
      bookstore at http://www.itu.int. 
 
 
7. ACKNOWLEDGEMENTS 
 
   The authors wish to thank Henry Sinnreich and Patrik Faltstrom for 
   great support of the iLBC initiative and for the valuable feedback 
   and comments. 
    
 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          30 
    
                     Internet Low Bit Rate Codec            July 2002 
    
8. AUTHOR'S ADDRESSES 
    
   Soren Vang Andersen 
   Global IP Sound AB 
   Rosenlundsgatan 54  
   Stockholm, S-11863 
   Sweden           
   Phone:  +46 8 54553040 
   Email:  soren.andersen@globalipsound.com 
    
   Alan Duric 
   Global IP Sound AB 
   Rosenlundsgatan 54  
   Stockholm, S-11863 
   Sweden           
   Phone:  +46 8 54553040 
   Email:  alan.duric@globalipsound.com 
    
   Roar Hagen 
   Global IP Sound AB 
   Rosenlundsgatan 54 
   Stockholm, S-11863 
   Sweden           
   Phone:  +46 8 54553040 
   Email:  roar.hagen@globalipsound.com 
    
   W. Bastiaan Kleijn 
   Global IP Sound AB 
   Rosenlundsgatan 54 
   Stockholm, S-11863 
   Sweden           
   Phone:  +46 8 54553040 
   Email:  bastiaan.kleijn@globalipsound.com 
 
   Jan Linden 
   Global IP Sound Inc. 
   900 Kearny Street, suite 500 
   San Francisco, CA-94133 
   USA 
   Phone: +1 415 397 2555 
   Email: jan.linden@globalipsound.com 
    
   Manohar N. Murthi 
   1630 Eagle Dr. 
   Sunnyvale, CA-94087 
   USA 
   Phone: +1 408 749 8160 
   Email: mnmurthi@yahoo.com 
    
   Jan Skoglund 
   Global IP Sound Inc. 
   900 Kearny Street, suite 500 
   San Francisco, CA-94133 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          31 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   USA 
   Phone: +1 415 397 2555 
   Email: jan.skoglund@globalipsound.com 
    
   Julian Spittka 
   Global IP Sound Inc. 
   900 Kearny Street, suite 500 
   San Francisco, CA-94133 
   USA 
   Phone: +1 415 397 2555 
   Email: julian.spittka@globalipsound.com 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          32 
    
                     Internet Low Bit Rate Codec            July 2002 
    
 
    
    
APPENDIX A REFERENCE IMPLEMENTATION 
                                                                
   This appendix contains the complete c-code for a reference 
   implementation of encoder and decoder for the specified codec. 
    
   The c-code consists of the following files with highest level 
   functions: 
          
         iLBC_test.c: main function for evaluation purpose 
         iLBC_encode.h: encoder header 
         iLBC_encode.c: encoder function 
         iLBC_decode.h: decoder header 
         iLBC_decode.c: decoder function 
    
   the following files containing global defines and constants: 
    
         iLBC_define.h: global defines 
         constants.h: global constants header 
         constants.c: global constants memory allocations 
    
   and the following files containing subroutines: 
    
         anaFilter.h: lpc analysis filter header 
         anaFilter.c: lpc analysis filter function 
         createCB.h: codebook construction header 
         createCB.c: codebook construction function 
         doCPLC.h: packet loss concealment header 
         doCPLC.c: packet loss concealment function 
         enhancer.h: signal enhancement header 
         enhancer.c: signal enhancement function 
         filter.h: general filter header 
         filter.c: general filter functions 
         FrameClassify.h: start state classification header 
         FrameClassify.c: start state classification function 
         gaincorr_Encode.h: gain correction encoder header 
         gaincorr_Encode.c: gain correction encoder function 
         gainquant.h: gain quantization header 
         gainquant.c: gain quantization function 
         getCBvec.h: codebook vector construction header 
         getCBvec.c: codebook vector construction function 
         helpfun.h: general purpose header 
         helpfun.c: general purpose functions 
         hpInput.h: input high pass filter header 
         hpInput.c: input high pass filter function 
         hpOutput.h: output high pass filter header 
         hpOutput.c: output high pass filter function 
         iCBConstruct.h: excitation decoding header 
         iCBConstruct.c: excitation decoding function 
         iCBSearch.h: excitation encoding header 
         iCBSearch.c: excitation encoding function 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          33 
    
                     Internet Low Bit Rate Codec            July 2002 
    
         LPCdecode.h: lpc decoding header 
         LPCdecode.c: lpc decoding function 
         LPCencode.h: lpc encoding header 
         LPCencode.c: lpc encoding function 
         lsf.h: line spectral frequencies header 
         lsf.c: line spectral frequencies functions 
         packing.h: bitstream packetization header 
         packing.c: bitstream packetization functions 
         StateConstructW.h: state decoding header 
         StateConstructW.c: state decoding functions 
         StateSearchW.h: state encoding header 
         StateSearchW.c: state encoding function 
         syntFilter.h: lpc synthesis filter header 
         syntFilter.c: lpc synthesis filter function 
          
   The implementation is portable and should work on many different 
   platforms. However, it is not difficult to optimize the 
   implementation on particular platforms, an exercise left to the 
   reader. 
    
A.1 iLBC_test.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iLBC_test.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
   #include <stdlib.h> 
   #include <stdio.h> 
   #include <string.h> 
    
   #include "iLBC_define.h" 
   #include "iLBC_encode.h" 
   #include "iLBC_decode.h" 
    
   #include "constants.h" 
    
    
   //#include "iLBCInterface.h" 
   #define ILBCNOOFWORDS ILBCFLOAT_GIPS_NOOFBYTES/2 
    
   /* Runtime statistics */ 
   #include <time.h> 
   /* #define CLOCKS_PER_SEC  1000 */ 
   #define TIME_PER_FRAME  30   
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          34 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   /*----------------------------------------------------------------* 
    *  Initiation of encoder instance. 
    *---------------------------------------------------------------*/ 
    
   short initEncode( /* (o)   Number of bytes encoded */ 
       iLBC_Enc_Inst_t *iLBCenc_inst   /* (i/o) Encoder instance */ 
   ){ 
       int i; 
    
       memset((*iLBCenc_inst).anaMem, 0,  
           ILBCFLOAT_GIPS_FILTERORDER*sizeof(float)); 
    
       for (i=0; i<ILBCFLOAT_GIPS_FILTERORDER; i++) { 
           (*iLBCenc_inst).lsfold[i] = lsfmean[i]; 
           (*iLBCenc_inst).lsfqold[i] = lsfmean[i]; 
       } 
    
       memset((*iLBCenc_inst).lpc_buffer, 0,  
           ILBCFLOAT_GIPS_LPC_AHEADL*sizeof(float)); 
    
       for (i=0; i<4; i++) (*iLBCenc_inst).hpimem[i]=0.0; 
    
       return (short)ILBCFLOAT_GIPS_NOOFBYTES; 
   } 
    
   /*----------------------------------------------------------------* 
    *  Encoder interface function  
    *---------------------------------------------------------------*/ 
    
   short encode( /* (o) Number of bytes encoded */ 
       iLBC_Enc_Inst_t *iLBCenc_inst,  /* (i/o) Encoder instance */  
       short *encoded_data, /* (o) The encoded bytes */ 
       short *data /* (i) The signal block to encode */ 
   ){ 
       float block[BLOCKL]; 
       int k; 
    
       /* convert signal to float */ 
    
       for(k=0;k<BLOCKL;k++) block[k] = (float)data[k]; 
    
       /* do the actual encoding */ 
    
       iLBC_encode((unsigned char *)encoded_data, block, iLBCenc_inst 
                   ); 
    
       return (short)(ILBCFLOAT_GIPS_NOOFBYTES); 
   } 
    
   /*----------------------------------------------------------------* 
    *  Initiation of decoder instance. 
    *---------------------------------------------------------------*/ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          35 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   short initDecode( /* (o) Number of decoded samples */ 
       iLBC_Dec_Inst_t *iLBCdec_inst /* (i/o) Decoder instance */ 
   ){ 
       int i; 
    
       memset((*iLBCdec_inst).syntMem, 0, FILTERORDER*sizeof(float)); 
    
       for (i=0; i<FILTERORDER; i++) 
           (*iLBCdec_inst).lsfunqold[i] = lsfmean[i]; 
    
       (*iLBCdec_inst).last_lag = 20; 
    
       (*iLBCdec_inst).prevLag = 120; 
       (*iLBCdec_inst).prevGain = 0.0; 
       (*iLBCdec_inst).consPLICount = 0; 
       (*iLBCdec_inst).prevPLI = 0; 
       (*iLBCdec_inst).prevLpc[0] = 1.0; 
       memset((*iLBCdec_inst).prevLpc+1,0,FILTERORDER*sizeof(float)); 
       memset((*iLBCdec_inst).prevResidual, 0, BLOCKL*sizeof(float)); 
       (*iLBCdec_inst).seed=777; 
    
       memset((*iLBCdec_inst).old_syntdenum, 0,  
           ((FILTERORDER + 1)*NSUB)*sizeof(float)); 
       for (i=0; i<NSUB; i++) 
           (*iLBCdec_inst).old_syntdenum[i*(FILTERORDER+1)]=1.0; 
    
       memset((*iLBCdec_inst).hpomem, 0, 4*sizeof(float)); 
    
       memset((*iLBCdec_inst).enh_buf, 0, ENH_BUFL*sizeof(float)); 
       memset((*iLBCdec_inst).enh_period, 0,  
           ENH_NBLOCKS_TOT*sizeof(float)); 
    
       iLBCdec_inst->prev_enh_pl; 
    
       return (short)ILBCFLOAT_GIPS_BLOCKL; 
   } 
    
   /*----------------------------------------------------------------* 
    *  Decoder interface function  
    *---------------------------------------------------------------*/ 
    
   short decode( /* (o) Number of decoded samples */ 
       iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) Decoder instance */  
       short *decoded_data, /* (o) Decoded signal block */ 
       short *encoded_data, /* (i) Encoded bytes */ 
       short mode  /* (i) 0=PL, 1=Normal */ 
   ){ 
       int k; 
       float decblock[BLOCKL], dtmp; 
    
       /* check if mode is valid */ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          36 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       if (mode<0 || mode>1) { 
           printf("\nERROR - Wrong mode - 0, 1 allowed\n"); exit(3);} 
    
       /* do actual decoding of block */ 
    
       iLBC_decode(decblock, (unsigned char *)encoded_data,  
           iLBCdec_inst, mode); 
    
       /* convert to short */ 
    
       for(k=0;k<BLOCKL;k++){  
           dtmp=decblock[k]; 
           if (dtmp<MIN_SAMPLE) 
               dtmp=MIN_SAMPLE; 
           else if (dtmp>MAX_SAMPLE) 
               dtmp=MAX_SAMPLE; 
           decoded_data[k] = (short) dtmp; 
       } 
    
       return (short)ILBCFLOAT_GIPS_BLOCKL; 
   } 
    
   /*----------------------------------------------------------------* 
    *  Main program to test iLBC encoding and decoding  
    * 
    *  Usage: 
    *      exefile_name.exe <infile> <bytefile> <outfile> 
    * 
    *---------------------------------------------------------------*/ 
    
   int main(int argc, char* argv[]) 
   { 
    
       /* Runtime statistics */ 
    
       float starttime; 
       float runtime; 
       float outtime; 
    
       FILE *ifileid,*efileid,*ofileid; 
       short encoded_data[ILBCNOOFWORDS+1], data[ILBCFLOAT_GIPS_BLOCKL]; 
       int blockcount = 0; 
    
       iLBC_Enc_Inst_t Enc_Inst; 
       iLBC_Dec_Inst_t Dec_Inst; 
    
       /* get arguments and open files */ 
    
       if(argc != 4 ){  
           fprintf(stderr, "%s inputfile channelfile outputfile\n", 
               argv[0]); exit(1);} 
       if( (ifileid=fopen(argv[1],"rb")) == NULL){ 
           fprintf(stderr,"Cannot open input file %s\n", argv[1]);  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          37 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           exit(2);} 
       if( (efileid=fopen(argv[2],"wb")) == NULL){ 
           fprintf(stderr, "Cannot open channelfile file %s\n",  
               argv[2]); exit(3);} 
       if( (ofileid=fopen(argv[3],"wb")) == NULL){ 
           fprintf(stderr, "Cannot open output file %s\n",  
               argv[2]); exit(3);} 
    
       /* print info */ 
    
       fprintf(stderr, "\n"); 
       fprintf(stderr,  
           "*---------------------------------------------------*\n"); 
       fprintf(stderr,  
           "*                                                   *\n"); 
       fprintf(stderr,  
           "*      ilbclibtest                                  *\n"); 
       fprintf(stderr,  
           "*                                                   *\n"); 
       fprintf(stderr,  
           "*                                                   *\n"); 
       fprintf(stderr,  
           "*---------------------------------------------------*\n"); 
       fprintf(stderr, "\nInput file     : %s\n", argv[1]); 
       fprintf(stderr,"Channel file   : %s\n", argv[2]); 
       fprintf(stderr,"Output file    : %s\n\n", argv[3]); 
    
       /* Initialization */ 
    
       initEncode(&Enc_Inst); 
       initDecode(&Dec_Inst); 
    
       /* Runtime statistics */ 
    
       starttime=clock()/(float)CLOCKS_PER_SEC;  
    
       /* loop over input blocks */ 
    
       while( fread(data,sizeof(short), 
           ILBCFLOAT_GIPS_BLOCKL,ifileid)==ILBCFLOAT_GIPS_BLOCKL){ 
            
           blockcount++;   
            
           /* encoding */ 
    
           fprintf(stderr, "--- Encoding block %i --- ",blockcount); 
           encode(&Enc_Inst, encoded_data, data); 
           fprintf(stderr, "\r"); 
    
           /* write byte file */ 
    
           fwrite(encoded_data,sizeof(short),ILBCNOOFWORDS,efileid); 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          38 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           /* decoding */ 
    
           fprintf(stderr, "--- Decoding block %i --- ",blockcount); 
           decode(&Dec_Inst, data, encoded_data, 1); 
           fprintf(stderr, "\r"); 
    
           /* write output file */ 
    
           fwrite(data,sizeof(short),ILBCFLOAT_GIPS_BLOCKL,ofileid); 
       } 
    
       /* Runtime statistics */ 
    
       runtime = (float)(clock()/(float)CLOCKS_PER_SEC-starttime); 
       outtime = (float)((float)blockcount* 
           (float)TIME_PER_FRAME/1000.0); 
       printf("\nLength of speech file: %.1f s\n", outtime); 
       printf("Time to run iLBC_encode+iLBC_decode:"); 
       printf(" %.1f s (%.1f %% of realtime)\n", runtime,  
           (100*runtime/outtime)); 
    
       /* close files */ 
    
       fclose(ifileid);  fclose(efileid); fclose(ofileid); 
   } 
    
    
A.2 iLBC_encode.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iLBC_encode.h     
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_ILBCENCODE_H 
   #define __iLBC_ILBCENCODE_H 
    
   #include "iLBC_define.h" 
    
   void iLBC_encode( 
       unsigned char *bytes, /* (o) encoded data bits iLBC */ 
       float *block, /* (o) speech vector to encode */ 
       iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the general encoder  
           state */ 
   ); 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          39 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   #endif 
    
 
A.3 iLBC_encode.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iLBC_encode.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
   #include <string.h> 
    
   #include "iLBC_define.h" 
   #include "LPCencode.h" 
   #include "FrameClassify.h" 
   #include "StateSearchW.h" 
   #include "StateConstructW.h" 
   #include "helpfun.h" 
   #include "constants.h" 
   #include "packing.h" 
   #include "iCBSearch.h" 
   #include "iCBConstruct.h" 
   #include "hpInput.h" 
   #include "anaFilter.h" 
   #include "syntFilter.h" 
   #include "gaincorr_Encode.h" 
    
   #include <stdio.h> 
    
   /*----------------------------------------------------------------* 
    *  main encoder function  
    *---------------------------------------------------------------*/ 
    
   void iLBC_encode( 
       unsigned char *bytes, /* (o) encoded data bits iLBC */ 
       float *block, /* (o) speech vector to encode */ 
       iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the general encoder  
           state */ 
   ){ 
        
       float data[BLOCKL]; 
       float residual[BLOCKL], reverseResidual[BLOCKL]; 
    
       int start, idxForMax, idxVec[STATE_LEN]; 
       float reverseDecresidual[BLOCKL], mem[MEML]; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          40 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       int n, k, kk, meml_gotten, Nfor, Nback, i; 
       int dummy=0; 
       int gain_index[NSTAGES*NASUB], extra_gain_index[NSTAGES]; 
       int cb_index[NSTAGES*NASUB],extra_cb_index[NSTAGES] ; 
       int lsf_i[LSF_NSPLIT*LPC_N]; 
       unsigned char *pbytes; 
       int diff, start_pos, state_first; 
       float en1, en2; 
       int index, gc_index; 
       int subcount, subframe; 
       float gainadjusttarget[BLOCKL]; 
       float weightState[FILTERORDER]; 
       float syntdenum[NSUB*(FILTERORDER+1)];  
       float weightnum[NSUB*(FILTERORDER+1)]; 
       float weightdenum[NSUB*(FILTERORDER+1)];  
       float decresidual[BLOCKL]; 
       int firstpart, rest; 
    
       /* high pass filtering of input signal if such is not done  
              prior to calling this function */ 
    
       //hpInput(block, BLOCKL, data, (*iLBCenc_inst).hpimem); 
    
       /* otherwise simply copy */ 
    
       memcpy(data,block,BLOCKL*sizeof(float)); 
            
       /* LPC of hp filtered input data */ 
    
       LPCencode(syntdenum, weightnum, weightdenum, lsf_i, data, 
           iLBCenc_inst); 
    
       /* inverse filter to get residual */ 
    
       for (n=0; n<NSUB; n++ ) { 
           anaFilter(&data[n*SUBL], &syntdenum[n*(FILTERORDER+1)],  
               SUBL, &residual[n*SUBL], (*iLBCenc_inst).anaMem); 
       } 
       memcpy(gainadjusttarget, residual, sizeof(float)*BLOCKL); 
    
       /* find state location */ 
    
       start = FrameClassify(residual);   
        
       /* check if state should be in first or last part of the  
       two subframes */ 
    
       diff = STATE_LEN - STATE_SHORT_LEN; 
       en1 = 0; 
       index = (start-1)*SUBL; 
       for (i = 0; i < STATE_SHORT_LEN; i++) 
           en1 += residual[index+i]*residual[index+i]; 
       en2 = 0; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          41 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       index = (start-1)*SUBL+diff; 
       for (i = 0; i < STATE_SHORT_LEN; i++) 
           en2 += residual[index+i]*residual[index+i]; 
        
       if (en1 > en2) { 
           state_first = 1; 
           start_pos = (start-1)*SUBL; 
       } else { 
           state_first = 0; 
           start_pos = (start-1)*SUBL + diff; 
       } 
    
       /* scalar quantization of state */ 
    
       StateSearchW(&residual[start_pos],  
           &syntdenum[(start-1)*(FILTERORDER+1)],  
           &weightnum[(start-1)*(FILTERORDER+1)],  
           &weightdenum[(start-1)*(FILTERORDER+1)], &idxForMax,  
           idxVec, STATE_SHORT_LEN); 
    
       StateConstructW(idxForMax, idxVec,  
           &syntdenum[(start-1)*(FILTERORDER+1)],  
           &decresidual[start_pos], STATE_SHORT_LEN); 
    
       /* predictive quantization in state */ 
    
       if (state_first) { /* put adaptive part in the end */ 
            
           /* setup memory */ 
    
           memset(mem, 0, (MEML-STATE_SHORT_LEN)*sizeof(float)); 
           memcpy(mem+MEML-STATE_SHORT_LEN, decresidual+start_pos,  
                          STATE_SHORT_LEN*sizeof(float)); 
           memset(weightState, 0, FILTERORDER*sizeof(float)); 
    
           /* encode subframes */ 
    
           iCBSearch(extra_cb_index, extra_gain_index,  
               &residual[start_pos+STATE_SHORT_LEN], mem+MEML-stMemL, 
               stMemL, diff, NSTAGES,  
               &weightdenum[(start-1)*(FILTERORDER+1)], weightState); 
    
           /* construct decoded vector */ 
    
           iCBConstruct(&decresidual[start_pos+STATE_SHORT_LEN], 
               extra_cb_index, extra_gain_index, mem+MEML-stMemL,  
               stMemL, diff, NSTAGES); 
        
       }  
       else { /* put adaptive part in the beginning */ 
            
           /* create reversed vectors for prediction */ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          42 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           for(k=0; k<diff; k++ ){ 
               reverseResidual[k] = residual[(start+1)*SUBL -1 
                   -(k+STATE_SHORT_LEN)];  
               reverseDecresidual[k] = decresidual[(start+1)*SUBL -1 
                   -(k+STATE_SHORT_LEN)]; 
           } 
            
           /* setup memory */ 
    
           meml_gotten = STATE_SHORT_LEN; 
           for( k=0; k<meml_gotten; k++){  
               mem[MEML-1-k] = decresidual[start_pos + k]; }  
           memset(mem, 0, (MEML-k)*sizeof(float)); 
           memset(weightState, 0, FILTERORDER*sizeof(float)); 
            
           /* encode subframes */ 
    
           iCBSearch(extra_cb_index, extra_gain_index,  
               reverseResidual, mem+MEML-stMemL, stMemL, diff,  
               NSTAGES, &weightdenum[(start-1)*(FILTERORDER+1)],  
               weightState); 
    
           /* construct decoded vector */ 
    
           iCBConstruct(reverseDecresidual, extra_cb_index,  
               extra_gain_index, mem+MEML-stMemL, stMemL, diff,  
               NSTAGES); 
            
           /* get decoded residual from reversed vector */ 
    
           for( k=0; k<diff; k++ ){ 
               decresidual[start_pos-1-k] = reverseDecresidual[k]; 
           } 
       } 
    
       /* counter for predicted subframes */ 
    
       subcount=0; 
    
       /* forward prediction of subframes */ 
    
       Nfor = NSUB-start-1; 
       if( Nfor > 0 ){ 
            
           /* setup memory */ 
    
           memset(mem, 0, (MEML-STATE_LEN)*sizeof(float)); 
           memcpy(mem+MEML-STATE_LEN, decresidual+(start-1)*SUBL,  
               STATE_LEN*sizeof(float)); 
           memset(weightState, 0, FILTERORDER*sizeof(float)); 
    
           /* loop over subframes to encode */ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          43 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           for (subframe=0; subframe<Nfor; subframe++) { 
    
               /* encode subframe */ 
    
               iCBSearch(cb_index+subcount*NSTAGES,  
                   gain_index+subcount*NSTAGES,  
                   &residual[(start+1+subframe)*SUBL],  
                   mem+MEML-memLf[subcount], memLf[subcount],  
                   SUBL, NSTAGES,  
                   &weightdenum[(start+1+subframe)*(FILTERORDER+1)], 
                   weightState); 
    
               /* construct decoded vector */ 
    
               iCBConstruct(&decresidual[(start+1+subframe)*SUBL],  
                   cb_index+subcount*NSTAGES,  
                   gain_index+subcount*NSTAGES,  
                   mem+MEML-memLf[subcount], memLf[subcount],  
                   SUBL, NSTAGES); 
    
               /* update memory */ 
    
               memcpy(mem, mem+SUBL, (MEML-SUBL)*sizeof(float)); 
               memcpy(mem+MEML-SUBL,  
                   &decresidual[(start+1+subframe)*SUBL],  
                   SUBL*sizeof(float)); 
               memset(weightState, 0, FILTERORDER*sizeof(float)); 
               subcount++; 
           } 
       } 
        
    
       /* backward prediction of subframes */ 
    
       Nback = start-1; 
       if( Nback > 0 ){ 
                   
           /* create reverse order vectors */ 
    
           for( n=0; n<Nback; n++ ){ 
               for( k=0; k<SUBL; k++ ){ 
                   reverseResidual[n*SUBL+k] =  
                       residual[(start-1)*SUBL-1-n*SUBL-k]; 
                   reverseDecresidual[n*SUBL+k] =  
                       decresidual[(start-1)*SUBL-1-n*SUBL-k]; 
               } 
           } 
    
           /* setup memory */ 
    
           meml_gotten = SUBL*(NSUB+1-start); 
           if( meml_gotten > MEML ){ meml_gotten=MEML; } 
           for( k=0; k<meml_gotten; k++){ mem[MEML-1-k]  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          44 
    
                     Internet Low Bit Rate Codec            July 2002 
    
               = decresidual[(start-1)*SUBL + k]; }  
           memset(mem, 0, (MEML-k)*sizeof(float)); 
           memset(weightState, 0, FILTERORDER*sizeof(float)); 
    
           /* loop over subframes to encode */ 
    
           for (subframe=0; subframe<Nback; subframe++) { 
                
               /* encode subframe */ 
    
               iCBSearch(cb_index+subcount*NSTAGES,  
                   gain_index+subcount*NSTAGES,  
                   &reverseResidual[subframe*SUBL],  
                   mem+MEML-memLf[subcount], memLf[subcount],  
                   SUBL, NSTAGES,  
                   &weightdenum[(start-1-subframe)*(FILTERORDER+1)],  
                   weightState); 
    
               /* construct decoded vector */ 
    
               iCBConstruct(&reverseDecresidual[subframe*SUBL],  
                   cb_index+subcount*NSTAGES,  
                   gain_index+subcount*NSTAGES,  
                   mem+MEML-memLf[subcount],  
                   memLf[subcount], SUBL, NSTAGES); 
    
               /* update memory */ 
    
               memcpy(mem, mem+SUBL, (MEML-SUBL)*sizeof(float)); 
               memcpy(mem+MEML-SUBL,  
                   &reverseDecresidual[subframe*SUBL], 
                   SUBL*sizeof(float)); 
               memset(weightState, 0, FILTERORDER*sizeof(float)); 
    
               subcount++; 
    
           } 
    
           /* get decoded residual from reversed vector */ 
    
           for (i = 0; i < SUBL*Nback; i++) 
               decresidual[SUBL*Nback - i - 1] =  
                   reverseDecresidual[i]; 
       } 
    
       /* end encoding part */ 
    
       gc_index =  gaincorr_Encode(decresidual, start_pos,  
           gainadjusttarget); 
    
    
       /* pack bytes */ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          45 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       pbytes=bytes; 
    
       /* 1st level bits */ 
    
       dopack( &pbytes,lsf_i+0,lsf_bits[0]); 
       dopack( &pbytes,lsf_i+1,lsf_bits[1]); 
       dopack( &pbytes,lsf_i+2,lsf_bits[2]); 
       dopack( &pbytes,lsf_i+3,lsf_bits[3]); 
       dopack( &pbytes,lsf_i+4,lsf_bits[4]); 
       dopack( &pbytes,lsf_i+5,lsf_bits[5]); 
       dopack( &pbytes,&start,start_bits); 
       dopack( &pbytes,&idxForMax,scale_bits); 
       dopack( &pbytes, &state_first,1); 
       packsplit( extra_cb_index, &firstpart, &rest, 2, 8); 
       dopack( &pbytes, &firstpart, 2);  
       extra_cb_index[0] = rest;  
       
       /* 2nd level bits */ 
    
       for(k=0;k<STATE_SHORT_LEN;k++){  
           packsplit( idxVec+k, &firstpart, &rest, 1, 3); 
           dopack( &pbytes,&firstpart,1); 
           idxVec[k] = rest;  
       } 
       for(k=0;k<NASUB;k++){ 
           packsplit( cb_index+k*NSTAGES, &firstpart, &rest, 
               (k==0?6:7), (k==0?8:9)); 
           dopack(&pbytes, &firstpart,(k==0?6:7)); 
           cb_index[k*NSTAGES] = rest;  
       } 
       for(k=0;k<NASUB;k++){ 
           packsplit( gain_index+NSTAGES*k, &firstpart, &rest,  
               1, gain_bits[0]); 
           dopack( &pbytes, &firstpart, 1); 
           gain_index[k*NSTAGES] = rest;  
       } 
       packsplit( extra_cb_index, &firstpart, &rest, 5, 6); 
       dopack( &pbytes, &firstpart, 5);  
       extra_cb_index[0] = rest;  
    
       packsplit( extra_gain_index, &firstpart, &rest, 1, 4); 
       dopack( &pbytes, &firstpart, 1); 
       extra_gain_index[0] = rest;  
    
       packsplit( &gc_index, &firstpart, &rest, 2, 4); 
       dopack( &pbytes, &firstpart, 2); 
       gc_index = rest;  
    
       /* 3rd level bits */ 
    
       for(k=0;k<STATE_SHORT_LEN;k++)  
           dopack( &pbytes,idxVec+k,2);  
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          46 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       for(k=0;k<NASUB;k++) for(kk=0;kk<NSTAGES;kk++)  
           dopack(&pbytes, cb_index+k*NSTAGES+kk, 
               (kk==0?2:cb_bits[k+1])); 
    
       for(k=0;k<NASUB;k++){  
           dopack( &pbytes, gain_index+NSTAGES*k, gain_bits[0]-1 );  
           dopack( &pbytes, gain_index+NSTAGES*k+1, gain_bits[1]); 
           dopack( &pbytes, gain_index+NSTAGES*k+2, gain_bits[2] ); 
       } 
    
       dopack(&pbytes,extra_cb_index,1); 
       dopack(&pbytes,extra_cb_index+1,cb_bits[0]); 
       dopack(&pbytes,extra_cb_index+2,cb_bits[0]); 
    
       dopack( &pbytes, extra_gain_index, gain_bits[0]-1 ); 
       dopack( &pbytes, extra_gain_index+1, gain_bits[1] ); 
       dopack( &pbytes, extra_gain_index+2, gain_bits[2] ); 
       dopack( &pbytes, &gc_index, 2); 
       dopack( &pbytes,&dummy,0);  
   } 
    
 
A.4 iLBC_decode.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iLBC_decode.h     
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_ILBCDECODE_H 
   #define __iLBC_ILBCDECODE_H 
    
   #include "iLBC_define.h" 
    
   void iLBC_decode(  
       float *decblock, /* (o) decoded signal block */ 
       unsigned char *bytes, /* (i) encoded signal bits */ 
       iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state  
           structure */ 
       int mode /* (i)   0: bad packet, PLC, 1: normal */ 
   ); 
    
   #endif 
    
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          47 
    
                     Internet Low Bit Rate Codec            July 2002 
    
A.5 iLBC_decode.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iLBC_decode.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
   #include <stdio.h> 
   #include <stdlib.h> 
    
   #include "iLBC_define.h" 
   #include "StateConstructW.h" 
   #include "LPCdecode.h" 
   #include "iCBConstruct.h" 
   #include "doCPLC.h" 
   #include "helpfun.h" 
   #include "constants.h" 
   #include "packing.h" 
   #include "string.h" 
   #include "enhancer.h" 
   #include "hpOutput.h" 
   #include "syntFilter.h" 
    
   /*----------------------------------------------------------------* 
    *  frame residual decoder function (subrutine to iLBC_decode)  
    *---------------------------------------------------------------*/ 
    
   void Decode( 
       float *decresidual, /* (o) decoded residual frame */ 
       int start, /* (i) location of start state */ 
       int idxForMax, /* (i) codebook index for the maximum value */ 
       int *idxVec, /* (i) codebook indexes for the samples in the  
           start state*/ 
       float *syntdenum, /* (i) the decoded synthesis filter  
           coefficients */ 
       int *cb_index, /* (i) the indexes for the adaptive codebook */ 
       int *gain_index, /* (i) the indexes for the corresponding  
           gains */ 
       int *extra_cb_index, /* (i) the indexes for the adaptive  
           codebook part of start state */ 
       int *extra_gain_index, /* (i) the indexes for the corresponding 
           gains */ 
       int state_first, /* (i) 1 if non adaptive part of start state  
           comes first 0 if that part comes last */ 
       int gc_index /* (i) the index for the gain correction factor */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          48 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   ){ 
       float reverseDecresidual[BLOCKL], mem[MEML]; 
       int n, k, meml_gotten, Nfor, Nback, i; 
       int diff, start_pos; 
       int subcount, subframe; 
       float factor; 
       float std_decresidual, one_minus_factor_scaled; 
       int gaussstart; 
    
       diff = STATE_LEN - STATE_SHORT_LEN; 
       if(state_first == 1) start_pos = (start-1)*SUBL; 
       else start_pos = (start-1)*SUBL + diff; 
    
       /* decode scalar part of start state */ 
    
       StateConstructW(idxForMax, idxVec,  
           &syntdenum[(start-1)*(FILTERORDER+1)],  
           &decresidual[start_pos], STATE_SHORT_LEN); 
    
       if (state_first) { /* put adaptive part in the end */ 
                    
           /* setup memory */ 
    
           memset(mem, 0, (MEML-STATE_SHORT_LEN)*sizeof(float)); 
           memcpy(mem+MEML-STATE_SHORT_LEN, decresidual+start_pos, 
               STATE_SHORT_LEN*sizeof(float)); 
            
           /* construct decoded vector */ 
    
           iCBConstruct(&decresidual[start_pos+STATE_SHORT_LEN], 
               extra_cb_index, extra_gain_index, mem+MEML-stMemL, 
               stMemL, diff, NSTAGES); 
        
       }  
       else {/* put adaptive part in the beginning */ 
            
           /* create reversed vectors for prediction */ 
    
           for(k=0; k<diff; k++ ){ 
               reverseDecresidual[k] =  
                   decresidual[(start+1)*SUBL -1-(k+STATE_SHORT_LEN)]; 
           } 
            
           /* setup memory */ 
    
           meml_gotten = STATE_SHORT_LEN; 
           for( k=0; k<meml_gotten; k++){  
               mem[MEML-1-k] = decresidual[start_pos + k]; }  
           memset(mem, 0, (MEML-k)*sizeof(float)); 
            
           /* construct decoded vector */ 
    
           iCBConstruct(reverseDecresidual, extra_cb_index,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          49 
    
                     Internet Low Bit Rate Codec            July 2002 
    
               extra_gain_index, mem+MEML-stMemL, stMemL, diff,  
               NSTAGES); 
            
           /* get decoded residual from reversed vector */ 
    
           for( k=0; k<diff; k++ ){ 
               decresidual[start_pos-1-k] = reverseDecresidual[k]; 
           } 
       } 
    
       /* counter for predicted subframes */ 
    
       subcount=0; 
    
       /* forward prediction of subframes */ 
    
       Nfor = NSUB-start-1; 
       if( Nfor > 0 ){ 
            
           /* setup memory */ 
    
           memset(mem, 0, (MEML-STATE_LEN)*sizeof(float)); 
           memcpy(mem+MEML-STATE_LEN, decresidual+(start-1)*SUBL, 
               STATE_LEN*sizeof(float)); 
    
           /* loop over subframes to encode */ 
    
           for (subframe=0; subframe<Nfor; subframe++) { 
                
               /* construct decoded vector */ 
    
               iCBConstruct(&decresidual[(start+1+subframe)*SUBL],  
                   cb_index+subcount*NSTAGES,  
                   gain_index+subcount*NSTAGES,  
                   mem+MEML-memLf[subcount],  
                   memLf[subcount], SUBL, NSTAGES); 
    
               /* update memory */ 
    
               memcpy(mem, mem+SUBL, (MEML-SUBL)*sizeof(float)); 
               memcpy(mem+MEML-SUBL,  
                   &decresidual[(start+1+subframe)*SUBL],  
                   SUBL*sizeof(float)); 
    
               subcount++; 
    
           } 
    
       } 
        
       /* backward prediction of subframes */ 
    
       Nback = start-1; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          50 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       if( Nback > 0 ){ 
                    
           /* create reverse order vectors */ 
    
           for( n=0; n<Nback; n++ ){ 
               for( k=0; k<SUBL; k++ ){ 
                   reverseDecresidual[n*SUBL+k] =  
                       decresidual[(start-1)*SUBL-1-n*SUBL-k]; 
               } 
           } 
    
           /* setup memory */ 
    
           meml_gotten = SUBL*(NSUB+1-start); 
           if( meml_gotten > MEML ){ meml_gotten=MEML; } 
           for( k=0; k<meml_gotten; k++){  
               mem[MEML-1-k] = decresidual[(start-1)*SUBL + k]; }  
           memset(mem, 0, (MEML-k)*sizeof(float)); 
    
           /* loop over subframes to decode */ 
    
           for (subframe=0; subframe<Nback; subframe++) { 
                
               /* construct decoded vector */ 
    
               iCBConstruct(&reverseDecresidual[subframe*SUBL],  
                   cb_index+subcount*NSTAGES,  
                   gain_index+subcount*NSTAGES,  
                   mem+MEML-memLf[subcount], memLf[subcount],  
                   SUBL, NSTAGES); 
    
               /* update memory */ 
    
               memcpy(mem, mem+SUBL, (MEML-SUBL)*sizeof(float)); 
               memcpy(mem+MEML-SUBL,  
                   &reverseDecresidual[subframe*SUBL], 
                   SUBL*sizeof(float)); 
    
               subcount++; 
           } 
    
           /* get decoded residual from reversed vector */ 
    
           for (i = 0; i < SUBL*Nback; i++) 
               decresidual[SUBL*Nback - i - 1] =  
               reverseDecresidual[i]; 
       } 
    
       /* gain correction */ 
    
       factor=(float)(gc_index+1)/(float)16.0; 
       for(i=0;i<STATE_SHORT_LEN;i++)  
           decresidual[start_pos+i] *= factor;  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          51 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       factor *= 1.5; 
       if (factor < 1.0){ 
    
          std_decresidual = 0.0; 
          for(i=0;i<BLOCKL;i++)  
              std_decresidual += decresidual[i]*decresidual[i]; 
          std_decresidual /= BLOCKL; 
          std_decresidual = (float)sqrt(std_decresidual); 
    
          one_minus_factor_scaled =  
              (float)sqrt(1-factor*factor)*std_decresidual; 
          gaussstart =  
              (int)ceil(decresidual[0]) % (GAUSS_NOISE_L-BLOCKL); 
          for(i=0;i<BLOCKL;i++) decresidual[i] +=  
              one_minus_factor_scaled*gaussnoise[gaussstart+i]; 
    
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  main decoder function  
    *---------------------------------------------------------------*/ 
    
   void iLBC_decode(  
       float *decblock, /* (o) decoded signal block */ 
       unsigned char *bytes, /* (i) encoded signal bits */ 
       iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state  
           structure */ 
       int mode /* (i) 0: bad packet, PLC, 1: normal */ 
   ){ 
       float data[BLOCKL]; 
       float lsfunq[FILTERORDER*LPC_N]; 
       float PLCresidual[BLOCKL], PLClpc[FILTERORDER + 1]; 
       float zeros[BLOCKL], one[FILTERORDER + 1]; 
       int k, kk, i, start, idxForMax; 
       int idxVec[STATE_LEN]; 
       int dummy=0,check; 
       int gain_index[NASUB*NSTAGES], extra_gain_index[NSTAGES]; 
       int cb_index[NSTAGES*NASUB], extra_cb_index[NSTAGES]; 
       int lsf_i[LSF_NSPLIT*LPC_N]; 
       int state_first, gc_index; 
       unsigned char *pbytes; 
       float weightnum[(FILTERORDER + 1)*NSUB]; 
       float weightdenum[(FILTERORDER + 1)*NSUB]; 
       int order_plus_one; 
       float syntdenum[NSUB*(FILTERORDER+1)];  
       float decresidual[BLOCKL]; 
       int rest; 
    
       if (mode>0) { /* the data are good */ 
    
           /* decode data */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          52 
    
                     Internet Low Bit Rate Codec            July 2002 
    
            
           pbytes=bytes; 
            
           /* 1st level bits */ 
            
           unpack( &pbytes,lsf_i+0,lsf_bits[0]); 
           unpack( &pbytes,lsf_i+1,lsf_bits[1]); 
           unpack( &pbytes,lsf_i+2,lsf_bits[2]); 
           unpack( &pbytes,lsf_i+3,lsf_bits[3]); 
           unpack( &pbytes,lsf_i+4,lsf_bits[4]); 
           unpack( &pbytes,lsf_i+5,lsf_bits[5]); 
           unpack( &pbytes,&start,start_bits); 
           unpack( &pbytes,&idxForMax,scale_bits); 
           unpack( &pbytes, &state_first,1); 
           unpack( &pbytes, extra_cb_index, 2);  
                    
           /* 2nd level bits */ 
            
           for(k=0;k<STATE_SHORT_LEN;k++){  
               unpack( &pbytes, idxVec+k, 1);  
           } 
           for(k=0;k<NASUB;k++){ 
               unpack(&pbytes, cb_index+k*NSTAGES, (k==0?6:7));  
           } 
           for(k=0;k<NASUB;k++){ 
               unpack( &pbytes, gain_index+NSTAGES*k, 1); 
           } 
    
           unpack( &pbytes, &rest, 5); 
           packcombine( extra_cb_index, rest, 2, 5);  
    
           unpack( &pbytes, extra_gain_index, 1);  
            
           unpack( &pbytes, &gc_index, 2);  
            
           /* 3rd level */ 
            
           for(k=0;k<STATE_SHORT_LEN;k++){  
               unpack( &pbytes,&rest,2);  
               packcombine( idxVec+k, rest, 1, 2); 
           } 
            
           for(k=0;k<NASUB;k++){ 
               unpack( &pbytes, &rest, 2); 
               packcombine( cb_index+k*NSTAGES, rest, (k==0?6:7), 2); 
               for(kk=1;kk<NSTAGES;kk++)  
                   unpack(&pbytes,cb_index+k*NSTAGES+kk,cb_bits[k+1]); 
           } 
            
           for(k=0;k<NASUB;k++){  
               unpack( &pbytes, &rest, gain_bits[0]-1 );  
               packcombine(gain_index+NSTAGES*k, rest, 1,  
                   gain_bits[0]-1); 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          53 
    
                     Internet Low Bit Rate Codec            July 2002 
    
               unpack( &pbytes, gain_index+NSTAGES*k+1, gain_bits[1]); 
               unpack( &pbytes, gain_index+NSTAGES*k+2, gain_bits[2]); 
           } 
            
           unpack(&pbytes,&rest,1); 
           packcombine(extra_cb_index, rest, 7, 1); 
           unpack(&pbytes,extra_cb_index+1,cb_bits[0]); 
           unpack(&pbytes,extra_cb_index+2,cb_bits[0]); 
            
           unpack(&pbytes, &rest, gain_bits[0]-1); 
           packcombine( extra_gain_index, rest, 1, gain_bits[0]-1); 
           unpack( &pbytes, extra_gain_index+1, gain_bits[1] ); 
           unpack( &pbytes, extra_gain_index+2, gain_bits[2] ); 
    
           unpack( &pbytes, &rest, 2); 
           packcombine( &gc_index, rest, 2, 2); 
    
           unpack( &pbytes,&dummy,0);  
    
           /* decode the lsf */ 
    
           SimplelsfUNQ(lsfunq, lsf_i); 
           check=LSF_check(lsfunq, FILTERORDER, LPC_N); 
           DecoderInterpolateLSF(syntdenum, weightnum, weightdenum,  
               lsfunq, FILTERORDER, iLBCdec_inst); 
            
           Decode(decresidual, start, idxForMax, idxVec, syntdenum,  
               cb_index, gain_index, extra_cb_index, extra_gain_index,  
               state_first,gc_index); 
    
           /* preparing the plc for a future loss! */ 
    
           doThePLC(PLCresidual, PLClpc, 0, decresidual,  
               syntdenum + (FILTERORDER + 1)*(NSUB - 1), 
               (*iLBCdec_inst).last_lag, iLBCdec_inst); 
           if (mode==1) memcpy(decresidual, PLCresidual,  
               BLOCKL*sizeof(float)); 
            
       } else { 
            
           /* packet loss conceal */ 
    
           memset(zeros, 0, BLOCKL*sizeof(float)); 
            
           one[0] = 1; 
           memset(one+1, 0, FILTERORDER*sizeof(float)); 
            
           start=0; 
            
           doThePLC(PLCresidual, PLClpc, 1, zeros, one, 
               (*iLBCdec_inst).last_lag, iLBCdec_inst); 
           memcpy(decresidual, PLCresidual, BLOCKL*sizeof(float)); 
            
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          54 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           order_plus_one = FILTERORDER + 1; 
           for (i = 0; i < NSUB; i++) 
               memcpy(syntdenum+(i*order_plus_one)+1, PLClpc+1,  
                   FILTERORDER*sizeof(float)); 
       } 
    
       /* post filtering */ 
        
       (*iLBCdec_inst).last_lag =  
           enhancerInterface(data, decresidual, iLBCdec_inst);  
    
       /* synthesis filtering */ 
        
       if (mode<=1) { /* produce output from normal decode or PLC */ 
           for (i=0; i < 2; i++) 
               syntFilter(data + i*SUBL,  
                   (*iLBCdec_inst).old_syntdenum +  
                   (i+4)*(FILTERORDER+1), SUBL,  
                   (*iLBCdec_inst).syntMem); 
           for (i=2; i < NSUB; i++) 
               syntFilter(data + i*SUBL,  
                   syntdenum + (i-2)*(FILTERORDER+1), SUBL,  
                   (*iLBCdec_inst).syntMem); 
       } 
    
       /* high pass filtering on output is optional default is  
       to copy out */ 
    
       /* hpOutput(data, BLOCKL, decblock, (*iLBCdec_inst).hpomem); */ 
       memcpy(decblock,data,BLOCKL*sizeof(float)); 
    
       memcpy((*iLBCdec_inst).old_syntdenum, syntdenum,  
           NSUB*(FILTERORDER+1)*sizeof(float)); 
    
       iLBCdec_inst->prev_enh_pl=0; 
       if (mode==0) iLBCdec_inst->prev_enh_pl=1; 
   } 
    
    
A.6 iLBC_define.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iLBC_define.h     
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          55 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   #ifndef __iLBC_ILBCDEFINE_H 
   #define __iLBC_ILBCDEFINE_H 
    
   /* general codec settings */ 
    
   #define FS (float)8000.0 
   #define BLOCKL 240 
   #define NSUB 6  
   #define NASUB 4  
   #define SUBL 40 
   #define STATE_LEN 80 
   #define STATE_SHORT_LEN 57 
    
   /* LPC settings */ 
    
   #define FILTERORDER 10 
   #define CHIRP_SYNTDENUM (float)0.95 
   #define CHIRP_WEIGHTNUM (float)0.95  
   #define CHIRP_WEIGHTDENUM (float)0.4  
   #define LPC_AHEADL 60 
   #define LPC_N 2 
   #define LPC_ASYMDIFF 20 
   #define LPC_BW (float)60.0 
   #define LPC_WN (float)1.0001 
   #define LSF_NSPLIT 3 
   #define NUMBER_OF_STEPS 4 
   #define HALFORDER FILTERORDER/2 
    
   /* cb settings */ 
    
   #define NSTAGES 3 
   #define CBEXPAND 4 
   #define MEML 147 
   #define NCBFILTERS CBEXPAND-1 
   #define CBFILTLEN 2*10 
   #define CBHALFFILT 10 
   #define RESRANGE 33 
    
   /* enhancer */ 
    
   #define ENH_BLOCKL 80 /* block length */ 
   #define ENH_HL 3 /* 2*ENH_HL+1 is number blocks 
       in said second sequence */ 
   #define ENH_SLOP 20 /* max difference estimated and 
       correct pitch period */ 
   #define ENH_PLOCSL 20 /* pitch-estimates and 
       pitch-locations buffer length */ 
   #define ENH_OVERHANG 5 
   #define ENH_UPS0 8 /* upsampling rate */ 
   #define ENH_FL0 3 /* 2*FLO+1 is the length 
       of each filter */ 
   #define ENH_VECTL (ENH_BLOCKL+2*ENH_FL0) 
   #define ENH_CORRDIM (2*ENH_SLOP+1) 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          56 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   #define ENH_NBLOCKS (BLOCKL/ENH_BLOCKL) 
   #define ENH_NBLOCKS_EXTRA 5 
   #define ENH_NBLOCKS_TOT 8 /* ENH_NBLOCKS+ENH_NBLOCKS_EXTRA */ 
   #define ENH_BUFL (ENH_NBLOCKS_TOT)*ENH_BLOCKL 
   #define ENH_ALPHA0 (float)0.05 
    
   /* PLC */ 
    
   #define BFIATTENUATE (float)0.9 
   #define GAINTHRESHOLD (float)0.5 
   #define BWEXPAND (float)0.99 
   #define XT_MIX (float)1.0 
   #define XB_MIX (float)0.0 
   #define YT_MIX (float)0.95 
   #define YB_MIX (float)0.0 
    
   /* bit stream defs */ 
    
   #define NO_OF_BYTES 52 
   #define STATE_BITS 3 
   #define BYTE_LEN 8 
    
   /* help parameters */ 
    
   #define FLOAT_MAX (float)1.0e37 
   #define EPS (float)2.220446049250313e-016  
   #define PI (float)3.14159265358979323846 
   #define MIN_SAMPLE -32768 
   #define MAX_SAMPLE 32767 
   #define TWO_PI (float)6.283185307 
   #define PI2 (float)0.159154943 
    
   /* Gaussian noise sequence */ 
    
   #define GAUSS_NOISE_L 1240 
    
   /* Temporarily this is coppied in from iLBCInterface.h which will 
   disappear */ 
    
   /* must be defined to same values as in iLBC_define.h */ 
   #define ILBCFLOAT_GIPS_BLOCKL           240 
   #define ILBCFLOAT_GIPS_NOOFBYTES    52 
   #define ILBCFLOAT_GIPS_FILTERORDER      10 
   #define ILBCFLOAT_GIPS_BLOCKL           240 
   #define ILBCFLOAT_GIPS_LPC_AHEADL       60 
   #define ILBCFLOAT_GIPS_NSUB             6 
   #define ILBCFLOAT_GIPS_SUBL             40 
   #define ILBCFLOAT_GIPS_ENH_BLOCKL       80 
   #define ILBCFLOAT_GIPS_ENH_NBLOCKS_TOT  8 
   #define ILBCFLOAT_GIPS_ENH_BUFL  
       ILBCFLOAT_GIPS_ENH_NBLOCKS_TOT*ILBCFLOAT_GIPS_ENH_BLOCKL 
    
   /* type definition encoder instance */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          57 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   typedef struct iLBC_Enc_Inst_t_ { 
    
       /* analysis filter state */ 
       float anaMem[ILBCFLOAT_GIPS_FILTERORDER]; 
    
       /* old lsf parameters for interpolation */ 
       float lsfold[ILBCFLOAT_GIPS_FILTERORDER]; 
       float lsfqold[ILBCFLOAT_GIPS_FILTERORDER]; 
    
       /* signal buffer for LP analysis */ 
       float lpc_buffer[ILBCFLOAT_GIPS_LPC_AHEADL + 
   ILBCFLOAT_GIPS_BLOCKL]; 
    
       /* state of input HP filter */ 
       float hpimem[4]; 
    
   } iLBC_Enc_Inst_t; 
    
   /* type definition decoder instance */ 
   typedef struct iLBC_Dec_Inst_t_ { 
       /* synthesis filter state */ 
       float syntMem[ILBCFLOAT_GIPS_FILTERORDER]; 
    
       /* old LSF for interpolation */ 
       float lsfunqold[ILBCFLOAT_GIPS_FILTERORDER]; 
    
       /* pitch lag estimated in enhancer and used in PLC */ 
       int last_lag; 
    
       /* PLC state information */ 
       int prevLag, consPLICount, prevPLI, prev_enh_pl; 
       float prevGain, prevLpc[ILBCFLOAT_GIPS_FILTERORDER+1]; 
       float prevResidual[ILBCFLOAT_GIPS_NSUB*ILBCFLOAT_GIPS_SUBL]; 
       float energy; 
       unsigned long seed; 
    
       /* previous synthesis filter parameters */ 
       float old_syntdenum[(ILBCFLOAT_GIPS_FILTERORDER + 
   1)*ILBCFLOAT_GIPS_NSUB]; 
    
       /* state of output HP filter */ 
       float hpomem[4]; 
    
       /* enhancer state information */ 
       float enh_buf[ILBCFLOAT_GIPS_ENH_BUFL]; 
       float enh_period[ILBCFLOAT_GIPS_ENH_NBLOCKS_TOT]; 
    
   } iLBC_Dec_Inst_t; 
    
    
    
   #endif 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          58 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
A.7 constants.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       constants.h 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_CONSTANTS_H 
   #define __iLBC_CONSTANTS_H 
    
   #include "iLBC_define.h" 
    
   /* bit allocation */ 
    
   extern int lsf_bits[]; 
   extern int start_bits; 
   extern int scale_bits; 
   extern int state_bits; 
   extern int cb_bits[]; 
   extern int gain_bits[];  
    
   /* high pass filters */ 
    
   extern float hpi_zero_coefs[]; 
   extern float hpi_pole_coefs[]; 
   extern float hpo_zero_coefs[]; 
   extern float hpo_pole_coefs[];   
    
   /* LPC analysis and quantization */ 
    
   extern float lpc_win[]; 
   extern float lpc_asymwin[]; 
   extern float lpc_lagwin[]; 
   extern float cb_ml[]; 
   extern float cb_p[]; 
   extern float lsfmean[]; 
   extern float lsfpred[]; 
   extern int   dim_ml[]; 
   extern int   size_ml[]; 
   extern int   dim_p[]; 
   extern int   size_p[]; 
   extern float coef[]; 
    
   /* state quantization tables */ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          59 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   extern float state_sq3[]; 
   extern float state_frgq[]; 
    
   /* gain quantization tables */ 
    
   extern float gain_sq3[]; 
   extern float gain_sq4[]; 
    
   /* adaptive codebook definitions */ 
    
   extern int memLf[]; 
   extern int stMemL; 
   extern float cbfilters[NCBFILTERS][CBFILTLEN]; 
    
   /* enhancer definitions */ 
    
   extern float polyphaser[]; 
   extern float enh_plocs[]; 
    
   /* Gaussian noise vector for gain compensation unit */ 
    
   extern float gaussnoise[]; 
    
   #endif 
    
A.8 constants.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       constants.c 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include "iLBC_define.h" 
    
   /* bit allocation */ 
    
   int lsf_bits[6]={8,8,8,9,9,10}; 
   int start_bits=3; 
   int scale_bits=6; 
   int state_bits=3; 
   int cb_bits[5]={8,8,9,9,9}; 
   int gain_bits[3]={4,3,3};  
    
   /* HP Filters */ 
    
   float hpi_zero_coefs[3] = {(float)0.92727436, (float)-1.8544941,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          60 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.92727436}; 
   float hpi_pole_coefs[3] = {(float)1.0, (float)-1.9059465,  
       (float)0.9114024}; 
   float hpo_zero_coefs[3] = {(float)0.93980581, (float)-1.8795834,  
       (float)0.93980581}; 
   float hpo_pole_coefs[3] = {(float)1.0, (float)-1.9330735,  
       (float)0.93589199}; 
    
   /* State quantization tables */ 
    
   float state_sq3[8] = { 
       (float)-3.7198, (float)-2.1775, (float)-1.13001,  
       (float)-0.309649, (float)0.444187, (float)1.32969,  
       (float)2.43632,(float)3.98386 
   }; 
    
   /* 8 bit quantizer for debugging only */ 
    
   float state_sq8[256] = { (float)-4.000000, (float)-3.968627,  
       (float)-3.937255, (float)-3.905882, (float)-3.874510,  
       (float)-3.843137, (float)-3.811765, (float)-3.780392,  
       (float)-3.749020, (float)-3.717647, (float)-3.686275,  
       (float)-3.654902, (float)-3.623529, (float)-3.592157,  
       (float)-3.560784, (float)-3.529412, (float)-3.498039,  
       (float)-3.466667, (float)-3.435294, (float)-3.403922,  
       (float)-3.372549, (float)-3.341176, (float)-3.309804,  
       (float)-3.278431, (float)-3.247059, (float)-3.215686, 
       (float)-3.184314, (float)-3.152941, (float)-3.121569, 
       (float)-3.090196, (float)-3.058824, (float)-3.027451, 
       (float)-2.996078, (float)-2.964706, (float)-2.933333, 
       (float)-2.901961, (float)-2.870588, (float)-2.839216, 
       (float)-2.807843, (float)-2.776471, (float)-2.745098, 
       (float)-2.713725, (float)-2.682353, (float)-2.650980, 
       (float)-2.619608, (float)-2.588235, (float)-2.556863, 
       (float)-2.525490, (float)-2.494118, (float)-2.462745, 
       (float)-2.431373, (float)-2.400000, (float)-2.368627, 
       (float)-2.337255, (float)-2.305882, (float)-2.274510, 
       (float)-2.243137, (float)-2.211765, (float)-2.180392, 
       (float)-2.149020, (float)-2.117647, (float)-2.086275, 
       (float)-2.054902, (float)-2.023529, (float)-1.992157, 
       (float)-1.960784, (float)-1.929412, (float)-1.898039, 
       (float)-1.866667, (float)-1.835294, (float)-1.803922, 
       (float)-1.772549, (float)-1.741176, (float)-1.709804, 
       (float)-1.678431, (float)-1.647059, (float)-1.615686, 
       (float)-1.584314, (float)-1.552941, (float)-1.521569, 
       (float)-1.490196, (float)-1.458824, (float)-1.427451, 
       (float)-1.396078, (float)-1.364706, (float)-1.333333, 
       (float)-1.301961, (float)-1.270588, (float)-1.239216, 
       (float)-1.207843, (float)-1.176471, (float)-1.145098, 
       (float)-1.113725, (float)-1.082353, (float)-1.050980, 
       (float)-1.019608, (float)-0.988235, (float)-0.956863, 
       (float)-0.925490, (float)-0.894118, (float)-0.862745, 
       (float)-0.831373, (float)-0.800000, (float)-0.768627, 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          61 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.737255, (float)-0.705882, (float)-0.674510, 
       (float)-0.643137, (float)-0.611765, (float)-0.580392, 
       (float)-0.549020, (float)-0.517647, (float)-0.486275, 
       (float)-0.454902, (float)-0.423529, (float)-0.392157, 
       (float)-0.360784, (float)-0.329412, (float)-0.298039, 
       (float)-0.266667, (float)-0.235294, (float)-0.203922, 
       (float)-0.172549, (float)-0.141176, (float)-0.109804, 
       (float)-0.078431, (float)-0.047059, (float)-0.015686, 
       (float)0.015686, (float)0.047059, (float)0.078431, 
       (float)0.109804, (float)0.141176, (float)0.172549, 
       (float)0.203922, (float)0.235294, (float)0.266667, 
       (float)0.298039, (float)0.329412, (float)0.360784, 
       (float)0.392157, (float)0.423529, (float)0.454902, 
       (float)0.486275, (float)0.517647, (float)0.549020, 
       (float)0.580392, (float)0.611765, (float)0.643137, 
       (float)0.674510, (float)0.705882, (float)0.737255, 
       (float)0.768627, (float)0.800000, (float)0.831373, 
       (float)0.862745, (float)0.894118, (float)0.925490, 
       (float)0.956863, (float)0.988235, (float)1.019608, 
       (float)1.050980, (float)1.082353, (float)1.113725, 
       (float)1.145098, (float)1.176471, (float)1.207843, 
       (float)1.239216, (float)1.270588, (float)1.301961, 
       (float)1.333333, (float)1.364706, (float)1.396078, 
       (float)1.427451, (float)1.458824, (float)1.490196, 
       (float)1.521569, (float)1.552941, (float)1.584314, 
       (float)1.615686, (float)1.647059, (float)1.678431, 
       (float)1.709804, (float)1.741176, (float)1.772549, 
       (float)1.803922, (float)1.835294, (float)1.866667, 
       (float)1.898039, (float)1.929412, (float)1.960784, 
       (float)1.992157, (float)2.023529, (float)2.054902, 
       (float)2.086275, (float)2.117647, (float)2.149020, 
       (float)2.180392, (float)2.211765, (float)2.243137, 
       (float)2.274510, (float)2.305882, (float)2.337255, 
       (float)2.368627, (float)2.400000, (float)2.431373, 
       (float)2.462745, (float)2.494118, (float)2.525490, 
       (float)2.556863, (float)2.588235, (float)2.619608, 
       (float)2.650980, (float)2.682353, (float)2.713725, 
       (float)2.745098, (float)2.776471, (float)2.807843, 
       (float)2.839216, (float)2.870588, (float)2.901961, 
       (float)2.933333, (float)2.964706, (float)2.996078, 
       (float)3.027451, (float)3.058824, (float)3.090196, 
       (float)3.121569, (float)3.152941, (float)3.184314, 
       (float)3.215686, (float)3.247059, (float)3.278431, 
       (float)3.309804, (float)3.341176, (float)3.372549, 
       (float)3.403922, (float)3.435294, (float)3.466667, 
       (float)3.498039, (float)3.529412, (float)3.560784, 
       (float)3.592157, (float)3.623529, (float)3.654902, 
       (float)3.686275, (float)3.717647, (float)3.749020, 
       (float)3.780392, (float)3.811765, (float)3.843137, 
       (float)3.874510, (float)3.905882, (float)3.937255, 
       (float)3.968627, (float)4.000000 
   }; 
            
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          62 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   float state_frgq[64] = { 
       (float)1.00000, (float)1.07140, (float)1.14047,  
       (float)1.20708, (float)1.27736, (float)1.35160,  
       (float)1.42927, (float)1.50075, (float)1.56908,  
       (float)1.63954, (float)1.70702, (float)1.78155,  
       (float)1.84076, (float)1.90159, (float)1.95667,  
       (float)2.00676, (float)2.05545, (float)2.10280,  
       (float)2.14281, (float)2.18361, (float)2.21796,  
       (float)2.25716, (float)2.29575, (float)2.33295,  
       (float)2.36925, (float)2.40278, (float)2.43509,  
       (float)2.46861, (float)2.50339, (float)2.53928,  
       (float)2.57295, (float)2.60511, (float)2.63639,  
       (float)2.66896, (float)2.69880, (float)2.72910,  
       (float)2.75978, (float)2.78981, (float)2.81865,  
       (float)2.84806, (float)2.87744, (float)2.90690,  
       (float)2.93664, (float)2.96778, (float)3.00013,  
       (float)3.03335, (float)3.06634, (float)3.10425,  
       (float)3.14152, (float)3.18303, (float)3.22295,  
       (float)3.26544, (float)3.30843, (float)3.35083,  
       (float)3.39527, (float)3.44305, (float)3.49076,  
       (float)3.54275, (float)3.60404, (float)3.66598,  
       (float)3.74116, (float)3.83076, (float)3.93884,  
       (float)4.10181}; 
    
   /* CB tables */ 
    
   int stMemL=83;  
   int memLf[NASUB]={83,147,147,147}; 
    
   /* expansion filters */ 
    
   float cbfilters[NCBFILTERS][CBFILTLEN]={ 
       {(float)0.007916, (float)-0.004987, (float)-0.009541, 
           (float)-0.005369, (float)0.029305, (float)-0.010403, 
           (float)-0.004300, (float)0.068878, (float)-0.109181, 
           (float)0.989641, (float)0.451250, (float)-0.175949, 
           (float)0.109738, (float)-0.079871, (float)0.066588, 
           (float)-0.051698, (float)0.023170, (float)-0.006126, 
           (float)0.004376, (float)0.000656}, 
       {(float)0.006767, (float)0.003344, (float)-0.007619, 
           (float)0.007441, (float)0.001723, (float)0.032700, 
           (float)-0.033607, (float)0.083848, (float)-0.144158, 
           (float)0.713497, (float)0.806185, (float)-0.184297, 
           (float)0.108923, (float)-0.034185, (float)0.030117, 
           (float)-0.003972, (float)-0.016221, (float)0.029459, 
           (float)-0.010498, (float)0.002580}, 
       {(float)-0.003295, (float)0.022873, (float)-0.007255, 
           (float)0.024805, (float)-0.038453, (float)0.052848, 
           (float)-0.076813, (float)0.072530, (float)-0.146709, 
           (float)0.420806, (float)1.056026, (float)-0.099396, 
           (float)0.048542, (float)-0.035595, (float)-0.001294, 
           (float)0.023138, (float)-0.018206, (float)0.003883, 
           (float)-0.008020, (float)0.015925} 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          63 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       }; 
    
   /* Gain Quantization */ 
    
   float gain_sq3[8]={ 
       (float)-1.0,(float)-0.66,(float)-0.33,(float)0.00, 
       (float)0.25,(float)0.50,(float)0.75,(float)1.00}; 
    
   float gain_sq4[16]={ 
       (float)0.0, (float)(1.0/15.0), (float)(2.0/15.0), 
       (float)(3.0/15.0), (float)(4.0/15.0), (float)(5.0/15.0), 
       (float)(6.0/15.0), (float)(7.0/15.0), (float)(8.0/15.0), 
       (float)(9.0/15.0), (float)(10.0/15.0), (float)(11.0/15.0), 
       (float)(12.0/15.0), (float)(13.0/15.0), (float)(14.0/15.0), 
       (float)1.0}; 
    
   /* Enhancer */ 
   float polyphaser[ENH_UPS0*(2*ENH_FL0+1)]={  
       0.000000, 0.000000, 0.000000, 1.000000,  
           0.000000, 0.000000, 0.000000, 
       (float)0.008301,(float)-0.039711, (float)0.136423,  
           (float)0.949948, (float)-0.065108, (float)0.010896, 
               (float)-0.008301, 
       (float)0.015658, (float)-0.076946, (float)0.288367,  
           (float)0.862072, (float)-0.106553, (float)0.018756, 
               (float)-0.015658, 
       (float)0.021087, (float)-0.106767, (float)0.446681, 
           (float)0.743165, (float)-0.125492, (float)0.023074, 
               (float)-0.021087, 
       (float)0.023757, (float)-0.124387, (float)0.601572,  
           (float)0.601572, (float)-0.124387, (float)0.023757, 
               (float)-0.023757, 
       (float)0.023074, (float)-0.125492, (float)0.743165,  
           (float)0.446681, (float)-0.106767, (float)0.021087, 
               (float)-0.023074, 
       (float)0.018756, (float)-0.106553, (float)0.862072,  
           (float)0.288367, (float)-0.076946, (float)0.015658, 
               (float)-0.018756, 
       (float)0.010896, (float)-0.065108, (float)0.949948,  
           (float)0.136423, (float)-0.039711, (float)0.008301, 
               (float)-0.010896}; 
    
   float enh_plocs[ENH_NBLOCKS_TOT] = { 40.0, 120.0, 200.0, 280.0,  
       360.0, 440.0, 520.0, 600.0}; 
    
   /* LPC analysis and quantization */  
    
   int dim_ml[LSF_NSPLIT] = {4, 3, 3}; 
   int size_ml[LSF_NSPLIT] = {512, 512, 1024}; 
    
   int dim_p[LSF_NSPLIT] = {3, 3, 4}; 
   int size_p[LSF_NSPLIT] = {256, 256, 256}; 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          64 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   float lsfmean[FILTERORDER] = {  
       (float)0.281784, (float)0.445744, (float)0.663369,  
       (float)0.962542, (float)1.251890, (float)1.533030,  
       (float)1.850570, (float)2.137790, (float)2.481480,  
       (float)2.777340  
   }; 
    
   float lsfpred[FILTERORDER] = {  
       (float)0.372699, (float)0.502681, (float)0.579187,  
       (float)0.770586, (float)0.700041, (float)0.675133,  
       (float)0.767325, (float)0.703143, (float)0.647042,  
       (float)0.672195  
   }; 
    
   float coef[6] = {(float)(1.0/2.0), (float)1.0, (float)(2.0/3.0),  
       (float)(1.0/3.0), (float)0.0, (float)0.0}; 
    
   /* Hanning LPC window */ 
   float lpc_win[BLOCKL]={ 
       (float)0.000170, (float)0.000680, (float)0.001529,  
           (float)0.002716, (float)0.004242, 
       (float)0.006105, (float)0.008303, (float)0.010836, 
           (float)0.013701, (float)0.016897, 
       (float)0.020421, (float)0.024271, (float)0.028444, 
           (float)0.032938, (float)0.037749, 
       (float)0.042874, (float)0.048311, (float)0.054054, 
           (float)0.060100, (float)0.066445, 
       (float)0.073085, (float)0.080015, (float)0.087231, 
           (float)0.094727, (float)0.102498, 
       (float)0.110540, (float)0.118846, (float)0.127412, 
           (float)0.136230, (float)0.145296, 
       (float)0.154603, (float)0.164145, (float)0.173915, 
           (float)0.183907, (float)0.194113, 
       (float)0.204528, (float)0.215143, (float)0.225952, 
           (float)0.236947, (float)0.248121, 
       (float)0.259466, (float)0.270975, (float)0.282639, 
           (float)0.294451, (float)0.306402, 
       (float)0.318486, (float)0.330692, (float)0.343014, 
           (float)0.355443, (float)0.367969, 
       (float)0.380586, (float)0.393283, (float)0.406053, 
           (float)0.418887, (float)0.431776, 
       (float)0.444712, (float)0.457685, (float)0.470687, 
           (float)0.483708, (float)0.496741, 
       (float)0.509776, (float)0.522804, (float)0.535817, 
           (float)0.548806, (float)0.561761, 
       (float)0.574675, (float)0.587537, (float)0.600340, 
           (float)0.613075, (float)0.625733, 
       (float)0.638306, (float)0.650785, (float)0.663161, 
           (float)0.675426, (float)0.687572, 
       (float)0.699590, (float)0.711473, (float)0.723212, 
           (float)0.734800, (float)0.746228, 
       (float)0.757488, (float)0.768573, (float)0.779476, 
           (float)0.790189, (float)0.800705, 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          65 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.811016, (float)0.821116, (float)0.830998, 
           (float)0.840655, (float)0.850080, 
       (float)0.859267, (float)0.868210, (float)0.876903, 
           (float)0.885340, (float)0.893514, 
       (float)0.901422, (float)0.909056, (float)0.916413, 
           (float)0.923486, (float)0.930271, 
       (float)0.936765, (float)0.942961, (float)0.948856, 
           (float)0.954446, (float)0.959727, 
       (float)0.964696, (float)0.969349, (float)0.973683, 
           (float)0.977695, (float)0.981382, 
       (float)0.984742, (float)0.987773, (float)0.990472, 
           (float)0.992838, (float)0.994868, 
       (float)0.996563, (float)0.997920, (float)0.998938, 
           (float)0.999618, (float)0.999958, 
       (float)0.999958, (float)0.999618, (float)0.998938, 
           (float)0.997920, (float)0.996563, 
       (float)0.994868, (float)0.992838, (float)0.990472, 
           (float)0.987773, (float)0.984742, 
       (float)0.981382, (float)0.977695, (float)0.973683, 
           (float)0.969349, (float)0.964696, 
       (float)0.959727, (float)0.954446, (float)0.948856, 
           (float)0.942961, (float)0.936765, 
       (float)0.930271, (float)0.923486, (float)0.916413, 
           (float)0.909056, (float)0.901422, 
       (float)0.893514, (float)0.885340, (float)0.876903, 
           (float)0.868210, (float)0.859267, 
       (float)0.850080, (float)0.840655, (float)0.830998, 
           (float)0.821116, (float)0.811016, 
       (float)0.800705, (float)0.790189, (float)0.779476, 
           (float)0.768573, (float)0.757488, 
       (float)0.746228, (float)0.734800, (float)0.723212, 
           (float)0.711473, (float)0.699590, 
       (float)0.687572, (float)0.675426, (float)0.663161, 
           (float)0.650785, (float)0.638306, 
       (float)0.625733, (float)0.613075, (float)0.600340, 
           (float)0.587537, (float)0.574675, 
       (float)0.561761, (float)0.548806, (float)0.535817, 
           (float)0.522804, (float)0.509776, 
       (float)0.496741, (float)0.483708, (float)0.470687, 
           (float)0.457685, (float)0.444712, 
       (float)0.431776, (float)0.418887, (float)0.406053, 
           (float)0.393283, (float)0.380586, 
       (float)0.367969, (float)0.355443, (float)0.343014, 
           (float)0.330692, (float)0.318486, 
       (float)0.306402, (float)0.294451, (float)0.282639, 
           (float)0.270975, (float)0.259466, 
       (float)0.248121, (float)0.236947, (float)0.225952, 
           (float)0.215143, (float)0.204528, 
       (float)0.194113, (float)0.183907, (float)0.173915, 
           (float)0.164145, (float)0.154603, 
       (float)0.145296, (float)0.136230, (float)0.127412, 
           (float)0.118846, (float)0.110540, 
       (float)0.102498, (float)0.094727, (float)0.087231, 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          66 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           (float)0.080015, (float)0.073085, 
       (float)0.066445, (float)0.060100, (float)0.054054, 
           (float)0.048311, (float)0.042874, 
       (float)0.037749, (float)0.032938, (float)0.028444, 
           (float)0.024271, (float)0.020421, 
       (float)0.016897, (float)0.013701, (float)0.010836, 
           (float)0.008303, (float)0.006105, 
       (float)0.004242, (float)0.002716, (float)0.001529, 
           (float)0.000680, (float)0.000170}; 
    
   /* Asymmetric LPC window */ 
   float lpc_asymwin[BLOCKL]={ 
       (float)0.000051, (float)0.000203, (float)0.000457,  
           (float)0.000812, (float)0.001268, 
       (float)0.001826, (float)0.002485, (float)0.003244, 
           (float)0.004105, (float)0.005066, 
       (float)0.006128, (float)0.007290, (float)0.008552, 
           (float)0.009914, (float)0.011375, 
       (float)0.012935, (float)0.014595, (float)0.016353, 
           (float)0.018209, (float)0.020162, 
       (float)0.022214, (float)0.024362, (float)0.026607, 
           (float)0.028947, (float)0.031384, 
       (float)0.033915, (float)0.036542, (float)0.039262, 
           (float)0.042076, (float)0.044982, 
       (float)0.047982, (float)0.051072, (float)0.054254, 
           (float)0.057527, (float)0.060889, 
       (float)0.064341, (float)0.067881, (float)0.071508, 
           (float)0.075223, (float)0.079023, 
       (float)0.082910, (float)0.086881, (float)0.090935, 
           (float)0.095073, (float)0.099293, 
       (float)0.103595, (float)0.107976, (float)0.112438, 
           (float)0.116978, (float)0.121596, 
       (float)0.126290, (float)0.131061, (float)0.135906, 
           (float)0.140825, (float)0.145818, 
       (float)0.150882, (float)0.156017, (float)0.161221, 
           (float)0.166495, (float)0.171836, 
       (float)0.177244, (float)0.182717, (float)0.188255, 
           (float)0.193856, (float)0.199519, 
       (float)0.205244, (float)0.211028, (float)0.216870, 
           (float)0.222770, (float)0.228727, 
       (float)0.234738, (float)0.240804, (float)0.246922, 
           (float)0.253091, (float)0.259310, 
       (float)0.265579, (float)0.271895, (float)0.278257, 
           (float)0.284664, (float)0.291115, 
       (float)0.297608, (float)0.304143, (float)0.310717, 
           (float)0.317330, (float)0.323979, 
       (float)0.330665, (float)0.337384, (float)0.344137, 
           (float)0.350922, (float)0.357736, 
       (float)0.364580, (float)0.371451, (float)0.378348, 
           (float)0.385270, (float)0.392215, 
       (float)0.399182, (float)0.406169, (float)0.413176, 
           (float)0.420200, (float)0.427240, 
       (float)0.434296, (float)0.441364, (float)0.448444, 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          67 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           (float)0.455535, (float)0.462635, 
       (float)0.469742, (float)0.476856, (float)0.483974, 
           (float)0.491096, (float)0.498219, 
       (float)0.505343, (float)0.512465, (float)0.519585, 
           (float)0.526702, (float)0.533812, 
       (float)0.540916, (float)0.548012, (float)0.555097, 
           (float)0.562172, (float)0.569234, 
       (float)0.576282, (float)0.583314, (float)0.590330, 
           (float)0.597327, (float)0.604304, 
       (float)0.611260, (float)0.618194, (float)0.625104, 
           (float)0.631988, (float)0.638846, 
       (float)0.645675, (float)0.652475, (float)0.659243, 
           (float)0.665980, (float)0.672683, 
       (float)0.679350, (float)0.685982, (float)0.692575, 
           (float)0.699130, (float)0.705644, 
       (float)0.712116, (float)0.718545, (float)0.724930, 
           (float)0.731269, (float)0.737561, 
       (float)0.743805, (float)0.750000, (float)0.756144, 
           (float)0.762236, (float)0.768274, 
       (float)0.774258, (float)0.780187, (float)0.786058, 
           (float)0.791872, (float)0.797626, 
       (float)0.803320, (float)0.808952, (float)0.814522, 
           (float)0.820028, (float)0.825468, 
       (float)0.830843, (float)0.836150, (float)0.841390, 
           (float)0.846560, (float)0.851659, 
       (float)0.856688, (float)0.861644, (float)0.866526, 
           (float)0.871334, (float)0.876067, 
       (float)0.880723, (float)0.885302, (float)0.889803, 
           (float)0.894225, (float)0.898566, 
       (float)0.902827, (float)0.907006, (float)0.911102, 
           (float)0.915115, (float)0.919044, 
       (float)0.922888, (float)0.926645, (float)0.930317, 
           (float)0.933900, (float)0.937396, 
       (float)0.940803, (float)0.944121, (float)0.947348, 
           (float)0.950484, (float)0.953530, 
       (float)0.956483, (float)0.959343, (float)0.962110, 
           (float)0.964783, (float)0.967362, 
       (float)0.969846, (float)0.972235, (float)0.974528, 
           (float)0.976724, (float)0.978824, 
       (float)0.980827, (float)0.982732, (float)0.984539, 
           (float)0.986247, (float)0.987857, 
       (float)0.989368, (float)0.990780, (float)0.992091, 
           (float)0.993304, (float)0.994415, 
       (float)0.995427, (float)0.996338, (float)0.997148, 
           (float)0.997857, (float)0.998466, 
       (float)0.998973, (float)0.999378, (float)0.999683, 
           (float)0.999886, (float)0.999987, 
       (float)1.000000, (float)0.996917, (float)0.987688, 
           (float)0.972370, (float)0.951057, 
       (float)0.923880, (float)0.891007, (float)0.852640, 
           (float)0.809017, (float)0.760406, 
       (float)0.707107, (float)0.649448, (float)0.587785, 
           (float)0.522499, (float)0.453990, 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          68 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.382683, (float)0.309017, (float)0.233445, 
           (float)0.156434, (float)0.078459}; 
    
   /* Lag window for LPC */ 
   float lpc_lagwin[FILTERORDER + 1]={ 
       (float)1.000100, (float)0.998890, (float)0.995569, 
           (float)0.990057, (float)0.982392, 
       (float)0.972623, (float)0.960816, (float)0.947047, 
           (float)0.931405, (float)0.913989, (float)0.894909}; 
    
   /* LSF quantization*/ 
   float cb_ml[6656 /* 4*512+3*512+3*1024 */] = { 
   (float)0.206933, (float)0.455663, (float)0.955837, (float)1.299660,  
   (float)0.202792, (float)0.356753, (float)0.743137, (float)1.214410,  
   (float)0.355617, (float)0.598165, (float)0.806726, (float)1.059390,  
   (float)0.418513, (float)0.647836, (float)0.919659, (float)1.135480,  
   (float)0.205102, (float)0.426497, (float)0.662197, (float)0.883389,  
   (float)0.250592, (float)0.390764, (float)0.685526, (float)1.024520,  
   (float)0.196187, (float)0.333121, (float)0.637290, (float)1.127270,  
   (float)0.322202, (float)0.479293, (float)0.695495, (float)0.893460,  
   (float)0.291288, (float)0.431841, (float)0.578687, (float)0.717291,  
   (float)0.212346, (float)0.345768, (float)0.522280, (float)0.826818,  
   (float)0.251688, (float)0.409343, (float)0.565408, (float)0.790632,  
   (float)0.254165, (float)0.377965, (float)0.510518, (float)0.627703,  
   (float)0.249504, (float)0.389814, (float)0.539574, (float)0.743256,  
   (float)0.301781, (float)0.438247, (float)0.620486, (float)0.790321,  
   (float)0.240948, (float)0.428665, (float)0.605272, (float)0.825745,  
   (float)0.397944, (float)0.556508, (float)0.715519, (float)0.971234,  
   (float)0.190679, (float)0.308678, (float)0.571321, (float)1.216330,  
   (float)0.211559, (float)0.340887, (float)0.674030, (float)1.277110,  
   (float)0.401099, (float)0.701593, (float)1.160500, (float)1.418240,  
   (float)0.276824, (float)0.404371, (float)0.555723, (float)0.900151,  
   (float)0.150359, (float)0.248988, (float)0.411909, (float)0.758344,  
   (float)0.249751, (float)0.375904, (float)0.552816, (float)0.970742,  
   (float)0.430819, (float)0.628004, (float)0.782706, (float)0.957149,  
   (float)0.199637, (float)0.331259, (float)0.556478, (float)0.999661,  
   (float)0.255622, (float)0.387289, (float)0.628543, (float)1.019650,  
   (float)0.284787, (float)0.422220, (float)0.656567, (float)0.920121,  
   (float)0.236115, (float)0.357059, (float)0.529438, (float)0.954573,  
   (float)0.196231, (float)0.315403, (float)0.500168, (float)0.963807,  
   (float)0.325583, (float)0.475101, (float)0.620301, (float)0.880271,  
   (float)0.283059, (float)0.418332, (float)0.665176, (float)0.957521,  
   (float)0.327780, (float)0.540742, (float)0.880357, (float)1.227730,  
   (float)0.433262, (float)0.614190, (float)0.753060, (float)0.900360,  
   (float)0.376967, (float)0.525007, (float)0.691743, (float)0.999182,  
   (float)0.371164, (float)0.638640, (float)0.896293, (float)1.167020,  
   (float)0.359366, (float)0.549215, (float)0.798128, (float)1.032450,  
   (float)0.250956, (float)0.392867, (float)0.660014, (float)0.966218,  
   (float)0.262539, (float)0.390030, (float)0.599576, (float)0.976636,  
   (float)0.308276, (float)0.595959, (float)0.875203, (float)1.249180,  
   (float)0.163708, (float)0.284216, (float)0.499091, (float)0.732796,  
   (float)0.263808, (float)0.405520, (float)0.637971, (float)0.820948,  
   (float)0.241168, (float)0.380081, (float)0.609850, (float)0.798614,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          69 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.201620, (float)0.346418, (float)0.561644, (float)0.855359,  
   (float)0.222618, (float)0.342412, (float)0.543624, (float)1.039120,  
   (float)0.284347, (float)0.648234, (float)0.920407, (float)1.126410,  
   (float)0.309242, (float)0.498135, (float)0.644306, (float)0.792955,  
   (float)0.308826, (float)0.488657, (float)0.631147, (float)0.832511,  
   (float)0.229581, (float)0.364052, (float)0.582565, (float)0.843034,  
   (float)0.306376, (float)0.443014, (float)0.660325, (float)0.990600,  
   (float)0.427497, (float)0.643168, (float)0.922725, (float)1.241580,  
   (float)0.298044, (float)0.430277, (float)0.607738, (float)0.750928,  
   (float)0.332320, (float)0.561192, (float)0.744724, (float)1.053190,  
   (float)0.307157, (float)0.443988, (float)0.596517, (float)0.932760,  
   (float)0.277528, (float)0.405929, (float)0.595628, (float)1.024960,  
   (float)0.359816, (float)0.581988, (float)0.927519, (float)1.217100,  
   (float)0.284677, (float)0.584359, (float)0.977913, (float)1.380510,  
   (float)0.191169, (float)0.308496, (float)0.512356, (float)1.031300,  
   (float)0.203906, (float)0.330416, (float)0.460630, (float)0.693662,  
   (float)0.340520, (float)0.483882, (float)0.618109, (float)0.846814,  
   (float)0.280481, (float)0.408779, (float)0.618951, (float)1.077530,  
   (float)0.303040, (float)0.481995, (float)0.783944, (float)1.063320,  
   (float)0.342708, (float)0.481457, (float)0.685364, (float)0.938355,  
   (float)0.340202, (float)0.590310, (float)0.838427, (float)1.168920,  
   (float)0.310902, (float)0.448606, (float)0.667931, (float)0.890985,  
   (float)0.262601, (float)0.562894, (float)1.031910, (float)1.307970,  
   (float)0.239203, (float)0.377848, (float)0.623432, (float)0.932536,  
   (float)0.253330, (float)0.448197, (float)0.627795, (float)0.789560,  
   (float)0.327799, (float)0.467668, (float)0.616599, (float)0.757124,  
   (float)0.201911, (float)0.449148, (float)0.731607, (float)1.037540,  
   (float)0.379221, (float)0.537097, (float)0.677468, (float)0.947819,  
   (float)0.263989, (float)0.457763, (float)0.680018, (float)0.972581,  
   (float)0.217480, (float)0.433561, (float)0.882985, (float)1.215600,  
   (float)0.238562, (float)0.374681, (float)0.636551, (float)1.056640,  
   (float)0.441700, (float)0.645610, (float)0.862572, (float)1.157670,  
   (float)0.178761, (float)0.297639, (float)0.439222, (float)0.650521,  
   (float)0.262891, (float)0.401952, (float)0.620997, (float)0.896739,  
   (float)0.256420, (float)0.473430, (float)0.744731, (float)1.049380,  
   (float)0.302715, (float)0.458463, (float)0.604989, (float)0.754193,  
   (float)0.187032, (float)0.323747, (float)0.538013, (float)0.783889,  
   (float)0.298480, (float)0.432778, (float)0.624635, (float)0.957047,  
   (float)0.404371, (float)0.570355, (float)0.708369, (float)0.848144,  
   (float)0.224390, (float)0.557947, (float)0.848633, (float)1.035020,  
   (float)0.254468, (float)0.379288, (float)0.504763, (float)0.676969,  
   (float)0.405076, (float)0.572401, (float)0.767510, (float)1.079840,  
   (float)0.139747, (float)0.235839, (float)0.428417, (float)0.849254,  
   (float)0.353466, (float)0.586264, (float)0.982179, (float)1.326280,  
   (float)0.162889, (float)0.284958, (float)0.529735, (float)0.780525,  
   (float)0.225858, (float)0.359835, (float)0.553006, (float)0.917149,  
   (float)0.276174, (float)0.408405, (float)0.595794, (float)0.807894,  
   (float)0.213655, (float)0.459370, (float)0.781106, (float)0.984319,  
   (float)0.341577, (float)0.505690, (float)0.737120, (float)1.010750,  
   (float)0.230815, (float)0.349761, (float)0.499635, (float)0.854998,  
   (float)0.375468, (float)0.586106, (float)0.892330, (float)1.265600,  
   (float)0.340917, (float)0.541775, (float)0.868464, (float)1.178640,  
   (float)0.214251, (float)0.401698, (float)0.751275, (float)0.945303,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          70 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.318297, (float)0.461550, (float)0.624405, (float)0.965207,  
   (float)0.330411, (float)0.608841, (float)0.885787, (float)1.195930,  
   (float)0.420904, (float)0.679290, (float)1.061520, (float)1.312820,  
   (float)0.364143, (float)0.502151, (float)0.687144, (float)0.880715,  
   (float)0.222131, (float)0.489341, (float)1.025960, (float)1.407590,  
   (float)0.216172, (float)0.395467, (float)0.618222, (float)0.886179,  
   (float)0.156797, (float)0.268405, (float)0.494347, (float)1.025800,  
   (float)0.290165, (float)0.540947, (float)0.754936, (float)1.103130,  
   (float)0.336982, (float)0.525151, (float)0.671778, (float)0.850908,  
   (float)0.389502, (float)0.623596, (float)0.868492, (float)1.044360,  
   (float)0.171629, (float)0.321360, (float)0.651249, (float)1.037040,  
   (float)0.240856, (float)0.429186, (float)0.714678, (float)0.986568,  
   (float)0.213356, (float)0.339740, (float)0.536275, (float)0.944777,  
   (float)0.347269, (float)0.577713, (float)0.870800, (float)1.082050,  
   (float)0.358390, (float)0.640341, (float)0.912859, (float)1.229890,  
   (float)0.326776, (float)0.463485, (float)0.636537, (float)0.836388,  
   (float)0.239327, (float)0.378665, (float)0.730313, (float)1.251510,  
   (float)0.303163, (float)0.441023, (float)0.567133, (float)0.693247,  
   (float)0.234711, (float)0.353461, (float)0.484919, (float)0.607039,  
   (float)0.219006, (float)0.365181, (float)0.717377, (float)1.126620,  
   (float)0.312014, (float)0.451185, (float)0.591014, (float)0.727283,  
   (float)0.303521, (float)0.433622, (float)0.615099, (float)1.002870,  
   (float)0.196287, (float)0.325632, (float)0.636523, (float)1.197740,  
   (float)0.189011, (float)0.420425, (float)0.685496, (float)0.963788,  
   (float)0.365341, (float)0.509911, (float)0.672201, (float)0.837834,  
   (float)0.333245, (float)0.556044, (float)0.948560, (float)1.271730,  
   (float)0.286279, (float)0.416961, (float)0.643587, (float)1.033660,  
   (float)0.226492, (float)0.378806, (float)0.697384, (float)0.965845,  
   (float)0.389593, (float)0.535020, (float)0.662239, (float)0.808759,  
   (float)0.242533, (float)0.416135, (float)0.804135, (float)1.112300,  
   (float)0.193007, (float)0.356747, (float)0.659253, (float)0.849928,  
   (float)0.243324, (float)0.608667, (float)1.121790, (float)1.420140,  
   (float)0.197100, (float)0.327295, (float)0.503280, (float)0.809764,  
   (float)0.369361, (float)0.515280, (float)0.701348, (float)1.050250,  
   (float)0.219162, (float)0.400224, (float)0.855218, (float)1.359300,  
   (float)0.207632, (float)0.342219, (float)0.594206, (float)1.041440,  
   (float)0.286057, (float)0.520728, (float)0.739637, (float)1.033800,  
   (float)0.255809, (float)0.380159, (float)0.544559, (float)0.922066,  
   (float)0.214194, (float)0.334422, (float)0.585562, (float)1.165210,  
   (float)0.265322, (float)0.500274, (float)0.712655, (float)0.913819,  
   (float)0.347389, (float)0.601879, (float)1.012220, (float)1.241140,  
   (float)0.326150, (float)0.512333, (float)0.671930, (float)0.986512,  
   (float)0.231284, (float)0.368866, (float)0.571408, (float)0.786042,  
   (float)0.370262, (float)0.618920, (float)0.957463, (float)1.179380,  
   (float)0.174556, (float)0.296531, (float)0.539447, (float)0.961525,  
   (float)0.330525, (float)0.475142, (float)0.650717, (float)0.903287,  
   (float)0.398920, (float)0.728732, (float)1.128350, (float)1.338470,  
   (float)0.210286, (float)0.394299, (float)0.587481, (float)0.816856,  
   (float)0.268455, (float)0.426244, (float)0.690094, (float)0.885235,  
   (float)0.343199, (float)0.494280, (float)0.653055, (float)0.821172,  
   (float)0.340848, (float)0.613051, (float)0.804317, (float)0.971781,  
   (float)0.365841, (float)0.510391, (float)0.656847, (float)0.918768,  
   (float)0.182871, (float)0.320719, (float)0.556960, (float)0.830897,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          71 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.192157, (float)0.323892, (float)0.593340, (float)1.090270,  
   (float)0.316047, (float)0.461775, (float)0.666747, (float)1.102020,  
   (float)0.274769, (float)0.455781, (float)0.621990, (float)0.945367,  
   (float)0.232954, (float)0.365772, (float)0.518524, (float)0.711962,  
   (float)0.430497, (float)0.844289, (float)1.175420, (float)1.395880,  
   (float)0.153803, (float)0.257842, (float)0.418431, (float)0.673880,  
   (float)0.248894, (float)0.539098, (float)0.815990, (float)1.152300,  
   (float)0.207032, (float)0.322973, (float)0.464295, (float)0.809865,  
   (float)0.324109, (float)0.489619, (float)0.742501, (float)1.196440,  
   (float)0.394760, (float)0.550367, (float)0.704703, (float)0.881266,  
   (float)0.335755, (float)0.618882, (float)0.863661, (float)1.127360,  
   (float)0.180492, (float)0.526135, (float)0.866043, (float)1.169740,  
   (float)0.298658, (float)0.429803, (float)0.570495, (float)0.857534,  
   (float)0.363553, (float)0.507554, (float)0.635745, (float)0.841498,  
   (float)0.235157, (float)0.439663, (float)0.651361, (float)0.935221,  
   (float)0.291226, (float)0.491461, (float)0.659996, (float)0.918398,  
   (float)0.236740, (float)0.395367, (float)0.674901, (float)0.855046,  
   (float)0.287777, (float)0.498321, (float)0.788467, (float)1.147270,  
   (float)0.279308, (float)0.493396, (float)0.782574, (float)0.999829,  
   (float)0.168626, (float)0.296703, (float)0.549084, (float)0.872414,  
   (float)0.220117, (float)0.358472, (float)0.676794, (float)1.171870,  
   (float)0.236842, (float)0.434423, (float)0.645094, (float)0.994987,  
   (float)0.235011, (float)0.380783, (float)0.534380, (float)0.779898,  
   (float)0.413243, (float)0.592852, (float)0.754238, (float)0.991629,  
   (float)0.357762, (float)0.498955, (float)0.624656, (float)0.757438,  
   (float)0.303722, (float)0.549172, (float)0.823579, (float)1.125640,  
   (float)0.278814, (float)0.410877, (float)0.681239, (float)1.000850,  
   (float)0.235431, (float)0.409220, (float)0.585171, (float)0.865259,  
   (float)0.356276, (float)0.548544, (float)0.815733, (float)1.081120,  
   (float)0.459003, (float)0.735247, (float)0.987476, (float)1.183130,  
   (float)0.279634, (float)0.412160, (float)0.642378, (float)1.165470,  
   (float)0.369887, (float)0.545649, (float)0.689093, (float)0.826306,  
   (float)0.292721, (float)0.487894, (float)0.684772, (float)1.040450,  
   (float)0.235243, (float)0.369773, (float)0.591741, (float)1.028860,  
   (float)0.169572, (float)0.351648, (float)0.731368, (float)1.002940,  
   (float)0.214564, (float)0.382838, (float)0.705176, (float)0.899864,  
   (float)0.203687, (float)0.357303, (float)0.601798, (float)0.914289,  
   (float)0.296053, (float)0.523345, (float)0.700954, (float)0.861043,  
   (float)0.274250, (float)0.438848, (float)0.590019, (float)0.866812,  
   (float)0.274446, (float)0.402620, (float)0.538540, (float)0.773852,  
   (float)0.260588, (float)0.391095, (float)0.545049, (float)0.813018,  
   (float)0.480416, (float)0.714486, (float)0.918442, (float)1.112870,  
   (float)0.222831, (float)0.373589, (float)0.658921, (float)0.998617,  
   (float)0.344190, (float)0.482138, (float)0.642066, (float)0.971454,  
   (float)0.335713, (float)0.501011, (float)0.645197, (float)0.933129,  
   (float)0.167494, (float)0.333958, (float)0.712547, (float)1.107550,  
   (float)0.220369, (float)0.406229, (float)0.614829, (float)0.954064,  
   (float)0.149118, (float)0.252971, (float)0.454397, (float)0.914931,  
   (float)0.323658, (float)0.722583, (float)1.170140, (float)1.443540,  
   (float)0.328686, (float)0.545416, (float)0.791088, (float)0.980105,  
   (float)0.391514, (float)0.591311, (float)0.820624, (float)1.002620,  
   (float)0.207910, (float)0.339036, (float)0.515390, (float)0.674919,  
   (float)0.179169, (float)0.302505, (float)0.487262, (float)0.778221,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          72 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.222055, (float)0.451269, (float)0.758407, (float)1.206270,  
   (float)0.255333, (float)0.388189, (float)0.628263, (float)1.113140,  
   (float)0.367870, (float)0.519560, (float)0.747148, (float)1.063370,  
   (float)0.217900, (float)0.337936, (float)0.521737, (float)0.990719,  
   (float)0.210495, (float)0.400579, (float)0.642128, (float)0.820393,  
   (float)0.334211, (float)0.471753, (float)0.668969, (float)1.055730,  
   (float)0.250058, (float)0.370644, (float)0.494859, (float)0.749112,  
   (float)0.320330, (float)0.561230, (float)0.925942, (float)1.182820,  
   (float)0.198633, (float)0.347785, (float)0.569319, (float)0.807747,  
   (float)0.249865, (float)0.531859, (float)0.850131, (float)1.210870,  
   (float)0.277925, (float)0.413295, (float)0.562005, (float)0.696588,  
   (float)0.335722, (float)0.479799, (float)0.606456, (float)0.733290,  
   (float)0.396565, (float)0.614120, (float)0.872767, (float)1.118290,  
   (float)0.206999, (float)0.331911, (float)0.485677, (float)0.630634,  
   (float)0.254592, (float)0.388101, (float)0.563905, (float)0.709699,  
   (float)0.254443, (float)0.386146, (float)0.658742, (float)1.212610,  
   (float)0.239462, (float)0.375070, (float)0.582570, (float)0.953764,  
   (float)0.197275, (float)0.397554, (float)0.801396, (float)1.154100,  
   (float)0.211812, (float)0.326665, (float)0.457081, (float)0.587858,  
   (float)0.315437, (float)0.451907, (float)0.578710, (float)0.805470,  
   (float)0.209226, (float)0.327713, (float)0.482734, (float)0.861480,  
   (float)0.197045, (float)0.353566, (float)0.622777, (float)0.806449,  
   (float)0.247217, (float)0.484871, (float)0.679994, (float)0.866096,  
   (float)0.328801, (float)0.557117, (float)0.822305, (float)1.228800,  
   (float)0.280873, (float)0.416483, (float)0.589530, (float)0.891804,  
   (float)0.367417, (float)0.513164, (float)0.708923, (float)0.923606,  
   (float)0.426862, (float)0.627360, (float)0.828262, (float)1.094490,  
   (float)0.421861, (float)0.666309, (float)0.933314, (float)1.194170,  
   (float)0.228439, (float)0.394585, (float)0.578143, (float)0.913689,  
   (float)0.267719, (float)0.413802, (float)0.737879, (float)1.053990,  
   (float)0.331373, (float)0.478375, (float)0.705013, (float)1.142460,  
   (float)0.233649, (float)0.494393, (float)0.694361, (float)1.045190,  
   (float)0.197325, (float)0.331154, (float)0.538610, (float)0.904850,  
   (float)0.276231, (float)0.408872, (float)0.583310, (float)0.731593,  
   (float)0.197768, (float)0.388368, (float)0.766956, (float)1.075340,  
   (float)0.372822, (float)0.520313, (float)0.658839, (float)0.875358,  
   (float)0.228229, (float)0.382444, (float)0.717114, (float)1.064530,  
   (float)0.208859, (float)0.428062, (float)0.678643, (float)1.027470,  
   (float)0.270264, (float)0.448117, (float)0.597090, (float)0.793611,  
   (float)0.213061, (float)0.489593, (float)0.784955, (float)1.149960,  
   (float)0.342783, (float)0.546397, (float)0.788863, (float)1.112640,  
   (float)0.224208, (float)0.367683, (float)0.556746, (float)0.737038,  
   (float)0.279169, (float)0.405289, (float)0.545581, (float)0.849039,  
   (float)0.228358, (float)0.408701, (float)0.702459, (float)1.183810,  
   (float)0.211521, (float)0.355323, (float)0.640079, (float)0.954630,  
   (float)0.341786, (float)0.531844, (float)0.719021, (float)0.970006,  
   (float)0.246758, (float)0.421869, (float)0.638845, (float)1.059600,  
   (float)0.324171, (float)0.463447, (float)0.643114, (float)1.015480,  
   (float)0.244773, (float)0.382437, (float)0.596621, (float)0.750520,  
   (float)0.417907, (float)0.857541, (float)1.260850, (float)1.524600,  
   (float)0.189006, (float)0.329748, (float)0.571715, (float)0.936269,  
   (float)0.356885, (float)0.633695, (float)1.125660, (float)1.466910,  
   (float)0.453555, (float)0.691535, (float)0.987716, (float)1.261890,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          73 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.200734, (float)0.360249, (float)0.690715, (float)1.040650,  
   (float)0.213237, (float)0.352028, (float)0.522801, (float)0.773476,  
   (float)0.344412, (float)0.653943, (float)0.978223, (float)1.323750,  
   (float)0.324543, (float)0.479443, (float)0.749721, (float)0.938893,  
   (float)0.203184, (float)0.389597, (float)0.622969, (float)1.019380,  
   (float)0.289249, (float)0.577998, (float)0.854882, (float)1.176310,  
   (float)0.182823, (float)0.333322, (float)0.638624, (float)0.910735,  
   (float)0.260228, (float)0.395189, (float)0.532943, (float)0.702746,  
   (float)0.282052, (float)0.465408, (float)0.619780, (float)0.889118,  
   (float)0.272236, (float)0.497232, (float)0.723696, (float)1.114210,  
   (float)0.270798, (float)0.463554, (float)0.620515, (float)0.837657,  
   (float)0.228654, (float)0.348950, (float)0.481395, (float)0.786428,  
   (float)0.244944, (float)0.379241, (float)0.670333, (float)1.299900,  
   (float)0.290868, (float)0.422739, (float)0.582471, (float)0.924767,  
   (float)0.243928, (float)0.412803, (float)0.596282, (float)0.993266,  
   (float)0.441424, (float)0.666813, (float)0.869153, (float)1.061790,  
   (float)0.215572, (float)0.350030, (float)0.495820, (float)0.736499,  
   (float)0.322354, (float)0.510465, (float)0.663282, (float)0.880182,  
   (float)0.171525, (float)0.294439, (float)0.519191, (float)0.828746,  
   (float)0.387417, (float)0.539294, (float)0.686027, (float)0.903281,  
   (float)0.273241, (float)0.405943, (float)0.687374, (float)1.245560,  
   (float)0.309821, (float)0.445707, (float)0.593281, (float)0.888831,  
   (float)0.301391, (float)0.437622, (float)0.648710, (float)0.825115,  
   (float)0.268029, (float)0.448081, (float)0.593752, (float)0.740914,  
   (float)0.290098, (float)0.428281, (float)0.695540, (float)1.198940,  
   (float)0.306895, (float)0.451955, (float)0.724292, (float)1.095510,  
   (float)0.386610, (float)0.670501, (float)0.961258, (float)1.253040,  
   (float)0.259236, (float)0.410738, (float)0.707426, (float)0.934194,  
   (float)0.347218, (float)0.534486, (float)0.681936, (float)0.904320,  
   (float)0.291524, (float)0.425825, (float)0.548190, (float)0.667930,  
   (float)0.384840, (float)0.666135, (float)1.040360, (float)1.475370,  
   (float)0.310877, (float)0.455544, (float)0.623884, (float)0.919199,  
   (float)0.292490, (float)0.677005, (float)1.036410, (float)1.271390,  
   (float)0.289542, (float)0.475043, (float)0.624304, (float)0.778945,  
   (float)0.156969, (float)0.267335, (float)0.466354, (float)0.799595,  
   (float)0.274135, (float)0.408537, (float)0.616194, (float)0.776118,  
   (float)0.251981, (float)0.389727, (float)0.570594, (float)0.832260,  
   (float)0.236658, (float)0.357024, (float)0.475591, (float)0.687801,  
   (float)0.414333, (float)0.651317, (float)0.968328, (float)1.326590,  
   (float)0.338001, (float)0.583657, (float)0.899938, (float)1.329100,  
   (float)0.235380, (float)0.419633, (float)0.574793, (float)0.725040,  
   (float)0.335061, (float)0.472130, (float)0.618476, (float)0.923847,  
   (float)0.306820, (float)0.448593, (float)0.633808, (float)0.868368,  
   (float)0.262447, (float)0.448778, (float)0.679349, (float)1.036100,  
   (float)0.263333, (float)0.397535, (float)0.670473, (float)1.071350,  
   (float)0.407434, (float)0.648132, (float)0.993253, (float)1.212680,  
   (float)0.382877, (float)0.599699, (float)0.769050, (float)0.927727,  
   (float)0.390412, (float)0.538531, (float)0.680946, (float)0.852162,  
   (float)0.307607, (float)0.441901, (float)0.687919, (float)1.032430,  
   (float)0.177520, (float)0.323100, (float)0.547255, (float)0.735511,  
   (float)0.368019, (float)0.586839, (float)0.823260, (float)1.121690,  
   (float)0.241973, (float)0.366597, (float)0.588033, (float)1.127480,  
   (float)0.177302, (float)0.308446, (float)0.490785, (float)0.681439,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          74 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.334658, (float)0.547315, (float)0.864226, (float)1.290620,  
   (float)0.319257, (float)0.466209, (float)0.596699, (float)0.778564,  
   (float)0.391427, (float)0.608427, (float)0.848551, (float)1.168710,  
   (float)0.239682, (float)0.369492, (float)0.602720, (float)0.884657,  
   (float)0.273618, (float)0.402770, (float)0.527267, (float)0.647278,  
   (float)0.364448, (float)0.621716, (float)1.055650, (float)1.317340,  
   (float)0.233624, (float)0.360941, (float)0.560580, (float)0.998745,  
   (float)0.260847, (float)0.392224, (float)0.586763, (float)0.921338,  
   (float)0.241352, (float)0.547927, (float)0.810391, (float)1.094270,  
   (float)0.178568, (float)0.318679, (float)0.594942, (float)0.801519,  
   (float)0.298461, (float)0.446901, (float)0.680209, (float)1.150460,  
   (float)0.258215, (float)0.399730, (float)0.727028, (float)1.112710,  
   (float)0.397843, (float)0.635496, (float)1.013350, (float)1.277570,  
   (float)0.185221, (float)0.316416, (float)0.507163, (float)0.732293,  
   (float)0.354876, (float)0.494767, (float)0.667361, (float)1.018970,  
   (float)0.291951, (float)0.486143, (float)0.653101, (float)0.870568,  
   (float)0.293706, (float)0.509001, (float)0.846668, (float)1.094110,  
   (float)0.291342, (float)0.442579, (float)0.744129, (float)1.279610,  
   (float)0.272456, (float)0.407997, (float)0.631174, (float)0.987083,  
   (float)0.352611, (float)0.538293, (float)0.697080, (float)0.866501,  
   (float)0.241964, (float)0.527318, (float)0.770160, (float)1.048130,  
   (float)0.314787, (float)0.524371, (float)0.693928, (float)0.935755,  
   (float)0.300869, (float)0.550315, (float)0.894378, (float)1.129460,  
   (float)0.291527, (float)0.498051, (float)0.717754, (float)0.978110,  
   (float)0.265995, (float)0.508245, (float)0.779386, (float)1.222120,  
   (float)0.252261, (float)0.378007, (float)0.626046, (float)1.163140,  
   (float)0.417044, (float)0.721984, (float)1.128590, (float)1.486670,  
   (float)0.353369, (float)0.705701, (float)0.976913, (float)1.165060,  
   (float)0.271864, (float)0.392841, (float)0.510938, (float)0.745883,  
   (float)0.274596, (float)0.406086, (float)0.601831, (float)0.853509,  
   (float)0.376406, (float)0.682243, (float)0.912717, (float)1.085710,  
   (float)0.225794, (float)0.397059, (float)0.755320, (float)1.011200,  
   (float)0.281786, (float)0.417292, (float)0.551166, (float)0.739330,  
   (float)0.299725, (float)0.593917, (float)0.826779, (float)1.090990,  
   (float)0.292800, (float)0.431433, (float)0.618210, (float)0.903658,  
   (float)0.230575, (float)0.580719, (float)0.871743, (float)1.114390,  
   (float)0.267864, (float)0.450254, (float)0.751591, (float)1.153090,  
   (float)0.227979, (float)0.354904, (float)0.630262, (float)1.137810,  
   (float)0.294058, (float)0.429207, (float)0.684007, (float)1.079250,  
   (float)0.248220, (float)0.394220, (float)0.659739, (float)0.908493,  
   (float)0.215981, (float)0.334948, (float)0.500529, (float)0.913263,  
   (float)0.181791, (float)0.298269, (float)0.469913, (float)0.846965,  
   (float)0.203908, (float)0.327592, (float)0.470698, (float)0.757392,  
   (float)0.196003, (float)0.315044, (float)0.554691, (float)1.143190,  
   (float)0.260415, (float)0.393965, (float)0.684793, (float)1.144150,  
   (float)0.226013, (float)0.355166, (float)0.664777, (float)1.224800,  
   (float)0.341351, (float)0.615218, (float)0.936893, (float)1.272030,  
   (float)0.252247, (float)0.393730, (float)0.570960, (float)0.758005,  
   (float)0.278654, (float)0.531480, (float)0.901021, (float)1.363700,  
   (float)0.261767, (float)0.398730, (float)0.548140, (float)0.675737,  
   (float)0.301735, (float)0.440731, (float)0.576080, (float)0.761129,  
   (float)0.390980, (float)0.588271, (float)0.842845, (float)1.078730,  
   (float)0.350982, (float)0.543640, (float)0.845990, (float)1.130100,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          75 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.396864, (float)0.547775, (float)0.721625, (float)1.030950,  
   (float)0.268612, (float)0.397836, (float)0.565284, (float)0.955155,  
   (float)0.303378, (float)0.506892, (float)0.666309, (float)0.837350,  
   (float)0.347443, (float)0.492402, (float)0.687826, (float)1.091790,  
   (float)0.273813, (float)0.407262, (float)0.618277, (float)0.941319,  
   (float)0.293662, (float)0.436250, (float)0.579946, (float)0.817583,  
   (float)0.352712, (float)0.565204, (float)0.757741, (float)0.943316,  
   (float)0.256268, (float)0.384554, (float)0.598044, (float)1.070950,  
   (float)0.416329, (float)0.576227, (float)0.722358, (float)0.896904,  
   (float)0.242291, (float)0.383518, (float)0.751799, (float)1.178820,  
   (float)0.249773, (float)0.428614, (float)0.599990, (float)0.920567,  
   (float)0.219702, (float)0.339245, (float)0.568626, (float)1.104180,  
   (float)0.390685, (float)0.626539, (float)0.911688, (float)1.308600,  
   (float)0.333765, (float)0.474123, (float)0.696616, (float)0.992239,  
   (float)0.370265, (float)0.573662, (float)0.732385, (float)0.884617,  
   (float)0.327641, (float)0.483696, (float)0.725390, (float)1.052730,  
   (float)0.282109, (float)0.577007, (float)0.785801, (float)1.004680,  
   (float)0.140767, (float)0.443917, (float)0.794887, (float)1.086690,  
   (float)0.206239, (float)0.335066, (float)0.745318, (float)1.417410,  
   (float)0.274522, (float)0.480329, (float)0.651926, (float)0.816929,  
   (float)0.350204, (float)0.496322, (float)0.636791, (float)0.885560,  
   (float)0.330776, (float)0.466553, (float)0.583557, (float)0.697490,  
   (float)0.237715, (float)0.362728, (float)0.567326, (float)1.069130,  
   (float)0.362405, (float)0.550058, (float)0.759607, (float)1.000590,  
   (float)0.290359, (float)0.442314, (float)0.741368, (float)0.994651,  
   (float)0.240579, (float)0.374307, (float)0.528460, (float)0.667139,  
   (float)0.234118, (float)0.445188, (float)0.830313, (float)1.176900,  
   (float)0.378160, (float)0.528863, (float)0.730298, (float)1.123500,  
   (float)0.247956, (float)0.445345, (float)0.685440, (float)1.106480,  
   (float)0.432718, (float)0.744013, (float)1.077080, (float)1.414300,  
   (float)0.337779, (float)0.596588, (float)1.016300, (float)1.460950,  
   (float)0.364708, (float)0.512622, (float)0.650087, (float)0.784056,  
   (float)0.364291, (float)0.693579, (float)1.209610, (float)1.533230,  
   (float)0.151261, (float)0.261040, (float)0.499646, (float)0.865944,  
   (float)0.350846, (float)0.601512, (float)0.925081, (float)1.114450,  
   (float)0.289558, (float)0.511687, (float)0.836803, (float)1.284560,  
   (float)0.233228, (float)0.368894, (float)0.609766, (float)0.989328,  
   (float)0.442610, (float)0.622621, (float)0.782216, (float)1.032520,  
   (float)0.356632, (float)0.592695, (float)0.933429, (float)1.393480,  
   (float)0.265703, (float)0.534104, (float)0.907613, (float)1.260480,  
   (float)0.261117, (float)0.396453, (float)0.571838, (float)0.876124,  
   (float)0.223984, (float)0.362642, (float)0.548252, (float)0.696006,  
   (float)0.317838, (float)0.458345, (float)0.595784, (float)0.852669,  
   (float)0.221694, (float)0.482719, (float)0.694519, (float)0.960166,  
   (float)0.352454, (float)0.495550, (float)0.633071, (float)0.800032,  
   (float)0.265361, (float)0.384416, (float)0.514781, (float)0.807679,  
   (float)0.395351, (float)0.623072, (float)0.869142, (float)1.230800,  
   (float)0.217981, (float)0.352494, (float)0.740091, (float)1.318740,  
   (float)0.211968, (float)0.350316, (float)0.583658, (float)0.960925,  
   (float)0.223580, (float)0.449412, (float)0.819841, (float)1.051100,  
   (float)0.225638, (float)0.355323, (float)0.507619, (float)0.647657,  
   (float)0.416412, (float)0.584351, (float)0.734927, (float)0.939428,  
   (float)0.295102, (float)0.430837, (float)0.609901, (float)0.841384,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          76 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.171453, (float)0.512209, (float)0.825464, (float)1.107900,  
   (float)0.180176, (float)0.508256, (float)0.786524, (float)1.065700,  
   (float)0.361125, (float)0.641436, (float)1.123030, (float)1.361410,  
   (float)0.278154, (float)0.414153, (float)0.644463, (float)0.867737,  
   (float)0.286774, (float)0.417920, (float)0.588005, (float)0.973405,  
   (float)0.448011, (float)0.663086, (float)0.829084, (float)0.987429,  
   (float)0.393621, (float)0.719941, (float)1.057670, (float)1.241950,  
   (float)0.220710, (float)0.377698, (float)0.552393, (float)0.823030,  
   (float)0.340693, (float)0.598259, (float)1.057340, (float)1.394240,  
   (float)0.215992, (float)0.333914, (float)0.610878, (float)1.246830,  
   (float)0.194584, (float)0.348828, (float)0.566256, (float)0.761554,  
   (float)0.307794, (float)0.461764, (float)0.606802, (float)0.817532,  
   (float)0.213036, (float)0.349854, (float)0.640137, (float)1.028570,  
   (float)0.310428, (float)0.535932, (float)0.836986, (float)1.032430,  
   (float)0.276045, (float)0.449816, (float)0.632854, (float)1.000380,  
   (float)0.395426, (float)0.672081, (float)1.075380, (float)1.398740,  
   (float)0.240515, (float)0.493541, (float)0.782142, (float)1.096500,  
   (float)0.260876, (float)0.384111, (float)0.570481, (float)1.015690,  
   (float)0.230396, (float)0.353937, (float)0.614675, (float)1.195460,  
   (float)0.337235, (float)0.478936, (float)0.605436, (float)0.806775,  
   (float)0.332199, (float)0.484704, (float)0.631721, (float)0.770580,  
   (float)0.294924, (float)0.486475, (float)0.656571, (float)0.981506,  
   (float)0.216990, (float)0.457037, (float)0.722512, (float)0.902017,  
   (float)0.284226, (float)0.422374, (float)0.648519, (float)1.113270,  
   (float)0.253116, (float)0.414147, (float)0.809672, (float)1.233420,  
   (float)0.300220, (float)0.450924, (float)0.679319, (float)0.849148,  
   (float)0.305775, (float)0.540062, (float)0.792073, (float)1.068460,  
   (float)0.404279, (float)0.616651, (float)0.907758, (float)1.190180,  
   (float)0.443350, (float)0.804287, (float)1.085120, (float)1.276400,  
   (float)0.162614, (float)0.274802, (float)0.456885, (float)0.716746,  
   (float)0.238674, (float)0.438004, (float)0.624117, (float)0.873535,  
   (float)0.376114, (float)0.581688, (float)0.868368, (float)1.211090,  
   (float)0.287190, (float)0.621898, (float)0.963364, (float)1.221660,  
   (float)0.207698, (float)0.367431, (float)0.572169, (float)0.883986,  
   (float)0.383737, (float)0.561236, (float)0.713456, (float)0.925771,  
   (float)0.377351, (float)0.562596, (float)0.813943, (float)1.172740,  
   (float)0.241371, (float)0.379564, (float)0.553394, (float)0.879274,  
   (float)0.193761, (float)0.322787, (float)0.518543, (float)0.864487,  
   (float)0.237419, (float)0.486870, (float)0.869993, (float)1.131770,  
   (float)0.412182, (float)0.761583, (float)1.221660, (float)1.480230,  
   (float)0.278553, (float)0.420023, (float)0.582928, (float)0.767932,  
   (float)0.225913, (float)0.513020, (float)0.952287, (float)1.201890,  
   (float)0.345653, (float)0.524101, (float)0.664950, (float)0.805983,  
   (float)0.302893, (float)0.503915, (float)0.838085, (float)1.192750,  
   (float)0.208819, (float)0.378940, (float)0.593233, (float)0.759625,  
   (float)0.288905, (float)0.419523, (float)0.552045, (float)0.798286,  
   (float)0.163483, (float)0.287461, (float)0.574985, (float)1.028030,  
   (float)0.205764, (float)0.382652, (float)0.815303, (float)1.275570,  
   (float)0.177181, (float)0.317777, (float)0.613485, (float)0.852938,  
   (float)0.238768, (float)0.358592, (float)0.519032, (float)0.900033,  
   (float)0.419025, (float)0.690666, (float)1.009890, (float)1.373610,  
   (float)0.331661, (float)0.505046, (float)0.766129, (float)1.106780,  
   (float)0.203885, (float)0.326858, (float)0.669715, (float)1.353620,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          77 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)0.313537, (float)0.624041, (float)0.863969, (float)1.033760,  
   (float)0.285077, (float)0.548300, (float)0.753999, (float)0.933963,  
   (float)0.207852, (float)0.364360, (float)0.652846, (float)0.898249,  
   (float)0.186344, (float)0.325463, (float)0.577631, (float)0.886636,  
   (float)0.197167, (float)0.351888, (float)0.606579, (float)0.859715,  
   (float)0.182318, (float)0.298750, (float)0.448484, (float)0.752458,  
   (float)0.379122, (float)0.633034, (float)1.000010, (float)1.389500,  
   (float)0.326422, (float)0.465367, (float)0.633202, (float)0.794926,  
   (float)0.238341, (float)0.378895, (float)0.625214, (float)0.848103,  
   (float)0.228674, (float)0.365911, (float)0.669809, (float)1.091540,  
   (float)0.240136, (float)0.363765, (float)0.507761, (float)0.810138,  
   (float)0.230204, (float)0.476376, (float)0.845270, (float)1.276780,  
   (float)0.305111, (float)0.443126, (float)0.636449, (float)1.060780,  
   (float)0.222737, (float)0.357285, (float)0.533485, (float)0.871052,  
   (float)0.252152, (float)0.460703, (float)0.658246, (float)0.903143,  
   (float)0.373276, (float)0.578358, (float)0.881072, (float)1.153370,  
   (float)0.269512, (float)0.417899, (float)0.568729, (float)0.834819,  
   (float)0.243124, (float)0.594945, (float)0.894623, (float)1.195720,  
   (float)0.190975, (float)0.337767, (float)0.609678, (float)0.992139,  
   (float)0.186931, (float)0.348042, (float)0.686939, (float)0.954866,  
   (float)0.205108, (float)0.339660, (float)0.530568, (float)0.721792,  
   (float)0.224848, (float)0.356705, (float)0.611404, (float)1.086950,  
   (float)0.309997, (float)0.705889, (float)1.058540, (float)1.375030,  
   (float)0.171360, (float)0.285328, (float)0.522052, (float)1.124250,  
   (float)0.255357, (float)0.595823, (float)0.936216, (float)1.294790,  
   (float)0.293221, (float)0.567021, (float)0.795158, (float)1.163280,  
   (float)0.196983, (float)0.315855, (float)0.613166, (float)1.294320,  
   (float)0.240770, (float)0.448439, (float)0.652459, (float)0.836251,  
   (float)0.333000, (float)0.527299, (float)0.802583, (float)1.169380,  
   (float)0.391111, (float)0.607495, (float)0.952656, (float)1.251230,  
   (float)0.304561, (float)0.442813, (float)0.703306, (float)0.946841,  
   (float)0.165375, (float)0.287408, (float)0.559972, (float)0.915385,  
   (float)0.333372, (float)0.547454, (float)0.732493, (float)0.904448,  
   (float)0.206904, (float)0.391644, (float)0.653542, (float)0.938004,  
   (float)0.211758, (float)0.450511, (float)0.733287, (float)1.105820,  
   (float)0.173767, (float)0.307308, (float)0.609107, (float)0.959360,  
   (float)0.148573, (float)0.257316, (float)0.501376, (float)0.948902,  
   (float)0.261661, (float)0.386298, (float)0.530837, (float)0.867728,  
   (float)0.198589, (float)0.320144, (float)0.545287, (float)1.072570,  
   (float)0.183157, (float)0.300205, (float)0.485251, (float)0.911155,  
   (float)0.362790, (float)0.503869, (float)0.670039, (float)0.966991,  
   (float)0.232049, (float)0.421937, (float)0.599018, (float)0.778884,  
   (float)0.229985, (float)0.519527, (float)0.743088, (float)0.980934,  
   (float)0.243341, (float)0.375008, (float)0.529225, (float)0.840748,  
   (float)0.337687, (float)0.479483, (float)0.665032, (float)0.856526,  
   (float)0.316251, (float)0.456972, (float)0.658311, (float)0.942116,  
   (float)0.196493, (float)0.399757, (float)0.665578, (float)1.095230,  
   (float)1.713300, (float)1.998430, (float)2.168780,  
   (float)1.609200, (float)1.965220, (float)2.298960,  
   (float)1.160660, (float)1.629370, (float)1.835390,  
   (float)1.487750, (float)1.834220, (float)2.010250,  
   (float)1.724300, (float)1.924400, (float)2.187320,  
   (float)0.954788, (float)1.306160, (float)1.928130,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          78 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.498380, (float)1.740500, (float)1.919960,  
   (float)1.563320, (float)2.003460, (float)2.238800,  
   (float)1.196470, (float)1.541940, (float)2.005960,  
   (float)0.863912, (float)1.434970, (float)1.946670,  
   (float)1.086720, (float)1.377400, (float)1.572100,  
   (float)1.175780, (float)1.907540, (float)2.197730,  
   (float)1.098250, (float)1.537270, (float)1.873990,  
   (float)1.596120, (float)1.766580, (float)1.967860,  
   (float)1.574540, (float)1.883560, (float)2.185270,  
   (float)0.899967, (float)1.462110, (float)1.881880,  
   (float)1.458890, (float)1.795750, (float)2.085350,  
   (float)1.026730, (float)1.405800, (float)1.871120,  
   (float)0.974725, (float)1.500000, (float)1.870040,  
   (float)1.312790, (float)1.529380, (float)1.892850,  
   (float)1.495670, (float)1.664300, (float)1.873930,  
   (float)0.866774, (float)1.245980, (float)1.844460,  
   (float)1.010130, (float)1.215840, (float)1.797480,  
   (float)1.107850, (float)1.415060, (float)1.687180,  
   (float)1.510570, (float)1.680220, (float)1.911870,  
   (float)1.423590, (float)1.594710, (float)1.857830,  
   (float)1.243230, (float)1.459150, (float)1.794510,  
   (float)1.589730, (float)1.769560, (float)2.017390,  
   (float)1.130030, (float)1.272470, (float)1.425640,  
   (float)1.290910, (float)1.576890, (float)1.888680,  
   (float)1.550860, (float)2.010780, (float)2.346330,  
   (float)1.008340, (float)1.286160, (float)1.692730,  
   (float)1.454790, (float)1.667270, (float)2.104170,  
   (float)1.442660, (float)1.908350, (float)2.231940,  
   (float)1.402480, (float)1.673070, (float)2.008240,  
   (float)0.859212, (float)1.345480, (float)1.736730,  
   (float)1.293190, (float)1.467450, (float)1.884070,  
   (float)1.325600, (float)1.497820, (float)1.932780,  
   (float)1.029290, (float)1.439160, (float)1.946450,  
   (float)1.234560, (float)1.771860, (float)1.995480,  
   (float)1.088830, (float)1.330520, (float)1.649160,  
   (float)1.158780, (float)1.299590, (float)1.446230,  
   (float)1.704930, (float)1.983170, (float)2.291760,  
   (float)0.908817, (float)1.561420, (float)1.896080,  
   (float)1.427650, (float)1.715650, (float)1.973060,  
   (float)1.139540, (float)1.315880, (float)1.795210,  
   (float)1.333700, (float)1.570930, (float)1.806840,  
   (float)1.360340, (float)1.725530, (float)2.049290,  
   (float)1.060760, (float)1.439910, (float)1.725370,  
   (float)1.428680, (float)1.667300, (float)1.967870,  
   (float)1.277390, (float)1.571840, (float)1.745770,  
   (float)1.094340, (float)1.493560, (float)1.691460,  
   (float)1.572780, (float)1.812180, (float)1.984310,  
   (float)1.255840, (float)1.419970, (float)1.776750,  
   (float)1.161430, (float)1.512400, (float)1.777710,  
   (float)1.476060, (float)1.854230, (float)2.173240,  
   (float)0.956615, (float)1.470850, (float)1.939230,  
   (float)0.968590, (float)1.395650, (float)1.910210,  
   (float)1.391550, (float)1.661880, (float)1.933670,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          79 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.497500, (float)1.872320, (float)2.051620,  
   (float)1.390960, (float)1.562000, (float)1.777980,  
   (float)0.996004, (float)1.302020, (float)1.502360,  
   (float)1.310250, (float)1.482710, (float)1.784940,  
   (float)0.898902, (float)1.166880, (float)1.847150,  
   (float)1.149620, (float)1.349650, (float)1.934780,  
   (float)1.281240, (float)1.586270, (float)1.839050,  
   (float)1.099360, (float)1.382880, (float)1.811380,  
   (float)1.268980, (float)1.617590, (float)1.907970,  
   (float)1.410420, (float)1.591060, (float)1.897540,  
   (float)1.431680, (float)1.588880, (float)1.760780,  
   (float)0.945238, (float)1.215640, (float)1.898120,  
   (float)0.805674, (float)1.118850, (float)1.762360,  
   (float)0.965613, (float)1.439480, (float)1.842700,  
   (float)0.865688, (float)1.214250, (float)1.926520,  
   (float)0.989231, (float)1.365260, (float)1.979580,  
   (float)1.459860, (float)1.766590, (float)1.946220,  
   (float)1.130590, (float)1.563860, (float)1.755620,  
   (float)1.297250, (float)1.678910, (float)1.920780,  
   (float)1.423430, (float)1.588110, (float)1.811490,  
   (float)1.147040, (float)1.315200, (float)1.612370,  
   (float)1.391870, (float)1.869830, (float)2.161210,  
   (float)1.049640, (float)1.313200, (float)2.001230,  
   (float)0.870711, (float)1.118620, (float)1.778760,  
   (float)0.980549, (float)1.497050, (float)1.803160,  
   (float)1.427950, (float)1.694210, (float)2.049600,  
   (float)1.038450, (float)1.211830, (float)1.404320,  
   (float)1.139220, (float)1.338950, (float)1.857920,  
   (float)0.995399, (float)1.161580, (float)1.449670,  
   (float)1.120350, (float)1.302790, (float)1.732800,  
   (float)1.250180, (float)1.723040, (float)1.925280,  
   (float)1.369660, (float)1.538260, (float)1.737700,  
   (float)1.342040, (float)1.588740, (float)1.764170,  
   (float)1.188920, (float)1.473920, (float)1.704040,  
   (float)1.440080, (float)1.752010, (float)2.116130,  
   (float)1.164430, (float)1.475100, (float)1.956180,  
   (float)1.644780, (float)1.860170, (float)2.195380,  
   (float)1.243230, (float)1.478480, (float)1.851430,  
   (float)1.186760, (float)1.659760, (float)1.888320,  
   (float)1.150280, (float)1.417270, (float)1.606190,  
   (float)1.275630, (float)1.726020, (float)2.073170,  
   (float)1.185380, (float)1.791580, (float)2.052510,  
   (float)1.451660, (float)1.751920, (float)1.997990,  
   (float)1.406650, (float)1.631160, (float)1.841560,  
   (float)1.135290, (float)1.301540, (float)1.486120,  
   (float)1.720630, (float)2.096020, (float)2.390570,  
   (float)1.245470, (float)1.388700, (float)1.542840,  
   (float)1.551700, (float)1.724820, (float)2.043780,  
   (float)1.650390, (float)2.031990, (float)2.272790,  
   (float)1.393470, (float)1.563380, (float)1.822930,  
   (float)0.953729, (float)1.124510, (float)1.538800,  
   (float)0.873221, (float)1.435970, (float)2.043180,  
   (float)1.010550, (float)1.385640, (float)1.688060,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          80 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.679850, (float)1.840340, (float)2.012720,  
   (float)1.153360, (float)1.412120, (float)1.812540,  
   (float)1.293720, (float)1.620780, (float)1.956670,  
   (float)1.537200, (float)1.768520, (float)1.948260,  
   (float)1.438970, (float)1.686500, (float)1.922450,  
   (float)1.479910, (float)1.857410, (float)2.276440,  
   (float)1.233140, (float)1.649090, (float)1.951670,  
   (float)1.280280, (float)1.443250, (float)1.829440,  
   (float)1.377640, (float)1.608860, (float)1.928580,  
   (float)1.070250, (float)1.246770, (float)1.428620,  
   (float)0.860154, (float)1.427810, (float)1.821160,  
   (float)1.212420, (float)1.429980, (float)1.676490,  
   (float)1.136270, (float)1.310490, (float)1.673930,  
   (float)0.999922, (float)1.191970, (float)1.381040,  
   (float)1.569610, (float)1.820850, (float)2.067630,  
   (float)1.143710, (float)1.484610, (float)1.885850,  
   (float)1.095910, (float)1.377020, (float)1.883880,  
   (float)1.559660, (float)1.731720, (float)1.985110,  
   (float)0.922973, (float)1.180780, (float)1.633810,  
   (float)1.057990, (float)1.309350, (float)1.713630,  
   (float)1.222060, (float)1.538890, (float)1.720320,  
   (float)1.171970, (float)1.340140, (float)1.667620,  
   (float)1.557260, (float)1.752540, (float)2.111950,  
   (float)1.283260, (float)1.519050, (float)1.696730,  
   (float)1.556110, (float)1.723500, (float)1.937230,  
   (float)1.516620, (float)1.821930, (float)2.203970,  
   (float)1.339510, (float)1.618250, (float)1.827910,  
   (float)1.470830, (float)1.653290, (float)2.015930,  
   (float)1.364270, (float)1.533720, (float)1.835590,  
   (float)1.140270, (float)1.365580, (float)1.564840,  
   (float)1.755860, (float)1.947830, (float)2.124390,  
   (float)0.930625, (float)1.426890, (float)1.782660,  
   (float)1.551960, (float)1.845230, (float)2.018480,  
   (float)1.216670, (float)1.599880, (float)2.077320,  
   (float)1.398250, (float)1.697300, (float)1.886650,  
   (float)1.721920, (float)1.893790, (float)2.060440,  
   (float)1.569720, (float)1.877540, (float)2.276330,  
   (float)0.952989, (float)1.326960, (float)1.677790,  
   (float)1.329340, (float)1.496330, (float)1.868850,  
   (float)1.017970, (float)1.556880, (float)1.769450,  
   (float)1.316210, (float)1.480590, (float)1.676510,  
   (float)1.412110, (float)1.564200, (float)1.723480,  
   (float)0.948852, (float)1.389670, (float)2.062760,  
   (float)1.104020, (float)1.246490, (float)1.399290,  
   (float)1.501460, (float)1.692570, (float)2.049170,  
   (float)1.327360, (float)1.559960, (float)1.853210,  
   (float)1.547360, (float)1.714840, (float)1.892890,  
   (float)1.381870, (float)1.633500, (float)1.978170,  
   (float)1.601150, (float)1.874140, (float)2.117910,  
   (float)1.160450, (float)1.334510, (float)1.513380,  
   (float)1.004480, (float)1.701300, (float)1.961240,  
   (float)1.207670, (float)1.520580, (float)1.938630,  
   (float)1.088940, (float)1.463350, (float)1.925130,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          81 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.026220, (float)1.558010, (float)1.848390,  
   (float)1.689060, (float)1.930320, (float)2.093670,  
   (float)1.151270, (float)1.419760, (float)1.921540,  
   (float)0.954364, (float)1.183940, (float)1.820380,  
   (float)1.316190, (float)1.689080, (float)1.874560,  
   (float)1.329200, (float)1.572260, (float)2.076720,  
   (float)1.219420, (float)1.398380, (float)1.798360,  
   (float)0.942349, (float)1.204700, (float)1.432660,  
   (float)1.501120, (float)1.754650, (float)2.060490,  
   (float)1.402560, (float)1.732220, (float)2.086180,  
   (float)1.248970, (float)1.420720, (float)1.705530,  
   (float)1.438460, (float)1.623050, (float)1.989700,  
   (float)1.632930, (float)1.808050, (float)2.037740,  
   (float)1.738600, (float)2.040990, (float)2.242500,  
   (float)1.206870, (float)1.487230, (float)1.759340,  
   (float)1.036770, (float)1.181130, (float)1.343220,  
   (float)1.056890, (float)1.250210, (float)1.745300,  
   (float)1.578920, (float)1.938800, (float)2.230170,  
   (float)1.093800, (float)1.278370, (float)1.687500,  
   (float)1.459150, (float)1.707370, (float)2.010630,  
   (float)0.856362, (float)1.315540, (float)2.103710,  
   (float)1.015340, (float)1.181760, (float)1.534780,  
   (float)1.379600, (float)1.897290, (float)2.089630,  
   (float)1.269070, (float)1.466400, (float)1.704310,  
   (float)1.016500, (float)1.221470, (float)1.470800,  
   (float)1.658050, (float)1.931380, (float)2.250970,  
   (float)1.071290, (float)1.216180, (float)1.375920,  
   (float)1.842960, (float)2.080430, (float)2.281200,  
   (float)1.058520, (float)1.732610, (float)2.034590,  
   (float)0.993163, (float)1.581590, (float)1.970320,  
   (float)1.068340, (float)1.397730, (float)1.624700,  
   (float)1.101080, (float)1.681660, (float)1.904070,  
   (float)0.857539, (float)1.197350, (float)1.635640,  
   (float)1.165190, (float)1.564020, (float)1.851300,  
   (float)1.233670, (float)1.397810, (float)1.740240,  
   (float)1.217740, (float)1.548220, (float)1.764960,  
   (float)1.128060, (float)1.410960, (float)1.751330,  
   (float)1.034230, (float)1.343940, (float)1.899620,  
   (float)1.091990, (float)1.518030, (float)1.762130,  
   (float)1.163660, (float)1.541450, (float)1.908740,  
   (float)1.501620, (float)1.738260, (float)1.994550,  
   (float)1.119250, (float)1.844110, (float)2.120050,  
   (float)0.856926, (float)1.250270, (float)1.722770,  
   (float)1.230560, (float)1.493700, (float)1.684990,  
   (float)1.394560, (float)1.560240, (float)1.870010,  
   (float)1.278990, (float)1.699720, (float)1.988560,  
   (float)1.354770, (float)1.766770, (float)2.146370,  
   (float)1.704680, (float)1.885760, (float)2.134360,  
   (float)1.142140, (float)1.384680, (float)2.004530,  
   (float)1.217610, (float)1.506740, (float)1.811920,  
   (float)1.788990, (float)1.989260, (float)2.175380,  
   (float)1.217360, (float)1.391280, (float)1.850580,  
   (float)1.032830, (float)1.268430, (float)1.455970,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          82 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.430290, (float)1.806250, (float)1.988070,  
   (float)1.059280, (float)1.386370, (float)1.760250,  
   (float)1.047310, (float)1.432770, (float)1.818960,  
   (float)0.956135, (float)1.585090, (float)1.828480,  
   (float)1.667630, (float)1.958110, (float)2.140520,  
   (float)1.498480, (float)1.970390, (float)2.180540,  
   (float)1.093790, (float)1.282070, (float)1.790480,  
   (float)1.321460, (float)1.539200, (float)1.773840,  
   (float)1.634160, (float)1.922470, (float)2.182770,  
   (float)1.647930, (float)1.887580, (float)2.053070,  
   (float)0.943701, (float)1.426850, (float)1.666640,  
   (float)1.471400, (float)1.788120, (float)2.035900,  
   (float)1.063100, (float)1.564970, (float)1.916000,  
   (float)1.176270, (float)1.338640, (float)1.559550,  
   (float)1.284350, (float)1.648910, (float)1.840620,  
   (float)0.901137, (float)1.294360, (float)1.876860,  
   (float)1.269700, (float)1.506080, (float)1.804700,  
   (float)1.316520, (float)1.670080, (float)2.113500,  
   (float)1.091030, (float)1.444660, (float)1.631130,  
   (float)1.417390, (float)1.642850, (float)1.896980,  
   (float)1.266060, (float)1.529530, (float)1.906050,  
   (float)1.276910, (float)1.496340, (float)2.043080,  
   (float)1.184780, (float)1.363900, (float)1.607130,  
   (float)1.349070, (float)1.491150, (float)1.641000,  
   (float)1.121060, (float)1.486290, (float)1.836440,  
   (float)1.274620, (float)1.526700, (float)1.855410,  
   (float)1.492900, (float)1.805690, (float)2.125490,  
   (float)1.382850, (float)1.694760, (float)1.965370,  
   (float)1.397510, (float)1.702250, (float)2.145220,  
   (float)1.103180, (float)1.346690, (float)1.758730,  
   (float)1.101240, (float)1.432240, (float)1.856460,  
   (float)1.135430, (float)1.463660, (float)1.736780,  
   (float)1.512080, (float)1.806650, (float)2.067890,  
   (float)0.900379, (float)1.512730, (float)1.829310,  
   (float)0.926214, (float)1.270950, (float)1.622950,  
   (float)1.385210, (float)1.527470, (float)1.681390,  
   (float)1.530060, (float)1.776840, (float)2.016640,  
   (float)0.989253, (float)1.237080, (float)1.643390,  
   (float)0.922444, (float)1.142890, (float)1.743210,  
   (float)1.257620, (float)1.467760, (float)1.648640,  
   (float)1.042470, (float)1.524210, (float)2.015950,  
   (float)1.367450, (float)1.664590, (float)1.837290,  
   (float)1.367070, (float)1.800720, (float)2.003030,  
   (float)0.995690, (float)1.295550, (float)1.770390,  
   (float)1.523770, (float)1.852460, (float)2.102790,  
   (float)1.017500, (float)1.207030, (float)1.699550,  
   (float)1.063900, (float)1.511100, (float)1.815800,  
   (float)1.248540, (float)1.668610, (float)1.882100,  
   (float)1.387520, (float)1.763570, (float)1.953420,  
   (float)0.811853, (float)1.206810, (float)1.788600,  
   (float)0.994768, (float)1.235730, (float)1.418800,  
   (float)1.419980, (float)1.737110, (float)1.916380,  
   (float)1.367380, (float)1.662820, (float)1.886500,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          83 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.098490, (float)1.274380, (float)1.534140,  
   (float)1.458020, (float)1.738350, (float)2.053830,  
   (float)1.408830, (float)1.726640, (float)2.017050,  
   (float)1.188500, (float)1.429330, (float)1.777620,  
   (float)1.486770, (float)1.657140, (float)1.955830,  
   (float)0.968657, (float)1.192200, (float)1.579680,  
   (float)1.211260, (float)1.357450, (float)1.514190,  
   (float)1.273620, (float)1.571890, (float)1.998610,  
   (float)1.475030, (float)1.710170, (float)1.953680,  
   (float)0.951772, (float)1.110700, (float)1.330720,  
   (float)1.173150, (float)1.577460, (float)1.807060,  
   (float)1.114170, (float)1.519680, (float)2.090900,  
   (float)1.077310, (float)1.589490, (float)1.808030,  
   (float)0.910319, (float)1.202470, (float)1.958470,  
   (float)0.917247, (float)1.582350, (float)2.144790,  
   (float)1.058230, (float)1.238800, (float)1.569680,  
   (float)1.233400, (float)1.461090, (float)1.989260,  
   (float)1.025470, (float)1.616190, (float)2.089000,  
   (float)1.207120, (float)1.376650, (float)1.702510,  
   (float)1.414110, (float)1.852470, (float)2.043770,  
   (float)0.914873, (float)1.379470, (float)1.979860,  
   (float)1.289230, (float)1.615090, (float)1.797370,  
   (float)1.089230, (float)1.314120, (float)1.844980,  
   (float)1.253740, (float)1.423270, (float)1.893360,  
   (float)1.312780, (float)1.625640, (float)1.872630,  
   (float)1.351240, (float)1.706820, (float)2.003320,  
   (float)1.657070, (float)2.035420, (float)2.347300,  
   (float)0.899850, (float)1.203740, (float)1.533730,  
   (float)0.889645, (float)1.072140, (float)1.538460,  
   (float)1.139200, (float)1.356790, (float)1.705030,  
   (float)1.188680, (float)1.603720, (float)1.973270,  
   (float)0.973071, (float)1.174970, (float)1.739750,  
   (float)1.549670, (float)1.834330, (float)2.143580,  
   (float)1.237470, (float)1.581330, (float)1.933350,  
   (float)1.192010, (float)1.596220, (float)1.894840,  
   (float)0.934669, (float)1.233160, (float)1.693710,  
   (float)0.837551, (float)1.149310, (float)1.863980,  
   (float)1.278200, (float)1.421200, (float)1.576520,  
   (float)1.194700, (float)1.376720, (float)1.557260,  
   (float)0.872668, (float)1.305270, (float)1.661970,  
   (float)1.228670, (float)1.627300, (float)1.834980,  
   (float)1.154300, (float)1.410050, (float)1.860000,  
   (float)1.215420, (float)1.527560, (float)1.875180,  
   (float)1.371880, (float)1.618420, (float)1.878120,  
   (float)0.920164, (float)1.371570, (float)1.620020,  
   (float)1.343840, (float)1.507450, (float)1.702820,  
   (float)1.367480, (float)1.583650, (float)1.842990,  
   (float)0.923765, (float)1.115510, (float)1.644000,  
   (float)1.461150, (float)1.861050, (float)2.100960,  
   (float)1.407330, (float)1.606230, (float)2.044290,  
   (float)0.963449, (float)1.744540, (float)2.090700,  
   (float)1.005530, (float)1.400330, (float)1.598740,  
   (float)1.082730, (float)1.300170, (float)1.913850,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          84 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.349930, (float)1.575400, (float)1.891760,  
   (float)1.334630, (float)1.662080, (float)1.973860,  
   (float)1.310010, (float)1.480390, (float)1.731310,  
   (float)1.516630, (float)1.891260, (float)2.219580,  
   (float)1.113490, (float)1.736190, (float)1.978320,  
   (float)1.674320, (float)1.848230, (float)2.084450,  
   (float)1.322240, (float)1.542030, (float)1.724000,  
   (float)1.374630, (float)1.546690, (float)1.930370,  
   (float)0.927607, (float)1.641730, (float)1.967470,  
   (float)1.164050, (float)1.400400, (float)1.666850,  
   (float)1.038950, (float)1.354820, (float)1.820580,  
   (float)0.835815, (float)1.300620, (float)1.799790,  
   (float)1.052590, (float)1.311090, (float)1.781860,  
   (float)0.965226, (float)1.346400, (float)1.553040,  
   (float)1.191040, (float)1.376290, (float)1.893440,  
   (float)0.932579, (float)1.128760, (float)1.431540,  
   (float)1.341100, (float)1.501940, (float)1.816750,  
   (float)1.344680, (float)1.640830, (float)2.025350,  
   (float)0.942496, (float)1.359020, (float)1.744210,  
   (float)1.110670, (float)1.606860, (float)1.871710,  
   (float)1.189140, (float)1.466450, (float)1.642710,  
   (float)1.282350, (float)1.522810, (float)1.754560,  
   (float)1.503720, (float)1.795240, (float)1.972470,  
   (float)0.843195, (float)1.316650, (float)2.002630,  
   (float)1.257110, (float)1.490980, (float)1.746620,  
   (float)0.953531, (float)1.261140, (float)1.476750,  
   (float)1.215620, (float)1.403780, (float)1.947220,  
   (float)0.940465, (float)1.269250, (float)1.816700,  
   (float)1.306490, (float)1.833730, (float)2.208340,  
   (float)1.022170, (float)1.273230, (float)1.917560,  
   (float)0.836897, (float)1.351360, (float)1.870650,  
   (float)1.594230, (float)1.755330, (float)1.925050,  
   (float)1.375910, (float)1.664220, (float)2.070260,  
   (float)1.108180, (float)1.618000, (float)2.017860,  
   (float)1.432490, (float)1.807780, (float)2.141390,  
   (float)0.968169, (float)1.491750, (float)1.720090,  
   (float)1.152080, (float)1.371880, (float)1.770970,  
   (float)1.314590, (float)1.766490, (float)1.967330,  
   (float)0.903361, (float)1.564580, (float)2.061490,  
   (float)1.025670, (float)1.345810, (float)1.642650,  
   (float)1.047190, (float)1.481020, (float)1.866350,  
   (float)1.246740, (float)1.423530, (float)1.834480,  
   (float)1.416580, (float)1.772830, (float)2.048010,  
   (float)1.481150, (float)1.765090, (float)2.169520,  
   (float)0.971060, (float)1.474020, (float)2.009750,  
   (float)1.274320, (float)1.436560, (float)1.734520,  
   (float)1.269490, (float)1.555970, (float)1.792390,  
   (float)1.174460, (float)1.339430, (float)1.735480,  
   (float)1.195620, (float)1.455400, (float)1.883650,  
   (float)0.961471, (float)1.659130, (float)2.035140,  
   (float)0.862112, (float)1.167900, (float)1.715370,  
   (float)1.727030, (float)1.977630, (float)2.233360,  
   (float)1.107920, (float)1.476890, (float)2.003820,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          85 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.140570, (float)1.466090, (float)1.666980,  
   (float)0.974254, (float)1.635430, (float)1.898170,  
   (float)1.335570, (float)1.505850, (float)1.760070,  
   (float)1.062830, (float)1.230500, (float)1.492350,  
   (float)0.838003, (float)1.201550, (float)2.010510,  
   (float)1.002010, (float)1.530100, (float)1.912670,  
   (float)1.465640, (float)1.634720, (float)1.859480,  
   (float)0.859433, (float)1.082070, (float)1.675250,  
   (float)0.916879, (float)1.297520, (float)1.743140,  
   (float)1.831510, (float)2.136670, (float)2.362780,  
   (float)1.060400, (float)1.636130, (float)1.947960,  
   (float)1.057040, (float)1.301630, (float)1.502360,  
   (float)1.207690, (float)1.374960, (float)1.651790,  
   (float)1.188870, (float)1.436060, (float)2.050280,  
   (float)1.628560, (float)1.810320, (float)2.114100,  
   (float)1.642270, (float)1.989170, (float)2.206450,  
   (float)1.327970, (float)1.607950, (float)1.914560,  
   (float)0.859655, (float)1.322800, (float)1.934300,  
   (float)0.902344, (float)1.346090, (float)1.808110,  
   (float)1.026910, (float)1.453460, (float)1.665640,  
   (float)1.336420, (float)1.598920, (float)1.969740,  
   (float)1.620610, (float)1.925410, (float)2.105720,  
   (float)1.812060, (float)2.020100, (float)2.233460,  
   (float)1.041350, (float)1.636020, (float)1.860820,  
   (float)1.575540, (float)1.961290, (float)2.146850,  
   (float)1.522740, (float)1.697010, (float)1.946440,  
   (float)1.584310, (float)1.788870, (float)2.183180,  
   (float)1.169440, (float)1.703480, (float)1.934130,  
   (float)1.469060, (float)1.617360, (float)1.775930,  
   (float)1.229640, (float)1.552460, (float)1.828420,  
   (float)1.151050, (float)1.706680, (float)2.128580,  
   (float)1.286520, (float)1.456160, (float)1.772170,  
   (float)1.422780, (float)1.797460, (float)2.223560,  
   (float)0.902610, (float)1.215380, (float)1.773280,  
   (float)1.362020, (float)1.532790, (float)1.789620,  
   (float)1.123760, (float)1.538750, (float)1.813570,  
   (float)1.260440, (float)1.863340, (float)2.115610,  
   (float)1.241310, (float)1.474700, (float)1.911100,  
   (float)0.998321, (float)1.477200, (float)2.095140,  
   (float)1.310860, (float)1.456070, (float)1.615460,  
   (float)0.909781, (float)1.067590, (float)1.385890,  
   (float)1.450790, (float)1.613170, (float)1.889390,  
   (float)1.001860, (float)1.427500, (float)1.781650,  
   (float)1.343080, (float)1.647250, (float)1.931230,  
   (float)1.137480, (float)1.610540, (float)1.927670,  
   (float)1.047410, (float)1.259320, (float)1.843240,  
   (float)1.335000, (float)1.519920, (float)1.998130,  
   (float)1.218640, (float)1.600500, (float)1.783180,  
   (float)1.097100, (float)1.447780, (float)1.785570,  
   (float)1.098600, (float)1.276740, (float)1.464330,  
   (float)1.362150, (float)1.528600, (float)1.883980,  
   (float)1.380760, (float)1.800930, (float)2.086540,  
   (float)1.047910, (float)1.286860, (float)1.613890,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          86 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.499050, (float)1.728040, (float)2.108360,  
   (float)0.976651, (float)1.247040, (float)1.984070,  
   (float)1.245550, (float)1.410090, (float)1.656720,  
   (float)0.911724, (float)1.286890, (float)1.549410,  
   (float)1.283570, (float)1.643190, (float)2.021900,  
   (float)1.176740, (float)1.507100, (float)1.838960,  
   (float)1.035830, (float)1.345620, (float)1.553100,  
   (float)1.149910, (float)1.466220, (float)1.795700,  
   (float)1.134790, (float)1.364970, (float)1.632110,  
   (float)0.949203, (float)1.712470, (float)2.178390,  
   (float)1.495320, (float)1.649100, (float)1.814480,  
   (float)1.531570, (float)1.924360, (float)2.095370,  
   (float)1.231020, (float)1.394880, (float)1.589590,  
   (float)0.992442, (float)1.306710, (float)1.605320,  
   (float)1.001820, (float)1.146640, (float)1.331970,  
   (float)1.770680, (float)2.051410, (float)2.316820,  
   (float)1.449130, (float)1.932870, (float)2.123150,  
   (float)1.108040, (float)1.335060, (float)1.519530,  
   (float)0.976739, (float)1.157220, (float)1.650110,  
   (float)1.238720, (float)1.582470, (float)1.874480,  
   (float)1.037830, (float)1.485620, (float)1.775870,  
   (float)0.911659, (float)1.276230, (float)2.022320,  
   (float)1.022030, (float)1.198830, (float)1.612590,  
   (float)1.204380, (float)1.416020, (float)1.620360,  
   (float)1.528180, (float)1.893420, (float)2.148660,  
   (float)0.989976, (float)1.313620, (float)1.849610,  
   (float)0.918476, (float)1.516110, (float)1.764470,  
   (float)1.134120, (float)1.302690, (float)1.552910,  
   (float)1.301460, (float)1.474780, (float)1.832370,  
   (float)1.260040, (float)1.432240, (float)1.615240,  
   (float)1.445520, (float)1.628490, (float)1.936130,  
   (float)1.175560, (float)1.412760, (float)1.722310,  
   (float)0.981896, (float)1.419650, (float)1.727550,  
   (float)1.309430, (float)1.526470, (float)1.823820,  
   (float)1.184930, (float)1.682080, (float)2.021690,  
   (float)1.040300, (float)1.515900, (float)1.716020,  
   (float)1.616730, (float)1.852160, (float)2.022600,  
   (float)1.056700, (float)1.240020, (float)1.651870,  
   (float)1.268860, (float)1.520170, (float)1.958740,  
   (float)0.904110, (float)1.527760, (float)1.975210,  
   (float)1.634390, (float)1.799750, (float)1.983190,  
   (float)1.475920, (float)1.705330, (float)1.887010,  
   (float)1.121020, (float)1.545300, (float)1.962460,  
   (float)1.104370, (float)1.273180, (float)1.618900,  
   (float)1.439880, (float)1.673720, (float)1.856610,  
   (float)1.195690, (float)1.451350, (float)1.826930,  
   (float)0.987342, (float)1.299250, (float)2.068300,  
   (float)0.908923, (float)1.381180, (float)1.883460,  
   (float)0.890647, (float)1.429670, (float)2.142660,  
   (float)1.449730, (float)1.623490, (float)1.817510,  
   (float)1.476460, (float)1.648340, (float)1.907590,  
   (float)1.504180, (float)1.947650, (float)2.295200,  
   (float)1.351340, (float)1.950100, (float)2.181630,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          87 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.079070, (float)1.362750, (float)1.698160,  
   (float)1.187380, (float)1.328510, (float)1.478130,  
   (float)1.068350, (float)1.404310, (float)2.039640,  
   (float)1.001050, (float)1.255360, (float)1.550960,  
   (float)1.283670, (float)1.441150, (float)1.666960,  
   (float)1.285240, (float)1.463980, (float)1.951390,  
   (float)1.162880, (float)1.519630, (float)1.713690,  
   (float)1.519560, (float)1.689350, (float)1.994250,  
   (float)1.347650, (float)1.721880, (float)1.922580,  
   (float)1.416470, (float)1.581530, (float)1.951260,  
   (float)0.973371, (float)1.368730, (float)1.816110,  
   (float)1.091590, (float)1.318260, (float)1.582450,  
   (float)0.799570, (float)1.236180, (float)1.899990,  
   (float)1.527850, (float)1.684070, (float)1.843270,  
   (float)0.992345, (float)1.234810, (float)1.867960,  
   (float)1.222080, (float)1.447700, (float)1.737300,  
   (float)1.381850, (float)1.613190, (float)1.795770,  
   (float)0.890015, (float)1.426970, (float)1.721260,  
   (float)1.380950, (float)1.565940, (float)1.997290,  
   (float)1.310580, (float)1.563050, (float)1.938460,  
   (float)1.181220, (float)1.356800, (float)1.817120,  
   (float)1.006150, (float)1.347790, (float)1.745380,  
   (float)0.958344, (float)1.168210, (float)1.366660,  
   (float)1.202570, (float)1.373220, (float)1.759570,  
   (float)1.304280, (float)1.831980, (float)2.040180,  
   (float)1.085310, (float)1.375100, (float)1.947600,  
   (float)0.977713, (float)1.242690, (float)1.749780,  
   (float)1.594710, (float)1.768890, (float)2.069240,  
   (float)1.579890, (float)1.883650, (float)2.060110,  
   (float)2.048740, (float)2.317250, (float)2.757380,  
   (float)2.288730, (float)2.586400, (float)2.888420,  
   (float)1.846720, (float)2.319680, (float)2.525740,  
   (float)2.471690, (float)2.752060, (float)2.970940,  
   (float)2.136280, (float)2.511420, (float)2.824350,  
   (float)2.055690, (float)2.239950, (float)2.780970,  
   (float)2.555180, (float)2.790630, (float)2.973970,  
   (float)2.202410, (float)2.428230, (float)2.826010,  
   (float)2.011800, (float)2.321110, (float)2.654610,  
   (float)2.038740, (float)2.386320, (float)2.615310,  
   (float)2.116180, (float)2.662030, (float)2.853910,  
   (float)2.274410, (float)2.599980, (float)2.854350,  
   (float)2.176560, (float)2.610170, (float)2.820310,  
   (float)2.130470, (float)2.381430, (float)2.588130,  
   (float)2.112730, (float)2.356270, (float)2.544780,  
   (float)2.167710, (float)2.360950, (float)2.589930,  
   (float)1.936240, (float)2.473290, (float)2.850710,  
   (float)2.271670, (float)2.469430, (float)2.798690,  
   (float)2.346330, (float)2.547250, (float)2.753840,  
   (float)2.389410, (float)2.636230, (float)2.936520,  
   (float)2.166610, (float)2.614520, (float)2.900820,  
   (float)2.170660, (float)2.576670, (float)2.914810,  
   (float)2.107370, (float)2.459800, (float)2.696750,  
   (float)1.880490, (float)2.322590, (float)2.791430,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          88 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.196350, (float)2.730150, (float)2.926580,  
   (float)2.197010, (float)2.631490, (float)2.802310,  
   (float)1.960110, (float)2.517140, (float)2.834140,  
   (float)2.304210, (float)2.563540, (float)2.742980,  
   (float)2.486560, (float)2.704420, (float)2.959300,  
   (float)2.310940, (float)2.484510, (float)2.821620,  
   (float)1.953090, (float)2.137000, (float)2.534380,  
   (float)2.127800, (float)2.433450, (float)2.627970,  
   (float)2.214660, (float)2.381430, (float)2.745480,  
   (float)1.829100, (float)2.498540, (float)2.709740,  
   (float)2.022960, (float)2.376500, (float)2.722270,  
   (float)2.004270, (float)2.675110, (float)2.882470,  
   (float)1.963970, (float)2.450510, (float)2.682420,  
   (float)2.304010, (float)2.699830, (float)2.961110,  
   (float)2.232580, (float)2.461240, (float)2.750910,  
   (float)2.025740, (float)2.432370, (float)2.824530,  
   (float)2.040340, (float)2.542110, (float)2.702480,  
   (float)1.805300, (float)2.188470, (float)2.753600,  
   (float)1.987530, (float)2.356350, (float)2.688610,  
   (float)2.549080, (float)2.716240, (float)2.876320,  
   (float)2.338330, (float)2.575760, (float)2.734070,  
   (float)2.144900, (float)2.326640, (float)2.772780,  
   (float)2.157690, (float)2.679940, (float)2.864320,  
   (float)2.070120, (float)2.510310, (float)2.668680,  
   (float)2.482800, (float)2.738810, (float)2.934070,  
   (float)2.206690, (float)2.629930, (float)2.919160,  
   (float)1.968590, (float)2.254850, (float)2.799770,  
   (float)2.096980, (float)2.427470, (float)2.713450,  
   (float)2.242970, (float)2.524580, (float)2.813130,  
   (float)2.134920, (float)2.463380, (float)2.669410,  
   (float)2.164510, (float)2.338010, (float)2.543150,  
   (float)2.061460, (float)2.237180, (float)2.451660,  
   (float)1.813670, (float)2.309490, (float)2.614940,  
   (float)2.298020, (float)2.516410, (float)2.830220,  
   (float)2.205550, (float)2.487640, (float)2.874280,  
   (float)2.293120, (float)2.753430, (float)2.972160,  
   (float)2.435340, (float)2.578350, (float)2.763500,  
   (float)2.340920, (float)2.683620, (float)2.900330,  
   (float)2.139700, (float)2.431030, (float)2.777060,  
   (float)2.007180, (float)2.260490, (float)2.456850,  
   (float)2.228800, (float)2.610510, (float)2.794320,  
   (float)2.225190, (float)2.486860, (float)2.848270,  
   (float)2.348610, (float)2.727330, (float)2.903150,  
   (float)2.147150, (float)2.412460, (float)2.902080,  
   (float)2.114190, (float)2.528350, (float)2.730980,  
   (float)2.306260, (float)2.533200, (float)2.750790,  
   (float)2.281200, (float)2.658500, (float)2.889540,  
   (float)2.155980, (float)2.424650, (float)2.821640,  
   (float)2.071870, (float)2.361590, (float)2.587220,  
   (float)2.262740, (float)2.523840, (float)2.880870,  
   (float)2.094550, (float)2.448660, (float)2.625300,  
   (float)2.167680, (float)2.331510, (float)2.615650,  
   (float)2.223820, (float)2.575580, (float)2.799280,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          89 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.067650, (float)2.647290, (float)2.848600,  
   (float)2.086560, (float)2.468600, (float)2.757330,  
   (float)2.225200, (float)2.551430, (float)2.891560,  
   (float)2.278900, (float)2.666240, (float)2.857610,  
   (float)2.260770, (float)2.617670, (float)2.827060,  
   (float)2.012750, (float)2.504070, (float)2.743240,  
   (float)2.005320, (float)2.353590, (float)2.568660,  
   (float)2.038950, (float)2.320210, (float)2.692700,  
   (float)2.212380, (float)2.370030, (float)2.619720,  
   (float)2.123460, (float)2.403540, (float)2.801330,  
   (float)2.395850, (float)2.662610, (float)2.865960,  
   (float)2.424860, (float)2.633920, (float)2.801250,  
   (float)1.918430, (float)2.174590, (float)2.586400,  
   (float)2.311380, (float)2.537890, (float)2.711010,  
   (float)1.871640, (float)2.331600, (float)2.851460,  
   (float)2.577430, (float)2.752470, (float)2.903360,  
   (float)2.130370, (float)2.579770, (float)2.908140,  
   (float)2.131180, (float)2.708840, (float)2.956390,  
   (float)2.049920, (float)2.581050, (float)2.912140,  
   (float)2.045610, (float)2.512850, (float)2.802380,  
   (float)2.550800, (float)2.746390, (float)2.949920,  
   (float)2.098570, (float)2.682270, (float)2.923480,  
   (float)2.144070, (float)2.374860, (float)2.622270,  
   (float)1.987600, (float)2.216910, (float)2.506850,  
   (float)2.378370, (float)2.716700, (float)2.936940,  
   (float)2.005570, (float)2.297840, (float)2.604860,  
   (float)2.324160, (float)2.543650, (float)2.839660,  
   (float)1.975010, (float)2.454380, (float)2.645140,  
   (float)2.202830, (float)2.696980, (float)2.874960,  
   (float)2.155220, (float)2.409440, (float)2.629570,  
   (float)2.118170, (float)2.403200, (float)2.631310,  
   (float)2.444540, (float)2.634210, (float)2.924450,  
   (float)2.081960, (float)2.529830, (float)2.739070,  
   (float)1.998050, (float)2.472820, (float)2.847670,  
   (float)2.234440, (float)2.611360, (float)2.856570,  
   (float)1.956690, (float)2.619800, (float)2.915950,  
   (float)1.830570, (float)2.238770, (float)2.606930,  
   (float)1.701180, (float)2.462970, (float)2.753250,  
   (float)2.361940, (float)2.584710, (float)2.877430,  
   (float)2.264230, (float)2.619120, (float)2.792350,  
   (float)2.138720, (float)2.578190, (float)2.952350,  
   (float)2.189900, (float)2.662080, (float)2.829470,  
   (float)2.207790, (float)2.658210, (float)2.864340,  
   (float)2.069170, (float)2.284860, (float)2.773650,  
   (float)2.154460, (float)2.461280, (float)2.810120,  
   (float)2.121920, (float)2.619390, (float)2.923930,  
   (float)2.100880, (float)2.310800, (float)2.754890,  
   (float)2.175740, (float)2.378320, (float)2.799060,  
   (float)2.097940, (float)2.424090, (float)2.816840,  
   (float)2.051670, (float)2.316600, (float)2.804780,  
   (float)2.230740, (float)2.571790, (float)2.736590,  
   (float)1.899370, (float)2.581420, (float)2.783640,  
   (float)2.241390, (float)2.484530, (float)2.692370,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          90 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.061510, (float)2.250270, (float)2.516610,  
   (float)2.053260, (float)2.232850, (float)2.682800,  
   (float)2.243820, (float)2.540750, (float)2.734390,  
   (float)2.101790, (float)2.514200, (float)2.878770,  
   (float)1.994920, (float)2.311890, (float)2.698270,  
   (float)2.083570, (float)2.519380, (float)2.934810,  
   (float)2.055340, (float)2.382550, (float)2.856880,  
   (float)2.051490, (float)2.573120, (float)2.735850,  
   (float)1.996840, (float)2.466550, (float)2.761990,  
   (float)1.725720, (float)2.171470, (float)2.749080,  
   (float)2.192760, (float)2.619800, (float)2.843750,  
   (float)2.256950, (float)2.489730, (float)2.853380,  
   (float)2.105650, (float)2.528790, (float)2.770720,  
   (float)1.975530, (float)2.255920, (float)2.593580,  
   (float)1.948970, (float)2.479980, (float)2.900250,  
   (float)2.129700, (float)2.577130, (float)2.829810,  
   (float)2.072230, (float)2.519000, (float)2.706250,  
   (float)2.370530, (float)2.649580, (float)2.844360,  
   (float)1.941100, (float)2.523150, (float)2.694560,  
   (float)2.209110, (float)2.617650, (float)2.766630,  
   (float)2.069450, (float)2.509980, (float)2.769520,  
   (float)2.358310, (float)2.537970, (float)2.697980,  
   (float)1.828510, (float)2.366970, (float)2.645440,  
   (float)2.190790, (float)2.352830, (float)2.660590,  
   (float)2.127830, (float)2.324500, (float)2.875890,  
   (float)2.175690, (float)2.430640, (float)2.719930,  
   (float)2.393420, (float)2.570670, (float)2.845540,  
   (float)2.132610, (float)2.481780, (float)2.862760,  
   (float)2.130800, (float)2.499350, (float)2.732160,  
   (float)1.980390, (float)2.172490, (float)2.642710,  
   (float)2.090350, (float)2.330090, (float)2.797400,  
   (float)2.190050, (float)2.538080, (float)2.800380,  
   (float)2.127150, (float)2.442270, (float)2.805610,  
   (float)2.290190, (float)2.460880, (float)2.820430,  
   (float)1.998260, (float)2.530360, (float)2.713390,  
   (float)2.534240, (float)2.779070, (float)2.934970,  
   (float)2.189160, (float)2.396030, (float)2.770140,  
   (float)2.510930, (float)2.753740, (float)2.963870,  
   (float)2.232470, (float)2.520800, (float)2.866850,  
   (float)2.579490, (float)2.776390, (float)2.936780,  
   (float)2.127660, (float)2.417180, (float)2.838860,  
   (float)2.345410, (float)2.560840, (float)2.825630,  
   (float)1.760920, (float)2.060870, (float)2.662840,  
   (float)2.069310, (float)2.483940, (float)2.832420,  
   (float)2.131440, (float)2.444880, (float)2.884400,  
   (float)2.234290, (float)2.509370, (float)2.830600,  
   (float)2.079620, (float)2.332740, (float)2.516680,  
   (float)2.637040, (float)2.782400, (float)2.911730,  
   (float)1.937800, (float)2.402920, (float)2.751620,  
   (float)2.112690, (float)2.530840, (float)2.835370,  
   (float)2.009060, (float)2.194690, (float)2.706250,  
   (float)2.162280, (float)2.543990, (float)2.854650,  
   (float)1.952350, (float)2.565720, (float)2.798240,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          91 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.291270, (float)2.500730, (float)2.714230,  
   (float)2.120480, (float)2.378480, (float)2.838870,  
   (float)2.506980, (float)2.723970, (float)2.891340,  
   (float)2.129840, (float)2.614510, (float)2.794890,  
   (float)1.893930, (float)2.630220, (float)2.877650,  
   (float)2.287900, (float)2.554680, (float)2.893630,  
   (float)1.933940, (float)2.577530, (float)2.837830,  
   (float)1.928510, (float)2.128140, (float)2.419080,  
   (float)2.103420, (float)2.536970, (float)2.688000,  
   (float)1.920530, (float)2.570760, (float)2.894760,  
   (float)2.289110, (float)2.628810, (float)2.854990,  
   (float)2.333580, (float)2.496520, (float)2.707430,  
   (float)1.978600, (float)2.359290, (float)2.536720,  
   (float)1.763160, (float)2.461970, (float)2.707400,  
   (float)1.793170, (float)2.272810, (float)2.516600,  
   (float)2.494240, (float)2.670350, (float)2.913760,  
   (float)1.935560, (float)2.293610, (float)2.813380,  
   (float)1.916210, (float)2.625620, (float)2.827450,  
   (float)1.720300, (float)2.370480, (float)2.749520,  
   (float)2.047480, (float)2.532800, (float)2.741200,  
   (float)2.150940, (float)2.398130, (float)2.786920,  
   (float)2.113150, (float)2.469940, (float)2.732080,  
   (float)1.651190, (float)2.287820, (float)2.846120,  
   (float)1.960130, (float)2.249240, (float)2.712060,  
   (float)1.933890, (float)2.408250, (float)2.642530,  
   (float)2.010840, (float)2.440730, (float)2.917350,  
   (float)2.037110, (float)2.365700, (float)2.679720,  
   (float)1.863570, (float)2.555260, (float)2.858030,  
   (float)2.100850, (float)2.273150, (float)2.754400,  
   (float)1.871680, (float)2.172250, (float)2.627210,  
   (float)2.127580, (float)2.414450, (float)2.748960,  
   (float)2.187730, (float)2.485050, (float)2.847440,  
   (float)2.174860, (float)2.393540, (float)2.666200,  
   (float)2.518020, (float)2.753310, (float)2.918060,  
   (float)2.313470, (float)2.556780, (float)2.777150,  
   (float)2.068350, (float)2.282420, (float)2.675170,  
   (float)2.191670, (float)2.367210, (float)2.831230,  
   (float)2.307050, (float)2.595800, (float)2.855470,  
   (float)1.960400, (float)2.435690, (float)2.784700,  
   (float)2.201480, (float)2.435830, (float)2.704300,  
   (float)2.042490, (float)2.371620, (float)2.768570,  
   (float)2.037700, (float)2.490350, (float)2.653020,  
   (float)2.147170, (float)2.382410, (float)2.697780,  
   (float)2.182570, (float)2.493020, (float)2.816750,  
   (float)1.987270, (float)2.162200, (float)2.480690,  
   (float)1.912520, (float)2.196390, (float)2.677240,  
   (float)2.165590, (float)2.363920, (float)2.690460,  
   (float)2.126310, (float)2.365200, (float)2.796650,  
   (float)2.032710, (float)2.411460, (float)2.686550,  
   (float)2.256350, (float)2.722750, (float)2.912670,  
   (float)2.188020, (float)2.595940, (float)2.793570,  
   (float)2.150080, (float)2.374800, (float)2.829260,  
   (float)1.713320, (float)2.475420, (float)2.883860,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          92 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.110010, (float)2.367920, (float)2.650010,  
   (float)2.105430, (float)2.330800, (float)2.625790,  
   (float)2.097680, (float)2.604630, (float)2.777830,  
   (float)2.030290, (float)2.348270, (float)2.522960,  
   (float)2.184530, (float)2.471090, (float)2.623380,  
   (float)2.112610, (float)2.575100, (float)2.854970,  
   (float)2.072430, (float)2.238830, (float)2.580140,  
   (float)2.178510, (float)2.403690, (float)2.830760,  
   (float)2.002600, (float)2.224150, (float)2.669590,  
   (float)1.771730, (float)2.383770, (float)2.632800,  
   (float)1.925550, (float)2.415680, (float)2.704440,  
   (float)1.737800, (float)2.351420, (float)2.807040,  
   (float)2.060170, (float)2.283270, (float)2.868400,  
   (float)2.181890, (float)2.434500, (float)2.631860,  
   (float)2.215720, (float)2.499410, (float)2.697390,  
   (float)2.417270, (float)2.573080, (float)2.814330,  
   (float)2.397870, (float)2.600700, (float)2.829790,  
   (float)1.957940, (float)2.378580, (float)2.808630,  
   (float)2.161760, (float)2.505590, (float)2.934000,  
   (float)2.099450, (float)2.501310, (float)2.819460,  
   (float)1.913220, (float)2.424670, (float)2.871860,  
   (float)1.824690, (float)2.269670, (float)2.817580,  
   (float)1.815740, (float)2.448210, (float)2.799940,  
   (float)2.067800, (float)2.425860, (float)2.806280,  
   (float)2.043550, (float)2.389360, (float)2.817120,  
   (float)2.073260, (float)2.437720, (float)2.912230,  
   (float)2.137390, (float)2.515670, (float)2.859440,  
   (float)2.259500, (float)2.586120, (float)2.741880,  
   (float)2.158920, (float)2.325450, (float)2.697090,  
   (float)2.211250, (float)2.455300, (float)2.843830,  
   (float)1.762570, (float)2.306720, (float)2.681320,  
   (float)2.040940, (float)2.447900, (float)2.691960,  
   (float)2.343080, (float)2.614510, (float)2.863540,  
   (float)2.235920, (float)2.459920, (float)2.678630,  
   (float)2.226880, (float)2.638570, (float)2.831750,  
   (float)2.294430, (float)2.605800, (float)2.792040,  
   (float)2.089770, (float)2.582840, (float)2.942390,  
   (float)2.518640, (float)2.714670, (float)2.936130,  
   (float)2.165760, (float)2.342320, (float)2.806590,  
   (float)2.026240, (float)2.274400, (float)2.770510,  
   (float)2.454500, (float)2.670710, (float)2.943930,  
   (float)2.006460, (float)2.266080, (float)2.532030,  
   (float)2.254850, (float)2.506730, (float)2.911910,  
   (float)2.320720, (float)2.628590, (float)2.947530,  
   (float)2.068360, (float)2.291180, (float)2.560180,  
   (float)1.978230, (float)2.205220, (float)2.758730,  
   (float)2.219570, (float)2.426810, (float)2.675360,  
   (float)2.039920, (float)2.272530, (float)2.823210,  
   (float)1.638960, (float)2.194860, (float)2.749980,  
   (float)2.123310, (float)2.483630, (float)2.780580,  
   (float)2.059750, (float)2.435900, (float)2.742800,  
   (float)2.017980, (float)2.209490, (float)2.798770,  
   (float)2.321400, (float)2.591730, (float)2.878050,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          93 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.869040, (float)2.470400, (float)2.871210,  
   (float)2.069800, (float)2.576390, (float)2.803600,  
   (float)2.224870, (float)2.519080, (float)2.721590,  
   (float)2.471130, (float)2.666760, (float)2.831910,  
   (float)2.061940, (float)2.481910, (float)2.788130,  
   (float)2.066360, (float)2.348260, (float)2.711530,  
   (float)2.262760, (float)2.542610, (float)2.704600,  
   (float)1.725780, (float)2.316300, (float)2.873900,  
   (float)2.160030, (float)2.653490, (float)2.936830,  
   (float)1.646820, (float)2.401750, (float)2.717360,  
   (float)2.321960, (float)2.498120, (float)2.860240,  
   (float)1.973970, (float)2.306280, (float)2.856460,  
   (float)2.204020, (float)2.527920, (float)2.741380,  
   (float)2.115370, (float)2.462960, (float)2.929780,  
   (float)2.334360, (float)2.514090, (float)2.826120,  
   (float)1.802840, (float)2.295510, (float)2.881040,  
   (float)2.078880, (float)2.413070, (float)2.625620,  
   (float)2.027540, (float)2.635280, (float)2.901230,  
   (float)2.153350, (float)2.496310, (float)2.799630,  
   (float)2.191640, (float)2.592810, (float)2.737780,  
   (float)2.591790, (float)2.809100, (float)2.958260,  
   (float)2.228480, (float)2.566360, (float)2.828660,  
   (float)2.275350, (float)2.654600, (float)2.955230,  
   (float)2.151240, (float)2.406510, (float)2.718820,  
   (float)2.261760, (float)2.469480, (float)2.721200,  
   (float)2.414520, (float)2.706840, (float)2.927450,  
   (float)2.111090, (float)2.389340, (float)2.766370,  
   (float)1.803840, (float)2.157280, (float)2.660590,  
   (float)2.345160, (float)2.662290, (float)2.817970,  
   (float)1.775040, (float)2.385550, (float)2.900340,  
   (float)2.430630, (float)2.601890, (float)2.891940,  
   (float)2.341270, (float)2.707430, (float)2.938600,  
   (float)2.006640, (float)2.470370, (float)2.630700,  
   (float)2.280690, (float)2.584320, (float)2.819020,  
   (float)1.976660, (float)2.607440, (float)2.819140,  
   (float)1.999030, (float)2.359560, (float)2.820050,  
   (float)2.243520, (float)2.614960, (float)2.893510,  
   (float)1.820620, (float)2.366430, (float)2.580840,  
   (float)2.064190, (float)2.357980, (float)2.803410,  
   (float)2.036330, (float)2.257560, (float)2.581400,  
   (float)2.166400, (float)2.541010, (float)2.682560,  
   (float)2.364160, (float)2.670420, (float)2.926520,  
   (float)2.036430, (float)2.207520, (float)2.626570,  
   (float)2.214870, (float)2.434990, (float)2.613290,  
   (float)1.756340, (float)2.246470, (float)2.832310,  
   (float)1.939450, (float)2.263400, (float)2.542840,  
   (float)2.375060, (float)2.613060, (float)2.857430,  
   (float)1.971200, (float)2.515080, (float)2.738810,  
   (float)2.033060, (float)2.409490, (float)2.791180,  
   (float)2.168570, (float)2.515650, (float)2.784360,  
   (float)1.834060, (float)2.530500, (float)2.908630,  
   (float)1.827270, (float)2.420940, (float)2.865740,  
   (float)2.128880, (float)2.513670, (float)2.667950,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          94 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.004800, (float)2.392470, (float)2.597820,  
   (float)2.150780, (float)2.445210, (float)2.598960,  
   (float)2.012040, (float)2.372340, (float)2.642430,  
   (float)2.069650, (float)2.419140, (float)2.842270,  
   (float)2.216490, (float)2.529180, (float)2.785940,  
   (float)2.191340, (float)2.605340, (float)2.947980,  
   (float)2.273790, (float)2.471220, (float)2.758910,  
   (float)2.098100, (float)2.373250, (float)2.604420,  
   (float)2.030010, (float)2.536550, (float)2.768290,  
   (float)1.880050, (float)2.203280, (float)2.752050,  
   (float)2.011760, (float)2.366250, (float)2.867380,  
   (float)1.854290, (float)2.526400, (float)2.810090,  
   (float)2.068580, (float)2.480290, (float)2.698870,  
   (float)2.148420, (float)2.697940, (float)2.906770,  
   (float)2.250040, (float)2.539140, (float)2.838570,  
   (float)1.693720, (float)2.329360, (float)2.689660,  
   (float)2.388240, (float)2.712690, (float)2.882490,  
   (float)2.151900, (float)2.404100, (float)2.859370,  
   (float)2.481590, (float)2.775840, (float)2.941590,  
   (float)2.379180, (float)2.623610, (float)2.895280,  
   (float)2.110910, (float)2.440820, (float)2.659540,  
   (float)1.855140, (float)2.388550, (float)2.776820,  
   (float)2.037240, (float)2.688040, (float)2.927410,  
   (float)2.232910, (float)2.398420, (float)2.778220,  
   (float)2.125680, (float)2.535140, (float)2.924120,  
   (float)2.126830, (float)2.540690, (float)2.796170,  
   (float)1.866840, (float)2.551500, (float)2.743770,  
   (float)2.317050, (float)2.622090, (float)2.856340,  
   (float)2.110700, (float)2.364380, (float)2.691400,  
   (float)2.365920, (float)2.728520, (float)2.973010,  
   (float)2.089070, (float)2.266560, (float)2.701080,  
   (float)2.297810, (float)2.645920, (float)2.788520,  
   (float)1.842430, (float)2.447220, (float)2.921220,  
   (float)2.173480, (float)2.447530, (float)2.770820,  
   (float)1.951360, (float)2.198690, (float)2.708430,  
   (float)2.027100, (float)2.569420, (float)2.789300,  
   (float)2.084500, (float)2.406730, (float)2.745120,  
   (float)2.238050, (float)2.443200, (float)2.650840,  
   (float)2.105300, (float)2.320190, (float)2.710880,  
   (float)2.104750, (float)2.499740, (float)2.753420,  
   (float)2.361890, (float)2.596950, (float)2.766470,  
   (float)2.275480, (float)2.562820, (float)2.797100,  
   (float)2.189370, (float)2.399350, (float)2.698030,  
   (float)2.154010, (float)2.583530, (float)2.800600,  
   (float)2.068890, (float)2.334320, (float)2.845660,  
   (float)2.054520, (float)2.585870, (float)2.767920,  
   (float)2.232370, (float)2.433090, (float)2.730020,  
   (float)2.386460, (float)2.637000, (float)2.812210,  
   (float)2.030080, (float)2.473240, (float)2.816960,  
   (float)1.935110, (float)2.139370, (float)2.648500,  
   (float)2.097090, (float)2.458320, (float)2.794030,  
   (float)2.201130, (float)2.412960, (float)2.731230,  
   (float)2.129360, (float)2.436760, (float)2.720660,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          95 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.317210, (float)2.501160, (float)2.672090,  
   (float)1.933560, (float)2.219210, (float)2.779500,  
   (float)2.150730, (float)2.576010, (float)2.741880,  
   (float)2.090840, (float)2.282790, (float)2.601830,  
   (float)1.900690, (float)2.318600, (float)2.723750,  
   (float)2.356830, (float)2.677600, (float)2.958470,  
   (float)2.325280, (float)2.498130, (float)2.786350,  
   (float)2.130340, (float)2.368790, (float)2.880800,  
   (float)1.967760, (float)2.549010, (float)2.896020,  
   (float)2.047370, (float)2.522070, (float)2.906250,  
   (float)1.997000, (float)2.502760, (float)2.933240,  
   (float)2.220570, (float)2.547020, (float)2.805440,  
   (float)2.177240, (float)2.383350, (float)2.730130,  
   (float)2.143360, (float)2.378510, (float)2.661600,  
   (float)2.049420, (float)2.464900, (float)2.756200,  
   (float)2.300300, (float)2.649110, (float)2.912820,  
   (float)1.737650, (float)2.577700, (float)2.916710,  
   (float)2.301620, (float)2.464930, (float)2.774690,  
   (float)2.227550, (float)2.502670, (float)2.796500,  
   (float)2.220380, (float)2.551290, (float)2.760530,  
   (float)1.896490, (float)2.171960, (float)2.483510,  
   (float)2.063210, (float)2.597700, (float)2.840080,  
   (float)2.318750, (float)2.630010, (float)2.819240,  
   (float)2.119320, (float)2.454040, (float)2.768940,  
   (float)1.999310, (float)2.318310, (float)2.903440,  
   (float)2.247260, (float)2.677320, (float)2.836300,  
   (float)2.407810, (float)2.739740, (float)2.951580,  
   (float)1.872610, (float)2.326710, (float)2.659000,  
   (float)1.715530, (float)2.417070, (float)2.676050,  
   (float)1.818020, (float)2.168320, (float)2.537510,  
   (float)2.226880, (float)2.466840, (float)2.623660,  
   (float)2.272820, (float)2.489180, (float)2.675940,  
   (float)2.208000, (float)2.679740, (float)2.911990,  
   (float)2.295910, (float)2.469510, (float)2.637510,  
   (float)2.051190, (float)2.477030, (float)2.921170,  
   (float)1.952180, (float)2.317870, (float)2.515360,  
   (float)2.350640, (float)2.565660, (float)2.784420,  
   (float)2.100150, (float)2.301770, (float)2.659270,  
   (float)2.532200, (float)2.818850, (float)2.992860,  
   (float)2.202350, (float)2.453610, (float)2.881170,  
   (float)2.235420, (float)2.491380, (float)2.724960,  
   (float)1.990530, (float)2.593810, (float)2.779950,  
   (float)2.031900, (float)2.202370, (float)2.533000,  
   (float)2.170810, (float)2.428980, (float)2.795020,  
   (float)2.207420, (float)2.518200, (float)2.817360,  
   (float)1.807190, (float)2.372170, (float)2.766840,  
   (float)2.144760, (float)2.493540, (float)2.649890,  
   (float)2.104240, (float)2.599350, (float)2.890080,  
   (float)2.046810, (float)2.454000, (float)2.846520,  
   (float)2.286810, (float)2.575300, (float)2.857850,  
   (float)1.809340, (float)2.441170, (float)2.665070,  
   (float)2.336820, (float)2.521770, (float)2.734530,  
   (float)2.110050, (float)2.399170, (float)2.913700,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          96 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.779550, (float)2.254900, (float)2.735180,  
   (float)1.904110, (float)2.302900, (float)2.501960,  
   (float)2.189960, (float)2.559740, (float)2.746960,  
   (float)2.204710, (float)2.523430, (float)2.678360,  
   (float)1.998990, (float)2.434160, (float)2.600750,  
   (float)2.048330, (float)2.393470, (float)2.915230,  
   (float)2.354940, (float)2.531160, (float)2.798480,  
   (float)2.076050, (float)2.453440, (float)2.869880,  
   (float)2.019820, (float)2.296560, (float)2.731870,  
   (float)2.212150, (float)2.381470, (float)2.669610,  
   (float)1.756590, (float)2.420090, (float)2.764200,  
   (float)2.069500, (float)2.635220, (float)2.920840,  
   (float)1.930180, (float)2.444810, (float)2.756920,  
   (float)2.319620, (float)2.745430, (float)2.936240,  
   (float)1.921950, (float)2.347380, (float)2.625080,  
   (float)1.918380, (float)2.265250, (float)2.679840,  
   (float)2.237510, (float)2.505760, (float)2.655880,  
   (float)2.264260, (float)2.675860, (float)2.920370,  
   (float)1.979590, (float)2.438850, (float)2.880510,  
   (float)2.089070, (float)2.382200, (float)2.817440,  
   (float)1.919830, (float)2.528900, (float)2.860350,  
   (float)2.464520, (float)2.630170, (float)2.834610,  
   (float)1.853660, (float)2.340580, (float)2.739840,  
   (float)2.107400, (float)2.404060, (float)2.867350,  
   (float)2.187100, (float)2.739420, (float)2.974780,  
   (float)2.522510, (float)2.648430, (float)2.821420,  
   (float)2.312650, (float)2.624230, (float)2.888670,  
   (float)2.272930, (float)2.540990, (float)2.815630,  
   (float)2.020730, (float)2.343750, (float)2.608850,  
   (float)2.247880, (float)2.431360, (float)2.697310,  
   (float)2.132230, (float)2.467940, (float)2.622330,  
   (float)1.825410, (float)2.439090, (float)2.738710,  
   (float)1.883380, (float)2.303930, (float)2.579420,  
   (float)2.319920, (float)2.495240, (float)2.748130,  
   (float)2.370430, (float)2.598700, (float)2.810490,  
   (float)2.048690, (float)2.398390, (float)2.654000,  
   (float)2.120450, (float)2.307220, (float)2.793400,  
   (float)2.469930, (float)2.738620, (float)2.896240,  
   (float)2.301350, (float)2.605110, (float)2.754250,  
   (float)1.919300, (float)2.478620, (float)2.796980,  
   (float)2.179850, (float)2.504740, (float)2.655770,  
   (float)2.061420, (float)2.433770, (float)2.654180,  
   (float)2.042790, (float)2.624130, (float)2.960960,  
   (float)2.231390, (float)2.543720, (float)2.930360,  
   (float)2.338470, (float)2.646330, (float)2.856110,  
   (float)2.012830, (float)2.544550, (float)2.897650,  
   (float)2.075890, (float)2.409570, (float)2.883460,  
   (float)1.941100, (float)2.348420, (float)2.886790,  
   (float)2.179800, (float)2.497670, (float)2.898620,  
   (float)2.340140, (float)2.525970, (float)2.866060,  
   (float)2.050740, (float)2.456430, (float)2.617570,  
   (float)2.197230, (float)2.537490, (float)2.865670,  
   (float)2.243100, (float)2.417240, (float)2.810580,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          97 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.079450, (float)2.366310, (float)2.670300,  
   (float)2.474220, (float)2.700250, (float)2.870700,  
   (float)2.095440, (float)2.259480, (float)2.647720,  
   (float)1.919190, (float)2.464130, (float)2.641960,  
   (float)2.388170, (float)2.581400, (float)2.916040,  
   (float)2.242850, (float)2.650490, (float)2.801560,  
   (float)2.056470, (float)2.260180, (float)2.733090,  
   (float)2.185200, (float)2.416350, (float)2.889410,  
   (float)1.842490, (float)2.274490, (float)2.756780,  
   (float)1.976270, (float)2.396580, (float)2.564700,  
   (float)1.884120, (float)2.432680, (float)2.779360,  
   (float)1.938450, (float)2.357290, (float)2.719650,  
   (float)2.028980, (float)2.503390, (float)2.838550,  
   (float)2.116230, (float)2.572140, (float)2.800020,  
   (float)1.924870, (float)2.421290, (float)2.811340,  
   (float)2.176820, (float)2.435630, (float)2.860100,  
   (float)1.794610, (float)2.505220, (float)2.851570,  
   (float)1.843340, (float)2.588860, (float)2.828330,  
   (float)2.124550, (float)2.478030, (float)2.816140,  
   (float)2.319580, (float)2.659720, (float)2.878040,  
   (float)1.895040, (float)2.514930, (float)2.717030,  
   (float)2.245470, (float)2.398920, (float)2.690140,  
   (float)1.987240, (float)2.536160, (float)2.773840,  
   (float)1.672390, (float)2.392740, (float)2.833630,  
   (float)2.028750, (float)2.503320, (float)2.689480,  
   (float)2.525860, (float)2.689080, (float)2.893940,  
   (float)2.138600, (float)2.616690, (float)2.829870,  
   (float)2.640050, (float)2.826290, (float)2.961280,  
   (float)1.949810, (float)2.203940, (float)2.442330,  
   (float)2.329550, (float)2.592110, (float)2.829680,  
   (float)2.226680, (float)2.431940, (float)2.892530,  
   (float)1.623790, (float)2.279820, (float)2.738880,  
   (float)2.093020, (float)2.407790, (float)2.665040,  
   (float)2.150660, (float)2.404880, (float)2.579520,  
   (float)2.093280, (float)2.490500, (float)2.792540,  
   (float)1.980750, (float)2.647560, (float)2.966020,  
   (float)2.095350, (float)2.562180, (float)2.781240,  
   (float)2.606450, (float)2.735590, (float)2.871350,  
   (float)2.125050, (float)2.546290, (float)2.876840,  
   (float)2.178530, (float)2.464170, (float)2.716190,  
   (float)1.862500, (float)2.264840, (float)2.878230,  
   (float)2.073820, (float)2.399870, (float)2.785250,  
   (float)1.993410, (float)2.409490, (float)2.800740,  
   (float)2.248080, (float)2.708580, (float)2.955870,  
   (float)2.188950, (float)2.533030, (float)2.766940,  
   (float)2.069120, (float)2.581430, (float)2.877120,  
   (float)2.287770, (float)2.481800, (float)2.739190,  
   (float)2.004900, (float)2.590300, (float)2.916050,  
   (float)2.479030, (float)2.626360, (float)2.795540,  
   (float)2.117430, (float)2.587570, (float)2.745650,  
   (float)2.091880, (float)2.640270, (float)2.817550,  
   (float)2.162470, (float)2.493250, (float)2.724560,  
   (float)2.430450, (float)2.653680, (float)2.842900,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          98 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.160710, (float)2.638920, (float)2.850730,  
   (float)2.405560, (float)2.690540, (float)2.960160,  
   (float)2.339710, (float)2.609040, (float)2.898930,  
   (float)2.272910, (float)2.436020, (float)2.793150,  
   (float)2.103290, (float)2.488530, (float)2.853680,  
   (float)2.434520, (float)2.607750, (float)2.841990,  
   (float)2.108030, (float)2.486030, (float)2.644280,  
   (float)2.201920, (float)2.433990, (float)2.784830,  
   (float)2.184280, (float)2.492770, (float)2.699960,  
   (float)2.281660, (float)2.574430, (float)2.772350,  
   (float)2.226460, (float)2.500610, (float)2.749740,  
   (float)2.121000, (float)2.314220, (float)2.519080,  
   (float)2.203340, (float)2.514580, (float)2.845480,  
   (float)2.225320, (float)2.549950, (float)2.704210,  
   (float)2.040230, (float)2.428130, (float)2.596970,  
   (float)1.950040, (float)2.489350, (float)2.661720,  
   (float)1.769040, (float)2.521160, (float)2.743320,  
   (float)2.332320, (float)2.552550, (float)2.892480,  
   (float)2.194670, (float)2.375930, (float)2.559450,  
   (float)2.012910, (float)2.260560, (float)2.636340,  
   (float)2.168220, (float)2.456100, (float)2.911280,  
   (float)1.881550, (float)2.233230, (float)2.546330,  
   (float)2.117970, (float)2.510900, (float)2.706530,  
   (float)2.031600, (float)2.309960, (float)2.559550,  
   (float)2.041020, (float)2.340170, (float)2.890440,  
   (float)2.403130, (float)2.753540, (float)2.920710,  
   (float)2.096010, (float)2.461180, (float)2.828610,  
   (float)1.944590, (float)2.408720, (float)2.919000,  
   (float)2.283520, (float)2.529950, (float)2.729870,  
   (float)2.237620, (float)2.479860, (float)2.884930,  
   (float)2.167040, (float)2.415110, (float)2.756440,  
   (float)2.123220, (float)2.332950, (float)2.678470,  
   (float)2.037510, (float)2.468120, (float)2.719240,  
   (float)2.011340, (float)2.468160, (float)2.675540,  
   (float)2.003020, (float)2.506660, (float)2.799520,  
   (float)2.091590, (float)2.558080, (float)2.721850,  
   (float)2.054590, (float)2.341720, (float)2.638800,  
   (float)2.002890, (float)2.257500, (float)2.821960,  
   (float)2.290380, (float)2.546260, (float)2.837110,  
   (float)1.819140, (float)2.320120, (float)2.705720,  
   (float)1.878430, (float)2.372950, (float)2.614910,  
   (float)2.274760, (float)2.494080, (float)2.823500,  
   (float)2.030830, (float)2.492710, (float)2.772380,  
   (float)2.203040, (float)2.464890, (float)2.690880,  
   (float)1.909870, (float)2.374890, (float)2.772650,  
   (float)2.253750, (float)2.601970, (float)2.767410,  
   (float)1.767820, (float)2.113720, (float)2.757050,  
   (float)1.779390, (float)2.384160, (float)2.705150,  
   (float)2.267230, (float)2.566180, (float)2.834860,  
   (float)2.152250, (float)2.439060, (float)2.742910,  
   (float)2.221750, (float)2.402100, (float)2.588350,  
   (float)1.990780, (float)2.390220, (float)2.728480,  
   (float)2.150420, (float)2.521260, (float)2.708040,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003          99 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.192460, (float)2.559380, (float)2.715150,  
   (float)2.244110, (float)2.443540, (float)2.860530,  
   (float)1.977830, (float)2.414760, (float)2.660520,  
   (float)2.212580, (float)2.572320, (float)2.852470,  
   (float)1.922510, (float)2.469430, (float)2.698810,  
   (float)2.142520, (float)2.614810, (float)2.869180,  
   (float)2.168040, (float)2.562100, (float)2.816920,  
   (float)2.065210, (float)2.492190, (float)2.875570,  
   (float)2.139260, (float)2.523030, (float)2.760250,  
   (float)1.948580, (float)2.684050, (float)2.918130,  
   (float)2.240660, (float)2.657560, (float)2.887210,  
   (float)2.061070, (float)2.253340, (float)2.634030,  
   (float)2.206180, (float)2.399670, (float)2.807220,  
   (float)2.243520, (float)2.406810, (float)2.733680,  
   (float)2.173690, (float)2.518700, (float)2.825170,  
   (float)2.200680, (float)2.498680, (float)2.729350,  
   (float)2.212200, (float)2.484710, (float)2.662210,  
   (float)1.933670, (float)2.476240, (float)2.944380,  
   (float)2.138010, (float)2.336420, (float)2.827970,  
   (float)2.449400, (float)2.665290, (float)2.888460,  
   (float)2.201770, (float)2.447050, (float)2.742620,  
   (float)1.933990, (float)2.489250, (float)2.739340,  
   (float)1.951330, (float)2.371030, (float)2.666670,  
   (float)2.322460, (float)2.668200, (float)2.934420,  
   (float)2.069020, (float)2.456890, (float)2.811640,  
   (float)2.412580, (float)2.683230, (float)2.891070,  
   (float)1.952230, (float)2.430100, (float)2.604040,  
   (float)2.303690, (float)2.521380, (float)2.803540,  
   (float)1.719960, (float)2.221220, (float)2.671910,  
   (float)2.128620, (float)2.550720, (float)2.748430,  
   (float)2.078630, (float)2.280000, (float)2.818630,  
   (float)2.153930, (float)2.591770, (float)2.839890,  
   (float)1.979030, (float)2.302590, (float)2.755940,  
   (float)2.489460, (float)2.658540, (float)2.869650,  
   (float)1.972990, (float)2.387010, (float)2.620950,  
   (float)2.077640, (float)2.327720, (float)2.675070,  
   (float)2.082000, (float)2.439220, (float)2.590480,  
   (float)1.878160, (float)2.402890, (float)2.828260,  
   (float)2.210030, (float)2.484850, (float)2.818540,  
   (float)2.011310, (float)2.201570, (float)2.435170,  
   (float)2.024680, (float)2.619480, (float)2.860570,  
   (float)2.055120, (float)2.697150, (float)2.971950,  
   (float)2.166450, (float)2.417210, (float)2.682750,  
   (float)2.177920, (float)2.483150, (float)2.783500,  
   (float)2.266470, (float)2.533130, (float)2.760250,  
   (float)2.150760, (float)2.494570, (float)2.763640,  
   (float)2.437260, (float)2.690270, (float)2.854470,  
   (float)1.991080, (float)2.546950, (float)2.816620,  
   (float)1.864560, (float)2.436020, (float)2.698850,  
   (float)2.073380, (float)2.300970, (float)2.722310,  
   (float)2.172140, (float)2.475080, (float)2.670220,  
   (float)2.089010, (float)2.370850, (float)2.730880,  
   (float)2.328100, (float)2.542420, (float)2.803250,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         100 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.220320, (float)2.400620, (float)2.704800,  
   (float)2.014850, (float)2.447420, (float)2.788830,  
   (float)2.131500, (float)2.553570, (float)2.708210,  
   (float)2.012700, (float)2.344430, (float)2.776130,  
   (float)2.192140, (float)2.546730, (float)2.831340,  
   (float)2.072720, (float)2.480580, (float)2.636940,  
   (float)1.964060, (float)2.452520, (float)2.725030,  
   (float)2.139670, (float)2.480830, (float)2.698140,  
   (float)2.252490, (float)2.577270, (float)2.898290,  
   (float)2.277850, (float)2.567290, (float)2.712410,  
   (float)2.014630, (float)2.419530, (float)2.640900,  
   (float)2.228100, (float)2.587740, (float)2.876270,  
   (float)2.361370, (float)2.644920, (float)2.877190,  
   (float)2.151410, (float)2.455580, (float)2.704840,  
   (float)2.191960, (float)2.568890, (float)2.883960,  
   (float)1.803180, (float)2.595410, (float)2.877820,  
   (float)2.339770, (float)2.569850, (float)2.857230,  
   (float)1.966980, (float)2.347120, (float)2.590980,  
   (float)2.166440, (float)2.509040, (float)2.686040,  
   (float)2.225340, (float)2.446350, (float)2.811620,  
   (float)2.105590, (float)2.438110, (float)2.743790,  
   (float)2.067280, (float)2.633870, (float)2.882630,  
   (float)2.248630, (float)2.457120, (float)2.784930,  
   (float)1.898060, (float)2.261300, (float)2.819320,  
   (float)2.253240, (float)2.587410, (float)2.803360,  
   (float)2.133640, (float)2.570650, (float)2.774690,  
   (float)2.198230, (float)2.416460, (float)2.658230,  
   (float)1.764980, (float)2.418300, (float)2.835440,  
   (float)1.895130, (float)2.420770, (float)2.594320,  
   (float)2.459610, (float)2.629040, (float)2.872360,  
   (float)2.306910, (float)2.572410, (float)2.836180,  
   (float)2.372050, (float)2.534180, (float)2.830920,  
   (float)1.673040, (float)2.086800, (float)2.714020,  
   (float)2.028500, (float)2.550970, (float)2.950520,  
   (float)2.160280, (float)2.348250, (float)2.735660,  
   (float)2.340380, (float)2.646970, (float)2.904440,  
   (float)2.181990, (float)2.430030, (float)2.589780,  
   (float)2.157600, (float)2.610310, (float)2.770190,  
   (float)1.910060, (float)2.302330, (float)2.885500,  
   (float)2.546980, (float)2.728000, (float)2.907450,  
   (float)2.132290, (float)2.345490, (float)2.715660,  
   (float)2.249760, (float)2.494010, (float)2.806340,  
   (float)2.430570, (float)2.780490, (float)2.958720,  
   (float)2.278870, (float)2.464320, (float)2.852230,  
   (float)1.802940, (float)2.176650, (float)2.828620,  
   (float)1.966200, (float)2.633210, (float)2.864910,  
   (float)2.125950, (float)2.379850, (float)2.732030,  
   (float)2.126350, (float)2.509740, (float)2.793870,  
   (float)2.234620, (float)2.403180, (float)2.642620,  
   (float)2.163840, (float)2.540050, (float)2.891030,  
   (float)1.957640, (float)2.505040, (float)2.800300,  
   (float)1.894590, (float)2.256470, (float)2.728340,  
   (float)2.402890, (float)2.633530, (float)2.847250,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         101 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.020810, (float)2.308380, (float)2.854380,  
   (float)2.183290, (float)2.348070, (float)2.708960,  
   (float)2.215010, (float)2.586180, (float)2.914050,  
   (float)2.049750, (float)2.446250, (float)2.784110,  
   (float)1.984780, (float)2.466870, (float)2.807180,  
   (float)1.994340, (float)2.385770, (float)2.902940,  
   (float)2.060870, (float)2.402100, (float)2.583290,  
   (float)2.106630, (float)2.273030, (float)2.549190,  
   (float)2.262650, (float)2.506030, (float)2.744280,  
   (float)2.445750, (float)2.695680, (float)2.914720,  
   (float)1.966420, (float)2.484020, (float)2.768870,  
   (float)1.961990, (float)2.398990, (float)2.702600,  
   (float)1.984150, (float)2.162410, (float)2.575820,  
   (float)2.262370, (float)2.505790, (float)2.711050,  
   (float)2.143300, (float)2.466710, (float)2.744710,  
   (float)2.168920, (float)2.509470, (float)2.858990,  
   (float)2.160260, (float)2.551220, (float)2.768490,  
   (float)2.320220, (float)2.525160, (float)2.774610,  
   (float)2.076680, (float)2.375090, (float)2.540270,  
   (float)2.188330, (float)2.527100, (float)2.710610,  
   (float)2.277580, (float)2.644210, (float)2.822840,  
   (float)2.305780, (float)2.465980, (float)2.697270,  
   (float)2.360480, (float)2.590150, (float)2.842140,  
   (float)1.908140, (float)2.179760, (float)2.852010,  
   (float)2.013060, (float)2.451370, (float)2.733990,  
   (float)2.237990, (float)2.559460, (float)2.857830,  
   (float)2.051540, (float)2.410120, (float)2.761820,  
   (float)1.984200, (float)2.526170, (float)2.857070,  
   (float)2.248600, (float)2.565490, (float)2.772840,  
   (float)2.326130, (float)2.567380, (float)2.927670,  
   (float)2.103010, (float)2.279020, (float)2.474930,  
   (float)2.026390, (float)2.573680, (float)2.872630,  
   (float)2.212920, (float)2.480200, (float)2.923040,  
   (float)2.183360, (float)2.353470, (float)2.758960,  
   (float)2.026230, (float)2.585020, (float)2.823770,  
   (float)2.062360, (float)2.558540, (float)2.833380,  
   (float)2.352070, (float)2.621020, (float)2.828770,  
   (float)1.968120, (float)2.437030, (float)2.830960,  
   (float)2.033570, (float)2.271850, (float)2.693860,  
   (float)2.151990, (float)2.380370, (float)2.752880,  
   (float)2.328430, (float)2.612450, (float)2.792340,  
   (float)2.222840, (float)2.605660, (float)2.823070,  
   (float)1.966210, (float)2.283730, (float)2.649920,  
   (float)2.203550, (float)2.454160, (float)2.657140,  
   (float)2.276580, (float)2.438620, (float)2.724130,  
   (float)2.275280, (float)2.618120, (float)2.886970,  
   (float)2.103550, (float)2.344050, (float)2.834310,  
   (float)2.235410, (float)2.411900, (float)2.846400,  
   (float)2.134560, (float)2.430880, (float)2.691750,  
   (float)2.040790, (float)2.504470, (float)2.719010,  
   (float)1.959500, (float)2.221560, (float)2.645250,  
   (float)2.282590, (float)2.521470, (float)2.678180,  
   (float)2.289690, (float)2.541190, (float)2.782360,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         102 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.042620, (float)2.526590, (float)2.870810,  
   (float)1.837030, (float)2.092670, (float)2.713560,  
   (float)2.196750, (float)2.506470, (float)2.793980,  
   (float)2.178330, (float)2.569910, (float)2.849270,  
   (float)2.163150, (float)2.455100, (float)2.643860,  
   (float)1.991370, (float)2.272020, (float)2.688290,  
   (float)2.083130, (float)2.529450, (float)2.800840,  
   (float)2.174230, (float)2.446550, (float)2.680860,  
   (float)1.701970, (float)2.273270, (float)2.757510,  
   (float)2.098680, (float)2.599580, (float)2.817400,  
   (float)2.027220, (float)2.389290, (float)2.559080,  
   (float)2.511590, (float)2.684890, (float)2.852080,  
   (float)2.431390, (float)2.716400, (float)2.889990,  
   (float)1.933550, (float)2.331020, (float)2.762140,  
   (float)2.190310, (float)2.543480, (float)2.931020,  
   (float)2.230580, (float)2.458230, (float)2.711530,  
   (float)2.028340, (float)2.339130, (float)2.731930,  
   (float)2.374000, (float)2.544300, (float)2.881240,  
   (float)2.205430, (float)2.625170, (float)2.881390,  
   (float)2.205720, (float)2.473380, (float)2.724120,  
   (float)1.771310, (float)2.321130, (float)2.759390,  
   (float)1.655130, (float)2.338470, (float)2.768180,  
   (float)2.203850, (float)2.473670, (float)2.765590,  
   (float)2.269680, (float)2.461130, (float)2.893890,  
   (float)2.077030, (float)2.457060, (float)2.723830,  
   (float)2.036840, (float)2.543990, (float)2.807880,  
   (float)1.998150, (float)2.436410, (float)2.699190,  
   (float)2.006380, (float)2.310460, (float)2.502630,  
   (float)2.154980, (float)2.488660, (float)2.833880,  
   (float)2.261040, (float)2.441480, (float)2.831830,  
   (float)2.135570, (float)2.309270, (float)2.733720,  
   (float)2.308900, (float)2.579070, (float)2.799520,  
   (float)2.205400, (float)2.371430, (float)2.786970,  
   (float)2.075930, (float)2.688430, (float)2.887030,  
   (float)2.175060, (float)2.472720, (float)2.750600,  
   (float)1.824110, (float)2.419420, (float)2.612970,  
   (float)2.205630, (float)2.398620, (float)2.856090,  
   (float)1.982820, (float)2.305520, (float)2.560670,  
   (float)2.366350, (float)2.769580, (float)2.963770,  
   (float)2.088530, (float)2.466250, (float)2.666540,  
   (float)1.726170, (float)2.341780, (float)2.613580,  
   (float)2.150690, (float)2.577290, (float)2.873890,  
   (float)2.177220, (float)2.457070, (float)2.828170,  
   (float)1.911600, (float)2.427710, (float)2.668400,  
   (float)2.165590, (float)2.468450, (float)2.869740,  
   (float)1.996150, (float)2.492590, (float)2.889090,  
   (float)1.853730, (float)2.273160, (float)2.665760,  
   (float)2.113690, (float)2.402650, (float)2.707790,  
   (float)1.985190, (float)2.582560, (float)2.863270,  
   (float)2.271120, (float)2.523040, (float)2.797830,  
   (float)1.999320, (float)2.214930, (float)2.591560,  
   (float)2.066260, (float)2.318320, (float)2.602790,  
   (float)2.198340, (float)2.579570, (float)2.823260,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         103 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)1.807430, (float)2.541320, (float)2.783810,  
   (float)2.008590, (float)2.307590, (float)2.805360,  
   (float)2.174550, (float)2.371900, (float)2.633280,  
   (float)2.007280, (float)2.389960, (float)2.769570,  
   (float)1.955160, (float)2.305770, (float)2.716010,  
   (float)2.024370, (float)2.429860, (float)2.761040,  
   (float)1.701510, (float)2.185780, (float)2.831130,  
   (float)1.814970, (float)2.356010, (float)2.832640,  
   (float)1.767200, (float)2.479720, (float)2.928960,  
   (float)2.256130, (float)2.428210, (float)2.605760,  
   (float)2.259960, (float)2.507170, (float)2.777560,  
   (float)2.390370, (float)2.554350, (float)2.775460,  
   (float)2.233680, (float)2.433940, (float)2.774540,  
   (float)2.066350, (float)2.493770, (float)2.741600,  
   (float)2.411980, (float)2.669540, (float)2.924090,  
   (float)1.944010, (float)2.250960, (float)2.866450,  
   (float)2.104620, (float)2.615970, (float)2.856070,  
   (float)1.874170, (float)2.482700, (float)2.670070,  
   (float)2.449120, (float)2.600910, (float)2.796480,  
   (float)2.274920, (float)2.556840, (float)2.747970,  
   (float)1.948850, (float)2.554120, (float)2.943690,  
   (float)2.255390, (float)2.471180, (float)2.648030,  
   (float)2.103090, (float)2.399510, (float)2.567590,  
   (float)2.117480, (float)2.424500, (float)2.591710,  
   (float)2.143630, (float)2.549290, (float)2.832370,  
   (float)2.360880, (float)2.630190, (float)2.781750,  
   (float)1.967140, (float)2.158000, (float)2.722380,  
   (float)2.033080, (float)2.449830, (float)2.650260,  
   (float)2.380130, (float)2.566670, (float)2.741390,  
   (float)2.090190, (float)2.563890, (float)2.752500,  
   (float)2.004060, (float)2.240760, (float)2.881430,  
   (float)2.308140, (float)2.513260, (float)2.904190,  
   (float)2.087460, (float)2.369800, (float)2.771750,  
   (float)2.267250, (float)2.518290, (float)2.843900,  
   (float)2.001500, (float)2.395570, (float)2.676630,  
   (float)1.974940, (float)2.339330, (float)2.638890,  
   (float)2.142290, (float)2.313250, (float)2.579750,  
   (float)2.352710, (float)2.686260, (float)2.862100,  
   (float)2.250080, (float)2.555570, (float)2.813970,  
   (float)2.183170, (float)2.501720, (float)2.758350,  
   (float)1.873300, (float)2.245220, (float)2.469790,  
   (float)2.022040, (float)2.547280, (float)2.844150,  
   (float)2.128560, (float)2.347570, (float)2.590270,  
   (float)2.150450, (float)2.344990, (float)2.653930,  
   (float)2.026660, (float)2.415530, (float)2.725740,  
   (float)2.146880, (float)2.645750, (float)2.809070,  
   (float)2.100000, (float)2.325320, (float)2.574360,  
   (float)2.301230, (float)2.702560, (float)2.917030,  
   (float)2.195100, (float)2.562890, (float)2.783790,  
   (float)2.343280, (float)2.587450, (float)2.802560,  
   (float)2.241570, (float)2.470470, (float)2.823590,  
   (float)2.289090, (float)2.495780, (float)2.868720,  
   (float)2.086380, (float)2.545950, (float)2.863510,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         104 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.218100, (float)2.472300, (float)2.791840,  
   (float)1.950460, (float)2.210150, (float)2.552640,  
   (float)2.049760, (float)2.296650, (float)2.638160,  
   (float)1.920110, (float)2.527780, (float)2.769270,  
   (float)2.146670, (float)2.375150, (float)2.544960,  
   (float)2.190600, (float)2.460720, (float)2.798770,  
   (float)2.680100, (float)2.887240, (float)3.002990,  
   (float)2.411910, (float)2.644390, (float)2.890630,  
   (float)1.866870, (float)2.077040, (float)2.443610,  
   (float)1.910120, (float)2.535170, (float)2.814260,  
   (float)1.898560, (float)2.498140, (float)2.903470,  
   (float)2.156150, (float)2.537270, (float)2.802370,  
   (float)1.880630, (float)2.151000, (float)2.705900,  
   (float)2.093260, (float)2.490530, (float)2.720270,  
   (float)2.032210, (float)2.420600, (float)2.870740,  
   (float)1.910890, (float)2.241340, (float)2.613090,  
   (float)2.233760, (float)2.524730, (float)2.765020,  
   (float)2.157230, (float)2.358980, (float)2.775480,  
   (float)2.297950, (float)2.604340, (float)2.828720,  
   (float)2.246010, (float)2.588310, (float)2.838210,  
   (float)2.052850, (float)2.472450, (float)2.677480,  
   (float)2.164720, (float)2.521440, (float)2.739500,  
   (float)1.713850, (float)2.463560, (float)2.810580,  
   (float)1.863720, (float)2.488290, (float)2.760520,  
   (float)2.070470, (float)2.375180, (float)2.628990,  
   (float)2.138700, (float)2.313710, (float)2.642600,  
   (float)2.445450, (float)2.744550, (float)2.929370,  
   (float)1.947740, (float)2.262370, (float)2.475130,  
   (float)1.842390, (float)2.064040, (float)2.599480,  
   (float)2.022200, (float)2.229490, (float)2.727610,  
   (float)2.326520, (float)2.585080, (float)2.768660,  
   (float)1.965040, (float)2.192690, (float)2.823220,  
   (float)2.058620, (float)2.421430, (float)2.709630,  
   (float)2.244320, (float)2.485080, (float)2.766460,  
   (float)2.031890, (float)2.468680, (float)2.884770,  
   (float)2.105980, (float)2.422350, (float)2.776430,  
   (float)2.058700, (float)2.289550, (float)2.497330,  
   (float)2.241020, (float)2.520110, (float)2.692480,  
   (float)1.873030, (float)2.475220, (float)2.826350,  
   (float)2.210150, (float)2.502630, (float)2.770710,  
   (float)1.876570, (float)2.367460, (float)2.554550,  
   (float)1.921140, (float)2.350850, (float)2.832840,  
   (float)2.308780, (float)2.562610, (float)2.866320,  
   (float)1.938650, (float)2.321650, (float)2.675600,  
   (float)2.308790, (float)2.672380, (float)2.839370,  
   (float)1.981940, (float)2.420940, (float)2.751800,  
   (float)2.194160, (float)2.404660, (float)2.631180,  
   (float)2.053480, (float)2.345380, (float)2.564620,  
   (float)2.218350, (float)2.583280, (float)2.770760,  
   (float)2.123750, (float)2.289100, (float)2.619680,  
   (float)2.249610, (float)2.537930, (float)2.788770,  
   (float)2.446040, (float)2.718780, (float)2.951970,  
   (float)2.214150, (float)2.415050, (float)2.759140,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         105 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.068340, (float)2.545790, (float)2.775190,  
   (float)1.957550, (float)2.388070, (float)2.856890,  
   (float)2.141740, (float)2.452770, (float)2.843510,  
   (float)1.917800, (float)2.153790, (float)2.753100,  
   (float)2.173980, (float)2.581870, (float)2.769000,  
   (float)2.349220, (float)2.619020, (float)2.925620,  
   (float)2.303370, (float)2.701370, (float)2.875970,  
   (float)2.048630, (float)2.617890, (float)2.801390,  
   (float)2.084180, (float)2.326870, (float)2.894660,  
   (float)2.079710, (float)2.438010, (float)2.774780,  
   (float)1.968350, (float)2.487610, (float)2.704400,  
   (float)2.379020, (float)2.695920, (float)2.908560,  
   (float)2.150100, (float)2.432030, (float)2.652690,  
   (float)2.035560, (float)2.348390, (float)2.833790,  
   (float)1.999450, (float)2.403860, (float)2.845350,  
   (float)2.290030, (float)2.510270, (float)2.761520,  
   (float)2.096240, (float)2.476860, (float)2.896500,  
   (float)1.993280, (float)2.252560, (float)2.752190,  
   (float)1.993860, (float)2.503120, (float)2.671780,  
   (float)2.424390, (float)2.746290, (float)2.983050,  
   (float)2.380030, (float)2.664890, (float)2.897730,  
   (float)1.872070, (float)2.381920, (float)2.897900,  
   (float)2.018260, (float)2.643610, (float)2.832430,  
   (float)2.258020, (float)2.579200, (float)2.867550,  
   (float)1.921100, (float)2.296120, (float)2.638820,  
   (float)2.150370, (float)2.465230, (float)2.781220,  
   (float)2.128290, (float)2.405830, (float)2.668410,  
   (float)2.291090, (float)2.494960, (float)2.788120,  
   (float)2.402320, (float)2.599660, (float)2.869800,  
   (float)2.252990, (float)2.694960, (float)2.880680,  
   (float)1.940740, (float)2.303210, (float)2.590610,  
   (float)2.375540, (float)2.564330, (float)2.807250,  
   (float)2.005860, (float)2.560720, (float)2.743150,  
   (float)2.001200, (float)2.482310, (float)2.714330,  
   (float)1.743750, (float)2.261840, (float)2.584190,  
   (float)2.389370, (float)2.682530, (float)2.838070,  
   (float)2.171230, (float)2.657970, (float)2.892300,  
   (float)2.253600, (float)2.637660, (float)2.857920,  
   (float)1.849170, (float)2.617290, (float)2.935950,  
   (float)1.681310, (float)2.386730, (float)2.906460,  
   (float)1.888920, (float)2.388230, (float)2.733020,  
   (float)2.224080, (float)2.537730, (float)2.838060,  
   (float)2.080750, (float)2.438290, (float)2.684050,  
   (float)1.872130, (float)2.427660, (float)2.646610,  
   (float)2.477170, (float)2.705410, (float)2.914960,  
   (float)2.077930, (float)2.340400, (float)2.755770,  
   (float)2.203670, (float)2.370770, (float)2.713520,  
   (float)2.214910, (float)2.663530, (float)2.952690,  
   (float)2.069540, (float)2.519070, (float)2.838930,  
   (float)1.860770, (float)2.216800, (float)2.817630,  
   (float)1.890790, (float)2.451300, (float)2.728940,  
   (float)1.839840, (float)2.220670, (float)2.693530,  
   (float)2.268020, (float)2.552860, (float)2.922190,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         106 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   (float)2.269600, (float)2.429580, (float)2.668750,  
   (float)2.118850, (float)2.652060, (float)2.893860,  
   (float)1.841480, (float)2.383480, (float)2.697920,  
   (float)2.269800, (float)2.548940, (float)2.861990,  
   (float)2.299820, (float)2.531190, (float)2.862890,  
   (float)1.739600, (float)2.552450, (float)2.827300,  
   (float)2.169810, (float)2.370490, (float)2.878280,  
   (float)1.867880, (float)2.136400, (float)2.793280,  
   (float)2.556050, (float)2.690150, (float)2.840260,  
   (float)1.938970, (float)2.273450, (float)2.754060,  
   (float)1.885520, (float)2.107860, (float)2.646160,  
   (float)2.251450, (float)2.595480, (float)2.945790,  
   (float)1.900300, (float)2.371110, (float)2.677690,  
   (float)2.108350, (float)2.445140, (float)2.853380,  
   (float)2.190440, (float)2.598150, (float)2.861790,  
   (float)2.509770, (float)2.791770, (float)2.968800,  
   (float)1.985090, (float)2.349710, (float)2.737810,  
   (float)2.125270, (float)2.289290, (float)2.688570,  
   (float)2.260920, (float)2.436370, (float)2.755680,  
   (float)2.207560, (float)2.520560, (float)2.897020,  
   (float)2.054190, (float)2.383410, (float)2.726900,  
   (float)2.105080, (float)2.300330, (float)2.840270,  
   (float)2.182340, (float)2.399140, (float)2.597160,  
   (float)2.273920, (float)2.461050, (float)2.689370,  
   (float)2.301830, (float)2.554910, (float)2.813420,  
   (float)2.102100, (float)2.493660, (float)2.683060,  
   (float)1.930800, (float)2.382020, (float)2.581070,  
   (float)2.254140, (float)2.630600, (float)2.922210,  
   (float)2.112060, (float)2.645620, (float)2.965330,  
   (float)2.136560, (float)2.502050, (float)2.898870,  
   (float)2.086240, (float)2.365490, (float)2.876920,  
   (float)2.401630, (float)2.598880, (float)2.789160,  
   (float)1.969400, (float)2.329650, (float)2.800620,  
   (float)2.293010, (float)2.602260, (float)2.921450,  
   (float)2.161660, (float)2.549650, (float)2.725830,  
   (float)1.961870, (float)2.373990, (float)2.761780,  
   (float)2.118120, (float)2.348770, (float)2.754720,  
   (float)2.585270, (float)2.845940, (float)3.000520,  
   (float)2.363640, (float)2.517190, (float)2.763120,  
   (float)2.468590, (float)2.797610, (float)2.989710,  
   (float)2.098240, (float)2.560260, (float)2.826160,  
   (float)2.073830, (float)2.392810, (float)2.697610,  
   (float)1.925520, (float)2.352590, (float)2.538430,  
   (float)1.947980, (float)2.556690, (float)2.743530,  
   (float)2.091020, (float)2.550930, (float)2.903430,  
   (float)1.902840, (float)2.103000, (float)2.553420  
   }; 
    
    
   float cb_p[2560 /* 3*256+3*256+4*256 */] = { 
       (float)0.101647, (float)0.156603, (float)0.307874,  
       (float)-0.114286, (float)-0.160408, (float)-0.185633,  
       (float)0.075633, (float)0.094218, (float)0.183959,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         107 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.182714, (float)0.287816, (float)0.403346,  
       (float)0.070746, (float)0.044887, (float)0.020379,  
       (float)0.171241, (float)0.270833, (float)0.323869,  
       (float)0.018956, (float)-0.001815, (float)0.007225,  
       (float)0.042353, (float)0.078204, (float)0.024678,  
       (float)0.009607, (float)-0.014651, (float)0.000050,  
       (float)-0.077005, (float)-0.016956, (float)-0.061427,  
       (float)-0.037397, (float)-0.032935, (float)0.096784,  
       (float)-0.068801, (float)0.014445, (float)0.042025,  
       (float)0.020967, (float)0.053571, (float)0.013193,  
       (float)-0.024031, (float)-0.031318, (float)-0.056380,  
       (float)0.011791, (float)-0.015763, (float)-0.094265,  
       (float)0.045741, (float)0.021312, (float)0.002401,  
       (float)-0.203243, (float)-0.312359, (float)-0.410453,  
       (float)-0.037462, (float)0.057288, (float)0.107064,  
       (float)0.029352, (float)0.144392, (float)0.307770,  
       (float)0.023353, (float)-0.002541, (float)-0.014058,  
       (float)-0.197553, (float)-0.284905, (float)-0.276384,  
       (float)-0.021971, (float)-0.060975, (float)-0.148511,  
       (float)0.116669, (float)0.239525, (float)0.226046,  
       (float)-0.121842, (float)-0.208437, (float)-0.331073,  
       (float)-0.033337, (float)-0.025620, (float)0.024912,  
       (float)-0.023547, (float)0.118135, (float)0.133541,  
       (float)0.043934, (float)0.203278, (float)0.343411,  
       (float)-0.143077, (float)-0.213751, (float)-0.267076,  
       (float)0.064124, (float)0.058813, (float)0.078549,  
       (float)-0.040669, (float)-0.022956, (float)-0.041996,  
       (float)0.090611, (float)0.080789, (float)0.116521,  
       (float)0.084032, (float)0.096174, (float)0.070863,  
       (float)-0.010794, (float)-0.036720, (float)-0.023205,  
       (float)0.017456, (float)0.033152, (float)0.141670,  
       (float)0.121615, (float)0.117136, (float)0.080990,  
       (float)-0.072810, (float)-0.098362, (float)-0.079238,  
       (float)0.082268, (float)0.163590, (float)0.237963,  
       (float)-0.058318, (float)0.143227, (float)0.259539,  
       (float)-0.104645, (float)-0.166031, (float)-0.232272,  
       (float)0.089506, (float)0.074099, (float)0.048033,  
       (float)-0.066507, (float)-0.051851, (float)-0.006128,  
       (float)-0.113373, (float)-0.181634, (float)-0.270446,  
       (float)-0.067385, (float)-0.100718, (float)-0.113891,  
       (float)-0.002710, (float)0.035500, (float)0.102843,  
       (float)0.003005, (float)0.010807, (float)0.031245,  
       (float)-0.028003, (float)-0.040993, (float)-0.040093,  
       (float)-0.056629, (float)-0.069395, (float)-0.061594,  
       (float)-0.019843, (float)0.013355, (float)-0.005757,  
       (float)-0.005916, (float)0.104663, (float)0.184308,  
       (float)0.015343, (float)-0.006399, (float)0.050178,  
       (float)0.078914, (float)0.180649, (float)0.139430,  
       (float)-0.026850, (float)-0.008017, (float)-0.022200,  
       (float)0.008070, (float)0.001275, (float)-0.038135,  
       (float)0.085065, (float)0.206562, (float)0.283845,  
       (float)-0.082069, (float)0.084999, (float)0.130248,  
       (float)-0.144281, (float)-0.183606, (float)-0.146812,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         108 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.045514, (float)-0.081468, (float)-0.091192,  
       (float)0.075238, (float)0.126354, (float)0.111271,  
       (float)-0.082980, (float)0.069267, (float)0.054482,  
       (float)0.031538, (float)0.022801, (float)-0.010558,  
       (float)-0.002734, (float)0.028099, (float)0.183280,  
       (float)-0.043275, (float)-0.045616, (float)-0.059342,  
       (float)-0.026252, (float)-0.017238, (float)-0.001124,  
       (float)0.136014, (float)0.225648, (float)0.356492,  
       (float)-0.090912, (float)-0.135988, (float)-0.167528,  
       (float)-0.056471, (float)-0.053362, (float)-0.097824,  
       (float)-0.039067, (float)-0.035066, (float)-0.002459,  
       (float)0.184879, (float)0.237139, (float)0.158367,  
       (float)0.032432, (float)0.046175, (float)0.033395,  
       (float)0.001227, (float)0.019113, (float)0.005833,  
       (float)-0.000656, (float)0.157718, (float)0.193270,  
       (float)-0.188550, (float)-0.118638, (float)0.014324,  
       (float)0.143732, (float)0.191741, (float)0.169144,  
       (float)0.029864, (float)0.045912, (float)-0.019104,  
       (float)-0.007910, (float)0.041061, (float)0.002476,  
       (float)-0.053623, (float)0.035341, (float)0.081782,  
       (float)-0.083612, (float)-0.053587, (float)-0.040111,  
       (float)-0.126216, (float)0.010859, (float)0.043341,  
       (float)-0.139990, (float)-0.155418, (float)-0.063780,  
       (float)0.034234, (float)0.081943, (float)0.219530,  
       (float)-0.029038, (float)-0.047427, (float)0.016433,  
       (float)0.001795, (float)0.050245, (float)0.038111,  
       (float)0.163893, (float)0.211998, (float)0.225083,  
       (float)-0.006519, (float)-0.002726, (float)0.125967,  
       (float)0.032342, (float)0.119929, (float)0.180382,  
       (float)-0.008032, (float)-0.055284, (float)-0.188150,  
       (float)0.028078, (float)0.022309, (float)0.047304,  
       (float)0.070188, (float)0.145892, (float)0.076101,  
       (float)0.082942, (float)0.069966, (float)0.019008,  
       (float)0.064357, (float)0.061715, (float)0.037541,  
       (float)-0.049850, (float)-0.046458, (float)-0.031598,  
       (float)0.070595, (float)0.285006, (float)0.378438,  
       (float)0.087088, (float)0.126236, (float)0.155122,  
       (float)-0.078782, (float)-0.005303, (float)0.088694,  
       (float)0.063978, (float)0.033399, (float)-0.053112,  
       (float)0.057796, (float)0.033509, (float)0.008543,  
       (float)0.114180, (float)0.153806, (float)0.194225,  
       (float)0.017506, (float)0.007438, (float)0.085335,  
       (float)-0.019630, (float)0.207068, (float)0.292366,  
       (float)-0.027217, (float)-0.048151, (float)-0.022808,  
       (float)-0.080388, (float)-0.086189, (float)-0.154391,  
       (float)0.029251, (float)0.063250, (float)0.180188,  
       (float)-0.023623, (float)0.065619, (float)0.162705,  
       (float)-0.010235, (float)0.065837, (float)0.077293,  
       (float)-0.039484, (float)-0.059381, (float)-0.008757,  
       (float)0.020153, (float)0.112159, (float)0.097077,  
       (float)-0.008189, (float)-0.025467, (float)-0.052820,  
       (float)0.014910, (float)0.095016, (float)0.145495,  
       (float)0.194843, (float)0.272630, (float)0.250678,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         109 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.050782, (float)0.061650, (float)0.136016,  
       (float)-0.126186, (float)-0.116646, (float)0.014980,  
       (float)-0.059720, (float)-0.111839, (float)-0.204028,  
       (float)-0.027048, (float)-0.030219, (float)-0.021549,  
       (float)-0.034771, (float)-0.061116, (float)-0.074599,  
       (float)0.017573, (float)0.031722, (float)0.000350,  
       (float)-0.018716, (float)-0.024178, (float)-0.036583,  
       (float)0.036492, (float)0.010432, (float)-0.015344,  
       (float)-0.156398, (float)-0.054309, (float)0.091330,  
       (float)0.106879, (float)0.107703, (float)0.028268,  
       (float)0.061406, (float)0.149828, (float)0.191568,  
       (float)0.060886, (float)0.049794, (float)-0.004897,  
       (float)0.031060, (float)0.002888, (float)-0.061189,  
       (float)-0.091467, (float)0.001323, (float)-0.009446,  
       (float)0.035162, (float)0.007471, (float)0.002001,  
       (float)-0.029675, (float)-0.060260, (float)-0.110740,  
       (float)0.099151, (float)0.291079, (float)0.491465,  
       (float)-0.017336, (float)-0.006304, (float)-0.047077,  
       (float)0.025685, (float)0.018155, (float)0.007351,  
       (float)0.000276, (float)-0.013918, (float)-0.039593,  
       (float)-0.054070, (float)-0.076297, (float)-0.025764,  
       (float)0.036003, (float)0.061728, (float)0.053931,  
       (float)0.007584, (float)0.026570, (float)-0.049862,  
       (float)0.006014, (float)-0.022121, (float)-0.022297,  
       (float)-0.020100, (float)0.074827, (float)0.225360,  
       (float)-0.036903, (float)0.032407, (float)0.264711,  
       (float)-0.030832, (float)0.110708, (float)0.079370,  
       (float)-0.139392, (float)-0.188680, (float)-0.210632,  
       (float)0.060132, (float)0.036904, (float)0.042170,  
       (float)-0.098378, (float)0.056928, (float)0.199476,  
       (float)0.038701, (float)0.016479, (float)-0.034712,  
       (float)0.004073, (float)0.070340, (float)0.121869,  
       (float)-0.020931, (float)0.026977, (float)0.020896,  
       (float)-0.008362, (float)-0.016828, (float)0.074275,  
       (float)0.055662, (float)0.090454, (float)0.097236,  
       (float)0.007885, (float)0.083095, (float)0.288056,  
       (float)0.014080, (float)-0.011090, (float)-0.028803,  
       (float)-0.110319, (float)-0.045462, (float)0.018523,  
       (float)-0.130917, (float)0.028812, (float)0.117188,  
       (float)-0.022307, (float)-0.021386, (float)-0.075937,  
       (float)0.050554, (float)0.101466, (float)0.138214,  
       (float)-0.018707, (float)-0.036518, (float)-0.004777,  
       (float)0.216755, (float)0.316245, (float)0.324474,  
       (float)-0.165692, (float)-0.255478, (float)-0.323505,  
       (float)-0.010701, (float)-0.036093, (float)-0.125848,  
       (float)-0.036576, (float)-0.084140, (float)-0.180415,  
       (float)-0.196124, (float)-0.119466, (float)-0.083410,  
       (float)-0.025286, (float)0.006269, (float)0.092609,  
       (float)0.191695, (float)0.377873, (float)0.415567,  
       (float)0.083991, (float)0.196256, (float)0.192680,  
       (float)-0.023709, (float)-0.048567, (float)-0.057384,  
       (float)0.010199, (float)0.003688, (float)-0.021775,  
       (float)-0.134984, (float)-0.114662, (float)-0.129098,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         110 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.015590, (float)-0.035942, (float)0.042045,  
       (float)0.017605, (float)0.045250, (float)0.071923,  
       (float)-0.003447, (float)-0.026744, (float)-0.036069,  
       (float)0.008608, (float)-0.007730, (float)-0.061013,  
       (float)-0.005505, (float)-0.007352, (float)-0.025937,  
       (float)0.039266, (float)0.188570, (float)0.242694,  
       (float)-0.064454, (float)0.121666, (float)0.187051,  
       (float)-0.030473, (float)-0.000669, (float)0.020900,  
       (float)0.126888, (float)0.148515, (float)0.131469,  
       (float)0.154986, (float)0.172110, (float)0.085410,  
       (float)-0.084400, (float)-0.053391, (float)0.142586,  
       (float)-0.102964, (float)-0.066747, (float)-0.093577,  
       (float)-0.027015, (float)-0.044126, (float)-0.080523,  
       (float)-0.034945, (float)0.054678, (float)0.047600,  
       (float)0.027695, (float)0.174781, (float)0.421081,  
       (float)0.007116, (float)-0.022779, (float)-0.048390,  
       (float)-0.009213, (float)-0.039053, (float)-0.092195,  
       (float)0.026542, (float)0.148812, (float)0.130779,  
       (float)-0.055235, (float)-0.062783, (float)0.022333,  
       (float)0.012747, (float)0.031666, (float)0.021672,  
       (float)-0.025531, (float)0.014182, (float)0.052679,  
       (float)-0.094533, (float)-0.125736, (float)-0.040327,  
       (float)0.034204, (float)0.034178, (float)0.014467,  
       (float)0.010758, (float)0.086917, (float)0.060563,  
       (float)-0.059326, (float)-0.118513, (float)-0.164752,  
       (float)-0.095704, (float)-0.125914, (float)-0.085722,  
       (float)-0.081798, (float)-0.075503, (float)0.068908,  
       (float)0.002459, (float)0.004455, (float)-0.006626,  
       (float)0.038998, (float)0.036684, (float)0.106465,  
       (float)-0.009146, (float)-0.010151, (float)-0.007517,  
       (float)-0.049033, (float)-0.000535, (float)0.137529,  
       (float)0.021830, (float)0.015265, (float)-0.024020,  
       (float)-0.037049, (float)-0.060368, (float)-0.043476,  
       (float)0.042905, (float)0.265228, (float)0.257688,  
       (float)-0.010067, (float)-0.038476, (float)-0.065380,  
       (float)0.039914, (float)0.036286, (float)-0.001860,  
       (float)-0.042375, (float)-0.013551, (float)0.055903,  
       (float)-0.168232, (float)-0.235276, (float)-0.210167,  
       (float)-0.045604, (float)-0.045519, (float)0.053357,  
       (float)-0.053472, (float)-0.021750, (float)-0.018801,  
       (float)-0.048637, (float)0.020410, (float)-0.035803,  
       (float)-0.039800, (float)-0.100674, (float)-0.242474,  
       (float)0.007381, (float)-0.015628, (float)0.021387,  
       (float)-0.052622, (float)0.044024, (float)0.012394,  
       (float)-0.047222, (float)-0.084756, (float)-0.134810,  
       (float)-0.004639, (float)0.024037, (float)0.064967,  
       (float)-0.073421, (float)-0.137455, (float)-0.249802,  
       (float)0.048224, (float)0.049422, (float)0.017136,  
       (float)0.019854, (float)-0.026154, (float)-0.140485,  
       (float)-0.008495, (float)-0.001529, (float)0.011282,  
       (float)-0.012424, (float)-0.027151, (float)0.013677,  
       (float)-0.013136, (float)-0.037900, (float)-0.043875,  
       (float)0.092597, (float)0.074982, (float)-0.022129,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         111 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.039894, (float)0.004283, (float)0.190252,  
       (float)0.019715, (float)0.207759, (float)0.165885,  
       (float)-0.010286, (float)0.009299, (float)-0.024232,  
       (float)0.002655, (float)-0.025374, (float)-0.069129,  
       (float)-0.010032, (float)-0.021499, (float)-0.020474,  
       (float)-0.149002, (float)-0.252620, (float)-0.394962,  
       (float)-0.072276, (float)-0.091690, (float)-0.045376,  
       (float)0.018562, (float)-0.010640, (float)-0.042950,  
       (float)0.044609, (float)0.025528, (float)0.067743,  
       (float)0.048105, (float)0.097391, (float)0.057379,  
       (float)0.053803, (float)0.026458, (float)-0.015385,  
       (float)0.153209, (float)0.221891, (float)0.283713,  
       (float)0.028053, (float)0.069853, (float)0.095519,  
       (float)-0.084833, (float)-0.139260, (float)-0.206422,  
       (float)0.045989, (float)0.008434, (float)-0.102625,  
       (float)-0.087123, (float)-0.122195, (float)-0.128159,  
       (float)0.064114, (float)0.116348, (float)0.241050,  
       (float)-0.019013, (float)0.096385, (float)0.367378,  
       (float)0.025787, (float)0.001488, (float)-0.031029,  
       (float)0.049313, (float)0.022534, (float)0.023737,  
       (float)0.009696, (float)0.135889, (float)0.245375,  
       (float)0.179217, (float)0.431035, (float)0.582647,  
       (float)-0.047342, (float)0.003777, (float)-0.001497,  
       (float)-0.080549, (float)-0.152492, (float)-0.303481,  
       (float)-0.122496, (float)-0.090577, (float)-0.052154,  
       (float)0.029398, (float)0.005204, (float)0.025625,  
       (float)-0.025821, (float)0.032411, (float)0.138528,  
       (float)0.004573, (float)0.022412, (float)-0.012475,  
       (float)-0.002749, (float)-0.026395, (float)-0.002159,  
       (float)0.019963, (float)0.010501, (float)-0.007393,  
       (float)-0.011260, (float)-0.012239, (float)0.040555,  
       (float)0.008411, (float)-0.009018, (float)-0.014164,  
       (float)-0.147156, (float)-0.044502, (float)-0.023256,  
       (float)-0.081528, (float)-0.091503, (float)0.001629,  
       (float)-0.013890, (float)0.287522, (float)0.427420,  
       (float)-0.186380, (float)-0.217917, (float)-0.104858,  
       (float)0.127015, (float)0.185857, (float)0.244742,  
       (float)-0.065164, (float)-0.023989, (float)0.022565,  
       (float)-0.004134, (float)0.089638, (float)0.017688,  
       (float)-0.105806, (float)-0.160214, (float)-0.124350,  
       (float)0.098733, (float)0.258890, (float)0.303078,  
       (float)-0.002922, (float)-0.147373, (float)-0.061136,  
       (float)-0.027317, (float)0.116500, (float)0.079213,  
       (float)0.051246, (float)-0.009354, (float)0.089225,  
       (float)-0.056256, (float)-0.118489, (float)0.001152,  
       (float)-0.031552, (float)-0.043076, (float)-0.103002,  
       (float)0.051502, (float)0.019425, (float)-0.030664,  
       (float)-0.237829, (float)-0.044380, (float)-0.061874,  
       (float)-0.099386, (float)-0.087550, (float)-0.083973,  
       (float)-0.329966, (float)-0.252288, (float)-0.321328,  
       (float)0.157618, (float)0.031950, (float)-0.055430,  
       (float)-0.051217, (float)0.025064, (float)-0.025659,  
       (float)-0.062184, (float)-0.039902, (float)-0.080501,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         112 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.072291, (float)-0.044789, (float)0.054084,  
       (float)-0.190696, (float)-0.329295, (float)-0.429805,  
       (float)-0.141164, (float)-0.206095, (float)-0.156032,  
       (float)0.007329, (float)0.007942, (float)-0.046255,  
       (float)-0.080762, (float)-0.079559, (float)-0.000018,  
       (float)0.208131, (float)0.222627, (float)0.322905,  
       (float)0.044003, (float)0.080884, (float)0.130427,  
       (float)-0.003964, (float)-0.017547, (float)-0.040533,  
       (float)-0.109941, (float)-0.230645, (float)-0.354087,  
       (float)0.027584, (float)0.009669, (float)-0.020229,  
       (float)-0.025228, (float)-0.092245, (float)-0.057674,  
       (float)-0.077466, (float)-0.066493, (float)0.102980,  
       (float)0.091702, (float)-0.150504, (float)-0.208143,  
       (float)0.011956, (float)-0.239224, (float)-0.302488,  
       (float)-0.084151, (float)-0.241800, (float)-0.215889,  
       (float)0.197823, (float)0.241373, (float)0.168617,  
       (float)-0.064814, (float)-0.038343, (float)0.172973,  
       (float)0.290103, (float)0.309703, (float)0.155201,  
       (float)-0.183672, (float)0.037789, (float)0.031083,  
       (float)0.072471, (float)0.044525, (float)0.188654,  
       (float)-0.224078, (float)-0.237094, (float)-0.030795,  
       (float)-0.173997, (float)-0.173473, (float)0.041141,  
       (float)-0.187269, (float)-0.132552, (float)-0.050729,  
       (float)0.083230, (float)0.109884, (float)0.067945,  
       (float)0.155764, (float)0.143772, (float)0.274798,  
       (float)-0.325825, (float)-0.185942, (float)0.061861,  
       (float)0.044108, (float)0.143792, (float)0.159857,  
       (float)0.071511, (float)0.052406, (float)-0.004564,  
       (float)0.190623, (float)-0.000137, (float)0.006562,  
       (float)0.080492, (float)0.048738, (float)0.112595,  
       (float)0.274439, (float)0.225704, (float)0.192074,  
       (float)-0.155751, (float)-0.142430, (float)-0.214018,  
       (float)-0.213905, (float)-0.293654, (float)-0.340117,  
       (float)-0.038314, (float)-0.056052, (float)-0.051140,  
       (float)-0.331388, (float)-0.380922, (float)-0.216378,  
       (float)-0.014596, (float)0.168776, (float)0.119557,  
       (float)0.247930, (float)0.215622, (float)0.094155,  
       (float)-0.045285, (float)-0.153285, (float)-0.129308,  
       (float)0.257543, (float)0.170753, (float)-0.009628,  
       (float)-0.104630, (float)-0.180423, (float)-0.268239,  
       (float)-0.024809, (float)-0.056644, (float)-0.009843,  
       (float)-0.047003, (float)0.059877, (float)0.086661,  
       (float)-0.372728, (float)-0.204993, (float)-0.196632,  
       (float)0.005879, (float)-0.012847, (float)0.020206,  
       (float)0.090534, (float)-0.012162, (float)-0.053793,  
       (float)-0.049855, (float)0.049773, (float)0.039971,  
       (float)0.119973, (float)0.209777, (float)0.305545,  
       (float)-0.086203, (float)0.015587, (float)0.118761,  
       (float)-0.040239, (float)0.082160, (float)0.003576,  
       (float)0.002462, (float)-0.001138, (float)-0.019923,  
       (float)0.199879, (float)0.231740, (float)0.246034,  
       (float)0.062803, (float)-0.083368, (float)-0.027502,  
       (float)-0.026761, (float)0.030339, (float)-0.055666,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         113 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.005631, (float)0.007546, (float)0.095696,  
       (float)-0.029613, (float)-0.066512, (float)-0.086799,  
       (float)0.357528, (float)0.229341, (float)0.134697,  
       (float)-0.101458, (float)-0.108007, (float)0.043901,  
       (float)-0.102034, (float)0.041409, (float)0.003990,  
       (float)-0.015058, (float)-0.015983, (float)0.052442,  
       (float)-0.037479, (float)-0.102625, (float)-0.099912,  
       (float)-0.021791, (float)-0.041924, (float)-0.071286,  
       (float)-0.008137, (float)-0.061575, (float)-0.042142,  
       (float)0.389406, (float)0.436496, (float)0.426934,  
       (float)0.279856, (float)0.142775, (float)0.121829,  
       (float)0.482664, (float)0.428100, (float)0.283485,  
       (float)0.262737, (float)0.155761, (float)0.244966,  
       (float)-0.054330, (float)-0.079428, (float)-0.071692,  
       (float)0.049271, (float)-0.034606, (float)-0.100922,  
       (float)-0.008634, (float)0.050189, (float)0.022422,  
       (float)-0.001060, (float)-0.035318, (float)-0.091661,  
       (float)-0.009416, (float)-0.091219, (float)-0.202970,  
       (float)-0.116997, (float)-0.096726, (float)-0.148842,  
       (float)0.025167, (float)0.025121, (float)0.033181,  
       (float)0.023439, (float)0.023302, (float)-0.091961,  
       (float)0.037462, (float)0.006365, (float)0.009463,  
       (float)0.098743, (float)0.168459, (float)0.134782,  
       (float)-0.326847, (float)-0.146533, (float)-0.068851,  
       (float)-0.110194, (float)-0.035229, (float)-0.110360,  
       (float)0.105827, (float)0.078590, (float)0.013856,  
       (float)-0.365999, (float)-0.390519, (float)-0.360565,  
       (float)0.049178, (float)0.079518, (float)0.023420,  
       (float)-0.022779, (float)0.080616, (float)0.048381,  
       (float)0.184572, (float)0.168003, (float)0.118680,  
       (float)-0.026428, (float)-0.001468, (float)-0.036151,  
       (float)0.072791, (float)0.016364, (float)-0.001912,  
       (float)-0.168656, (float)-0.223794, (float)-0.223778,  
       (float)0.141245, (float)0.130730, (float)0.147051,  
       (float)-0.195176, (float)-0.159967, (float)-0.127011,  
       (float)-0.075405, (float)-0.004863, (float)-0.016829,  
       (float)0.338733, (float)0.248516, (float)0.246625,  
       (float)0.173359, (float)0.074217, (float)0.011036,  
       (float)-0.055015, (float)-0.073762, (float)-0.116171,  
       (float)0.062420, (float)0.003818, (float)0.039012,  
       (float)0.014745, (float)0.082840, (float)0.191838,  
       (float)-0.000152, (float)-0.048068, (float)0.025851,  
       (float)0.007260, (float)0.090426, (float)0.023487,  
       (float)0.116632, (float)0.031707, (float)-0.010842,  
       (float)0.148176, (float)0.174229, (float)0.037239,  
       (float)-0.091135, (float)-0.046301, (float)-0.044599,  
       (float)-0.109844, (float)0.062566, (float)0.266820,  
       (float)0.099804, (float)0.008037, (float)-0.130432,  
       (float)0.138324, (float)0.183545, (float)0.196940,  
       (float)0.153627, (float)0.314946, (float)0.304854,  
       (float)0.281727, (float)0.083295, (float)0.043573,  
       (float)-0.007664, (float)0.053085, (float)-0.008300,  
       (float)-0.034603, (float)0.000197, (float)-0.095557,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         114 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.041646, (float)-0.001363, (float)-0.056964,  
       (float)-0.142500, (float)-0.076992, (float)-0.028286,  
       (float)-0.093217, (float)0.022766, (float)0.056199,  
       (float)0.389996, (float)0.327565, (float)0.332503,  
       (float)0.012267, (float)-0.069951, (float)-0.084740,  
       (float)-0.029000, (float)0.043944, (float)0.132488,  
       (float)-0.172241, (float)-0.281603, (float)-0.117031,  
       (float)-0.079467, (float)-0.111642, (float)-0.212284,  
       (float)-0.033227, (float)-0.052185, (float)0.059494,  
       (float)-0.036467, (float)-0.040205, (float)0.112118,  
       (float)-0.288124, (float)-0.296569, (float)-0.098710,  
       (float)0.131964, (float)-0.082882, (float)-0.114379,  
       (float)0.033875, (float)-0.038051, (float)-0.059338,  
       (float)-0.013638, (float)0.033421, (float)0.056818,  
       (float)0.273643, (float)0.401475, (float)0.498271,  
       (float)0.214226, (float)0.331382, (float)0.213331,  
       (float)-0.185555, (float)-0.203774, (float)-0.308272,  
       (float)0.417448, (float)0.558544, (float)0.564183,  
       (float)-0.149665, (float)-0.296913, (float)-0.267622,  
       (float)0.167244, (float)0.101322, (float)0.205946,  
       (float)0.372599, (float)0.186194, (float)0.027106,  
       (float)0.077913, (float)0.041261, (float)-0.053545,  
       (float)-0.018411, (float)-0.016188, (float)-0.063478,  
       (float)0.173103, (float)0.283436, (float)0.406889,  
       (float)-0.011926, (float)0.022695, (float)-0.019483,  
       (float)-0.016587, (float)-0.073412, (float)-0.124829,  
       (float)-0.128873, (float)-0.124025, (float)0.143507,  
       (float)0.005048, (float)-0.009988, (float)0.151611,  
       (float)0.020831, (float)-0.099635, (float)-0.133662,  
       (float)-0.159369, (float)-0.011440, (float)-0.028336,  
       (float)-0.043884, (float)0.034133, (float)0.005377,  
       (float)-0.088351, (float)0.095988, (float)0.059708,  
       (float)0.206010, (float)0.124303, (float)0.060140,  
       (float)0.024569, (float)0.055734, (float)0.009367,  
       (float)0.504129, (float)0.531876, (float)0.443218,  
       (float)-0.055036, (float)-0.004250, (float)0.028011,  
       (float)-0.014233, (float)0.015105, (float)0.022364,  
       (float)0.135297, (float)0.063048, (float)0.148979,  
       (float)-0.150041, (float)-0.202729, (float)-0.062824,  
       (float)0.040212, (float)0.095548, (float)0.287722,  
       (float)0.262125, (float)0.397363, (float)0.370188,  
       (float)-0.050157, (float)0.002393, (float)0.078004,  
       (float)-0.024095, (float)-0.169140, (float)-0.195090,  
       (float)0.029141, (float)0.032337, (float)0.079035,  
       (float)0.212340, (float)0.093282, (float)0.123318,  
       (float)-0.245203, (float)-0.226260, (float)-0.160457,  
       (float)0.417481, (float)0.321441, (float)0.179777,  
       (float)0.270377, (float)0.295371, (float)0.277090,  
       (float)-0.038503, (float)0.157504, (float)0.194870,  
       (float)-0.406878, (float)-0.345830, (float)-0.077838,  
       (float)-0.151586, (float)-0.050811, (float)0.065830,  
       (float)-0.438365, (float)-0.545321, (float)-0.508286,  
       (float)0.081580, (float)0.122913, (float)0.023967,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         115 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.330869, (float)0.397232, (float)0.270918,  
       (float)-0.005851, (float)-0.028318, (float)-0.010222,  
       (float)-0.169129, (float)-0.070055, (float)-0.097200,  
       (float)0.060881, (float)0.175568, (float)0.238490,  
       (float)-0.244182, (float)-0.163779, (float)-0.232775,  
       (float)-0.057262, (float)-0.041989, (float)-0.010891,  
       (float)-0.110610, (float)-0.028284, (float)0.015677,  
       (float)-0.010819, (float)-0.092129, (float)0.000825,  
       (float)0.038489, (float)0.034075, (float)-0.003789,  
       (float)-0.054297, (float)-0.016035, (float)-0.054255,  
       (float)-0.183093, (float)-0.087467, (float)-0.169302,  
       (float)-0.073592, (float)-0.147007, (float)-0.074979,  
       (float)0.025410, (float)0.101676, (float)0.060540,  
       (float)0.021173, (float)-0.016304, (float)-0.003041,  
       (float)-0.456864, (float)-0.474140, (float)-0.269654,  
       (float)0.006725, (float)-0.030154, (float)-0.138263,  
       (float)0.104290, (float)-0.018637, (float)0.013075,  
       (float)0.068343, (float)0.036516, (float)0.065745,  
       (float)0.042537, (float)-0.040778, (float)0.026005,  
       (float)0.007379, (float)-0.044031, (float)0.085539,  
       (float)-0.025893, (float)-0.033359, (float)-0.034674,  
       (float)-0.024846, (float)0.026495, (float)0.208398,  
       (float)0.137611, (float)0.094333, (float)0.097806,  
       (float)0.034403, (float)0.027634, (float)0.131637,  
       (float)0.611482, (float)0.699476, (float)0.625270,  
       (float)-0.272692, (float)-0.114492, (float)-0.149079,  
       (float)0.135743, (float)0.109393, (float)-0.042790,  
       (float)-0.250773, (float)-0.262219, (float)-0.256142,  
       (float)0.055674, (float)0.074512, (float)0.080377,  
       (float)-0.293857, (float)-0.439265, (float)-0.481425,  
       (float)0.107672, (float)0.069199, (float)0.067083,  
       (float)0.054344, (float)-0.017308, (float)-0.020041,  
       (float)0.057625, (float)0.041118, (float)0.026264,  
       (float)-0.048073, (float)-0.070619, (float)0.024466,  
       (float)0.041420, (float)0.087133, (float)-0.027562,  
       (float)0.281114, (float)0.284102, (float)0.381146,  
       (float)-0.086611, (float)-0.182965, (float)0.002136,  
       (float)0.073908, (float)0.175515, (float)0.076929,  
       (float)-0.100085, (float)0.006705, (float)-0.058559,  
       (float)-0.047726, (float)-0.078704, (float)-0.023374,  
       (float)-0.000315, (float)0.242118, (float)0.330054,  
       (float)-0.073520, (float)-0.113324, (float)-0.117121,  
       (float)0.009714, (float)0.024022, (float)-0.000092,  
       (float)-0.030012, (float)-0.130854, (float)-0.273529,  
       (float)0.274260, (float)0.079299, (float)-0.066549,  
       (float)0.017385, (float)0.039419, (float)-0.032639,  
       (float)-0.000660, (float)-0.036182, (float)-0.056361,  
       (float)0.093705, (float)0.111815, (float)0.197515,  
       (float)-0.254449, (float)-0.061267, (float)0.020106,  
       (float)-0.012949, (float)0.106749, (float)0.125325,  
       (float)-0.082361, (float)-0.237584, (float)-0.101400,  
       (float)0.087013, (float)0.108656, (float)0.119311,  
       (float)0.130680, (float)0.138713, (float)0.090182,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         116 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.212072, (float)0.156738, (float)0.174103,  
       (float)-0.049350, (float)-0.107280, (float)-0.157766,  
       (float)0.140367, (float)0.230809, (float)0.114500,  
       (float)0.116183, (float)0.011284, (float)0.089604,  
       (float)-0.051406, (float)-0.096667, (float)0.068657,  
       (float)-0.195316, (float)0.039495, (float)0.127515,  
       (float)0.015098, (float)-0.047317, (float)-0.020644,  
       (float)0.135230, (float)0.104913, (float)0.047088,  
       (float)0.034968, (float)0.131745, (float)0.095055,  
       (float)0.009959, (float)-0.014947, (float)-0.070821,  
       (float)0.223978, (float)-0.007398, (float)-0.166985,  
       (float)0.047219, (float)0.223558, (float)0.154105,  
       (float)-0.259246, (float)-0.385490, (float)-0.344447,  
       (float)0.044620, (float)-0.047977, (float)-0.189986,  
       (float)0.106057, (float)0.039685, (float)0.033318,  
       (float)-0.114759, (float)-0.150116, (float)-0.112920,  
       (float)0.172362, (float)0.055369, (float)0.068639,  
       (float)-0.088916, (float)-0.167303, (float)-0.180761,  
       (float)-0.109497, (float)-0.130142, (float)-0.031125,  
       (float)0.023023, (float)0.063934, (float)0.047228,  
       (float)-0.028208, (float)-0.004917, (float)-0.003599,  
       (float)0.022885, (float)-0.007659, (float)0.053246,  
       (float)-0.029192, (float)-0.036486, (float)0.018157,  
       (float)0.097317, (float)0.273316, (float)0.215175,  
       (float)-0.076356, (float)0.098769, (float)0.144888,  
       (float)0.013931, (float)0.142398, (float)0.038400,  
       (float)-0.052115, (float)-0.054792, (float)-0.160158,  
       (float)-0.068091, (float)-0.105723, (float)-0.049007,  
       (float)0.020139, (float)-0.015368, (float)-0.037300,  
       (float)0.074089, (float)0.068589, (float)0.040823,  
       (float)-0.241743, (float)-0.342435, (float)-0.208325,  
       (float)-0.000682, (float)0.070770, (float)0.088546,  
       (float)0.047325, (float)-0.006978, (float)0.002644,  
       (float)0.115786, (float)0.167659, (float)0.145532,  
       (float)0.125269, (float)0.048056, (float)-0.042945,  
       (float)-0.023479, (float)-0.069857, (float)0.046446,  
       (float)0.031597, (float)0.043535, (float)0.054694,  
       (float)0.000198, (float)0.024241, (float)0.024003,  
       (float)0.054837, (float)0.040984, (float)-0.092373,  
       (float)-0.028649, (float)-0.051995, (float)-0.032866,  
       (float)0.391557, (float)0.198290, (float)-0.015891,  
       (float)-0.040287, (float)-0.029169, (float)0.003571,  
       (float)0.039823, (float)0.035104, (float)-0.004200,  
       (float)-0.044559, (float)0.039039, (float)0.014894,  
       (float)0.247807, (float)0.111033, (float)0.038195,  
       (float)0.029950, (float)0.021416, (float)-0.102171,  
       (float)-0.073460, (float)0.005240, (float)-0.077134,  
       (float)-0.025827, (float)-0.114741, (float)-0.014864,  
       (float)-0.148630, (float)-0.035463, (float)-0.080250,  
       (float)-0.004164, (float)0.029383, (float)-0.025587,  
       (float)-0.162516, (float)-0.160870, (float)0.118620,  
       (float)0.041626, (float)-0.028426, (float)0.074201,  
       (float)-0.051565, (float)-0.039931, (float)-0.022328,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         117 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.003898, (float)0.331095, (float)0.321639,  
       (float)0.171372, (float)0.075956, (float)-0.227299,  
       (float)-0.246122, (float)-0.061456, (float)-0.065147,  
       (float)-0.025381, (float)-0.023135, (float)-0.010056,  
       (float)0.095102, (float)0.106510, (float)0.063172,  
       (float)-0.072783, (float)-0.009204, (float)-0.178741,  
       (float)-0.012860, (float)0.016247, (float)0.020345,  
       (float)0.022732, (float)0.069584, (float)0.032504,  
       (float)0.037788, (float)0.071568, (float)0.025887,  
       (float)0.032061, (float)-0.032940, (float)-0.004162,  
       (float)0.016303, (float)-0.121347, (float)-0.082735,  
       (float)0.042385, (float)0.014474, (float)0.013345,  
       (float)0.018750, (float)0.087155, (float)0.056183,  
       (float)-0.002594, (float)-0.020950, (float)-0.277457,  
       (float)-0.136817, (float)-0.157510, (float)-0.176577,  
       (float)-0.016505, (float)-0.061642, (float)-0.111150,  
       (float)0.020322, (float)-0.219744, (float)-0.257735,  
       (float)-0.168417, (float)-0.143344, (float)0.026535,  
       (float)-0.030622, (float)-0.093800, (float)-0.044823,  
       (float)0.658938, (float)0.511415, (float)0.313435,  
       (float)0.173884, (float)-0.008819, (float)-0.065020,  
       (float)-0.010099, (float)-0.066660, (float)0.135962,  
       (float)0.129001, (float)-0.057246, (float)-0.105488,  
       (float)0.243590, (float)0.290395, (float)0.317612,  
       (float)0.205758, (float)0.095985, (float)0.060438,  
       (float)0.069637, (float)-0.001664, (float)0.065476,  
       (float)0.062588, (float)0.028658, (float)0.012043,  
       (float)-0.127287, (float)-0.100084, (float)-0.063234,  
       (float)-0.027546, (float)-0.020793, (float)-0.106356,  
       (float)-0.185491, (float)0.008873, (float)0.243609,  
       (float)0.171475, (float)-0.002765, (float)-0.048275,  
       (float)-0.060382, (float)-0.031108, (float)0.031384,  
       (float)0.012246, (float)-0.445061, (float)-0.462158,  
       (float)-0.301877, (float)-0.135007, (float)-0.475060,  
       (float)-0.371571, (float)-0.106039, (float)-0.010444,  
       (float)0.221429, (float)0.183528, (float)0.213540,  
       (float)0.182842, (float)-0.070132, (float)-0.010666,  
       (float)-0.030043, (float)-0.105396, (float)-0.016324,  
       (float)-0.025083, (float)-0.077433, (float)-0.151969,  
       (float)-0.005378, (float)-0.105569, (float)0.025993,  
       (float)0.032934, (float)-0.080255, (float)-0.121547,  
       (float)-0.212975, (float)-0.076083, (float)-0.001966,  
       (float)0.062823, (float)0.094327, (float)0.030380,  
       (float)0.088695, (float)0.111078, (float)0.056931,  
       (float)0.019451, (float)-0.072704, (float)-0.135838,  
       (float)-0.082705, (float)-0.006163, (float)-0.029829, 
       (float)-0.041282, (float)-0.072687, (float)-0.016569,  
       (float)-0.052402, (float)-0.074058, (float)-0.144494, 
       (float)-0.107340, (float)0.033004, (float)0.055295,  
       (float)0.005272, (float)-0.046771, (float)0.060519,  
       (float)0.131631, (float)0.067544, (float)0.084367,  
       (float)0.195210, (float)0.180302, (float)0.091361,  
       (float)-0.013243, (float)0.152410, (float)0.133608,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         118 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.002888, (float)0.018362, (float)0.026146,  
       (float)0.074191, (float)0.109652, (float)0.078016,  
       (float)0.101046, (float)-0.031762, (float)-0.081491,  
       (float)0.035430, (float)0.287796, (float)0.199494,  
       (float)0.082543, (float)0.036229, (float)0.143456,  
       (float)0.189938, (float)0.134967, (float)0.110485,  
       (float)-0.013421, (float)-0.067451, (float)-0.011112,  
       (float)-0.004090, (float)-0.134506, (float)-0.071024,  
       (float)-0.169969, (float)-0.057502, (float)-0.060912,  
       (float)-0.112128, (float)0.003421, (float)0.104480,  
       (float)-0.071537, (float)-0.073059, (float)-0.085219,  
       (float)-0.061897, (float)0.229039, (float)0.293022, 
       (float)0.131243, (float)0.048463, (float)-0.026045,  
       (float)-0.020479, (float)0.030605, (float)-0.028003,  
       (float)0.008807, (float)0.086048, (float)-0.012562,  
       (float)-0.110608, (float)0.179717, (float)0.063296,  
       (float)0.069922, (float)0.081701, (float)0.049007, 
       (float)0.103315, (float)0.199904, (float)0.074277,  
       (float)0.049166, (float)0.016355, (float)-0.011421,  
       (float)-0.035215, (float)0.026685, (float)-0.048784,  
       (float)-0.163671, (float)0.018289, (float)-0.010485,  
       (float)0.000827, (float)0.073192, (float)-0.002865,  
       (float)0.001361, (float)-0.083688, (float)-0.037920, 
       (float)0.095839, (float)-0.039932, (float)0.053746,  
       (float)-0.004356, (float)0.041386, (float)0.079021, 
       (float)0.129937, (float)0.103055, (float)-0.018902,  
       (float)0.046279, (float)0.018578, (float)-0.072483, 
       (float)0.007487, (float)-0.131013, (float)0.064182, 
       (float)0.098816, (float)0.043187, (float)-0.103120,  
       (float)-0.105730, (float)-0.076396, (float)-0.133902,  
       (float)-0.047670, (float)-0.080155, (float)0.042766, 
       (float)-0.003015, (float)-0.005411, (float)-0.026065,  
       (float)-0.005958, (float)-0.025907, (float)0.129773, 
       (float)0.238006, (float)0.146735, (float)0.035418,  
       (float)0.007978, (float)0.030804, (float)-0.032646, 
       (float)-0.006026, (float)-0.109510, (float)-0.051945, 
       (float)-0.003182, (float)0.009670, (float)0.006582, 
       (float)0.010807, (float)-0.006121, (float)0.039494,  
       (float)0.125567, (float)0.032844, (float)-0.048572, 
       (float)-0.118083, (float)-0.034542, (float)-0.074879, 
       (float)-0.120373, (float)-0.194594, (float)-0.057898, 
       (float)0.022194, (float)0.087693, (float)0.026813,  
       (float)-0.276898, (float)-0.182855, (float)-0.117501, 
       (float)-0.032173, (float)0.119073, (float)0.007363, 
       (float)-0.021050, (float)-0.032272, (float)0.155320, 
       (float)0.104592, (float)0.176368, (float)0.114521,  
       (float)-0.018157, (float)-0.063676, (float)-0.051574, 
       (float)0.030803, (float)0.053948, (float)0.117630, 
       (float)0.009534, (float)0.031613, (float)-0.114267, 
       (float)-0.141611, (float)-0.123567, (float)-0.052111,  
       (float)-0.009888, (float)0.036125, (float)0.027912, 
       (float)-0.028832, (float)0.047483, (float)0.004858,  
       (float)0.079631, (float)0.079641, (float)0.066119,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         119 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.115279, (float)0.112746, (float)0.049203,  
       (float)0.025498, (float)-0.015976, (float)0.027440, 
       (float)0.051681, (float)-0.023835, (float)0.000222, 
       (float)0.004835, (float)-0.079690, (float)-0.155954, 
       (float)-0.254873, (float)-0.255996, (float)-0.047276,  
       (float)-0.036863, (float)-0.090760, (float)-0.059804, 
       (float)-0.024833, (float)-0.120927, (float)-0.224570, 
       (float)-0.110654, (float)-0.094819, (float)-0.090651, 
       (float)-0.006706, (float)0.040201, (float)0.078777,  
       (float)-0.114837, (float)-0.152337, (float)-0.031160, 
       (float)0.028471, (float)-0.388988, (float)-0.226268, 
       (float)-0.166789, (float)-0.101745, (float)0.216616, 
       (float)0.193702, (float)0.185902, (float)0.076390,  
       (float)-0.264200, (float)-0.267415, (float)0.002213, 
       (float)0.049018, (float)-0.055507, (float)-0.114410, 
       (float)-0.037992, (float)0.041351, (float)0.334733, 
       (float)0.306476, (float)0.064584, (float)0.002296,  
       (float)-0.148203, (float)-0.087696, (float)-0.152509, 
       (float)-0.186158, (float)0.017612, (float)0.074956, 
       (float)0.059320, (float)-0.039709, (float)-0.058223, 
       (float)-0.008583, (float)-0.014108, (float)0.042877,  
       (float)0.007403, (float)-0.003896, (float)0.021517, 
       (float)0.001769, (float)0.154410, (float)0.106449,  
       (float)0.061178, (float)0.009897, (float)-0.113873, 
       (float)-0.105112, (float)0.028872, (float)-0.022643,  
       (float)-0.036487, (float)0.141100, (float)0.086805, 
       (float)0.000128, (float)0.013754, (float)0.097808, 
       (float)0.019048, (float)-0.013409, (float)0.129597, 
       (float)0.054700, (float)0.030277, (float)0.018303,  
       (float)0.457338, (float)0.442425, (float)0.204200, 
       (float)0.090050, (float)-0.102578, (float)-0.041905,  
       (float)0.075191, (float)0.018290, (float)-0.157418,  
       (float)-0.183917, (float)0.021367, (float)0.102767,  
       (float)0.234111, (float)0.142988, (float)0.116244,  
       (float)0.108732, (float)-0.387604, (float)-0.204808,  
       (float)-0.030843, (float)-0.015329, (float)-0.044689,  
       (float)-0.043983, (float)-0.033781, (float)-0.059647,  
       (float)-0.073917, (float)-0.101900, (float)-0.014936,  
       (float)-0.009781, (float)-0.043026, (float)-0.057556,  
       (float)0.083215, (float)0.045013, (float)-0.044302,  
       (float)-0.097882, (float)-0.222483, (float)-0.209164,  
       (float)-0.030616, (float)-0.126586, (float)-0.006000,  
       (float)-0.030697, (float)0.039482, (float)0.100495,  
       (float)-0.045667, (float)-0.026383, (float)0.009962,  
       (float)-0.063248, (float)-0.105963, (float)-0.111647,  
       (float)0.075155, (float)0.024546, (float)-0.015394,  
       (float)0.009267, (float)-0.026317, (float)-0.028158,  
       (float)-0.079302, (float)-0.074109, (float)-0.061872,  
       (float)0.019655, (float)0.045584, (float)-0.025366,  
       (float)0.085280, (float)0.095748, (float)0.030714,  
       (float)-0.029912, (float)-0.206987, (float)-0.123844,  
       (float)-0.057135, (float)0.006137, (float)-0.026455,  
       (float)0.131109, (float)0.134663, (float)0.070759,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         120 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.077270, (float)0.019451, (float)0.045040,  
       (float)0.017941, (float)0.218670, (float)0.068816,  
       (float)-0.059215, (float)-0.036289, (float)0.169294, 
       (float)0.237212, (float)0.045015, (float)0.011271,  
       (float)-0.059378, (float)-0.089106, (float)-0.129857, 
       (float)-0.016475, (float)0.054435, (float)0.068706, 
       (float)0.059337, (float)0.079399, (float)-0.059128, 
       (float)0.002045, (float)-0.005394, (float)-0.040333,  
       (float)-0.123311, (float)-0.071277, (float)-0.036326, 
       (float)0.071676, (float)-0.004229, (float)0.036444, 
       (float)-0.040988, (float)-0.069174, (float)-0.003011, 
       (float)-0.007944, (float)0.149682, (float)0.065872,  
       (float)-0.048881, (float)0.090414, (float)0.048754, 
       (float)0.055644, (float)-0.292747, (float)-0.084232, 
       (float)-0.029686, (float)-0.060548, (float)0.131867, 
       (float)0.116083, (float)0.098563, (float)0.098732,  
       (float)-0.085741, (float)-0.130486, (float)0.040472, 
       (float)0.037521, (float)0.495179, (float)0.335438, 
       (float)0.109460, (float)0.047558, (float)-0.225777, 
       (float)-0.072882, (float)-0.113905, (float)-0.070385,  
       (float)0.004527, (float)-0.050500, (float)0.032098, 
       (float)-0.028258, (float)-0.086069, (float)-0.181397, 
       (float)-0.199940, (float)-0.007413, (float)-0.003140, 
       (float)-0.024264, (float)-0.036502, (float)-0.093927,  
       (float)0.028042, (float)0.002974, (float)0.027518, 
       (float)-0.034574, (float)0.100547, (float)0.083129,  
       (float)-0.008917, (float)0.026432, (float)-0.205993,  
       (float)-0.150685, (float)-0.206483, (float)-0.070928,  
       (float)0.002658, (float)0.015206, (float)-0.006357,  
       (float)-0.041231, (float)0.370038, (float)0.300322,  
       (float)0.225613, (float)0.162809, (float)0.001369,  
       (float)0.024512, (float)-0.049792, (float)0.058664,  
       (float)0.170516, (float)0.145493, (float)0.050961,  
       (float)0.067279, (float)0.027589, (float)0.108942,  
       (float)0.068557, (float)0.020942, (float)-0.202433,  
       (float)-0.300333, (float)-0.135067, (float)0.008142,  
       (float)0.048756, (float)0.002502, (float)-0.032933,  
       (float)0.049215, (float)0.062254, (float)0.065895,  
       (float)0.072078, (float)0.039322, (float)0.018311,  
       (float)-0.039439, (float)-0.019170, (float)0.037467,  
       (float)-0.155167, (float)-0.092096, (float)0.069654,  
       (float)0.047424, (float)0.117408, (float)0.094537,  
       (float)0.106079, (float)0.044270, (float)-0.100618,  
       (float)-0.080387, (float)-0.026298, (float)-0.074083,  
       (float)-0.018581, (float)0.019481, (float)0.072629,  
       (float)0.072746, (float)0.057012, (float)0.032484,  
       (float)0.109659, (float)0.021608, (float)0.204631,  
       (float)0.208667, (float)0.092730, (float)0.071485,  
       (float)-0.043735, (float)-0.097503, (float)-0.111775,  
       (float)0.062874, (float)-0.122924, (float)-0.174850,  
       (float)-0.164818, (float)-0.171885, (float)0.076759,  
       (float)0.048016, (float)0.134504, (float)0.087858,  
       (float)-0.075338, (float)-0.066207, (float)-0.065293,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         121 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.019354, (float)-0.161584, (float)-0.186981,  
       (float)-0.124650, (float)0.010597, (float)0.038118,  
       (float)-0.010230, (float)0.056014, (float)0.006415,  
       (float)0.103674, (float)0.042899, (float)0.074015,  
       (float)0.066213, (float)0.056937, (float)-0.029397,  
       (float)-0.031908, (float)-0.051985, (float)0.039113,  
       (float)0.056303, (float)-0.019315, (float)0.024640,  
       (float)-0.321330, (float)-0.352009, (float)-0.120628,  
       (float)-0.049235, (float)-0.004503, (float)0.000762,  
       (float)-0.087804, (float)-0.007994, (float)0.073076,  
       (float)0.173158, (float)0.146290, (float)0.076940,  
       (float)0.026396, (float)-0.003903, (float)-0.024719,  
       (float)-0.001804, (float)0.097111, (float)0.051964,  
       (float)0.081751, (float)0.140259, (float)-0.055973,  
       (float)0.070238, (float)0.006300, (float)-0.061434,  
       (float)-0.269008, (float)-0.329076, (float)-0.266868,  
       (float)-0.068615, (float)0.080861, (float)0.135337,  
       (float)0.144055, (float)0.170948, (float)-0.053715,  
       (float)-0.161516, (float)-0.318411, (float)-0.088051,  
       (float)-0.316491, (float)-0.308822, (float)-0.316398,  
       (float)-0.227003, (float)0.008800, (float)-0.041246,  
       (float)-0.038603, (float)-0.029676, (float)-0.094596,  
       (float)-0.029560, (float)-0.101488, (float)-0.105882,  
       (float)0.326772, (float)0.217917, (float)0.142021,  
       (float)0.117891, (float)-0.007626, (float)-0.013990,  
       (float)-0.041939, (float)0.013832, (float)0.112084,  
       (float)0.166795, (float)0.025648, (float)-0.046400,  
       (float)-0.002777, (float)-0.069200, (float)-0.066894,  
       (float)-0.063457, (float)0.085185, (float)0.002760,  
       (float)-0.144788, (float)-0.054287, (float)-0.015890,  
       (float)-0.054693, (float)-0.134120, (float)-0.047814,  
       (float)-0.177093, (float)-0.167252, (float)0.016502,  
       (float)-0.021316, (float)-0.029952, (float)0.010663,  
       (float)-0.002334, (float)-0.000537, (float)-0.012072, 
       (float)0.047047, (float)0.033939, (float)0.016658,  
       (float)0.062277, (float)0.025814, (float)-0.090728,  
       (float)-0.170538, (float)-0.008576, (float)-0.054274,  
       (float)0.035688, (float)0.064076, (float)0.004403,  
       (float)-0.071424, (float)-0.225379, (float)-0.066880,  
       (float)0.037565, (float)0.195016, (float)0.061482,  
       (float)0.019964, (float)0.207543, (float)0.275047,  
       (float)0.189954, (float)0.131253, (float)0.010359,  
       (float)0.046189, (float)0.010783, (float)0.082755,  
       (float)-0.017077, (float)-0.033804, (float)0.002453,  
       (float)0.026296, (float)-0.034299, (float)0.063599,  
       (float)-0.014282, (float)-0.010125, (float)0.020008,  
       (float)-0.021509, (float)0.002248, (float)-0.061521,  
       (float)-0.058993, (float)0.016761, (float)-0.055532,  
       (float)0.000408, (float)0.409016, (float)0.409633,  
       (float)0.312998, (float)0.194183, (float)-0.025385,  
       (float)-0.002883, (float)-0.039376, (float)-0.037099,  
       (float)0.032424, (float)-0.011797, (float)-0.066389,  
       (float)-0.116261, (float)-0.066419, (float)-0.187185,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         122 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.095960, (float)0.051826, (float)0.108855,  
       (float)0.091699, (float)0.040866, (float)0.063528,  
       (float)-0.281711, (float)-0.066531, (float)0.075581,  
       (float)0.039074, (float)-0.174754, (float)-0.203164,  
       (float)-0.292525, (float)-0.231971, (float)0.061848,  
       (float)0.031900, (float)-0.053381, (float)-0.064156,  
       (float)0.013410, (float)-0.032998, (float)-0.083836,  
       (float)0.076698, (float)0.005526, (float)-0.053697,  
       (float)0.091460, (float)0.113297, (float)-0.161750,  
       (float)-0.009511, (float)-0.049193, (float)-0.103707,  
       (float)-0.043632, (float)0.082889, (float)0.047591,  
       (float)-0.002895, (float)0.010834, (float)0.043296,  
       (float)0.170790, (float)0.160881, (float)-0.062085,  
       (float)0.024063, (float)-0.059730, (float)-0.065696,  
       (float)-0.131963, (float)0.078599, (float)0.041221,  
       (float)-0.017748, (float)-0.097133, (float)0.005294,  
       (float)0.141538, (float)0.103821, (float)0.010361,  
       (float)-0.024639, (float)0.077813, (float)0.041329,  
       (float)0.081337, (float)-0.021475, (float)0.036300,  
       (float)0.052487, (float)0.082866, (float)0.120879,  
       (float)0.262882, (float)0.193476, (float)-0.108704,  
       (float)0.020262, (float)-0.025255, (float)0.028266,  
       (float)-0.077870, (float)-0.099389, (float)0.103349,  
       (float)0.095432, (float)-0.117102, (float)0.025667,  
       (float)-0.016085, (float)-0.033919, (float)0.044707,  
       (float)0.011526, (float)-0.014937, (float)-0.095621,  
       (float)-0.005811, (float)0.038857, (float)0.065020,  
       (float)0.149270, (float)0.246402, (float)0.353483,  
       (float)0.254893, (float)0.097539, (float)0.028770,  
       (float)0.040152, (float)0.011767, (float)-0.004989,  
       (float)0.089314, (float)0.061816, (float)0.006965,  
       (float)-0.080731, (float)-0.092954, (float)-0.156088,  
       (float)-0.023722, (float)-0.059271, (float)-0.182059,  
       (float)-0.055574, (float)-0.010262, (float)-0.044659,  
       (float)-0.106812, (float)-0.117652, (float)-0.138386,  
       (float)0.034846, (float)0.044882, (float)-0.036329,  
       (float)0.008561, (float)-0.004320, (float)-0.177838,  
       (float)-0.143174, (float)-0.069799, (float)-0.097135,  
       (float)-0.034300, (float)-0.145224, (float)-0.107365,  
       (float)-0.082726, (float)0.156612, (float)0.084400,  
       (float)0.007587, (float)-0.036324, (float)-0.041241,  
       (float)-0.083591, (float)-0.042266, (float)-0.109625,  
       (float)-0.104835, (float)-0.024518, (float)0.028141,  
       (float)-0.044761, (float)-0.055017, (float)-0.073045,  
       (float)0.004575, (float)0.044300, (float)0.111216,  
       (float)0.212421, (float)0.236663, (float)0.111209,  
       (float)0.019262, (float)-0.000755, (float)-0.049638,  
       (float)-0.051598, (float)0.068233, (float)0.038725,  
       (float)0.018710, (float)0.059772, (float)-0.054286,  
       (float)-0.063923, (float)0.010077, (float)-0.047957,  
       (float)0.116785, (float)0.167018, (float)0.080927,  
       (float)0.033220, (float)-0.087050, (float)0.029937,  
       (float)0.026528, (float)0.010794, (float)0.024892,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         123 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.032330, (float)-0.070910, (float)0.015016,  
       (float)-0.131816, (float)-0.239687, (float)-0.038246,  
       (float)0.000427  
   }; 
    
   float gaussnoise[GAUSS_NOISE_L] = { 
       (float)1.164954, (float)0.626839, (float)0.075080,  
       (float)0.351607, (float)-0.696513, (float)1.696142,  
       (float)0.059060, (float)1.797072, (float)0.264069,  
       (float)0.871673, (float)-1.446172, (float)-0.701165,  
       (float)1.245982, (float)-0.638977, (float)0.577350,  
       (float)-0.360030, (float)-0.135576, (float)-1.349338,  
       (float)-1.270450, (float)0.984570, (float)-0.044881,  
       (float)-0.798945, (float)-0.765172, (float)0.861735,  
       (float)-0.056225, (float)0.513478, (float)0.396681,  
       (float)0.756219, (float)0.400486, (float)-1.341381,  
       (float)0.375041, (float)1.125162, (float)0.728642,  
       (float)-2.377454, (float)-0.273782, (float)-0.322940,  
       (float)0.317988, (float)-0.511172, (float)-0.002041,  
       (float)1.606511, (float)0.847649, (float)0.268101,  
       (float)-0.923489, (float)-0.070499, (float)0.147891,  
       (float)-0.557094, (float)-0.336706, (float)0.415227,  
       (float)1.557814, (float)-2.444299, (float)-1.098195,  
       (float)1.122648, (float)0.581667, (float)-0.271354,  
       (float)0.414191, (float)-0.977814, (float)-1.021466,  
       (float)0.317688, (float)1.516108, (float)0.749432,  
       (float)-0.507700, (float)0.885299, (float)-0.248094,  
       (float)-0.726249, (float)-0.445040, (float)-0.612911,  
       (float)-0.209144, (float)0.562148, (float)-1.063923,  
       (float)0.351589, (float)1.133000, (float)0.149994,  
       (float)0.703144, (float)-0.052412, (float)2.018496,  
       (float)0.924159, (float)-1.814115, (float)0.034973,  
       (float)-1.807862, (float)1.028193, (float)0.394600,  
       (float)0.639406, (float)0.874213, (float)1.752402,  
       (float)-0.320051, (float)-0.137414, (float)0.615770,  
       (float)0.977894, (float)-1.115348, (float)-0.550021,  
       (float)0.039885, (float)-2.482843, (float)1.158655,  
       (float)-1.026279, (float)1.153487, (float)-0.786457,  
       (float)0.634809, (float)0.820410, (float)-0.176027,  
       (float)0.562474, (float)-0.127443, (float)0.554172,  
       (float)-1.097344, (float)-0.731301, (float)1.404732,  
       (float)-0.620214, (float)0.237149, (float)-1.586847,  
       (float)-0.401485, (float)-0.770692, (float)-0.262681,  
       (float)0.976490, (float)0.977815, (float)1.170021,  
       (float)0.159311, (float)0.499521, (float)-1.055375,  
       (float)-0.450743, (float)1.270378, (float)0.898694,  
       (float)0.438705, (float)-1.247344, (float)0.324667,  
       (float)0.390070, (float)-0.405138, (float)0.292315,  
       (float)2.565910, (float)-0.457816, (float)-1.610827,  
       (float)-2.669524, (float)-0.759697, (float)-0.674721,  
       (float)-1.171687, (float)2.032930, (float)0.968481,  
       (float)0.670292, (float)0.420146, (float)-2.872751,  
       (float)1.685874, (float)0.027925, (float)-0.902031,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         124 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-2.053257, (float)0.089086, (float)2.087099,  
       (float)0.365118, (float)0.846106, (float)-0.184538,  
       (float)1.030714, (float)-1.527623, (float)0.964939,  
       (float)0.526163, (float)-0.184454, (float)0.198783,  
       (float)1.590427, (float)0.032192, (float)0.889164,  
       (float)-1.299152, (float)1.182573, (float)1.817472,  
       (float)-0.584302, (float)-1.010674, (float)-0.960498,  
       (float)0.691160, (float)-0.758618, (float)-0.096972,  
       (float)-1.406949, (float)1.030812, (float)-0.759874,  
       (float)0.874127, (float)0.761127, (float)-0.165923,  
       (float)0.300907, (float)-0.322467, (float)-0.368411,  
       (float)1.147895, (float)0.041430, (float)-1.098050,  
       (float)1.566724, (float)-1.048423, (float)0.422724,  
       (float)-0.844414, (float)-0.311630, (float)0.397810,  
       (float)1.049786, (float)-0.340796, (float)0.336297,  
       (float)-0.221361, (float)0.016649, (float)-1.192361,  
       (float)-0.131646, (float)1.487524, (float)-0.836821,  
       (float)-1.300982, (float)1.574132, (float)1.166040,  
       (float)0.786430, (float)-1.461639, (float)1.554466,  
       (float)-0.597535, (float)-1.210568, (float)-0.702669,  
       (float)0.356429, (float)0.652636, (float)0.215671,  
       (float)-0.263896, (float)1.802440, (float)-0.642984,  
       (float)0.109555, (float)-0.719038, (float)0.420628,  
       (float)-1.931134, (float)0.660300, (float)-1.102510,  
       (float)-0.102971, (float)-1.059802, (float)-1.238566,  
       (float)-1.889236, (float)-0.973585, (float)0.212116,  
       (float)0.493442, (float)1.547177, (float)0.644933,  
       (float)-2.148359, (float)-1.028845, (float)-0.141582,  
       (float)-2.526706, (float)-0.312981, (float)-0.593618,  
       (float)0.332322, (float)0.558851, (float)0.899884,  
       (float)-0.200899, (float)-0.233735, (float)1.449907,  
       (float)1.836132, (float)-0.382918, (float)0.155083,  
       (float)-0.964648, (float)0.038756, (float)0.765458,  
       (float)-0.594524, (float)0.130246, (float)0.035014,  
       (float)-0.624674, (float)-0.539775, (float)1.879957,  
       (float)-1.003849, (float)-0.497446, (float)-1.504397,  
       (float)-0.095449, (float)0.396727, (float)-0.527115,  
       (float)0.344571, (float)-0.723291, (float)1.268193,  
       (float)-0.031243, (float)0.778212, (float)2.180484,  
       (float)0.437814, (float)1.333329, (float)0.251078,  
       (float)-0.310471, (float)-0.923004, (float)-0.384776,  
       (float)1.158181, (float)0.862500, (float)-1.034706,  
       (float)-0.192673, (float)-1.299723, (float)0.306596,  
       (float)0.968992, (float)-0.747317, (float)-2.796024,  
       (float)0.696732, (float)3.206908, (float)0.536007,  
       (float)0.298451, (float)0.284043, (float)0.959664,  
       (float)2.087593, (float)1.524681, (float)-0.195261,  
       (float)0.017260, (float)0.246340, (float)-0.854485,  
       (float)1.157783, (float)0.161908, (float)1.557064,  
       (float)-0.193544, (float)1.651301, (float)-1.898778,  
       (float)1.822525, (float)-1.518415, (float)-1.051071,  
       (float)0.049931, (float)-1.454749, (float)0.466546,  
       (float)0.545437, (float)1.320319, (float)-0.404494,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         125 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.418469, (float)0.247349, (float)0.704110,  
       (float)0.631939, (float)-0.992362, (float)1.766708,  
       (float)-0.382104, (float)-0.911425, (float)-0.996090,  
       (float)1.195143, (float)-0.159448, (float)2.704026,  
       (float)-0.198500, (float)-0.141405, (float)0.411268,  
       (float)-1.179060, (float)-0.277776, (float)-1.581053,  
       (float)1.049022, (float)0.302689, (float)-1.226502,  
       (float)0.069600, (float)-0.396516, (float)1.388807,  
       (float)1.364422, (float)0.658153, (float)0.491314,  
       (float)0.800734, (float)-0.767269, (float)0.364420,  
       (float)-0.397914, (float)0.864280, (float)-0.177618,  
       (float)1.874381, (float)0.172400, (float)1.271743,  
       (float)-0.035344, (float)-1.501329, (float)0.365373,  
       (float)-0.198660, (float)-1.389722, (float)0.229328,  
       (float)0.271190, (float)-0.366360, (float)1.376960,  
       (float)-0.797533, (float)-0.936741, (float)-0.002433,  
       (float)0.396086, (float)-0.508693, (float)-0.268286,  
       (float)-1.082140, (float)2.014134, (float)1.944031,  
       (float)-1.521529, (float)1.939318, (float)-0.895840,  
       (float)-0.304158, (float)0.555253, (float)-0.324247,  
       (float)1.338814, (float)1.222299, (float)-1.595978,  
       (float)-1.067730, (float)-0.759919, (float)0.420989,  
       (float)-0.433373, (float)0.706252, (float)0.227857,  
       (float)-1.016992, (float)0.139860, (float)-0.748089,  
       (float)-0.628975, (float)1.394831, (float)-1.647691,  
       (float)-2.014986, (float)0.491717, (float)-1.554975,  
       (float)-0.140609, (float)0.244944, (float)-0.267458,  
       (float)-0.570245, (float)-0.187267, (float)1.208557,  
       (float)-0.638855, (float)0.605540, (float)-0.624481,  
       (float)0.572228, (float)-0.724410, (float)1.192196,  
       (float)0.186747, (float)1.594939, (float)0.321307,  
       (float)0.866841, (float)1.291844, (float)0.434313,  
       (float)-0.386207, (float)-0.112564, (float)-0.964333,  
       (float)-2.057251, (float)0.149996, (float)0.542038,  
       (float)0.254409, (float)-0.307241, (float)-0.417112,  
       (float)1.136805, (float)0.391314, (float)1.605148,  
       (float)0.825892, (float)1.470390, (float)-1.378907,  
       (float)-0.260172, (float)0.994768, (float)1.834034,  
       (float)-1.715910, (float)0.086932, (float)1.955674,  
       (float)0.161454, (float)-0.628688, (float)-1.438824,  
       (float)-0.066596, (float)0.373381, (float)0.217314,  
       (float)-0.179457, (float)0.025673, (float)0.642066,  
       (float)0.923087, (float)-1.555108, (float)0.663594,  
       (float)-0.609500, (float)0.565239, (float)-0.610781,  
       (float)1.231111, (float)0.994300, (float)-0.803475,  
       (float)-0.591204, (float)1.691546, (float)0.953356,  
       (float)-1.930055, (float)0.512845, (float)0.393682,  
       (float)-0.905427, (float)-1.274473, (float)0.346546,  
       (float)-1.195235, (float)0.667201, (float)-0.067794,  
       (float)-1.735660, (float)0.806349, (float)-0.914801,  
       (float)-0.514013, (float)1.896261, (float)-0.253230,  
       (float)-0.174531, (float)0.978788, (float)1.289554,  
       (float)-0.530575, (float)-0.692971, (float)-0.859806,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         126 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.529038, (float)-0.227852, (float)0.376770,  
       (float)1.221556, (float)1.098288, (float)-0.853014,  
       (float)-0.904204, (float)0.698670, (float)0.482598,  
       (float)0.811696, (float)0.327883, (float)-1.586917,  
       (float)-0.920783, (float)-0.614274, (float)-0.334672,  
       (float)0.080345, (float)-0.047555, (float)-0.614736,  
       (float)0.240362, (float)0.125017, (float)-0.223605,  
       (float)-0.391039, (float)-1.382045, (float)1.076292,  
       (float)1.269466, (float)0.487268, (float)-0.956374,  
       (float)0.451807, (float)-1.253778, (float)0.256435,  
       (float)0.421229, (float)1.042360, (float)1.209120,  
       (float)0.780955, (float)-1.179900, (float)1.001450,  
       (float)-1.024905, (float)-1.056846, (float)2.887723,  
       (float)-0.267744, (float)-0.488540, (float)0.419420,  
       (float)-0.742745, (float)0.572912, (float)-0.143680,  
       (float)-0.156844, (float)-0.611729, (float)0.100402,  
       (float)-1.112905, (float)0.957172, (float)-0.577886,  
       (float)-0.506138, (float)-0.983137, (float)-0.437222,  
       (float)1.640728, (float)0.530367, (float)-2.122378,  
       (float)-0.850378, (float)-0.424095, (float)-1.029596,  
       (float)-0.349036, (float)-0.673263, (float)0.989850,  
       (float)-0.577293, (float)-1.278514, (float)0.281387,  
       (float)-1.350292, (float)0.092861, (float)1.390198,  
       (float)0.153271, (float)0.801381, (float)0.202680,  
       (float)-0.421487, (float)1.218891, (float)-1.751493,  
       (float)2.945547, (float)0.186106, (float)0.667174,  
       (float)-0.429976, (float)-1.146584, (float)-1.873306,  
       (float)1.408075, (float)-1.476422, (float)-0.809376,  
       (float)-0.196892, (float)-1.127700, (float)0.179925,  
       (float)0.029963, (float)-0.711098, (float)0.456901,  
       (float)-1.077242, (float)-0.683631, (float)0.813277,  
       (float)0.137012, (float)0.403788, (float)1.288723,  
       (float)0.450343, (float)-0.119641, (float)0.299881,  
       (float)0.643104, (float)-1.775968, (float)-0.201343,  
       (float)-1.236394, (float)0.576187, (float)0.933544,  
       (float)1.131390, (float)-0.906374, (float)-0.515380,  
       (float)1.181516, (float)0.200532, (float)-0.364330,  
       (float)-0.179097, (float)0.168926, (float)0.796552,  
       (float)-0.464512, (float)-0.814449, (float)0.067372,  
       (float)0.184150, (float)-0.056014, (float)0.674326,  
       (float)2.557545, (float)1.177170, (float)-1.298539,  
       (float)-0.410115, (float)-1.847284, (float)-0.899062,  
       (float)1.173296, (float)1.611950, (float)2.318210,  
       (float)-0.814667, (float)0.853069, (float)-0.574005,  
       (float)1.362962, (float)1.148564, (float)-0.378804,  
       (float)-2.380476, (float)-0.081630, (float)-1.223518,  
       (float)-1.084040, (float)-0.440653, (float)-1.522343,  
       (float)1.662312, (float)-0.256088, (float)-0.807258,  
       (float)-0.077400, (float)-1.595641, (float)1.166705,  
       (float)-0.659430, (float)0.385522, (float)-0.187585,  
       (float)-1.598445, (float)-0.960461, (float)0.130287,  
       (float)0.893410, (float)0.348338, (float)0.760433,  
       (float)-0.915962, (float)1.490409, (float)2.148636,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         127 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)1.129853, (float)-1.434479, (float)0.427947,  
       (float)0.357348, (float)-0.513751, (float)-0.086701,  
       (float)-0.668682, (float)0.213963, (float)0.100046,  
       (float)0.721376, (float)0.091444, (float)-0.002400,  
       (float)0.261843, (float)-0.440424, (float)-1.816264,  
       (float)0.528719, (float)-0.351920, (float)0.144555,  
       (float)0.810685, (float)-0.617132, (float)-1.191801,  
       (float)-2.082037, (float)-0.972946, (float)1.150638,  
       (float)0.042902, (float)0.664119, (float)1.577989,  
       (float)-0.534127, (float)0.688182, (float)1.722587,  
       (float)-1.273178, (float)-1.126164, (float)-0.310909,  
       (float)0.177537, (float)-0.976696, (float)-0.765922,  
       (float)-2.372749, (float)-1.719190, (float)0.090665,  
       (float)1.660189, (float)-0.653223, (float)2.050284,  
       (float)-0.345134, (float)-1.015168, (float)0.805136,  
       (float)-1.287555, (float)2.145294, (float)-0.785496,  
       (float)-0.242882, (float)-0.020406, (float)-1.440631,  
       (float)0.780599, (float)-0.275569, (float)2.150379,  
       (float)-1.161508, (float)-0.001266, (float)-1.142249,  
       (float)-0.744296, (float)-0.200403, (float)-0.276941,  
       (float)-0.975253, (float)0.397122, (float)2.680118,  
       (float)-0.384886, (float)-0.057147, (float)-1.728765,  
       (float)1.280767, (float)-0.583258, (float)-1.039926,  
       (float)-1.398089, (float)0.844010, (float)0.248825,  
       (float)-2.068566, (float)1.674866, (float)-0.582561,  
       (float)-0.785796, (float)-0.594914, (float)0.385524,  
       (float)-0.784288, (float)0.384008, (float)0.839488,  
       (float)0.471760, (float)0.610146, (float)0.478515,  
       (float)0.620631, (float)-1.770459, (float)-0.351909,  
       (float)-0.226541, (float)1.329307, (float)-1.655171,  
       (float)-0.060916, (float)-0.470341, (float)0.263481,  
       (float)0.647336, (float)0.814268, (float)-0.709093,  
       (float)-0.669992, (float)-0.988875, (float)1.036852,  
       (float)-0.057835, (float)-0.823255, (float)1.956099,  
       (float)-0.130638, (float)0.015360, (float)-0.673946,  
       (float)-0.525083, (float)0.711471, (float)-1.266094,  
       (float)1.299368, (float)0.531241, (float)-0.719614,  
       (float)-0.107439, (float)-0.768533, (float)1.038744,  
       (float)0.639814, (float)-0.661728, (float)-0.170603,  
       (float)1.100780, (float)-0.393357, (float)-0.222340,  
       (float)-0.259005, (float)-1.262057, (float)-0.328912,  
       (float)1.739255, (float)-1.587151, (float)1.013978,  
       (float)1.207766, (float)-1.555024, (float)0.853390,  
       (float)-0.779175, (float)0.844147, (float)-0.643000,  
       (float)0.698124, (float)0.623186, (float)0.625826,  
       (float)-1.408990, (float)-1.170419, (float)1.361879,  
       (float)-0.105752, (float)-2.359716, (float)-0.777909,  
       (float)-0.059081, (float)-1.159160, (float)1.466680,  
       (float)0.255200, (float)-0.146252, (float)-0.108548,  
       (float)-1.450383, (float)0.475028, (float)-0.586808,  
       (float)0.305144, (float)1.017417, (float)-1.304731,  
       (float)0.443241, (float)-0.400561, (float)-0.621204,  
       (float)1.200154, (float)1.000335, (float)-0.010695,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         128 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.832345, (float)-1.181208, (float)-0.766562,  
       (float)0.125589, (float)1.233429, (float)1.059862,  
       (float)-1.755407, (float)-0.554640, (float)-0.260304,  
       (float)1.302974, (float)-1.358675, (float)0.359975,  
       (float)1.314540, (float)-1.212525, (float)0.593773,  
       (float)0.597249, (float)-0.294485, (float)-0.935959,  
       (float)-0.265477, (float)1.787029, (float)0.034741,  
       (float)0.325478, (float)0.565107, (float)-1.474263,  
       (float)0.268053, (float)1.765786, (float)-1.768180,  
       (float)1.627511, (float)-2.366324, (float)-0.869979,  
       (float)-0.699984, (float)0.859512, (float)-1.296415,  
       (float)1.195417, (float)-1.700570, (float)-0.585549,  
       (float)2.205565, (float)-0.827220, (float)1.966075,  
       (float)-2.301185, (float)-0.994563, (float)0.106741,  
       (float)1.375143, (float)2.955089, (float)1.874092,  
       (float)0.109977, (float)-1.372973, (float)-1.354662,  
       (float)-1.133640, (float)0.462473, (float)-0.046205,  
       (float)-1.298474, (float)0.080468, (float)-2.032843,  
       (float)0.564390, (float)1.156908, (float)1.253641,  
       (float)0.309434, (float)-0.902634, (float)1.279284,  
       (float)-0.346535, (float)0.081997, (float)-1.756170,  
       (float)-1.327697, (float)0.786037, (float)1.117178,  
       (float)-0.540079, (float)-0.920435, (float)0.323356,  
       (float)0.615560, (float)-1.723877, (float)1.241964,  
       (float)0.568060, (float)0.096060, (float)-0.395321,  
       (float)-1.651466, (float)-1.098188, (float)-1.103339,  
       (float)-0.875772, (float)0.665887, (float)0.937835,  
       (float)1.563100, (float)-0.756307, (float)-1.672760,  
       (float)-0.027883, (float)0.438835, (float)0.800308,  
       (float)-0.974407, (float)-1.548104, (float)0.612520,  
       (float)0.193465, (float)-1.093574, (float)0.977825,  
       (float)-0.426525, (float)-0.508498, (float)0.241914,  
       (float)-0.408954, (float)-1.021484, (float)1.189467,  
       (float)-0.363852, (float)-0.228302, (float)-0.824891,  
       (float)0.610675, (float)0.750603, (float)0.547452,  
       (float)-1.737480, (float)-0.296406, (float)-0.369597,  
       (float)-1.340946, (float)0.181441, (float)0.030161,  
       (float)0.381845, (float)1.463439, (float)-0.876102,  
       (float)-1.256036, (float)-0.269798, (float)-0.732456,  
       (float)0.279208, (float)0.982860, (float)1.333580,  
       (float)-0.926771, (float)1.154125, (float)2.135796,  
       (float)0.016264, (float)-1.287073, (float)-1.553320,  
       (float)-0.059866, (float)0.582646, (float)-0.934128,  
       (float)0.035241, (float)1.576796, (float)-1.532254,  
       (float)-0.254342, (float)0.660062, (float)-1.229566,  
       (float)-0.570628, (float)-0.682228, (float)0.254562,  
       (float)0.131692, (float)1.644603, (float)-0.236055,  
       (float)-0.706986, (float)-0.588331, (float)1.855048,  
       (float)2.084384, (float)-0.227784, (float)-0.265914,  
       (float)-0.021790, (float)-0.835704, (float)-1.018327,  
       (float)-0.945054, (float)-0.865398, (float)-0.808710,  
       (float)-1.685751, (float)0.358190, (float)-0.671933,  
       (float)-1.021033, (float)2.498869, (float)-0.632046,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         129 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)0.783785, (float)0.240538, (float)-1.470454,  
       (float)0.334877, (float)1.599021, (float)0.990909,  
       (float)0.066988, (float)1.993145, (float)-0.633251,  
       (float)-0.245918, (float)1.646456, (float)1.561130,  
       (float)-0.758432, (float)-0.903983, (float)1.132966,  
       (float)-0.492347, (float)-0.336589, (float)0.059077,  
       (float)-0.991926, (float)-0.997240, (float)1.105070,  
       (float)-1.148196, (float)-0.473563, (float)0.333565,  
       (float)-0.242387, (float)-0.445072, (float)0.748184,  
       (float)-2.271209, (float)-1.080591, (float)0.082218,  
       (float)0.732257, (float)-0.962436, (float)0.876035,  
       (float)-0.633172, (float)0.836056, (float)-1.958656,  
       (float)-0.779537, (float)1.224104, (float)0.576336,  
       (float)-2.938220, (float)-1.104897, (float)-1.547502,  
       (float)-1.434385, (float)0.128015, (float)1.116575,  
       (float)-1.372281, (float)2.074836, (float)1.485758,  
       (float)-0.043598, (float)0.750101, (float)-0.728689,  
       (float)-0.648186, (float)0.138927, (float)-0.153634,  
       (float)-1.146451, (float)1.365443, (float)-0.632439,  
       (float)1.959653, (float)0.431631, (float)-0.040269,  
       (float)-0.281505, (float)-1.227824, (float)1.159358,  
       (float)-1.274743, (float)-0.186647, (float)-2.001022,  
       (float)-1.028858, (float)0.545433, (float)0.224813,  
       (float)-0.636795, (float)0.007438, (float)-0.002620,  
       (float)0.056516, (float)-1.022040, (float)-0.242266,  
       (float)0.545292, (float)1.980639, (float)0.111102,  
       (float)3.533658, (float)-1.000994, (float)1.134810,  
       (float)0.758663, (float)0.291716, (float)2.245274,  
       (float)-1.094656, (float)1.258890, (float)0.336024,  
       (float)1.496372, (float)-0.665822, (float)-0.088627,  
       (float)-0.459909, (float)-0.261001, (float)0.085050,  
       (float)-0.009841, (float)0.357200, (float)1.365078,  
       (float)-0.718739, (float)0.415523, (float)0.179097,  
       (float)1.236353, (float)-1.397270, (float)-1.722115,  
       (float)-1.234309, (float)0.494105, (float)-0.657828,  
       (float)-0.864847, (float)-2.186815, (float)-0.785680,  
       (float)-0.905888, (float)-1.081924, (float)0.965412,  
       (float)0.701975, (float)-1.487673, (float)-0.197859,  
       (float)-0.294687, (float)-0.222314, (float)1.801455,  
       (float)-0.133797, (float)-2.243783, (float)-0.689915,  
       (float)0.699612, (float)0.772426, (float)0.497607,  
       (float)0.391663, (float)-2.285898, (float)-0.264101,  
       (float)-0.945537, (float)0.310190, (float)0.852659,  
       (float)-0.938975, (float)-0.767007, (float)0.322200,  
       (float)0.612367, (float)0.069602, (float)0.035156,  
       (float)-0.183959, (float)0.057886, (float)-0.926959,  
       (float)2.284313, (float)-0.430063, (float)1.502923,  
       (float)0.579556, (float)-0.457190, (float)-0.057675,  
       (float)0.352267, (float)-0.280606, (float)0.961475,  
       (float)1.309079, (float)-1.306810, (float)-0.385081,  
       (float)1.081048, (float)-1.396751, (float)-1.575387,  
       (float)-0.515741, (float)-0.752931, (float)0.391797,  
       (float)0.404377, (float)-1.116767, (float)-1.484789,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         130 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       (float)-0.014699, (float)-0.011185, (float)-0.063508,  
       (float)-1.027934, (float)0.988259, (float)-0.394657,  
       (float)-0.781828, (float)-1.013073, (float)0.250469,  
       (float)0.466443, (float)-0.219648, (float)2.174825,  
       (float)-1.702852, (float)-0.466137, (float)1.089016,  
       (float)-0.825434, (float)0.404264, (float)-0.941275,  
       (float)0.924843, (float)-0.468593, (float)-0.595989,  
       (float)-0.859251, (float)-0.066430, (float)2.001352,  
       (float)-1.143326, (float)0.865694, (float)-1.555790,  
       (float)-0.595296, (float)-0.952037, (float)0.601405,  
       (float)-1.074229, (float)-0.743268, (float)0.375155,  
       (float)1.959865, (float)-1.692890, (float)-1.691542,  
       (float)-0.177578, (float)0.603642, (float)0.808502,  
       (float)0.518741, (float)-0.366431, (float)1.111996,  
       (float)0.493789, (float)-0.092126, (float)-0.082529,  
       (float)0.209052, (float)0.448236, (float)1.516043,  
       (float)-0.575324, (float)-0.386611, (float)-0.332480,  
       (float)-0.730495, (float)-0.699442, (float)-0.389472,  
       (float)1.585726, (float)1.613382, (float)-1.006807,  
       (float)0.113213, (float)-2.447053, (float)1.437857,  
       (float)-0.024812, (float)-0.437050, (float)0.588050,  
       (float)-0.299502, (float)2.013934, (float)-0.956782,  
       (float)-0.797171, (float)1.213952, (float)-0.007633,  
       (float)1.534938, (float)-0.115904, (float)0.472482,  
       (float)-0.457463, (float)1.517471, (float)-2.582478,  
       (float)-0.969957, (float)0.281199, (float)0.776557,  
       (float)-0.239998, (float)0.480210, (float)-0.550084,  
       (float)0.339691, (float)-0.645350, (float)2.109216,  
       (float)-0.017476, (float)0.172101, (float)0.175828,  
       (float)1.815996, (float)-0.132231, (float)0.260489,  
       (float)-1.838062, (float)-1.911657, (float)-0.300257,  
       (float)2.155180, (float)-0.606822, (float)0.534044,  
       (float)0.275577, (float)-0.331441, (float)0.593097,  
       (float)-1.610893, (float)1.264868, (float)0.096780,  
       (float)0.249615, (float)-1.861685, (float)1.142294,  
       (float)-0.469357, (float)0.346747, (float)-1.517104,  
       (float)-0.127081, (float)-0.203688, (float)-0.152213,  
       (float)-2.601013, (float)-0.766729, (float)0.521099,  
       (float)-0.449036, (float)-0.348353, (float)-1.786723,  
       (float)0.967375, (float)-0.439579, (float)-0.558138,  
       (float)-0.249797, (float)0.952036, (float)0.661397,  
       (float)0.301574, (float)-0.672370, (float)-1.515932,  
       (float)0.501555, (float)-0.858661, (float)-1.276687,  
       (float)-0.012370, (float)-1.889581, (float)1.342246,  
       (float)0.326668, (float)-0.104169, (float)0.097926,  
       (float)1.228837, (float)0.825364, (float)0.258108,  
       (float)-0.250908, (float)0.002343, (float)0.265741,  
       (float)-0.275599, (float)1.447952, (float)-0.010525,  
       (float)-0.696113  
   }; 
    
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         131 
    
                     Internet Low Bit Rate Codec            July 2002 
    
A.9 anaFilter.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       anaFilter.h 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_ANAFILTER_H 
   #define __iLBC_ANAFILTER_H 
    
   void anaFilter( 
       float *In, /* (i) Signal to be filtered */ 
       float *a, /* (i) LP parameters */ 
       int len, /* (i) Length of signal */ 
       float *Out, /* (o) Filtered signal */ 
       float *mem  /* (i/o) Filter state */ 
   ); 
    
   #endif 
    
    
A.10 anaFilter.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       anaFilter.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include "iLBC_define.h" 
    
    
   /*----------------------------------------------------------------* 
    *  LP analysis filter. 
    *---------------------------------------------------------------*/ 
        
   void anaFilter( 
       float *In, /* (i) Signal to be filtered */ 
       float *a, /* (i) LP parameters */ 
       int len, /* (i) Length of signal */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         132 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       float *Out, /* (o) Filtered signal */ 
       float *mem  /* (i/o) Filter state */ 
   ){ 
       int i, n; 
       float *pi, *po; 
    
       pi = &In[0]; 
       po = &Out[0]; 
    
       /* loop over signal samples */ 
       for (n=0; n<len; n++) { 
    
           /* loop over filter coefficients */ 
           *po = a[0] * *pi; 
           for (i=0; i<FILTERORDER; i++) 
               *po += a[i+1] * mem[i]; 
    
           /* update state */ 
           for (i=FILTERORDER-1; i>0; i--) 
               mem[i] = mem[i-1]; 
           mem[0] = *pi; 
    
           po++; 
           pi++; 
       } 
   } 
    
    
A.11 createCB.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       createCB.h 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_CREATECB_H 
   #define __iLBC_CREATECB_H 
    
   void createCB( 
       float *cb, /* (o) Codebook */ 
       float *invenergy, /* (o) Energy of codebook vectors inverted */ 
       float *mem, /* (i) Buffer to create codebook from */ 
       int lMem, /* (i) Length of buffer */ 
       int cbveclen /* (i) Length of codevector */ 
   ); 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         133 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   #endif 
    
    
A.12 createCB.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       createCB.c 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include "iLBC_define.h" 
   #include "constants.h" 
   #include <string.h> 
    
   /*----------------------------------------------------------------* 
    *  Construct a codebook section and calculate inverted energy of  
    *  each codevector. 
    *---------------------------------------------------------------*/ 
    
   int createSection( /* (o) Number of vectors constructed */ 
       float *cb, /* (o) Codebook */ 
       float *energy, /* (o) Energy of codebook vectors */ 
       float *mem, /* (i) Buffer to create codebook from */ 
       int lMem, /* (i) Length of buffer */ 
       int cbveclen /* (i) Length of codevector */ 
   ){ 
       int j, k, cb_index; 
       int ilow, ihigh, ilen; 
       float alfa, alfa1; 
       float *pp, *ppe, *ppo, *ppi; 
    
       /* index counter */ 
    
       cb_index=0; 
       ppe=energy; 
    
       /* first non-interpolated vector */ 
    
       k=cbveclen; 
       *ppe=0.0; 
       pp=mem+lMem-k; 
       memcpy(cb+cb_index*cbveclen, pp, cbveclen*sizeof(float)); 
       for (j=0; j<cbveclen; j++) { 
           *ppe+=(*pp)*(*pp++); 
       } 
       cb_index++; ppe++; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         134 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       /* remaining non-interpolated vectors using recursion for  
       energy calc */ 
    
       pp=mem+lMem-cbveclen-1; 
       ppo=mem+lMem-1; 
       for (k=cbveclen+1; k<=lMem; k++) { 
           memcpy(cb+cb_index*cbveclen, mem+lMem-k,  
               cbveclen*sizeof(float)); 
           *ppe++ = energy[cb_index-1] + (*pp)*(*pp--) -  
               (*ppo)*(*ppo--); 
           cb_index++; 
       } 
    
       /* interpolated vectors */ 
    
       if (cbveclen==SUBL) { 
           for (k=cbveclen; k<2*cbveclen; k+=2) { 
    
               /* interpolation area */ 
    
               ilow=0; 
               ihigh=k/2-1; 
               ilen=ihigh-ilow+1; 
               if (ilen > 5) {ilen=5; ilow=ihigh+1-ilen;}   
                
               /* no interpolation */ 
    
               *ppe=0.0; 
               pp=mem+lMem-k/2; 
               memcpy(cb+cb_index*cbveclen, pp, ilow*sizeof(float)); 
               for (j=0; j<ilow; j++) { 
                   *ppe+=(*pp)*(*pp++); 
               } 
    
               /* interpolation */ 
    
               alfa1=(float)1.0/(float)ilen; 
               alfa=0.0; 
               pp=cb+cb_index*cbveclen+ilow; 
               ppo=mem+lMem-k/2+ilow; 
               ppi=mem+lMem-k+ilow; 
               for (j=ilow; j<=ihigh; j++) { 
                   *pp=((float)1.0-alfa)*(*ppo++)+alfa*(*ppi++); 
                   *ppe+=(*pp)*(*pp++); 
                   alfa+=alfa1; 
               } 
    
               /* no interpolation */ 
    
               pp=mem+lMem-k+ihigh+1; 
               memcpy(cb+cb_index*cbveclen+ihigh+1, pp,  
                   (cbveclen-1-ihigh-1+1)*sizeof(float)); 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         135 
    
                     Internet Low Bit Rate Codec            July 2002 
    
               for (j=ihigh+1; j<cbveclen; j++) { 
                   *ppe+=(*pp)*(*pp++); 
               } 
               cb_index++; ppe++; 
           } 
       } 
    
       return cb_index; 
   } 
    
   /*----------------------------------------------------------------* 
    *  Construct codebook and calculate inverted energy of each 
    *  codevector. 
    *---------------------------------------------------------------*/ 
    
   void createCB( 
       float *cb, /* (o) Codebook */ 
       float *invenergy, /* (o) Energy of codebook vectors inverted */ 
       float *mem, /* (i) Buffer to create codebook from */ 
       int lMem, /* (i) Length of buffer */ 
       int cbveclen /* (i) Length of codevector */ 
   ){ 
       int j, k, filtno, cb_index, memInd, sInd, eInd; 
       float accum, tmpbuf[MEML]; 
       float *pp, *pp1; 
    
       /* first codebook section */ 
    
       cb_index = createSection(cb, invenergy, mem, lMem, cbveclen); 
    
       /* other codebook sections by filtering */ 
    
       for (filtno=1;filtno<=NCBFILTERS;filtno++){ 
    
           /* do filtering */ 
    
           for (k=0; k<lMem; k++) { 
               accum=0.0; 
               memInd=k+1-CBHALFFILT; 
               sInd=0; 
               if (memInd < 0) sInd=-memInd; 
               eInd=CBFILTLEN; 
               if (memInd+eInd-1 > lMem-1) eInd=lMem-memInd; 
               pp=mem+sInd+memInd; pp1=&cbfilters[filtno-1][sInd]; 
               for (j=sInd;j<eInd;j++) { 
                   accum += (*pp++)**(pp1++); 
               } 
               tmpbuf[k]=accum; 
           } 
    
           /* create codebook section */ 
    
           k = createSection(cb+cb_index*cbveclen, invenergy+cb_index,  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         136 
    
                     Internet Low Bit Rate Codec            July 2002 
    
               tmpbuf, lMem, cbveclen); 
           cb_index += k; 
       } 
    
       /* invert energy */ 
    
       for (j=0; j<cb_index; j++) { 
           if (invenergy[j]>0.0) 
               invenergy[j]=(float)1.0/(invenergy[j]+EPS); 
       } 
   } 
    
    
A.13 doCPLC.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       doCPLC.h 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_DOLPC_H 
   #define __iLBC_DOLPC_H 
    
   void doThePLC( 
       float *PLCresidual, /* (o) concealed residual */  
       float *PLClpc,  /* (o) concealed LP parameters */   
       int PLI, /* (i) packet loss indicator 0 - no PL, 1 = PL */   
       float *decresidual, /* (i) decoded residual */ 
       float *lpc, /* (i) decoded LPC (only used for no PL) */ 
       int inlag, /* (i) pitch lag */ 
       iLBC_Dec_Inst_t *iLBCdec_inst /* (i/o) decoder instance */ 
   ); 
    
   #endif 
    
    
A.14 doCPLC.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       doCPLC.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         137 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
   #include <string.h> 
    
   #include "iLBC_define.h" 
    
   /*----------------------------------------------------------------* 
    *  Compute cross correlation and pitch gain for pitch prediction 
    *  of last subframe at given lag. 
    *---------------------------------------------------------------*/ 
    
   void compCorr( 
       float *cc, /* (o) cross correlation coefficient */ 
       float *gc, /* (o) gain  */ 
       float *buffer, /* (i) signal buffer */ 
       int lag, /* (i) pitch lag */ 
       int nsub, /* (i) number of subframes */ 
       int subl /* (i) subframe length */ 
   ){ 
       int i; 
       float ftmp1, ftmp2; 
        
       ftmp1 = 0.0; 
       ftmp2 = 0.0; 
       for (i=0; i<subl; i++) { 
           ftmp1 += buffer[(nsub-1)*subl+i] *  
               buffer[(nsub-1)*subl+i-lag]; 
           ftmp2 += buffer[(nsub-1)*subl+i-lag] *  
               buffer[(nsub-1)*subl+i-lag]; 
       } 
       if (ftmp2 > 0.0) { 
           *cc = ftmp1*ftmp1/ftmp2; 
           *gc = (float)fabs(ftmp1/ftmp2); 
       } 
       else { 
           *cc = 0.0; 
           *gc = 0.0; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  Packet loss concealment routine. Conceals a residual signal 
    *  and LP parameters. If no packet loss, update state. 
    *---------------------------------------------------------------*/ 
    
   void doThePLC( 
       float *PLCresidual, /* (o) concealed residual */  
       float *PLClpc, /* (o) concealed LP parameters */   
       int PLI, /* (i) packet loss indicator 0 - no PL, 1 = PL */   
       float *decresidual, /* (i) decoded residual */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         138 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       float *lpc, /* (i) decoded LPC (only used for no PL) */ 
       int inlag, /* (i)   pitch lag */ 
       iLBC_Dec_Inst_t *iLBCdec_inst /* (i/o) decoder instance */ 
   ){ 
       int lag, randlag; 
       float gain, maxcc; 
       int i, pick, offset; 
       float ftmp, ftmp1, randvec[BLOCKL], pitchfact; 
                
       /* Packet Loss */ 
    
       if (PLI == 1) { 
            
           (*iLBCdec_inst).consPLICount += 1; 
            
           /* if previous frame not lost, determine pitch pred. gain */ 
    
           if ((*iLBCdec_inst).prevPLI != 1) { 
                
               lag=inlag; 
               compCorr(&maxcc, &gain, (*iLBCdec_inst).prevResidual, 
                   lag, NSUB, SUBL); 
    
               if (gain > 1.0) gain = 1.0; 
                                        
           } 
    
           /* previous frame lost, use recorded lag and gain */ 
    
           else { 
               lag=(*iLBCdec_inst).prevLag; 
               gain=(*iLBCdec_inst).prevGain; 
           } 
            
           /* Attenuate signal and scale down pitch pred gain if  
           several frames lost consecutively */ 
    
           if ((*iLBCdec_inst).consPLICount > 1) gain *= (float)0.9; 
            
           /* Compute mixing factor of picth repeatition and noise */ 
    
           if (gain > XT_MIX) 
               pitchfact = YT_MIX; 
           else if (gain < XB_MIX) 
               pitchfact = YB_MIX; 
           else 
               pitchfact = YB_MIX + (gain - XB_MIX) *  
                   (YT_MIX - YB_MIX) / (XT_MIX - XB_MIX); 
            
           /* compute concealed residual */ 
    
           (*iLBCdec_inst).energy = 0.0; 
           for (i=0; i<BLOCKL; i++) { 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         139 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
               /* noise component */ 
    
               (*iLBCdec_inst).seed=((*iLBCdec_inst).seed*69069L+1) &  
                   (0x80000000L-1); 
               randlag = 50 + ((signed long) (*iLBCdec_inst).seed)%70; 
               pick = i - randlag; 
               if (pick < 0) 
                   randvec[i] = gain *  
                       (*iLBCdec_inst).prevResidual[BLOCKL+pick]; 
               else 
                   randvec[i] = gain * randvec[pick]; 
    
               /* pitch repeatition component */ 
    
               pick = i - lag; 
               if (pick < 0) 
                   PLCresidual[i] = gain *  
                       (*iLBCdec_inst).prevResidual[BLOCKL+pick]; 
               else 
                   PLCresidual[i] = gain * PLCresidual[pick]; 
    
               /* mix noise and pitch repeatition */ 
    
               PLCresidual[i] = (pitchfact * PLCresidual[i] + 
                   ((float)1.0 - pitchfact) * randvec[i]); 
                
               (*iLBCdec_inst).energy += PLCresidual[i] *  
                   PLCresidual[i]; 
           } 
            
           /* less than 30 dB, use only noise */ 
    
           if (sqrt((*iLBCdec_inst).energy/(float)BLOCKL) < 30.0) {  
               (*iLBCdec_inst).energy = 0.0; 
               gain=0.0; 
               for (i=0; i<BLOCKL; i++) { 
                   PLCresidual[i] = randvec[i]; 
                   (*iLBCdec_inst).energy += PLCresidual[i] *  
                       PLCresidual[i]; 
               } 
           } 
            
           /* conceal LPC by bandwidth expansion of old LPC */ 
    
           ftmp=BWEXPAND; 
           for (i=1; i<FILTERORDER+1; i++) { 
               PLClpc[i] = ftmp * (*iLBCdec_inst).prevLpc[i]; 
               ftmp *= BWEXPAND; 
           } 
            
       } 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         140 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       /* previous frame lost and this frame OK, mixing in  
       with new frame */ 
    
       else if ((*iLBCdec_inst).prevPLI == 1) { 
            
           lag = (*iLBCdec_inst).prevLag; 
           gain = (*iLBCdec_inst).prevGain; 
            
           /* if pitch pred gain high, do overlap-add */ 
    
           if (gain >= GAINTHRESHOLD) {         
            
               /* Compute mixing factor of pitch repeatition  
               and noise */ 
    
               if (gain > XT_MIX) 
                   pitchfact = YT_MIX; 
               else if (gain < XB_MIX) 
                   pitchfact = YB_MIX; 
               else 
                   pitchfact = YB_MIX + (gain - XB_MIX) *  
                       (YT_MIX - YB_MIX) / (XT_MIX - XB_MIX); 
    
               /* compute concealed residual for 3 subframes */ 
    
               for (i=0; i<3*SUBL; i++) { 
                    
                   (*iLBCdec_inst).seed=((*iLBCdec_inst).seed* 
                       69069L+1) & (0x80000000L-1); 
                   randlag = 50 + ((signed long)  
                       (*iLBCdec_inst).seed)%70; 
                    
                   /* noise component */ 
    
                   pick = i - randlag; 
                   if (pick < 0) 
                       randvec[i] = gain *  
                           (*iLBCdec_inst).prevResidual[BLOCKL+pick]; 
                   else 
                       randvec[i] = gain * randvec[pick]; 
                    
                   /* pitch repeatition component */ 
    
                   pick = i - lag; 
                   if (pick < 0) 
                       PLCresidual[i] = gain *  
                           (*iLBCdec_inst).prevResidual[BLOCKL+pick]; 
                   else 
                       PLCresidual[i] = gain * PLCresidual[pick]; 
    
                   /* mix noise and pitch repeatition */ 
    
                   PLCresidual[i] = (pitchfact * PLCresidual[i] +  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         141 
    
                     Internet Low Bit Rate Codec            July 2002 
    
                       ((float)1.0 - pitchfact) * randvec[i]); 
               } 
                
               /* interpolate concealed residual with actual  
               residual */ 
    
               offset = 3*SUBL; 
               for (i=0; i<offset; i++) { 
                   ftmp1 = (float) (i+1) / (float) (offset+1); 
                   ftmp = (float)1.0 - ftmp1; 
                   PLCresidual[i]=PLCresidual[i]*ftmp+ 
                       decresidual[i]*ftmp1; 
               } 
                
               memcpy(PLCresidual+offset, decresidual+offset,  
                   (BLOCKL-offset)*sizeof(float)); 
    
           } else 
               memcpy(PLCresidual, decresidual, BLOCKL*sizeof(float)); 
    
           /* copy LPC */ 
    
           memcpy(PLClpc, lpc, (FILTERORDER+1)*sizeof(float)); 
                            
           (*iLBCdec_inst).consPLICount = 0; 
       } 
    
       /* no packet loss, copy input */ 
    
       else { 
           memcpy(PLCresidual, decresidual, BLOCKL*sizeof(float)); 
           memcpy(PLClpc, lpc, (FILTERORDER+1)*sizeof(float)); 
       } 
        
       /* update state */ 
    
       (*iLBCdec_inst).prevLag = lag; 
       (*iLBCdec_inst).prevGain = gain; 
       (*iLBCdec_inst).prevPLI = PLI; 
       memcpy((*iLBCdec_inst).prevLpc, PLClpc,  
           (FILTERORDER+1)*sizeof(float)); 
       memcpy((*iLBCdec_inst).prevResidual, PLCresidual, 
           BLOCKL*sizeof(float)); 
   } 
    
    
A.15 enhancer.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       enhancer.h 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         142 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __ENHANCER_H 
   #define __ENHANCER_H 
    
   #include "iLBC_define.h" 
    
   int enhancerInterface( /* interface for the enhancement unit */ 
       float *out, /* (o) the enhanced recidual signal */ 
       float *in, /* (i) the recidual signal to enhance */ 
       iLBC_Dec_Inst_t *iLBCdec_inst /* (i/o) the decoder state  
           structure */ 
   ); 
    
   #endif 
    
    
A.16 enhancer.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       enhancer.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
   #include <string.h> 
   #include "iLBC_define.h" 
   #include "constants.h" 
    
   /*----------------------------------------------------------------* 
    *  Find index in array such that the array element with said 
    * index is the element of said array closest to "value"  
    * according to the squared-error criterion 
    *---------------------------------------------------------------*/ 
    
   void nn(  
       int   *index, /* (o) index of array element closest to value */ 
       float *array, /* (i) data array */ 
       float value, /* (i) value */ 
       int arlength  /* (i) dimension of data array */ 
   ){ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         143 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       int i; 
       float bestcrit,crit; 
    
       crit=array[0]-value; 
       bestcrit=crit*crit; 
       *index=0; 
       for(i=1;i<arlength;i++){ 
           crit=array[i]-value; 
           crit=crit*crit; 
       if(crit<bestcrit){ 
           bestcrit=crit; 
           *index=i; 
       } 
     } 
   } 
    
   /*----------------------------------------------------------------* 
    * compute cross correlation between sequences 
    *---------------------------------------------------------------*/ 
    
   void mycorr1(  
       float* corr, /* (o) correlation of seq1 and seq2 */ 
       float* seq1, /* (i) first sequence */ 
       int dim1, /* (i) dimension first seq1 */ 
       const float *seq2, /* (i) second sequence */ 
       int dim2 /* (i) dimension seq2 */ 
   ){ 
       int i,j; 
    
       for(i=0;i<=dim1-dim2; i++){ 
           corr[i]=0.0; 
           for(j=0;j<dim2; j++){ 
               corr[i] += seq1[i+j] * seq2[j]; 
           } 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    * upsample finite array assuming zeros outside bounds 
    *---------------------------------------------------------------*/ 
    
   void enh_upsample(  
       float* useq1, /* (o) upsampled output sequence */ 
       float* seq1, /* (i) unupsampled sequence */ 
       int dim1, /* (i) dimension seq1 */ 
       const float polyphase[], /* (i) polyphase filter,columnwise */ 
       int hfl, /* (i) polyphase filter length=2*hfl+1 */ 
       int ups /* (i) upsampling factor=columns polyphase */ 
   ){ 
       float *pu,*ps; 
       int i,j,k,q,filterlength,hfl2; 
       const float *polyp[ENH_UPS0]; /* pointers to polyphase  
           columns */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         144 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       const float *pp; 
    
     /* define pointers for filter */ 
    
       filterlength=2*hfl+1; 
       if( filterlength > dim1){ 
           hfl2=(int) (dim1/2); 
           for(j=0;j<ups; j++) 
               polyp[j]=polyphase+j*filterlength+hfl-hfl2; 
           hfl=hfl2; 
           filterlength=2*hfl+1; 
       } 
       else 
           for(j=0;j<ups; j++) 
               polyp[j]=polyphase+j*filterlength; 
    
       /* filtering: filter overhangs left side of sequence */ 
    
       pu=useq1; 
       for(i=hfl;i<filterlength; i++){  
           for(j=0;j<ups; j++){ 
               *pu=0.0; 
               pp = polyp[j]; 
               ps = seq1+i; 
               for(k=0;k<=i;k++) 
                   *pu += *ps-- * *pp++; 
               pu++; 
           } 
       } 
    
       /* filtering: simple convolution=inner products */ 
    
       for(i=filterlength; i<dim1; i++){ 
           for(j=0;j<ups; j++){ 
               *pu=0.0; 
               pp = polyp[j]; 
               ps = seq1+i; 
               for(k=0;k<filterlength;k++) 
                   *pu += *ps-- * *pp++; 
               pu++; 
           } 
       } 
    
       /* filtering: filter overhangs right side of sequence */ 
    
       for(q=1; q<=hfl;q++){  
           for(j=0;j<ups; j++){ 
               *pu=0.0; 
               pp = polyp[j]+q; 
               ps = seq1+dim1-1; 
               for(k=0;k<filterlength-q;k++) 
                   *pu += *ps-- * *pp++; 
               pu++; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         145 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           } 
       } 
   } 
    
    
   /*----------------------------------------------------------------* 
    * find segment starting near idata+bl2 that has highest  
    * correlation with idata+b through idata+b+blockl-1 
    * segment is found at a resolution of ENH_UPSO times the original 
    * of the original sampling rate 
    *---------------------------------------------------------------*/ 
    
   void refiner( 
       float *seg, /* (o) segment array */ 
       float *bl2, /* (o) updated start point */ 
       float* idata, /* (i) original data buffer */ 
       int idatal, /* (i) dimension of idata */ 
       int b, /* (i) beginning center segment */ 
       float bl0, /* (i) estimated beginning other segment */ 
       int blockl, /* (i) segment length */ 
       float period /* (i) estimated pitch period */ 
   ){ 
       int e,bl,bll0,bll1,corrdim,slop; 
       int tloc,tloc2,i,vectl,st,en,fraction; 
       float vect[ENH_VECTL],corr22[ENH_CORRDIM],maxv; 
       float corr33[ENH_CORRDIM*ENH_UPS0];  /* INEFFIENCY see below */ 
    
       /* defining array bounds */ 
        
       bl=(int)(bl0 - 0.5); 
       slop = (int) (0.15*period+0.5); 
       if(slop>ENH_SLOP) slop=ENH_SLOP; 
       e=b+blockl-1; 
       bll0=bl-slop; if(bll0<0){ bll0=0;} 
       bll1=bl+slop; if(bll1+blockl >= idatal){ bll1=idatal-blockl-1;} 
       corrdim=bll1-bll0+1; 
        
       /* compute upsampled correlation (corr33) and find location of  
       max */ 
    
       mycorr1(corr22,idata+bll0,corrdim+blockl-1,idata+b,blockl); 
       enh_upsample(corr33,corr22,corrdim,polyphaser, 
           ENH_FL0,ENH_UPS0); 
       tloc=0; maxv=corr33[0]; 
       for(i=1;i<ENH_UPS0*corrdim; i++){ 
           if(corr33[i]>maxv){ 
               tloc=i; 
               maxv=corr33[i]; 
           } 
       } 
        
       /* make vector can be upsampled without ever running outside  
       bounds */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         146 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       *bl2= (float)bll0+ (float)tloc/(float)ENH_UPS0+(float)1.0; 
       tloc2=(int)(tloc/ENH_UPS0); if(tloc>tloc2*ENH_UPS0){tloc2++;} 
       st=bll0+tloc2-ENH_FL0; 
       vectl=blockl+2*ENH_FL0; 
    
       if(st<0){ 
           for(i=0;i<-st;i++){ vect[i]=0.0;} 
           for(i=-st;i<vectl;i++) vect[i]=idata[i+st]; 
       } 
       else{ 
           en=st+vectl; 
           if(en>idatal){ 
               for(i=0;i<vectl-(en-idatal);i++){ vect[i]=idata[i+st];} 
               for(i=vectl-(en-idatal);i<vectl;i++){ vect[i]=0.0;} 
           } 
           else 
               for(i=0;i<vectl;i++) vect[i]=idata[i+st]; 
       } 
       fraction=tloc2*ENH_UPS0-tloc; 
        
       /* compute the segment (this is actually a convolution) */ 
    
       mycorr1(seg,vect,vectl,polyphaser+(2*ENH_FL0+1)*fraction, 
           2*ENH_FL0+1); 
   } 
    
   /*----------------------------------------------------------------* 
    * find the smoothed output data 
    *---------------------------------------------------------------*/ 
    
   void smath( 
       float *odata, /* (o) smoothed output */ 
       float *AB, /* (o) debug: center versus skirt contribution */ 
       float *sseq, /* (i) said second sequence of waveforms */ 
       int hl, /* (i) 2*hl+1 is sseq dimension */ 
       int blockl, /* (i) block length */ 
       float alpha0 /* (i) max smoothing energy fraction */ 
   ){ 
       int i,k; 
       float w00,w10,w11,A,B,C,*psseq,err,errs; 
       float surround[BLOCKL]; /* shape contributed by other than  
           current */ 
       float wt[2*ENH_HL+1]; /* waveform weighting to get surround  
           shape */ 
       float denom; 
            
       /* create shape of contribution from all waveforms except  
       current one this is called "y" in the patent, i.e. y=surround*/ 
    
       for(i=1;i<=2*hl+1; i++) /* this can be hardwired if hl is  
           settled upon */ 
           wt[i-1] = (float)0.5*(1 - (float)cos(2*PI*i/(2*hl+2)));  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         147 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       wt[hl]=0.0; /* for clarity, not used */ 
       for(i=0;i<blockl; i++) surround[i]=sseq[i]*wt[0]; 
       for(k=1;k<hl; k++){ 
           psseq=sseq+k*blockl;  
           for(i=0;i<blockl; i++) surround[i]+=psseq[i]*wt[k]; 
       } 
       for(k=hl+1;k<=2*hl; k++){ 
           psseq=sseq+k*blockl;  
           for(i=0;i<blockl; i++) surround[i]+=psseq[i]*wt[k]; 
       } 
        
       /* compute some inner products */ 
    
       w00 = w10 = w11 = 0.0; 
       psseq=sseq+hl*blockl; /* current block ("x_0" in patent) */ 
       for(i=0;i<blockl;i++){ 
           w00+=psseq[i]*psseq[i]; 
           w11+=surround[i]*surround[i]; 
           w10+=surround[i]*psseq[i]; 
       } 
        
       if( fabs(w11) < 1.0) w11=1.0; 
       C = (float)sqrt( w00/w11); 
        
       /* first try enhancement without power-constraint */ 
    
       errs=0.0; 
       psseq=sseq+hl*blockl; 
       for(i=0;i<blockl;i++){ 
           odata[i]=C*surround[i]; 
           err=psseq[i]-odata[i]; 
           errs+=err*err; 
       } 
       AB[0]=0; AB[1]=C; /* for monitoring only */ 
        
       /* if constraint violated by first try, add constraint */  
    
       if( errs > alpha0 * w00){ 
           if( w00 < 1) w00=1; 
           denom = (w11*w00-w10*w10)/(w00*w00); 
           if( denom > 0.0001){ /* eliminates numerical problems  
                   for if smooth */ 
               A = (float)sqrt( (alpha0- alpha0*alpha0/4)/denom); 
               B = -alpha0/2 - A * w10/w00; 
               B = B+1; 
           } 
           else{ /* essentially no difference between cycles;  
                       smoothing not needed */ 
               A= 0.0; 
               B= 1.0; 
           } 
            
           /* create smoothed sequence */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         148 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
           psseq=sseq+hl*blockl; 
           for(i=0;i<blockl;i++) odata[i]=A*surround[i]+B*psseq[i]; 
            
           AB[0]=A; AB[1]=B;  /* debug */ 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    * get the pitch-synchronous sample sequence 
    *---------------------------------------------------------------*/ 
    
   void getsseq( 
       float *sseq, /* (o) the pitch-synchronous sequence */ 
       float *idata, /* (i) original data */ 
       int idatal, /* (i) dimension of data */ 
       int b, /* (i) where current block starts */ 
       int blockl, /* (i) block length */ 
       float *period, /* (i) rough-pitch-period array */ 
       float *plocs, /* (i) where periods of period array are taken */ 
       int periodl, /* (i) dimension period array */ 
       int hl /* (i)( 2*hl+1 is sequence length */ 
   ){ 
       int i,e,hblockl,q; 
       float bbb[2*ENH_HL+1]; 
       int ppl[2*ENH_HL+1];  
       float plocs2[ENH_PLOCSL];  
       float *psseq; 
        
       e=b+blockl-1; 
       hblockl=(int)(0.5*blockl); 
        
       /* present */ 
    
       nn(ppl+hl,plocs,(float)0.5*(b+e),periodl); 
       bbb[hl]=(float)b;  
       psseq=sseq+blockl*hl;  
       for(i=0;i<blockl;i++)psseq[i]=(idata+b)[i]; 
        
       /* past */ 
    
       for(q=hl-1;q>=0;q--){  
           bbb[q]=bbb[q+1]-period[ppl[q+1]]; 
           nn(ppl+q,plocs,bbb[q]+hblockl-period[ppl[q+1]],periodl); 
           if(bbb[q]-ENH_OVERHANG>=0) 
               refiner(sseq+q*blockl,bbb+q,idata,idatal,b,bbb[q], 
                   blockl,period[ppl[q+1]]); 
           else{ 
               psseq=sseq+q*blockl;  
               for(i=0;i<blockl;i++)psseq[i]=0.0;} 
       } 
        
       /* future */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         149 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       for(i=0;i<periodl;i++) plocs2[i]=plocs[i]-period[i]; 
       for(q=hl+1;q<=2*hl;q++){  
           nn(ppl+q,plocs2,bbb[q-1]+hblockl,periodl);  
           bbb[q]=bbb[q-1]+period[ppl[q]]; 
           if( bbb[q]+blockl+ENH_OVERHANG<idatal) 
               refiner(sseq+blockl*q,bbb+q,idata,idatal,b,bbb[q], 
                   blockl,period[ppl[q]]); 
           else{ 
               psseq=sseq+q*blockl;  
               for(i=0;i<blockl;i++)psseq[i]=0.0;} 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    * perform enhancement on idata+b through idata+b+blockl-1 
    *---------------------------------------------------------------*/ 
    
   void enhancer( 
       float *odata, /* (o: smoothed block, dimension blockl */ 
       float *AB, /* (o) two-d vector containing relative  
           contributions of block and surrounding  
           (for debugging/insight) */ 
       float *idata, /* (i) data buffer used for enhancing */ 
       int idatal, /* (i) dimension idata */ 
       int b, /* (i) first sample current block within idata */ 
       int blockl, /* (i) block length for enhancer */ 
       float alpha0, /* (i) max correction-energy-fraction  
           (in [0,1])*/ 
       float *period, /* (i) pitch period array  
           (pitch bward-in time) */ 
       float *plocs, /* (i) locations where period array  
           values valid */ 
       int periodl /* (i) dimension of period and plocs */ 
       ){ 
       float sseq[(2*ENH_HL+1)*ENH_BLOCKL], *psseq; 
       float sser[(2*ENH_HL+1)*ENH_BLOCKL], *psser; 
       float odatb[ENH_BLOCKL]; 
       float coeff[]= 
       {(float)0.2887,(float)0.4082,(float)0.2887,(float)0.4082, 
       (float)0.0,(float)-0.4082,(float)0.2887,(float)-0.4082, 
       (float)0.2887};  
       float *fc; 
       int n,i,k; 
        
       /* get said second sequence of segments */ 
        
       getsseq(sseq,idata,idatal,b,blockl,period,plocs, 
           periodl,ENH_HL);  
        
       /* frame expansion */ 
    
       for(n=0; n<blockl;n++) odata[n]=0.0; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         150 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       for(i=0; i<3; i++){ 
           fc = coeff+3*i; 
           for(k=0;k<2*ENH_HL+1; k++){   
               psseq=sseq+k*blockl;  
               psser=sser+k*blockl;  
               psser[0]=fc[1]*psseq[0]+fc[2]*psseq[1]; 
               for(n=1; n<blockl-1;n++) 
                   psser[n]=fc[0]*psseq[n-1]+fc[1]*psseq[n]+fc[2]* 
                   psseq[n+1]; 
               psser[blockl-1]=fc[0]*psseq[blockl-2]+fc[1]* 
                   psseq[blockl-1]; 
           } 
            
           smath(odatb,AB,sser,ENH_HL,blockl,alpha0); 
            
           odata[0]+=(float)1.5*(fc[1]*odatb[0]+fc[0]*odatb[1]); 
           for(n=1; n<blockl-1;n++)  
               odata[n]+=fc[2]*odatb[n-1]+fc[1]*odatb[n]+fc[0]* 
                   odatb[n+1]; 
           odata[blockl-1]+=(float)1.5*(fc[2]*odatb[blockl-2]+fc[1]* 
               odatb[blockl-1]); 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    * cross correlation 
    *---------------------------------------------------------------*/ 
    
   float xCorrCoef(  
       float *target, /* (i) first array */ 
       float *regressor, /* (i) second array */ 
       int subl /* (i) dimension arrays */ 
   ){ 
       int i; 
       float ftmp1, ftmp2; 
        
       ftmp1 = 0.0; 
       ftmp2 = 0.0; 
       for (i=0; i<subl; i++) { 
           ftmp1 += target[i]*regressor[i]; 
           ftmp2 += regressor[i]*regressor[i]; 
       } 
       if (ftmp1 > 0.0) { 
           return (float)(ftmp1*ftmp1/ftmp2); 
       } 
       else { 
           return (float)0.0; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    * interface for enhancer 
    *---------------------------------------------------------------*/ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         151 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   int enhancerInterface( 
       float *out, /* (o) enhanced signal */ 
       float *in, /* (i) unenhanced signal */ 
       iLBC_Dec_Inst_t *iLBCdec_inst /* (i) buffers etc */ 
   ){ 
       float *enh_buf, *enh_period; 
       float dummy[2]; 
       int iblock, isample; 
       int lag, ilag, i; 
       float cc, maxcc; 
       float ftmp1, ftmp2, gain; 
       int prev_pl; 
    
       prev_pl=iLBCdec_inst->prev_enh_pl; 
       enh_buf=iLBCdec_inst->enh_buf; 
       enh_period=iLBCdec_inst->enh_period; 
        
       for(isample = 0; isample<ENH_NBLOCKS_EXTRA*ENH_BLOCKL;  
           isample++)  
               enh_buf[isample] =  
                   enh_buf[ENH_NBLOCKS*ENH_BLOCKL+isample]; 
    
       for(isample = 0; isample<ENH_NBLOCKS*ENH_BLOCKL;  
           isample++)  
               enh_buf[ENH_NBLOCKS_EXTRA*ENH_BLOCKL+isample] =  
                   in[isample]; 
    
       if (prev_pl==1) { 
    
           lag = 20; 
           maxcc = xCorrCoef(in, in+lag, ENH_BLOCKL); 
           for (ilag=21; ilag<120; ilag++) { 
               cc = xCorrCoef(in, in+ilag, ENH_BLOCKL); 
               if (cc > maxcc) { 
                   maxcc = cc; 
                   lag = ilag; 
               } 
           } 
    
           ftmp1 = 0.0; 
           ftmp2 = 0.0; 
           for (i=0; i<ENH_BLOCKL; i++) { 
               ftmp1 += in[i]*in[i+lag]; 
               ftmp2 += in[i+lag]*in[i+lag]; 
           } 
           if (ftmp1 > 0.0) { 
               gain=(float)(ftmp1/ftmp2); 
           } 
           else { 
               gain=(float)0.0; 
           } 
           if (gain>1.0) gain=1.0; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         152 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           if (gain<-1.0) gain=-1.0; 
    
    
           for(isample = ENH_BLOCKL-1; isample>=0; isample--) { 
               if (isample+lag > ENH_BLOCKL-1) 
                   enh_buf[ENH_NBLOCKS_EXTRA*ENH_BLOCKL+isample-
   ENH_BLOCKL] =  
                       gain*in[isample+lag-ENH_BLOCKL]; 
               else 
                   enh_buf[ENH_NBLOCKS_EXTRA*ENH_BLOCKL+isample-
   ENH_BLOCKL] =  
                
       gain*enh_buf[ENH_NBLOCKS_EXTRA*ENH_BLOCKL+isample-
   ENH_BLOCKL+lag]; 
           } 
       } 
    
       for(iblock = 0; iblock<ENH_NBLOCKS_EXTRA; iblock++)  
           enh_period[iblock] = enh_period[iblock+ENH_NBLOCKS]; 
    
       for(iblock = 0; iblock<ENH_NBLOCKS; iblock++){ 
            
           lag = 20; 
           maxcc = xCorrCoef(enh_buf+(ENH_NBLOCKS_EXTRA+iblock)* 
               ENH_BLOCKL, enh_buf+(ENH_NBLOCKS_EXTRA+iblock)* 
               ENH_BLOCKL-lag, ENH_BLOCKL); 
           for (ilag=21; ilag<120; ilag++) { 
               cc = xCorrCoef(enh_buf+(ENH_NBLOCKS_EXTRA+iblock)* 
                   ENH_BLOCKL, enh_buf+(ENH_NBLOCKS_EXTRA+iblock)* 
                   ENH_BLOCKL-ilag, ENH_BLOCKL); 
               if (cc > maxcc) { 
                   maxcc = cc; 
                   lag = ilag; 
               } 
           } 
            
           enh_period[iblock+ENH_NBLOCKS_EXTRA] = (float)lag; 
       } 
        
       for(iblock = 0; iblock<ENH_NBLOCKS; iblock++){ 
            
           enhancer(out+iblock*ENH_BLOCKL, dummy, enh_buf,  
               ENH_BUFL, (4+iblock)*ENH_BLOCKL, 
               ENH_BLOCKL, ENH_ALPHA0, enh_period, enh_plocs,  
                   ENH_NBLOCKS_TOT); 
            
       }    
       return lag; 
   } 
    
    
A.17 filter.h 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         153 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       filter.h 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_FILTER_H 
   #define __iLBC_FILTER_H 
    
   void AllPoleFilter( 
       float *inOut, /* (i/o) on entrance inOut[-orderCoef] to  
           inOut[-1] contain the state of the filter (delayed samples. 
           inOut[0] to inOut[lengthInOut-1] contain the filter input, 
           on en exit inOut[-orderCoef] to inOut[-1] is unchanged and 
           inOut[0] to inOut[lengthInOut-1] contain filtered  
           samples */ 
       float *Coef, /* (i) filter coefficients, Coef[0] is assumed to  
           be 1.0 */ 
       int lengthInOut, /* (i) number of input/output samples */ 
       int orderCoef /* (i) number of filter coefficients */ 
   ); 
    
   void AllZeroFilter( 
       float *In, /* (i) In[0] to In[lengthInOut-1] contain filter  
           input samples */ 
       float *Coef, /* (i) filter coefficients (Coef[0] is assumed  
           to be 1.0) */ 
       int lengthInOut, /* (i) number of input/output samples */ 
       int orderCoef, /* (i) number of filter coefficients */ 
       float *Out /* (i/o) on entrance Out[-orderCoef] to Out[-1] 
           contain the filter state, on exit Out[0] to  
           Out[lengthInOut-1] contain filtered samples */ 
   ); 
    
   void ZeroPoleFilter( 
       float *In, /* (i) In[0] to In[lengthInOut-1] contain filter 
           input samples In[-orderCoef] to In[-1] contain state of 
           all-zero section */ 
       float *ZeroCoef, /* (i) filter coefficients for all-zero  
           section (ZeroCoef[0] is assumed to be 1.0) */ 
       float *PoleCoef, /* (i) filter coefficients for all-pole  
           section (ZeroCoef[0] is assumed to be 1.0) */ 
       int lengthInOut, /* (i) number of input/output samples */ 
       int orderCoef, /* (i) number of filter coefficients */ 
       float *Out /* (i/o) on entrance Out[-orderCoef] to Out[-1]  
           contain state of all-pole section. On exit Out[0] to  
           Out[lengthInOut-1] contain filtered samples */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         154 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   ); 
    
   #endif 
    
    
A.18 filter.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       filter.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   /*----------------------------------------------------------------* 
    *  all-pole filter 
    *---------------------------------------------------------------*/ 
    
   void AllPoleFilter( 
       float *InOut, /* (i/o) on entrance inOut[-orderCoef] to  
           inOut[-1] contain the state of the filter  
           (delayed samples). inOut[0] to inOut[lengthInOut-1]  
           contain the filter input, on en exit  
           inOut[-orderCoef] to inOut[-1] is unchanged and inOut[0] to  
           inOut[lengthInOut-1] contain filtered samples */ 
       float *Coef, /* (i) filter coefficients, Coef[0] is assumed to  
           be 1.0 */ 
       int lengthInOut, /* (i) number of input/output samples */ 
       int orderCoef /* (i) number of filter coefficients */ 
   ){   
       int n,k; 
        
       for(n=0;n<lengthInOut;n++){ 
           for(k=1;k<=orderCoef;k++){ 
               *InOut -= Coef[k]*InOut[-k]; 
           } 
           InOut++; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  all-zero filter                          
    *---------------------------------------------------------------*/ 
    
   void AllZeroFilter( 
       float *In, /* (i) In[0] to In[lengthInOut-1] contain filter  
           input samples */ 
       float *Coef, /* (i) filter coefficients (Coef[0] is assumed  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         155 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           to be 1.0) */ 
       int lengthInOut, /* (i) number of input/output samples */ 
       int orderCoef, /* (i) number of filter coefficients */ 
       float *Out /* (i/o) on entrance Out[-orderCoef] to Out[-1]  
           contain the filter state, on exit Out[0] to  
           Out[lengthInOut-1] contain filtered samples */ 
   ){   
       int n,k; 
        
       for(n=0;n<lengthInOut;n++){ 
           *Out = Coef[0]*In[0]; 
           for(k=1;k<=orderCoef;k++){ 
               *Out += Coef[k]*In[-k]; 
           } 
           Out++; 
           In++; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  pole-zero filter 
    *---------------------------------------------------------------*/ 
    
   void ZeroPoleFilter( 
       float *In, /* (i) In[0] to In[lengthInOut-1] contain filter  
           input samples In[-orderCoef] to In[-1] contain state of  
           all-zero section */ 
       float *ZeroCoef, /* (i) filter coefficients for all-zero  
           section (ZeroCoef[0] is assumed to be 1.0) */ 
       float *PoleCoef, /* (i) filter coefficients for all-pole section  
           (ZeroCoef[0] is assumed to be 1.0) */ 
       int lengthInOut, /* (i) number of input/output samples */ 
       int orderCoef, /* (i) number of filter coefficients */ 
       float *Out /* (i/o) on entrance Out[-orderCoef] to Out[-1]  
           contain state of all-pole section. On exit Out[0] to  
           Out[lengthInOut-1] contain filtered samples */ 
   ){ 
       AllZeroFilter(In,ZeroCoef,lengthInOut,orderCoef,Out); 
       AllPoleFilter(Out,PoleCoef,lengthInOut,orderCoef);  
   } 
    
    
A.19 FrameClassify.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       FrameClassify.h 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         156 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   ******************************************************************/ 
    
   #ifndef __iLBC_FRAMECLASSIFY_H 
   #define __iLBC_FRAMECLASSIFY_H 
    
   int FrameClassify( /* index to the max-energy sub frame */ 
       float *residual /* (i) lpc residual signal */ 
   ); 
    
   #endif 
    
    
A.20 FrameClassify.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       FrameClassify.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include "iLBC_define.h" 
    
   /*----------------------------------------------------------------* 
    *  Classification of subframes to localize start state                           
    *---------------------------------------------------------------*/ 
    
   int FrameClassify( /* index to the max-energy sub frame */ 
       float *residual /* (i) lpc residual signal */ 
   ){ 
       float ssq[NSUB], max_ssq; 
       int n,l,k, max_ssq_n; 
    
       /* identify maximum sum of squares over sub frames */    
    
       max_ssq = -1.0; 
       for(n=0;n<NSUB;n++){ 
           ssq[n] = 0.0; 
           for(l=0;l<SUBL;l++){ 
               k = n*SUBL + l; 
               ssq[n] += residual[k] * residual[k]; 
           } 
           if(ssq[n] > max_ssq){ 
               max_ssq = ssq[n]; 
               max_ssq_n = n; 
           } 
       } 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         157 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       /* calculate return index */ 
    
       if( max_ssq_n == 0) return 1; 
       if( max_ssq_n == (NSUB-1) ) return NSUB-1; 
       if( ssq[max_ssq_n-1] > ssq[max_ssq_n+1] ) return max_ssq_n; 
       return max_ssq_n+1; 
   } 
    
    
A.21 gaincorr_Encode.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       gaincorr_Encode.h 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_GAINCORR_ENCODE_H 
   #define __iLBC_GAINCORR_ENCODE_H 
    
   int gaincorr_Encode( /* (o) index to quantized gain correction  
           factor */ 
       float *decresidual, /* (i) the decoded residual vector without  
           gain correction */ 
       int start_pos, /* (i) the position of the start state in the  
           residual vector */ 
       float *residual /* (i) the target residual vector */ 
   ); 
    
   #endif 
    
    
A.22 gaincorr_Encode.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       gaincorr_Encode.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         158 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   #include "iLBC_define.h" 
   #include "constants.h" 
   #include <math.h> 
    
   int gaincorr_Encode( /* (o) index to quantized gain correction  
           factor */ 
       float *decresidual, /* (i) the decoded residual vector without  
           gain correction */ 
       int start_pos, /* (i) the position of the start state in the  
           residual vector */ 
       float *residual /* (i) the target residual vector */ 
   ){ 
       float state_energy = 0.0, dec_state_energy = 0.0,  
                 residual_energy = 0.0, dec_residual_energy = 0.0; 
       int i, k, index; 
       float state_loss_factor, residual_loss_factor, correction_factor; 
       float factor, std_decresidual, one_minus_factor_scaled; 
       int gaussstart; 
    
       /* calculation of state energies */ 
    
       for(k=0; k<STATE_SHORT_LEN; k++){ 
           state_energy += residual[start_pos+k]*residual[start_pos+k]; 
           dec_state_energy += decresidual[start_pos+k]* 
               decresidual[start_pos+k]; 
       } 
       state_energy /= STATE_SHORT_LEN; 
       dec_state_energy /= STATE_SHORT_LEN; 
    
       /* calculation of energies for remaining residual vector */ 
    
       for(k=0; k<start_pos; k++){ 
           residual_energy += residual[k]*residual[k]; 
           dec_residual_energy += decresidual[k]*decresidual[k]; 
       } 
       for(k=start_pos+STATE_SHORT_LEN; k<BLOCKL; k++){ 
           residual_energy += residual[k]*residual[k]; 
           dec_residual_energy += decresidual[k]*decresidual[k]; 
       } 
       residual_energy /= (BLOCKL-STATE_SHORT_LEN); 
       dec_residual_energy /= (BLOCKL-STATE_SHORT_LEN); 
    
       /* calculation of the state gain correction factor */  
    
       state_loss_factor = dec_state_energy / state_energy; 
       residual_loss_factor = dec_residual_energy / residual_energy; 
       correction_factor = (float)sqrt(residual_loss_factor /  
           state_loss_factor); 
    
       /* quantization of the correction factor */  
    
       if(correction_factor > 1) correction_factor = 1; 
       index=(int)(correction_factor*16)-1; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         159 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       if (index<0) index=0; 
       if (sqrt(residual_energy/state_energy)<0.25) index=15; 
    
       factor=(float)(index+1)/(float)16.0; 
       for(k=0;k<STATE_SHORT_LEN;k++)  
           decresidual[start_pos+k] *= factor;  
    
       factor *= 1.5; 
       if (factor < 1.0){ 
    
          std_decresidual = (float)sqrt(dec_residual_energy); 
    
          one_minus_factor_scaled =  
              (float)sqrt(1-factor*factor)*std_decresidual; 
          gaussstart =  
              (int)ceil(decresidual[0]) % (GAUSS_NOISE_L-BLOCKL); 
          for(i=0;i<BLOCKL;i++) decresidual[i] +=  
              one_minus_factor_scaled*gaussnoise[gaussstart+i]; 
       } 
    
       return index; 
   } 
    
    
A.23 gainquant.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       gainquant.h                                          
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_GAINQUANT_H 
   #define __iLBC_GAINQUANT_H 
    
   float gainquant( /* (o) quantized gain value */ 
       float in, /* (i) gain value */ 
       float maxIn, /* (i) maximum of gain value */ 
       int nBits, /* (i) number of bits for the quantization */ 
       int *index /* (o) quantization index */ 
   ); 
    
   float gaindequant( /* (o) quantized gain value */ 
       int index, /* (i) quantization index */ 
       float maxIn, /* (i) maximum of unquantized gain */ 
       int cblen /* (i) number of quantization indices */ 
   ); 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         160 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   #endif 
    
    
A.24 gainquant.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       gainquant.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <string.h> 
   #include <math.h> 
   #include <stdio.h> 
    
   #include "constants.h" 
   #include "filter.h" 
    
   /*----------------------------------------------------------------* 
    *  quantizer for the gain in the gain-shape coding of residual 
    *---------------------------------------------------------------*/ 
    
   float gainquant( /* (o) quantized gain value */ 
       float in, /* (i) gain value */ 
       float maxIn, /* (i) maximum of gain value */ 
       int cblen, /* (i) number of quantization indices */ 
       int *index /* (o) quantization index */ 
   ){ 
       int i, tindex; 
       float minmeasure,measure, *cb, scale; 
    
       /* ensure a lower bound on the scaling factor */ 
    
       scale=maxIn; 
       if (scale<0.1) scale=(float)0.1; 
    
       /* select the quantization table */ 
    
       if (cblen == 8) 
           cb = gain_sq3; 
       else  
           cb = gain_sq4; 
    
       /* select the best index in the quantization table */ 
        
       minmeasure=10000.0; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         161 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       for (i=0;i<cblen;i++) { 
           measure=(in-scale*cb[i])*(in-scale*cb[i]); 
           if (measure<minmeasure) { 
               tindex=i; 
               minmeasure=measure; 
           } 
       } 
       *index=tindex; 
           
       /* return the quantized value */ 
    
       return scale*cb[tindex]; 
   } 
    
   /*----------------------------------------------------------------* 
    *  decoder for quantized gains in the gain-shape coding of  
    *  residual                           
    *---------------------------------------------------------------*/ 
    
   float gaindequant( /* (o) quantized gain value */ 
       int index, /* (i) quantization index */ 
       float maxIn, /* (i) maximum of unquantized gain */ 
       int cblen /* (i) number of quantization indices */ 
   ){ 
       float scale; 
    
       /* obtain correct scale factor */ 
    
       scale=(float)fabs(maxIn); 
       if (scale<0.1) scale=(float)0.1; 
    
       /* select the quantization table and return the decoded value */ 
    
       if (cblen==8) { 
           return scale*gain_sq3[index]; 
       } 
       else if (cblen==16) { 
           return scale*gain_sq4[index]; 
       } 
    
       return 0.0; 
   } 
    
    
A.25 getCBvec.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       getCBvec.h                  
    
       Copyright (c) 2001, 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         162 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_GETCBVEC_H 
   #define __iLBC_GETCBVEC_H 
    
   void getCBvec( 
       float *cbvec, /* (o) Constructed codebook vector */ 
       float *mem, /* (i) Codebook buffer */ 
       int index, /* (i) Codebook index */ 
       int lMem, /* (i) Length of codebook buffer */ 
       int cbveclen /* (i) Codebook vector length */ 
   ); 
    
   #endif 
    
    
A.26 getCBvec.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       getCBvec.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include "iLBC_define.h" 
   #include "constants.h" 
   #include <string.h> 
    
   /*----------------------------------------------------------------* 
    *  Construct codebook vector for given index. 
    *---------------------------------------------------------------*/ 
    
   void getCBvec( 
       float *cbvec, /* (o) Constructed codebook vector */ 
       float *mem, /* (i) Codebook buffer */ 
       int index,  /* (i) Codebook index */ 
       int lMem, /* (i) Length of codebook buffer */ 
       int cbveclen /* (i) Codebook vector length */ 
   ){ 
       int j, k, n, filtno, memInd, sInd, eInd, sFilt, eFilt; 
       float accum, tmpbuf[MEML]; 
       int base_size; 
       int ilow, ihigh, ilen; 
       float alfa, alfa1; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         163 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       /* Determine size of codebook sections */ 
    
       base_size=lMem-cbveclen+1; 
       if (cbveclen==SUBL) 
           base_size+=cbveclen/2;   
    
       /* No filter -> First codebook section */ 
    
       if (index < base_size) { 
    
           /* first non-interpolated vectors */ 
    
           if (index<lMem-cbveclen+1) { 
               k=index+cbveclen; 
               /* get vector */ 
               memcpy(cbvec, mem+lMem-k, cbveclen*sizeof(float)); 
           } 
    
           /* non-interpolated vectors */ 
    
           else { 
               k=2*(index-(lMem-cbveclen+1))+cbveclen; 
    
               /* interpolation area */ 
    
               ilow=0; 
               ihigh=k/2-1; 
               ilen=ihigh-ilow+1; 
               if (ilen > 5) {ilen=5; ilow=ihigh+1-ilen;}   
    
               /* no interpolation */ 
    
               memcpy(cbvec, mem+lMem-k/2, ilow*sizeof(float)); 
    
               /* interpolation */ 
    
               alfa1=(float)1.0/(float)ilen; 
               alfa=0.0; 
               for (j=ilow; j<=ihigh; j++) { 
                   cbvec[j]=((float)1.0-alfa)*mem[lMem-k/2+j]+ 
                       alfa*mem[lMem-k+j]; 
                   alfa+=alfa1; 
               } 
    
               /* no interpolation */ 
    
               memcpy(cbvec+ihigh+1, mem+lMem-k+ihigh+1,  
                   (cbveclen-1-ihigh)*sizeof(float)); 
           } 
       } 
    
       /* Higher codebbok sections based on filtering */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         164 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       else { 
    
           /* filter number (i.e. section number) */ 
    
           filtno=index/base_size; 
    
           /* first non-interpolated vectors */ 
    
           if (index-filtno*base_size<lMem-cbveclen+1) { 
               k=index-filtno*base_size+cbveclen; 
    
               /* filtering */ 
    
               sFilt=lMem-k; 
               eFilt=lMem-k+cbveclen; 
               for (n=sFilt; n<eFilt; n++) { 
                   accum=0.0; 
                   memInd=n+1-CBHALFFILT; 
                   sInd=0; 
                   if (memInd < 0) sInd=-memInd; 
                   eInd=CBFILTLEN; 
                   if (memInd+eInd-1 > lMem-1) eInd=lMem-memInd; 
                   for (j=sInd;j<eInd;j++) { 
                       accum += mem[j+memInd]*cbfilters[filtno-1][j]; 
                   } 
                   tmpbuf[n]=accum; 
               } 
    
               /* get vector */ 
    
               memcpy(cbvec, tmpbuf+lMem-k, cbveclen*sizeof(float)); 
           } 
    
           /* interpolated vectors */ 
    
           else { 
               k=2*(index-filtno*base_size-(lMem-cbveclen+1))+cbveclen; 
    
               /* filtering */ 
    
               sFilt=lMem-k; 
               eFilt=lMem; 
               for (n=sFilt; n<eFilt; n++) { 
                   accum=0.0; 
                   memInd=n+1-CBHALFFILT; 
                   sInd=0; 
                   if (memInd < 0) sInd=-memInd; 
                   eInd=CBFILTLEN; 
                   if (memInd+eInd-1 > lMem-1) eInd=lMem-memInd; 
                   for (j=sInd;j<eInd;j++) { 
                       accum += mem[j+memInd]*cbfilters[filtno-1][j]; 
                   } 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         165 
    
                     Internet Low Bit Rate Codec            July 2002 
    
                   tmpbuf[n]=accum; 
               } 
    
               /* interpolation area */ 
    
               ilow=0; 
               ihigh=k/2-1; 
               ilen=ihigh-ilow+1; 
               if (ilen > 5) {ilen=5; ilow=ihigh+1-ilen;}   
    
               /* no interpolation */ 
    
               memcpy(cbvec, tmpbuf+lMem-k/2, ilow*sizeof(float)); 
    
               /* interpolation */ 
    
               alfa1=(float)1.0/(float)ilen; 
               alfa=0.0; 
               for (j=ilow; j<=ihigh; j++) { 
                   cbvec[j]=((float)1.0-alfa)* 
                       tmpbuf[lMem-k/2+j]+alfa*tmpbuf[lMem-k+j]; 
                   alfa+=alfa1; 
               } 
    
               /* no interpolation */ 
    
               memcpy(cbvec+ihigh+1, tmpbuf+lMem-k+ihigh+1,  
                   (cbveclen-1-ihigh)*sizeof(float)); 
           } 
       } 
   } 
    
    
A.27 helpfun.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       helpfun.h          
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_HELPFUN_H 
   #define __iLBC_HELPFUN_H 
    
   void autocorr(  
       float *r, /* (o) autocorrelation vector */ 
       const float *x, /* (i) data vector */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         166 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       int N, /* (i) length of data vector */ 
       int order /* largest lag for calculated autocorrelations */ 
   ); 
    
   void window(  
       float *z, /* (o) the windowed data */ 
       const float *x, /* (i) the original data vector */ 
       const float *y, /* (i) the window */ 
       int N /* (i) length of all vectors */ 
   ); 
    
   void levdurb(  
       float *a, /* (o) lpc coefficient vector starting with 1.0 */ 
       float *k, /* (o) reflection coefficients */ 
       float *r, /* (i) autocorrelation vector */ 
       int order /* (i) order of lpc filter */ 
   ); 
    
   void interpolate(  
       float *out, /* (o) the interpolated vector */ 
       float *in1, /* (i) the first vector for the interpolation */ 
       float *in2, /* (i) the second vector for the interpolation */ 
       float coef, /* (i) interpolation weights */ 
       int length /* (i) length of all vectors */ 
   ); 
               
   void bwexpand(  
       float *out, /* (o) the bandwidth expanded lpc coefficients */ 
       float *in, /* (i) the lpc coefficients before bandwidth  
           expansion */ 
       float coef, /* (i) the bandwidth expansion factor */ 
       int length /* (i) the length of lpc coefficient vectors */ 
   ); 
    
   void vq(  
       float *Xq, /* (o) the quantized vector */ 
       int *index, /* (o) the quantization index */ 
       const float *CB, /* (i) the vector quantization codebook */ 
       float *X, /* (i) the vector to quantize */ 
       int n_cb, /* (i) the number of vectors in the codebook */ 
       int dim /* (i) the dimension of all vectors */ 
   );   
    
   void gvq(  
        float *Xq, /* (o) the quantized vector */ 
        int *index, /* (o) the quantization index */ 
        float *CB, /* (i) the shape codebook */ 
        float *X, /* (i) the vector to quantize */ 
        int n_cb, /* (i) the number of vectors in the shape  
           codebook */ 
        int dim, /* (i) dimension of all vectors */ 
        float in_ene, /* (i) the energy of the input vector */ 
        float factor, /* (o) resulting gain factor */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         167 
    
                     Internet Low Bit Rate Codec            July 2002 
    
        int targlen /* (i) dimension of all vectors */ 
   );   
    
   void SplitVQ(  
       float *qX, /* (o) the quantized vector */ 
       int *index, /* (o) a vector of indexes for all vector 
           codebooks in the split */ 
       float *X, /* (i) the vector to quantize */ 
       const float *CB, /* (i) the quantizer codebook */ 
       int nsplit, /* the number of vector splits */ 
       const int *dim, /* the dimension of X and qX */ 
       const int *cbsize /* the number of vectors in the  
           codebook */ 
   ); 
    
    
   void sort_sq(  
       float *xq, /* (o) the quantized value */ 
       int *index, /* (o) the quantization index */ 
       float x, /* (i) the value to quantize */ 
       const float *cb, /* (i) the quantization codebook */ 
       int cb_size /* (i) the size of the quantization codebook */ 
   ); 
    
   int LSF_check(  
       float *lsf, /* (i) a table of lsf vectors */ 
       int dim, /* (i) the dimension of each lsf vector */ 
       int NoAn /* (i) the number of lsf vectors in the table */ 
   ); 
    
   #endif 
    
    
A.28 helpfun.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       helpfun.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
    
   #include "iLBC_define.h" 
   #include "constants.h" 
    
   /*----------------------------------------------------------------* 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         168 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    *  calculation of auto correlation  
    *---------------------------------------------------------------*/ 
    
   void autocorr(  
       float *r, /* (o) autocorrelation vector */ 
       const float *x, /* (i) data vector */ 
       int N, /* (i) length of data vector */ 
       int order /* largest lag for calculated autocorrelations */ 
   ){ 
       int     lag, n; 
       float   sum; 
        
       for (lag = 0; lag <= order; lag++) { 
           sum = 0; 
           for (n = 0; n < N - lag; n++) 
               sum += x[n] * x[n+lag]; 
           r[lag] = sum; 
       }    
   } 
    
   /*----------------------------------------------------------------* 
    *  window multiplication   
    *---------------------------------------------------------------*/ 
    
   void window(  
       float *z, /* (o) the windowed data */ 
       const float *x, /* (i) the original data vector */ 
       const float *y, /* (i) the window */ 
       int N /* (i) length of all vectors */ 
   ){ 
       int     i; 
        
       for (i = 0; i < N; i++) { 
           z[i] = x[i] * y[i]; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  levinson-durbin solution for lpc coefficients                          
    *---------------------------------------------------------------*/ 
    
   void levdurb(  
       float *a, /* (o) lpc coefficient vector starting with 1.0 */ 
       float *k, /* (o) reflection coefficients */ 
       float *r, /* (i) autocorrelation vector */ 
       int order /* (i) order of lpc filter */ 
   ){ 
       float  sum, alpha; 
       int     m, m_h, i; 
        
       a[0] = 1.0;   
       if (r[0] < EPS) { /* if r[0] <= 0, set LPC coeff. to zero */ 
           for (i = 0; i < order; i++) { 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         169 
    
                     Internet Low Bit Rate Codec            July 2002 
    
               k[i] = 0; 
               a[i+1] = 0; 
           }    
       } else { 
           a[1] = k[0] = -r[1]/r[0]; 
           alpha = r[0] + r[1] * k[0]; 
           for (m = 1; m < order; m++){ 
               sum = r[m + 1]; 
               for (i = 0; i < m; i++){ 
                   sum += a[i+1] * r[m - i]; 
               } 
               k[m] = -sum / alpha; 
               alpha += k[m] * sum; 
               m_h = (m + 1) >> 1; 
               for (i = 0; i < m_h; i++){ 
                   sum = a[i+1] + k[m] * a[m - i]; 
                   a[m - i] += k[m] * a[i+1]; 
                   a[i+1] = sum; 
               } 
               a[m+1] = k[m]; 
           } 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  interpolation between vectors  
    *---------------------------------------------------------------*/ 
    
   void interpolate(  
       float *out, /* (o) the interpolated vector */ 
       float *in1, /* (i) the first vector for the interpolation */ 
       float *in2, /* (i) the second vector for the interpolation */ 
       float coef, /* (i) interpolation weights */ 
       int length /* (i) length of all vectors */ 
   ){ 
       int i; 
       float invcoef; 
        
       invcoef = (float)1.0 - coef; 
       for (i = 0; i < length; i++) 
           out[i] = coef * in1[i] + invcoef * in2[i]; 
   } 
    
   /*----------------------------------------------------------------* 
    *  lpc bandwidth expansion                    
    *---------------------------------------------------------------*/ 
    
   void bwexpand(  
       float *out, /* (o) the bandwidth expanded lpc coefficients */ 
       float *in, /* (i) the lpc coefficients before bandwidth  
           expansion */ 
       float coef, /* (i) the bandwidth expansion factor */ 
       int length /* (i) the length of lpc coefficient vectors */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         170 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   ){ 
       int i; 
       float  chirp; 
        
       chirp = coef; 
        
       out[0] = in[0]; 
       for (i = 1; i < length; i++) { 
           out[i] = chirp * in[i]; 
           chirp *= coef; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  vector quantization  
    *---------------------------------------------------------------*/ 
    
   void vq(  
       float *Xq, /* (o) the quantized vector */ 
       int *index, /* (o) the quantization index */ 
       const float *CB, /* (i) the vector quantization codebook */ 
       float *X, /* (i) the vector to quantize */ 
       int n_cb, /* (i) the number of vectors in the codebook */ 
       int dim /* (i) the dimension of all vectors */ 
   ){ 
       int     i, j; 
       int     pos, minindex; 
       float   dist, tmp, mindist; 
        
       pos = 0; 
       mindist = FLOAT_MAX; 
       for (j = 0; j < n_cb; j++) { 
           dist = X[0] - CB[pos]; 
           dist *= dist; 
           for (i = 1; i < dim; i++) { 
               tmp = X[i] - CB[pos + i]; 
               dist += tmp*tmp; 
               if (dist >= mindist) goto next; 
           } 
           if (dist < mindist) { 
               mindist = dist; 
               minindex = j; 
           } 
   next:   pos += dim; 
       } 
       for (i = 0; i < dim; i++) { 
           Xq[i] = CB[minindex*dim + i]; 
       } 
       *index = minindex;   
   } 
    
   /*----------------------------------------------------------------* 
    *  split vector quantization  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         171 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    *---------------------------------------------------------------*/ 
    
   void SplitVQ(  
       float *qX, /* (o) the quantized vector */ 
       int *index, /* (o) a vector of indexes for all vector  
           codebooks in the split */ 
       float *X, /* (i) the vector to quantize */ 
       const float *CB, /* (i) the quantizer codebook */ 
       int nsplit, /* the number of vector splits */ 
       const int *dim, /* the dimension of X and qX */ 
       const int *cbsize /* the number of vectors in the codebook */ 
   ){ 
       int    cb_pos, X_pos, i; 
        
       cb_pos = 0; 
       X_pos= 0; 
       for (i = 0; i < nsplit; i++) { 
           vq(qX + X_pos, index + i, CB + cb_pos, X + X_pos,  
               cbsize[i], dim[i]); 
           X_pos += dim[i]; 
           cb_pos += dim[i] * cbsize[i]; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  scalar quantization  
    *---------------------------------------------------------------*/ 
    
   void sort_sq(  
       float *xq, /* (o) the quantized value */ 
       int *index, /* (o) the quantization index */ 
       float x, /* (i) the value to quantize */ 
       const float *cb, /* (i) the quantization codebook */ 
       int cb_size /* (i) the size of the quantization codebook */ 
   ){ 
       int i; 
        
       if (x <= cb[0]) { 
           *index = 0; 
           *xq = cb[0]; 
       } else { 
           i = 0; 
           while ((x > cb[i]) && i < cb_size - 1) 
               i++; 
           if (x > ((cb[i] + cb[i - 1])/2)) { 
               *index = i; 
               *xq = cb[i]; 
           } else { 
               *index = i - 1; 
               *xq = cb[i - 1]; 
           } 
       } 
   } 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         172 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   /*----------------------------------------------------------------* 
    *  check for stability of lsf coefficients 
    *---------------------------------------------------------------*/ 
    
   int LSF_check( /* (o) 1 for stable lsf vectors and 0 for  
           nonstable ones */ 
       float *lsf, /* (i) a table of lsf vectors */ 
       int dim, /* (i) the dimension of each lsf vector */ 
       int NoAn /* (i) the number of lsf vectors in the table */ 
   ){ 
       int k,n,m, Nit=2, change=0,pos; 
       float tmp; 
       static float eps=(float)0.039; /* 50 Hz */ 
       static float eps2=(float)0.0195; 
       static float maxlsf=(float)3.14; /* 4000 Hz */ 
       static float minlsf=(float)0.01; /* 0 Hz */ 
        
       /* LSF separation check*/ 
    
       for (n=0;n<Nit;n++) { /* Run through a couple of times */ 
           for (m=0;m<NoAn;m++) { /* Number of analyses per frame */ 
               for (k=0;k<(dim-1);k++) { 
                   pos=m*dim+k; 
                   if ((lsf[pos+1]-lsf[pos])<eps) { 
                       if (lsf[pos+1]<lsf[pos]) { 
                           tmp=lsf[pos+1]; 
                           lsf[pos+1]= lsf[pos]+eps2; 
                           lsf[pos]= lsf[pos+1]-eps2; 
                       } else { 
                           lsf[pos]-=eps2;  
                           lsf[pos+1]+=eps2;  
                       } 
                       change=1; 
                   } 
                   if (lsf[pos]<minlsf) {  
                       lsf[pos]=minlsf; 
                       change=1; 
                   } 
                   if (lsf[pos]>maxlsf) {  
                       lsf[pos]=maxlsf; 
                       change=1; 
                   }                
               } 
           } 
       } 
        
       return change;   
   } 
    
    
A.29 hpInput.h 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         173 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       hpInput.h         
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_HPINPUT_H 
   #define __iLBC_HPINPUT_H 
    
   void hpInput(  
       float *In, /* (i) vector to filter */ 
       int len, /* (i) length of vector to filter */ 
       float *Out, /* (o) the resulting filtered vector */ 
       float *mem /* (i/o) the filter state */ 
   ); 
    
   #endif 
    
    
A.30 hpInput.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       hpInput.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include "constants.h" 
    
   /*----------------------------------------------------------------* 
    *  Input high-pass filter                           
    *---------------------------------------------------------------*/ 
    
   void hpInput(  
       float *In, /* (i) vector to filter */ 
       int len, /* (i) length of vector to filter */ 
       float *Out, /* (o) the resulting filtered vector */ 
       float *mem /* (i/o) the filter state */ 
   ){ 
       int i; 
       float *pi, *po; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         174 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       /* all-zero section*/ 
    
       pi = &In[0]; 
       po = &Out[0]; 
       for (i=0; i<len; i++) { 
           *po = hpi_zero_coefs[0] * (*pi); 
           *po += hpi_zero_coefs[1] * mem[0]; 
           *po += hpi_zero_coefs[2] * mem[1]; 
    
           mem[1] = mem[0]; 
           mem[0] = *pi; 
           po++; 
           pi++; 
    
       } 
    
       /* all-pole section*/ 
    
       po = &Out[0]; 
       for (i=0; i<len; i++) { 
           *po -= hpi_pole_coefs[1] * mem[2]; 
           *po -= hpi_pole_coefs[2] * mem[3]; 
    
           mem[3] = mem[2]; 
           mem[2] = *po; 
           po++; 
       } 
   } 
    
    
A.31 hpOutput.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       hpOutput.h        
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_HPOUTPUT_H 
   #define __iLBC_HPOUTPUT_H 
    
   void hpOutput( 
       float *In, /* (i) vector to filter */ 
       int len, /* (i) length of vector to filter */ 
       float *Out, /* (o) the resulting filtered vector */ 
       float *mem /* (i/o) the filter state */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         175 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   ); 
    
   #endif 
    
    
A.32 hpOutput.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       hpOutput.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include "constants.h" 
    
   /*----------------------------------------------------------------* 
    *  Output high-pass filter                           
    *---------------------------------------------------------------*/ 
    
   void hpOutput( 
       float *In, /* (i) vector to filter */ 
       int len, /* (i) length of vector to filter */ 
       float *Out, /* (o) the resulting filtered vector */ 
       float *mem /* (i/o) the filter state */ 
   ){ 
       int i; 
       float *pi, *po; 
    
       /* all-zero section*/ 
    
       pi = &In[0]; 
       po = &Out[0]; 
       for (i=0; i<len; i++) { 
           *po = hpo_zero_coefs[0] * (*pi); 
           *po += hpo_zero_coefs[1] * mem[0]; 
           *po += hpo_zero_coefs[2] * mem[1]; 
    
           mem[1] = mem[0]; 
           mem[0] = *pi; 
           po++; 
           pi++; 
    
       } 
    
       /* all-pole section*/ 
    
       po = &Out[0]; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         176 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       for (i=0; i<len; i++) { 
           *po -= hpo_pole_coefs[1] * mem[2]; 
           *po -= hpo_pole_coefs[2] * mem[3]; 
    
           mem[3] = mem[2]; 
           mem[2] = *po; 
           po++; 
       } 
   } 
    
    
A.33 iCBConstruct.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iCBConstruct.h    
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_ICBCONSTRUCT_H 
   #define __iLBC_ICBCONSTRUCT_H 
    
   void iCBConstruct( 
       float *decvector, /* (o) Decoded vector */ 
       int *index, /* (i) Codebook indices */ 
       int *gain_index, /* (i) Gain quantization indices */ 
       float *mem, /* (i) Buffer for codevector construction */ 
       int lMem, /* (i) Length of buffer */ 
       int veclen, /* (i) Length of vector */ 
       int nStages /* (i) Number of codebook stages */ 
   ); 
    
   #endif 
    
    
A.34 iCBConstruct.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iCBConstruct.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         177 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   ******************************************************************/ 
    
   #include <math.h> 
    
   #include "iLBC_define.h" 
   #include "gainquant.h" 
   #include "getCBvec.h" 
    
   /*----------------------------------------------------------------* 
    *  Construct decoded vector from codebook and gains. 
    *---------------------------------------------------------------*/ 
    
   void iCBConstruct( 
       float *decvector, /* (o) Decoded vector */ 
       int *index, /* (i) Codebook indices */ 
       int *gain_index, /* (i) Gain de-quantization indices */ 
       float *mem, /* (i) Buffer for codevector construction */ 
       int lMem, /* (i) Length of buffer */ 
       int veclen, /* (i) Length of vector */ 
       int nStages /* (i) Number of codebook stages */ 
   ){ 
       int j,k; 
       float gain[NSTAGES]; 
       float cbvec[SUBL]; 
    
       /* gain de-quantization */ 
    
       gain[0] = gaindequant(gain_index[0], 1.0, 16); 
       if (nStages > 1) 
           gain[1] = gaindequant(gain_index[1],  
               (float)fabs(gain[0]), 8); 
       if (nStages > 2) 
           gain[2] = gaindequant(gain_index[2],  
               (float)fabs(gain[1]), 8); 
    
       /* codebook vector construction and construction of  
       total vector */ 
    
       getCBvec(cbvec, mem, index[0], lMem, veclen); 
       for (j=0;j<veclen;j++){ 
           decvector[j] = gain[0]*cbvec[j]; 
       } 
       if (nStages > 1) { 
           for (k=1; k<nStages; k++) { 
               getCBvec(cbvec, mem, index[k], lMem, veclen); 
               for (j=0;j<veclen;j++) { 
                   decvector[j] += gain[k]*cbvec[j]; 
               } 
           } 
       } 
   } 
    
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         178 
    
                     Internet Low Bit Rate Codec            July 2002 
    
A.35 iCBSearch.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iCBSearch.h         
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_ICBSEARCH_H 
   #define __iLBC_ICBSEARCH_H 
    
   void iCBSearch( 
       int *index, /* (o) Codebook indices */ 
       int *gain_index, /* (o) Gain quantization indices */ 
       float *intarget, /* (i) Target vector for encoding */        
       float *mem, /* (i) Buffer for codebook construction */ 
       int lMem, /* (i) Length of buffer */ 
       int lTarget, /* (i) Length of vector */ 
       int nStages, /* (i) Number of codebook stages */ 
       float *weightDenum, /* (i) weighting filter coefficients */ 
       float *weightState  /* (i) weighting filter state */ 
   ); 
    
   #endif 
    
    
A.36 iCBSearch.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       iCBSearch.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
   #include <string.h> 
    
   #include "iLBC_define.h" 
   #include "gainquant.h" 
   #include "createCB.h" 
   #include "filter.h" 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         179 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   /*----------------------------------------------------------------* 
    *  Search routine for codebook encoding and gain quantization. 
    *---------------------------------------------------------------*/ 
    
   void iCBSearch( 
       int *index, /* (o) Codebook indices */ 
       int *gain_index, /* (o) Gain quantization indices */ 
       float *intarget, /* (i) Target vector for encoding */        
       float *mem, /* (i) Buffer for codebook construction */ 
       int lMem, /* (i) Length of buffer */ 
       int lTarget, /* (i) Length of vector */ 
       int nStages, /* (i) Number of codebook stages */ 
       float *weightDenum, /* (i) weighting filter coefficients */ 
       float *weightState  /* (i) weighting filter state */ 
   ){ 
       int i, j, icount, stage, best_index; 
       float max_measure, gain, measure, crossDot; 
       float gains[NSTAGES]; 
       float cb[(MEML+SUBL+1)*CBEXPAND*SUBL]; 
       float target[SUBL]; 
       int base_index, sInd, eInd, base_size; 
       float buf[MEML+SUBL+2*FILTERORDER]; 
       float invenergy[512], *pp; 
    
       /* copy target */ 
    
       memcpy(target, intarget, lTarget*sizeof(float)); 
    
       /* Determine size of codebook sections */ 
    
       base_size=lMem-lTarget+1; 
       if (lTarget==SUBL) 
           base_size=lMem-lTarget+1+lTarget/2; 
    
       /* setup buffer for weighting */ 
    
       memcpy(buf,weightState,sizeof(float)*FILTERORDER);  
       memcpy(buf+FILTERORDER,mem,lMem*sizeof(float)); 
       memcpy(buf+FILTERORDER+lMem,intarget,lTarget*sizeof(float)); 
    
       /* weighting */ 
    
       AllPoleFilter(buf+FILTERORDER, weightDenum, lMem+lTarget, 
   FILTERORDER); 
        
       /* Construct the codebook and target needed */ 
    
       createCB(cb, invenergy, buf+FILTERORDER, lMem, lTarget); 
       memcpy(target, buf+FILTERORDER+lMem, lTarget*sizeof(float)); 
        
       /* The Main Loop over stages */ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         180 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       for (stage=0;stage<nStages; stage++) { 
    
           /* initialize search measure */ 
    
           max_measure = (float)-10000000.0; 
           best_index = 0; 
    
           /* loop over first codebook section, full search */ 
    
           for (icount=0; icount<base_size; icount++) { 
    
               /* calculate measure */ 
    
               crossDot=0.0; 
               pp = cb+icount*lTarget; 
               for (j=0;j<lTarget;j++) { 
                   crossDot += target[j]*(*pp++); 
               } 
               if (stage==0) { 
                   measure=(float)-10000000.0; 
                   if (crossDot > 0.0) 
                       measure = crossDot*crossDot*invenergy[icount]; 
               } 
               else { 
                   measure = crossDot*crossDot*invenergy[icount]; 
               } 
    
               /* check if measure better */ 
    
               if(measure>max_measure){ 
                   best_index = icount; 
                   max_measure = measure; 
                   gain = crossDot*invenergy[icount]; 
               } 
           } 
    
           /* set search range for following codebook sections */ 
    
           base_index=best_index; 
    
           /* unrestricted search */ 
    
           if (RESRANGE == -1) { 
               sInd=0; 
               eInd=base_size-1; 
           } 
    
           /* restriced search around best index from first  
           codebook section */ 
    
           else { 
               sInd=base_index-RESRANGE/2; 
               if (sInd < 0) sInd=0; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         181 
    
                     Internet Low Bit Rate Codec            July 2002 
    
               eInd = sInd+RESRANGE; 
               if (eInd>=base_size) { 
                   eInd=base_size-1; 
                   sInd=eInd-RESRANGE; 
               } 
           } 
    
           /* search of higher codebook sections */ 
    
           for (i=1; i<CBEXPAND; i++) { 
    
               /* index search range */  
    
               sInd += base_size; 
               eInd += base_size; 
    
               /* loop over search range */ 
    
               for (icount=sInd; icount<=eInd; icount++) { 
    
                   /* calculate measure */ 
    
                   crossDot=0.0; 
                   pp=cb+icount*lTarget; 
                   for (j=0;j<lTarget;j++) { 
                       crossDot += target[j]*(*pp++); 
                   } 
                   if (stage==0) { 
                       measure=(float)-10000000.0; 
                       if (crossDot > 0.0) 
                           measure = crossDot*crossDot* 
                               invenergy[icount]; 
                   } 
                   else { 
                       measure = crossDot*crossDot*invenergy[icount]; 
                   } 
    
                   /* check if measure better */ 
    
                   if(measure>max_measure){ 
                       best_index = icount; 
                       max_measure = measure; 
                       gain = crossDot*invenergy[icount]; 
                   } 
               } 
           } 
    
           /* record best index */ 
    
           index[stage] = best_index; 
    
           /* gain quantization */ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         182 
    
                     Internet Low Bit Rate Codec            July 2002 
    
           if(stage==0){ 
               if (gain<0.0) gain = 0.0;  
               if (gain>1.0) gain = 1.0; 
               gain = gainquant(gain, 1.0, 16, &gain_index[stage]); 
           } 
           else { 
               if(fabs(gain) > fabs(gains[stage-1])){ 
                   gain = gain * (float)fabs(gains[stage-1])/ 
                       (float)fabs(gain); 
               } 
               gain = gainquant(gain, (float)fabs(gains[stage-1]),  
                   8, &gain_index[stage]); 
           } 
    
           /* Update target */ 
    
           for(j=0;j<lTarget;j++)  
               target[j] -= gain*cb[index[stage]*lTarget+j]; 
    
           /* record quantized gain */ 
    
           gains[stage]=gain; 
    
       }/* end of Main Loop. for (stage=0;... */ 
   } 
    
    
A.37 LPCdecode.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       LPC_decode.h      
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_LPC_DECODE_H 
   #define __iLBC_LPC_DECODE_H 
    
   void LSFinterpolate2a_dec(  
       float *a, /* (o) lpc coefficients for a sub frame */ 
       float *lsf1, /* (i) first lsf coefficient vector */ 
       float *lsf2, /* (i) second lsf coefficient vector */ 
       float coef, /* (i) interpolation weight */ 
       int length /* (i) length of lsf vectors */ 
   ); 
          
   void SimplelsfUNQ(  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         183 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       float *lsfunq, /* (o) quantized lsf coefficients */ 
       int *index /* (i) quantization index */ 
   ); 
    
   void DecoderInterpolateLSF(  
       float *syntdenum, /* (o) synthesis filter coefficients */ 
       float *weightnum, /* (o) weighting numbrator coefficients */ 
       float *weightdenum, /* (o) weighting denumerator  
           coefficients */ 
       float *lsfuq,  /* (i) quantized lsf coefficients */ 
       int length, /* (i) length of lsf coefficient vector */ 
       iLBC_Dec_Inst_t *iLBCdec_inst /* (i) the decoder state  
           structure */ 
   ); 
    
   #endif 
    
    
A.38 LPCdecode.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       LPC_decode.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
   #include <string.h> 
    
   #include "helpfun.h" 
   #include "lsf.h" 
   #include "iLBC_define.h" 
   #include "constants.h" 
    
   /*----------------------------------------------------------------* 
    *  interpolation of lsf coefficients for the decoder                            
    *---------------------------------------------------------------*/ 
    
   void LSFinterpolate2a_dec(  
       float *a, /* (o) lpc coefficients for a sub frame */ 
       float *lsf1, /* (i) first lsf coefficient vector */ 
       float *lsf2, /* (i) second lsf coefficient vector */ 
       float coef, /* (i) interpolation weight */ 
       int length /* (i) length of lsf vectors */ 
   ){ 
       float  lsftmp[FILTERORDER]; 
        
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         184 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       interpolate(lsftmp, lsf1, lsf2, coef, length); 
       lsf2a(a, lsftmp); 
   } 
    
   /*----------------------------------------------------------------* 
    *  obtain quantized lsf coefficients from quantization index  
    *---------------------------------------------------------------*/ 
    
   void SimplelsfUNQ(  
       float *lsfunq, /* (o) quantized lsf coefficients */ 
       int *index /* (i) quantization index */ 
   ){   
       int    i,j, pos, cb_pos; 
       float  lsfhat[FILTERORDER]; 
    
       /* decode last LSF */ 
        
       pos = 0; 
       cb_pos = 0; 
       for (i = 0; i < LSF_NSPLIT; i++) { 
           for (j = 0; j < dim_ml[i]; j++) { 
               lsfunq[FILTERORDER + pos + j] = cb_ml[cb_pos +  
                   (long)(index[LSF_NSPLIT + i])*dim_ml[i] + j]; 
           }        
           pos += dim_ml[i]; 
           cb_pos += size_ml[i]*dim_ml[i]; 
       } 
        
       /* decode predicion error for first LSF */ 
    
       pos = 0; 
       cb_pos = 0; 
       for (i = 0; i < LSF_NSPLIT; i++) { 
           for (j = 0; j < dim_p[i]; j++) { 
               lsfunq[pos + j] = cb_p[cb_pos +  
                   (long)(index[i])*dim_p[i] + j]; 
           } 
            
           pos += dim_p[i]; 
           cb_pos += size_p[i]*dim_p[i]; 
       } 
        
       /* add prediction, mean, and unquantized prediction error  
       to obtain output LSF */ 
    
       for (i = 0; i < FILTERORDER; i++) { 
           lsfhat[i] = lsfpred[i] *  
               (lsfunq[FILTERORDER + i] - lsfmean[i]); 
           lsfunq[i] += lsfmean[i] + lsfhat[i]; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         185 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    *  obtain synthesis and weighting filters form lsf coefficients  
    *---------------------------------------------------------------*/ 
    
   void DecoderInterpolateLSF(  
       float *syntdenum, /* (o) synthesis filter coefficients */ 
       float *weightnum, /* (o) weighting numbrator coefficients */ 
       float *weightdenum, /* (o) weighting denumerator  
           coefficients */ 
       float *lsfunq,  /* (i) quantized lsf coefficients */ 
       int length, /* (i) length of lsf coefficient vector */ 
       iLBC_Dec_Inst_t *iLBCdec_inst /* (i) the decoder state  
           structure */ 
   ){ 
       int    i, pos, lp_length; 
       float  lp[FILTERORDER + 1], *lsfunq2; 
            
       lsfunq2 = lsfunq + length; 
       lp_length = length + 1; 
        
       /* subframe 1: Interpolation between old and first */ 
    
       LSFinterpolate2a_dec(lp, (*iLBCdec_inst).lsfunqold, lsfunq,  
           coef[0], length); 
       bwexpand(syntdenum, lp, CHIRP_SYNTDENUM, lp_length); 
       bwexpand(weightnum, lp, CHIRP_WEIGHTNUM, lp_length); 
       bwexpand(weightdenum, lp, CHIRP_WEIGHTDENUM, lp_length); 
    
       /* subframes 2 to 6: interpolation between first and last  
       LSF */ 
        
       pos = lp_length; 
       for (i = 1; i < 6; i++) { 
           LSFinterpolate2a_dec(lp, lsfunq, lsfunq2, coef[i],  
               length); 
           bwexpand(syntdenum+pos, lp, CHIRP_SYNTDENUM, lp_length); 
           bwexpand(weightnum + pos, lp, CHIRP_WEIGHTNUM, lp_length); 
           bwexpand(weightdenum + pos, lp, CHIRP_WEIGHTDENUM,  
               lp_length); 
           pos += lp_length; 
       } 
        
       /* update memory */ 
    
       for (i = 0; i < length; i++) { 
           (*iLBCdec_inst).lsfunqold[i] = lsfunq2[i];  
       } 
   } 
    
    
A.39 LPCencode.h 
    
   /****************************************************************** 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         186 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       LPCencode.h 
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_LPCENCOD_H 
   #define __iLBC_LPCENCOD_H 
    
   void LPCencode(  
       float *syntdenum, /* (i/o) synthesis filter coefficients  
           before/after encoding */ 
       float *weightnum, /* (i/o) weighting numerator coefficients  
           before/after encoding */ 
       float *weightdenum, /* (i/o) weighting denumerator coefficients 
           before/after encoding */ 
       int *lsf_index, /* (o) lsf quantization index */ 
       float *data, /* (i) lsf coefficients to quantize */ 
       iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the encoder state  
           structure */ 
   ); 
    
   #endif 
    
    
A.40 LPCencode.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       LPCencode.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <string.h> 
    
   #include "iLBC_define.h" 
   #include "helpfun.h" 
   #include "lsf.h" 
   #include "constants.h" 
    
   /*----------------------------------------------------------------* 
    *  lpc analysis (subrutine to LPCencode)                            
    *---------------------------------------------------------------*/ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         187 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   void SimpleAnalysis( 
       float *lsf, /* (o) lsf coefficients */ 
       float *data, /* (i) new data vector */ 
       float *lpc_buffer /* (i) buffer containing old data */  
   ){ 
       int k, is,i; 
       float temp[BLOCKL], lp[FILTERORDER + 1], lp2[FILTERORDER + 1],  
           r[FILTERORDER + 1]; 
    
       for (i = 0; i < BLOCKL; i++) 
       lpc_buffer[LPC_AHEADL + i] = data[i]; 
        
       /* No lookahead, last window is asymmetric */ 
        
       for (k = 0; k < LPC_N; k++) { 
            
           is = k*LPC_AHEADL; 
            
           if (k < (LPC_N - 1)) 
               window(temp, lpc_win, lpc_buffer + is, BLOCKL); 
           else 
               window(temp, lpc_asymwin, lpc_buffer + is, BLOCKL); 
            
           autocorr(r, temp, BLOCKL, FILTERORDER); 
           window(r, r, lpc_lagwin, FILTERORDER + 1); 
            
           levdurb(lp, temp, r, FILTERORDER); 
           bwexpand(lp2, lp, CHIRP_SYNTDENUM, FILTERORDER+1);  
            
           a2lsf(lsf + k*FILTERORDER, lp2); 
       } 
       memcpy(lpc_buffer, lpc_buffer+BLOCKL, LPC_AHEADL*sizeof(float)); 
   } 
    
   /*----------------------------------------------------------------* 
    *  lsf interpolator and conversion from lsf to a coefficients 
    *  (subrutine to SimpleInterpolateLSF)                            
    *---------------------------------------------------------------*/ 
    
   void LSFinterpolate2a_enc( 
       float *a, /* (o) lpc coefficients */  
       float *lsf1, /* (i) first set of lsf coefficients */ 
       float *lsf2, /* (i) second set of lsf coefficients */ 
       float coef, /* (i) weighting coefficient to use between lsf1  
           and lsf2 */ 
       long length /* (i) length of coefficient vectors */ 
   ){   
       float  lsftmp[FILTERORDER]; 
        
       interpolate(lsftmp, lsf1, lsf2, coef, length); 
       lsf2a(a, lsftmp); 
   } 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         188 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
   /*----------------------------------------------------------------* 
    *  lsf interpolator (subrutine to LPCencode)                            
    *---------------------------------------------------------------*/ 
    
   void SimpleInterpolateLSF( 
       float *syntdenum, /* (o) the synthesis filter denominator  
           resulting from the quantized interpolated lsf */ 
       float *weightnum, /* (o) the weighting filter numerator  
           resulting from the unquantized interpolated lsf */ 
       float *weightdenum, /* (o) the weighting filter denominator  
           resulting from the unquantized interpolated lsf */ 
       float *lsf, /* (i) the unquantized lsf coefficients */ 
       float *lsfq, /* (i) the quantized lsf coefficients */ 
       float *lsfold, /* (i) the unquantized lsf coefficients of the  
           previous signal frame */ 
       float *lsfqold, /* (i) the quantized lsf coefficients of the  
           previous signal frame */ 
       int length /* (i) should equate FILTERORDER */ 
   ){ 
       int    i, pos, lp_length; 
       float  lp[FILTERORDER + 1], *lsf2, *lsfq2; 
     
       lsf2 = lsf + length; 
       lsfq2 = lsfq + length; 
       lp_length = length + 1; 
        
       /* subframe 1: Interpolation between old and first set of  
       lsf coefficients */ 
    
       LSFinterpolate2a_enc(lp, lsfqold, lsfq, coef[0], length); 
       bwexpand(syntdenum, lp, CHIRP_SYNTDENUM, lp_length); 
       LSFinterpolate2a_enc(lp, lsfold, lsf, coef[0], length); 
       bwexpand(weightnum, lp, CHIRP_WEIGHTNUM, lp_length); 
       bwexpand(weightdenum, lp, CHIRP_WEIGHTDENUM, lp_length); 
    
       /* subframe 2 to 6: Interpolation between first and second  
       set of lsf coefficients */ 
        
       pos = lp_length; 
       for (i = 1; i < NSUB; i++) { 
           LSFinterpolate2a_enc(lp, lsfq, lsfq2, coef[i], length); 
           bwexpand(syntdenum + pos, lp, CHIRP_SYNTDENUM, lp_length); 
            
           LSFinterpolate2a_enc(lp, lsf, lsf2, coef[i], length); 
           bwexpand(weightnum + pos, lp, CHIRP_WEIGHTNUM, lp_length); 
           bwexpand(weightdenum + pos, lp, CHIRP_WEIGHTDENUM,  
               lp_length); 
           pos += lp_length; 
       } 
        
       /* update memory */ 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         189 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       for (i = 0; i < length; i++) { 
           lsfold[i] = lsf2[i]; 
           lsfqold[i] = lsfq2[i];  
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  lsf quantizer (subrutine to LPCencode)                            
    *---------------------------------------------------------------*/ 
    
   void SimplelsfQ( 
       float *lsfq, /* (o) quantized lsf coefficients  
           (dimension FILTERORDER) */ 
       int *index, /* (o) quantization index */ 
       float *lsf /* (i) the lsf coefficient vector to be  
           quantized (dimension FILTERORDER ) */ 
   ){ 
       int i; 
       float e[FILTERORDER], lsfhat[FILTERORDER]; 
        
       /* Quantize second LSF with memoryless split VQ */ 
    
       SplitVQ(lsfq + FILTERORDER, index + LSF_NSPLIT, lsf +  
           FILTERORDER, cb_ml, LSF_NSPLIT, dim_ml, size_ml); 
        
       /* Calculate predicion error for first LSF from second */ 
    
       for (i = 0; i < FILTERORDER; i++) { 
           lsfhat[i] = lsfpred[i] * (lsfq[FILTERORDER + i] -  
               lsfmean[i]); 
           e[i] = lsf[i] - lsfmean[i] - lsfhat[i]; 
       } 
    
       /* Quantize prediction error */ 
    
       SplitVQ(lsfq, index, e, cb_p, LSF_NSPLIT, dim_p, size_p); 
        
       for (i = 0; i < FILTERORDER; i++) 
           lsfq[i] += lsfmean[i] + lsfhat[i];   
   } 
    
   /*----------------------------------------------------------------* 
    *  lpc encoder                            
    *---------------------------------------------------------------*/ 
    
   void LPCencode(  
       float *syntdenum, /* (i/o) synthesis filter coefficients  
           before/after encoding */ 
       float *weightnum, /* (i/o) weighting numerator coefficients  
           before/after encoding */ 
       float *weightdenum, /* (i/o) weighting denumerator coefficients 
           before/after encoding */ 
       int *lsf_index, /* (o) lsf quantization index */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         190 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       float *data, /* (i) lsf coefficients to quantize */ 
       iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the encoder state  
           structure */ 
   ){ 
       float  lsf[FILTERORDER * LPC_N], lsfq[FILTERORDER * LPC_N]; 
       int change=0; 
        
       SimpleAnalysis(lsf, data, (*iLBCenc_inst).lpc_buffer);  
       SimplelsfQ(lsfq, lsf_index, lsf); 
       change=LSF_check(lsfq, FILTERORDER, LPC_N); 
       SimpleInterpolateLSF(syntdenum, weightnum, weightdenum,  
           lsf, lsfq, (*iLBCenc_inst).lsfold,  
           (*iLBCenc_inst).lsfqold, FILTERORDER); 
   } 
    
    
A.41 lsf.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       lsf.h              
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_LSF_H 
   #define __iLBC_LSF_H 
    
   void a2lsf(  
       float *freq, /* (o) lsf coefficients */ 
       float *a /* (i) lpc coefficients */ 
   ); 
    
   void lsf2a(  
       float *a_coef, /* (o) lpc coefficients */ 
       float *freq /* (i) lsf coefficients */ 
   ); 
    
   #endif 
    
    
A.42 lsf.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       lsf.c  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         191 
    
                     Internet Low Bit Rate Codec            July 2002 
    
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <string.h> 
   #include <math.h> 
    
   #include "iLBC_define.h" 
    
   /*----------------------------------------------------------------* 
    *  conversion from lpc coefficients to lsf coefficients  
    *---------------------------------------------------------------*/ 
    
   void a2lsf(  
       float *freq, /* (o) lsf coefficients */ 
       float *a /* (i) lpc coefficients */ 
   ){ 
       float steps[NUMBER_OF_STEPS] =  
           {(float)0.00635, (float)0.003175, (float)0.0015875,  
           (float)0.00079375}; 
       float step; 
       int step_idx; 
       int lsp_index;   
       float p[HALFORDER]; 
       float q[HALFORDER]; 
       float p_pre[HALFORDER]; 
       float q_pre[HALFORDER]; 
       float old_p, old_q, *old; 
       float *pq_coef;  
       float omega, old_omega; 
       int i; 
       float hlp, hlp1, hlp2, hlp3, hlp4, hlp5; 
    
       for (i = 0; i < HALFORDER; i++){ 
           p[i] = (float)-1.0 * (a[i + 1] + a[FILTERORDER - i]);  
           q[i] = a[FILTERORDER - i] - a[i + 1]; 
       } 
        
       p_pre[0] = (float)-1.0 - p[0]; 
       p_pre[1] = - p_pre[0] - p[1]; 
       p_pre[2] = - p_pre[1] - p[2]; 
       p_pre[3] = - p_pre[2] - p[3]; 
       p_pre[4] = - p_pre[3] - p[4]; 
       p_pre[4] = p_pre[4] / 2; 
        
       q_pre[0] = (float)1.0 - q[0]; 
       q_pre[1] = q_pre[0] - q[1]; 
       q_pre[2] = q_pre[1] - q[2]; 
       q_pre[3] = q_pre[2] - q[3]; 
       q_pre[4] = q_pre[3] - q[4]; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         192 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       q_pre[4] = q_pre[4] / 2; 
        
       omega = 0.0; 
       old_omega = 0.0; 
    
       old_p = FLOAT_MAX; 
       old_q = FLOAT_MAX; 
        
       /* Here we loop through lsp_index to find all the FILTERORDER 
       roots for omega. */  
    
       for (lsp_index = 0; lsp_index < FILTERORDER; lsp_index++){ 
            
           /* Depending on lsp_index being even or odd, we  
           alternatively solve the roots for the two LSP equations. */ 
    
           if ((lsp_index % 2) == 0){ 
               pq_coef = p_pre; 
               old = &old_p; 
           } else { 
               pq_coef = q_pre; 
               old = &old_q; 
           } 
            
           /* Start with low resolution grid */ 
    
           for (step_idx = 0, step = steps[step_idx];  
               step_idx < NUMBER_OF_STEPS;){ 
                
               /*  cos(10piw) + pq(0)cos(8piw) + pq(1)cos(6piw) +  
               pq(2)cos(4piw) + pq(3)cod(2piw) + pq(4) */ 
    
               hlp = (float)cos(omega * TWO_PI); 
               hlp1 = (float)2.0 * hlp + pq_coef[0]; 
               hlp2 = (float)2.0 * hlp * hlp1 - (float)1.0 +  
                   pq_coef[1]; 
               hlp3 = (float)2.0 * hlp * hlp2 - hlp1 + pq_coef[2]; 
               hlp4 = (float)2.0 * hlp * hlp3 - hlp2 + pq_coef[3]; 
               hlp5 = hlp * hlp4 - hlp3 + pq_coef[4]; 
                
               if (((hlp5 * (*old)) <= 0.0) || (omega >= 0.5)){ 
                   if (step_idx == (NUMBER_OF_STEPS - 1)){ 
                        
                       if (fabs(hlp5) >= fabs(*old)) { 
                           freq[lsp_index] = omega - step; 
                       } else { 
                           freq[lsp_index] = omega; 
                       }    
                        
                       if ((*old) >= 0.0){ 
                           *old = (float)-1.0 * FLOAT_MAX; 
                       } else { 
                           *old = FLOAT_MAX; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         193 
    
                     Internet Low Bit Rate Codec            July 2002 
    
                       } 
    
                       omega = old_omega; 
                       step_idx = 0; 
                        
                       step_idx = NUMBER_OF_STEPS; 
                   } else { 
                       if (step_idx == 0){ 
                           old_omega = omega; 
                       } 
    
                       step_idx++; 
                       omega -= steps[step_idx]; 
    
                       /* Go back one grid step */ 
    
                       step = steps[step_idx]; 
                   } 
               } else { 
                    
               /* increment omega until they are of different sign,  
               and we know there is at least one root between omega  
               and old_omega */ 
                   *old = hlp5; 
                   omega += step; 
               } 
           } 
       } 
    
       for (i = 0; i < FILTERORDER; i++) { 
           freq[i] = freq[i] * TWO_PI; 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  conversion from lsf coefficients to lpc coefficients  
    *---------------------------------------------------------------*/ 
    
   void lsf2a(  
       float *a_coef, /* (o) lpc coefficients */ 
       float *freq /* (i) lsf coefficients */ 
   ){ 
       int i, j; 
       float hlp; 
       float p[HALFORDER], q[HALFORDER]; 
       float a[HALFORDER + 1], a1[HALFORDER], a2[HALFORDER]; 
       float b[HALFORDER + 1], b1[HALFORDER], b2[HALFORDER]; 
    
       for (i = 0; i < FILTERORDER; i++) { 
           freq[i] = freq[i] * PI2; 
       } 
    
       /* Check input for ill-conditioned cases.  This part is not  
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         194 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       found in the TIA standard.  It involves the following 2 IF  
       blocks. If "freq" is judged ill-conditioned, then we first  
       modify freq[0] and freq[HALFORDER-1] (normally HALFORDER =  
       10 for LPC applications), then we adjust the other "freq"  
       values slightly */ 
    
       if ((freq[0] <= 0.0) || (freq[FILTERORDER - 1] >= 0.5)){ 
    
           if (freq[0] <= 0.0) { 
               freq[0] = (float)0.022; 
           } 
    
           if (freq[FILTERORDER - 1] >= 0.5) { 
               freq[FILTERORDER - 1] = (float)0.499; 
           } 
    
           hlp = (freq[FILTERORDER - 1] - freq[0]) /  
               (float) (FILTERORDER - 1); 
    
           for (i = 1; i < FILTERORDER; i++) { 
               freq[i] = freq[i - 1] + hlp; 
           } 
       } 
        
       memset(a1, 0, HALFORDER*sizeof(float)); 
       memset(a2, 0, HALFORDER*sizeof(float)); 
       memset(b1, 0, HALFORDER*sizeof(float)); 
       memset(b2, 0, HALFORDER*sizeof(float)); 
       memset(a, 0, (HALFORDER+1)*sizeof(float)); 
       memset(b, 0, (HALFORDER+1)*sizeof(float)); 
            
       /* p[i] and q[i] compute cos(2*pi*omega_{2j}) and  
       cos(2*pi*omega_{2j-1} in eqs. 4.2.2.2-1 and 4.2.2.2-2.   
       Note that for this code p[i] specifies the coefficients  
       used in .Q_A(z) while q[i] specifies the coefficients used  
       in .P_A(z) */ 
    
       for (i = 0; i < HALFORDER; i++){ 
           p[i] = (float)cos(TWO_PI * freq[2 * i]); 
           q[i] = (float)cos(TWO_PI * freq[2 * i + 1]); 
       } 
        
       a[0] = 0.25; 
       b[0] = 0.25; 
        
       for (i = 0; i < HALFORDER; i++){ 
           a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i]; 
           b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i]; 
           a2[i] = a1[i]; 
           a1[i] = a[i]; 
           b2[i] = b1[i]; 
           b1[i] = b[i]; 
       } 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         195 
    
                     Internet Low Bit Rate Codec            July 2002 
    
        
       for (j = 0; j < FILTERORDER; j++){ 
           if (j == 0){ 
               a[0] = 0.25; 
               b[0] = -0.25; 
           } else { 
               a[0] = b[0] = 0.0; 
           } 
            
           for (i = 0; i < HALFORDER; i++){ 
               a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i]; 
               b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i]; 
               a2[i] = a1[i]; 
               a1[i] = a[i]; 
               b2[i] = b1[i]; 
               b1[i] = b[i]; 
           } 
    
           a_coef[j + 1] = 2 * (a[HALFORDER] + b[HALFORDER]); 
       } 
    
       a_coef[0] = 1.0; 
   } 
    
    
A.43 packing.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       packing.h               
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __PACKING_H 
   #define __PACKING_H 
    
   void packsplit( 
       int *index, /* (i) the value to split */ 
       int *firstpart, /* (o) the value specified by most significant  
           bits */ 
       int *rest, /* (o) the value specified by least significant  
           bits */ 
       int bitno_firstpart, /* (i) number of bits in most significant  
           part */ 
       int bitno_total /* (i) number of bits in full range of value */ 
   ); 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         196 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   void packcombine(  
       int *index, /* (i/o) the msb value in the combined value out */ 
       int rest, /* (i) the lsb value */ 
       int bitno_firstpart, /* (i) the number of bits in the msb  
           part */ 
       int bitno_rest /* (i) the number of bits in the lsb part */ 
   ); 
    
   void dopack(  
       unsigned char **bitstream, /* (i/o) on entrance pointer to  
           place in bitstream to pack new data, on exit  
           pointer to place in bitstream to pack  
           future data */ 
       int *index, /* (i) the value to pack */ 
       int bitno /* (i) the number of bits that the value will fit  
           within */ 
   ); 
    
   void unpack(  
       unsigned char **bitstream, /* (i/o) on entrance pointer to  
           place in bitstream to unpack new data from, on exit  
           pointer to place in bitstream to unpack future data from*/ 
       int *index, /* (o) resulting value */ 
       int bitno /* (i) number of bits used to represent the value */ 
   ); 
    
   #endif 
    
    
A.44 packing.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       packing.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h> 
   #include <stdlib.h> 
    
   #include "iLBC_define.h" 
   #include "constants.h" 
   #include "helpfun.h" 
   #include "string.h" 
    
   #define BBL 100 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         197 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   /*----------------------------------------------------------------* 
    *  splitting an integer into first most significant bits and  
    *  remaining least significant bits 
    *---------------------------------------------------------------*/ 
    
   void packsplit( 
       int *index, /* (i) the value to split */ 
       int *firstpart, /* (o) the value specified by most significant  
           bits */ 
       int *rest, /* (o) the value specified by least significant  
           bits */ 
       int bitno_firstpart, /* (i) number of bits in most significant  
           part */ 
       int bitno_total /* (i) number of bits in full range of value */ 
   ){ 
       int bb[BYTE_LEN*sizeof(int)]; 
       int bitno_rest = bitno_total-bitno_firstpart; 
       int i; 
    
       for(i=0;i<bitno_total;i++) bb[i]=(*index>>i)&1;  
        
       *rest=0; 
       for(i=0;i<bitno_rest;i++) *rest += bb[i]<<i; 
    
       *firstpart=0; 
       for(i=0;i<bitno_firstpart;i++)  
           *firstpart += bb[i+bitno_rest]<<i; 
   } 
    
   /*----------------------------------------------------------------* 
    *  combining a value corresponding to msb's with a value  
    *  corresponding to lsb's 
    *---------------------------------------------------------------*/ 
    
   void packcombine(  
       int *index, /* (i/o) the msb value in the combined value out */ 
       int rest, /* (i) the lsb value */ 
       int bitno_firstpart, /* (i) the number of bits in the msb  
           part */ 
       int bitno_rest /* (i) the number of bits in the lsb part */ 
   ){ 
       *index = *index<<bitno_rest; 
       *index += rest; 
   } 
    
   /*----------------------------------------------------------------* 
    *  packing of bits into bitstream, i.e., vector of bytes 
    *---------------------------------------------------------------*/ 
    
   void dopack(  
       unsigned char **bitstream, /* (i/o) on entrance pointer to  
           place in bitstream to pack new data, on exit pointer to  
           place in bitstream to pack future data */ 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         198 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       int *index, /* (i) the value to pack */ 
       int bitno /* (i) the number of bits that the value will fit  
           within bitno equal to 0 will cause the bitstream to be  
           flushed to integer bytes */ 
   ){ 
       static int bb[BBL]; 
       static int bbs=0; 
       static int bbe=0; 
       int i; 
        
       /* place the individual bits in individual integers in the table 
   bb */ 
        
       if( bitno > 0){ 
           for(i=0;i<bitno;i++) bb[bbe++] = (*index>>i)&1; 
       } 
        
       /* flush the bitstream to an integer number of bytes */ 
    
       if(bitno==0){  
           memset(bb+bbe, 0, (8-bbe)*sizeof(int)); 
           bbe=8; 
       } 
        
       /* write the bits into bitstream */ 
    
       while( bbe-bbs>=8){ 
           **bitstream = 0; 
           for(i=0;i<8;i++) 
               **bitstream += (unsigned char) bb[bbs++]<<i; 
           *bitstream += 1; 
       } 
        
       for( i=bbs;i<bbe;i++) bb[i-bbs]=bb[i]; 
        
       bbe-=bbs;  
       bbs=0; 
   } 
    
   /*----------------------------------------------------------------* 
    *  unpacking of bits from bitstream, i.e., vector of bytes 
    *---------------------------------------------------------------*/ 
    
   void unpack(  
       unsigned char **bitstream, /* (i/o) on entrance pointer to  
           place in bitstream to unpack new data from, on exit pointer 
           to place in bitstream to unpack future data from*/ 
       int *index, /* (o) resulting value */ 
       int bitno /* (i) number of bits used to represent the value */ 
   ){ 
       static int bb[BBL]; 
       static int bbs=0; 
       static int bbe=0; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         199 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       int i; 
        
       /* flush the bitstream */ 
    
       if( bitno==0) { 
           bbe=0; 
       } 
    
       /* extract bits from bitstream, place each bit in an integer  
       in the vector bb */ 
    
       while( bbe < bitno){ 
           for(i=0;i<8;i++) 
               bb[bbe++] = (int) (**bitstream >> i) & 1; 
           *bitstream += 1; 
       } 
        
       /* the bits are combined into the index value */ 
    
       *index=0; 
       for(i=0;i<bitno;i++) *index += bb[bbs++]<<i; 
        
       for( i=bbs;i<bbe;i++) bb[i-bbs]=bb[i]; 
       bbe-=bbs; bbs=0; 
   } 
    
    
A.45 StateConstructW.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       StateConstructW.h   
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_STATECONSTRUCTW_H 
   #define __iLBC_STATECONSTRUCTW_H 
    
   void StateConstructW(  
       int idxForMax, /* (i) 7-bit index for the quantization of max  
           amplitude */ 
       int *idxVec, /* (i) vector of quantization indexes */ 
       float *syntDenum, /* (i) synthesis filter denumerator */ 
       float *out, /* (o) the decoded state vector */ 
       int len /* (i) length of a state vector */ 
   ); 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         200 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   #endif 
    
    
A.46 StateConstructW.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       StateConstructW.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h>  
   #include <string.h> 
    
   #include "iLBC_define.h" 
   #include "constants.h" 
   #include "filter.h" 
    
   /*----------------------------------------------------------------* 
    *  decoding of the start state 
    *---------------------------------------------------------------*/ 
    
   void StateConstructW(  
       int idxForMax, /* (i) 7-bit index for the quantization of max  
           amplitude */ 
       int *idxVec, /* (i) vector of quantization indexes */ 
       float *syntDenum, /* (i) synthesis filter denumerator */ 
       float *out, /* (o) the decoded state vector */ 
       int len /* (i) length of a state vector */ 
   ){ 
       float maxVal, tmpbuf[FILTERORDER+2*STATE_LEN], *tmp,  
           numerator[FILTERORDER+1]; 
       float foutbuf[FILTERORDER+2*STATE_LEN], *fout; 
       int k,tmpi; 
        
       /* decoding of the maximum value */ 
    
       maxVal = state_frgq[idxForMax]; 
       maxVal = (float)pow(10,maxVal)/(float)4.5; 
            
       /* initialization of buffers and coefficients */ 
        
       memset(tmpbuf, 0, FILTERORDER*sizeof(float)); 
       memset(foutbuf, 0, FILTERORDER*sizeof(float)); 
       for(k=0; k<FILTERORDER; k++){ 
           numerator[k]=syntDenum[FILTERORDER-k]; 
       } 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         201 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       numerator[FILTERORDER]=syntDenum[0]; 
           tmp = &tmpbuf[FILTERORDER];  
       fout = &foutbuf[FILTERORDER]; 
    
       /* decoding of the sample values */ 
        
       for(k=0; k<len; k++){ 
           tmpi = len-1-k; 
           tmp[k] = maxVal*state_sq3[idxVec[tmpi]]; 
       } 
    
       /* circular convolution with all-pass filter */ 
    
       memset(tmp+len, 0, len*sizeof(float)); 
       ZeroPoleFilter(tmp, numerator, syntDenum, 2*len,  
           FILTERORDER, fout); 
       for(k=0;k<len;k++){ 
           out[k] = fout[len-1-k]+fout[2*len-1-k];  
       } 
   } 
    
    
A.47 StateSearchW.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       StateSearchW.h      
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_STATESEARCHW_H 
   #define __iLBC_STATESEARCHW_H 
    
   void StateSearchW(  
       float *residual, /* (i) target residual vector */ 
       float *syntDenum, /* (i) lpc synthesis filter */ 
       float *weightNum, /* (i) weighting filter numerator */ 
       float *weightDenum, /* (i) weighting filter denuminator */ 
       int *idxForMax, /* (o) quantizer index for maximum amplitude */ 
       int *idxVec, /* (o) vector of quantization indexes */ 
       int len /* (i) length of all vectors */ 
   ); 
    
    
   #endif 
    
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         202 
    
                     Internet Low Bit Rate Codec            July 2002 
    
A.48 StateSearchW.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       StateSearchW.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include <math.h>  
   #include <string.h> 
    
   #include "iLBC_define.h" 
   #include "constants.h" 
   #include "filter.h" 
   #include "helpfun.h" 
    
   /*----------------------------------------------------------------* 
    *  predictive noise shaping encoding of scaled start state  
    *  (subrutine for StateSearchW)  
    *---------------------------------------------------------------*/ 
    
   void AbsQuantW( 
       float *in, /* (i) vector to encode */ 
       float *syntDenum, /* (i) denominator of synthesis filter */ 
       float *weightNum, /* (i) numerator of weighting filter */ 
       float *weightDenum, /* (i) denominator of weighting filter */ 
       int *out, /* (o) vector of quantizer indexes */ 
       int len /* (i) length of vector to encode and vector of  
           quantizer indexes */ 
   ){ 
       float *target, targetBuf[FILTERORDER+STATE_LEN],  
             *syntOut, syntOutBuf[FILTERORDER+STATE_LEN],   
             *weightOut, weightOutBuf[FILTERORDER+STATE_LEN], 
             toQ, xq; 
       int n; 
       int index; 
    
       /* initialization of buffers for filterings */ 
                
       memset(targetBuf, 0, FILTERORDER*sizeof(float)); 
       memset(syntOutBuf, 0, FILTERORDER*sizeof(float)); 
       memset(weightOutBuf, 0, FILTERORDER*sizeof(float)); 
    
       /* initialization of pointers for filterings */ 
        
       target = &targetBuf[FILTERORDER]; 
       syntOut = &syntOutBuf[FILTERORDER]; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         203 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       weightOut = &weightOutBuf[FILTERORDER]; 
        
       /* encoding loop */ 
    
       for(n=0;n<len;n++){ 
            
           /* time update of filter coefficients */   
    
           if( n==STATE_LEN/2 ){ 
               syntDenum += (FILTERORDER+1); 
               weightNum += (FILTERORDER+1); 
               weightDenum += (FILTERORDER+1); 
           } 
            
           /* synthesis and weighting filters on input */ 
    
           AllPoleFilter ( &in[n], weightDenum, 1, FILTERORDER ); 
    
           /* prediction of synthesized and weighted input */ 
    
           syntOut[n] = 0.0; 
           AllPoleFilter ( &syntOut[n], weightDenum, 1, FILTERORDER ); 
            
           /* quantization */       
    
           toQ = in[n]-syntOut[n]; 
           sort_sq(&xq, &index, toQ, state_sq3, 8); 
           out[n]=index; 
           syntOut[n] = state_sq3[out[n]]; 
    
           /* update of the prediction filter */ 
    
           AllPoleFilter( &syntOut[n], weightDenum, 1, FILTERORDER ); 
       } 
   } 
    
   /*----------------------------------------------------------------* 
    *  encoding of start state                           
    *---------------------------------------------------------------*/ 
    
   void StateSearchW(  
       float *residual, /* (i) target residual vector */ 
       float *syntDenum, /* (i) lpc synthesis filter */ 
       float *weightNum, /* (i) weighting filter numerator */ 
       float *weightDenum, /* (i) weighting filter denuminator */ 
       int *idxForMax, /* (o) quantizer index for maximum amplitude */ 
       int *idxVec, /* (o) vector of quantization indexes */ 
       int len /* (i) length of all vectors */ 
   ){   
       float dtmp, maxVal, tmpbuf[FILTERORDER+2*STATE_LEN], *tmp,  
                 numerator[1+FILTERORDER],  
                 foutbuf[FILTERORDER+2*STATE_LEN], *fout; 
       int k,utmp; 
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         204 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       int index; 
        
       /* initialization of buffers and filter coefficients */ 
    
       memset(tmpbuf, 0, FILTERORDER*sizeof(float)); 
       memset(foutbuf, 0, FILTERORDER*sizeof(float));   
       for(k=0; k<FILTERORDER; k++){ 
           numerator[k]=syntDenum[FILTERORDER-k]; 
       } 
       numerator[FILTERORDER]=syntDenum[0]; 
       tmp = &tmpbuf[FILTERORDER];  
       fout = &foutbuf[FILTERORDER]; 
    
       /* circular convolution with the all-pass filter */ 
        
       memcpy(tmp, residual, len*sizeof(float)); 
       memset(tmp+len, 0, len*sizeof(float)); 
       ZeroPoleFilter(tmp, numerator, syntDenum, 2*len,  
           FILTERORDER, fout); 
       for(k=0;k<len;k++){ 
           fout[k] += fout[k+len]; 
       }    
            
       /* identification of the maximum amplitude value */ 
        
       maxVal = fout[0]; 
       for(k=1; k<len; k++){ 
           if(fout[k]*fout[k] > maxVal*maxVal){ 
               maxVal = fout[k]; 
           } 
       } 
       maxVal=(float)fabs(maxVal); 
            
       /* encoding of the maximum amplitude value */ 
    
       if(maxVal < 10.0){ 
           maxVal = 10.0; 
       } 
       maxVal = (float)log10(maxVal); 
       sort_sq(&dtmp, &index, maxVal, state_frgq, 64); 
    
       /* decoding of the maximum amplitude representation value, 
       and corresponding scaling of start state */ 
    
       maxVal=state_frgq[index]; 
       utmp=index; 
       *idxForMax=utmp; 
       maxVal = (float)pow(10,maxVal); 
       maxVal = (float)(4.5)/maxVal; 
       for(k=0;k<len;k++){ 
           fout[k] *= maxVal; 
       } 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         205 
    
                     Internet Low Bit Rate Codec            July 2002 
    
       /* predictive noise shaping encoding of scaled start state */ 
    
       AbsQuantW(fout,syntDenum,weightNum,weightDenum,idxVec, len);  
   } 
    
    
A.49 syntFilter.h 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       syntFilter.h                
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #ifndef __iLBC_SYNTFILTER_H 
   #define __iLBC_SYNTFILTER_H 
    
   void syntFilter( 
       float *Out, /* (i/o) Signal to be filtered */ 
       float *a, /* (i) LP parameters */ 
       int len, /* (i) Length of signal */ 
       float *mem /* (i/o) Filter state */ 
   ); 
    
   #endif 
    
    
A.50 syntFilter.c 
    
   /****************************************************************** 
    
       iLBC Speech Coder ANSI-C Source Code 
    
       syntFilter.c  
    
       Copyright (c) 2001, 
       Global IP Sound AB. 
       All rights reserved. 
    
   ******************************************************************/ 
    
   #include "iLBC_define.h" 
    
   /*----------------------------------------------------------------* 
    *  LP synthesis filter. 
    *---------------------------------------------------------------*/ 
        
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         206 
    
                     Internet Low Bit Rate Codec            July 2002 
    
   void syntFilter( 
       float *Out, /* (i/o) Signal to be filtered */ 
       float *a, /* (i)   LP parameters */ 
       int len, /* (i)   Length of signal */ 
       float *mem /* (i/o) Filter state */ 
   ){ 
       int i, n; 
       float *po; 
    
       /* loop over signal samples */ 
    
       po = &Out[0]; 
       for (n=0; n<len; n++) { 
    
           /* loop over filter coefficients */ 
    
           for (i=0; i<FILTERORDER; i++) 
               *po -= a[i+1] * mem[i]; 
    
           /* update state */ 
    
           for (i=FILTERORDER-1; i>0; i--) 
               mem[i] = mem[i-1]; 
           mem[0] = *po; 
    
           po++; 
       } 
   } 
    
     
   Andersen et. al.  Experimental - Expires Jan. 1st, 2003         207