Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2004-2010 NXP Software
      3  * Copyright (C) 2010 The Android Open Source Project
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *      http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 
     19 /************************************************************************************/
     20 /*                                                                                  */
     21 /*  Includes                                                                        */
     22 /*                                                                                  */
     23 /************************************************************************************/
     24 
     25 #include "LVPSA.h"
     26 #include "LVPSA_QPD.h"
     27 /************************************************************************************/
     28 /*                                                                                  */
     29 /*  Sample rate table                                                               */
     30 /*                                                                                  */
     31 /************************************************************************************/
     32 
     33 /*
     34  * Sample rate table for converting between the enumerated type and the actual
     35  * frequency
     36  */
     37 const LVM_UINT16    LVPSA_SampleRateTab[] = {   8000,                    /* 8kS/s  */
     38                                                 11025,
     39                                                 12000,
     40                                                 16000,
     41                                                 22050,
     42                                                 24000,
     43                                                 32000,
     44                                                 44100,
     45                                                 48000};                  /* 48kS/s */
     46 
     47 /************************************************************************************/
     48 /*                                                                                  */
     49 /*  Sample rate inverse table                                                       */
     50 /*                                                                                  */
     51 /************************************************************************************/
     52 
     53 /*
     54  * Sample rate table for converting between the enumerated type and the actual
     55  * frequency
     56  */
     57 const LVM_UINT32    LVPSA_SampleRateInvTab[] = {    268435,                    /* 8kS/s  */
     58                                                     194783,
     59                                                     178957,
     60                                                     134218,
     61                                                     97391,
     62                                                     89478,
     63                                                     67109,
     64                                                     48696,
     65                                                     44739};                  /* 48kS/s */
     66 
     67 
     68 
     69 /************************************************************************************/
     70 /*                                                                                  */
     71 /*  Number of samples in 20ms                                                       */
     72 /*                                                                                  */
     73 /************************************************************************************/
     74 
     75 /*
     76  * Table for converting between the enumerated type and the number of samples
     77  * during 20ms
     78  */
     79 const LVM_UINT16    LVPSA_nSamplesBufferUpdate[]  = {   160,                   /* 8kS/s  */
     80                                                         220,
     81                                                         240,
     82                                                         320,
     83                                                         441,
     84                                                         480,
     85                                                         640,
     86                                                         882,
     87                                                         960};                  /* 48kS/s */
     88 /************************************************************************************/
     89 /*                                                                                  */
     90 /*  Down sampling factors                                                           */
     91 /*                                                                                  */
     92 /************************************************************************************/
     93 
     94 /*
     95  * Table for converting between the enumerated type and the down sampling factor
     96  */
     97 const LVM_UINT16    LVPSA_DownSamplingFactor[]  = {     5,                    /* 8000  S/s  */
     98                                                         7,                    /* 11025 S/s  */
     99                                                         8,                    /* 12000 S/s  */
    100                                                         10,                   /* 16000 S/s  */
    101                                                         15,                   /* 22050 S/s  */
    102                                                         16,                   /* 24000 S/s  */
    103                                                         21,                   /* 32000 S/s  */
    104                                                         30,                   /* 44100 S/s  */
    105                                                         32};                  /* 48000 S/s  */
    106 
    107 
    108 /************************************************************************************/
    109 /*                                                                                  */
    110 /*  Coefficient calculation tables                                                  */
    111 /*                                                                                  */
    112 /************************************************************************************/
    113 
    114 /*
    115  * Table for 2 * Pi / Fs
    116  */
    117 const LVM_INT16     LVPSA_TwoPiOnFsTable[] = {  26354,      /* 8kS/s */
    118                                                 19123,
    119                                                 17569,
    120                                                 13177,
    121                                                  9561,
    122                                                  8785,
    123                                                  6588,
    124                                                  4781,
    125                                                  4392};    /* 48kS/s */
    126 
    127 /*
    128  * Gain table
    129  */
    130 const LVM_INT16     LVPSA_GainTable[] = {   364,          /* -15dB gain */
    131                                             408,
    132                                             458,
    133                                             514,
    134                                             577,
    135                                             647,
    136                                             726,
    137                                             815,
    138                                             914,
    139                                             1026,
    140                                             1151,
    141                                             1292,
    142                                             1449,
    143                                             1626,
    144                                             1825,
    145                                             2048,         /* 0dB gain */
    146                                             2297,
    147                                             2578,
    148                                             2892,
    149                                             3245,
    150                                             3641,
    151                                             4096,
    152                                             4584,
    153                                             5144,
    154                                             5772,
    155                                             6476,
    156                                             7266,
    157                                             8153,
    158                                             9148,
    159                                             10264,
    160                                             11576};        /* +15dB gain */
    161 
    162 /************************************************************************************/
    163 /*                                                                                  */
    164 /*  Cosone polynomial coefficients                                                  */
    165 /*                                                                                  */
    166 /************************************************************************************/
    167 
    168 /*
    169  * Coefficients for calculating the cosine with the equation:
    170  *
    171  *  Cos(x) = (2^Shifts)*(a0 + a1*x + a2*x^2 + a3*x^3 + a4*x^4 + a5*x^5)
    172  *
    173  * These coefficients expect the input, x, to be in the range 0 to 32768 respresenting
    174  * a range of 0 to Pi. The output is in the range 32767 to -32768 representing the range
    175  * +1.0 to -1.0
    176  */
    177 const LVM_INT16     LVPSA_CosCoef[] = { 3,                             /* Shifts */
    178                                         4096,                          /* a0 */
    179                                         -36,                           /* a1 */
    180                                         -19725,                        /* a2 */
    181                                         -2671,                         /* a3 */
    182                                         23730,                         /* a4 */
    183                                         -9490};                        /* a5 */
    184 
    185 /*
    186  * Coefficients for calculating the cosine error with the equation:
    187  *
    188  *  CosErr(x) = (2^Shifts)*(a0 + a1*x + a2*x^2 + a3*x^3)
    189  *
    190  * These coefficients expect the input, x, to be in the range 0 to 32768 respresenting
    191  * a range of 0 to Pi/25. The output is in the range 0 to 32767 representing the range
    192  * 0.0 to 0.0078852986
    193  *
    194  * This is used to give a double precision cosine over the range 0 to Pi/25 using the
    195  * the equation:
    196  *
    197  * Cos(x) = 1.0 - CosErr(x)
    198  */
    199 const LVM_INT16     LVPSA_DPCosCoef[] = {   1,                           /* Shifts */
    200                                             0,                           /* a0 */
    201                                             -6,                          /* a1 */
    202                                             16586,                       /* a2 */
    203                                             -44};                        /* a3 */
    204 
    205 /************************************************************************************/
    206 /*                                                                                  */
    207 /*  Quasi peak filter coefficients table                                            */
    208 /*                                                                                  */
    209 /************************************************************************************/
    210 const QPD_C32_Coefs     LVPSA_QPD_Coefs[] = {
    211 
    212                                          {0x80CEFD2B,0x00CB9B17},  /* 8kS/s  */    /* LVPSA_SPEED_LOW   */
    213                                          {0x80D242E7,0x00CED11D},
    214                                          {0x80DCBAF5,0x00D91679},
    215                                          {0x80CEFD2B,0x00CB9B17},
    216                                          {0x80E13739,0x00DD7CD3},
    217                                          {0x80DCBAF5,0x00D91679},
    218                                          {0x80D94BAF,0x00D5B7E7},
    219                                          {0x80E13739,0x00DD7CD3},
    220                                          {0x80DCBAF5,0x00D91679},  /* 48kS/s */
    221 
    222                                          {0x8587513D,0x055C22CF},  /* 8kS/s  */    /* LVPSA_SPEED_MEDIUM      */
    223                                          {0x859D2967,0x0570F007},
    224                                          {0x85E2EFAC,0x05B34D79},
    225                                          {0x8587513D,0x055C22CF},
    226                                          {0x8600C7B9,0x05CFA6CF},
    227                                          {0x85E2EFAC,0x05B34D79},
    228                                          {0x85CC1018,0x059D8F69},
    229                                          {0x8600C7B9,0x05CFA6CF},//{0x8600C7B9,0x05CFA6CF},
    230                                          {0x85E2EFAC,0x05B34D79},  /* 48kS/s */
    231 
    232                                          {0xA115EA7A,0x1CDB3F5C},  /* 8kS/s  */   /* LVPSA_SPEED_HIGH      */
    233                                          {0xA18475F0,0x1D2C83A2},
    234                                          {0xA2E1E950,0x1E2A532E},
    235                                          {0xA115EA7A,0x1CDB3F5C},
    236                                          {0xA375B2C6,0x1E943BBC},
    237                                          {0xA2E1E950,0x1E2A532E},
    238                                          {0xA26FF6BD,0x1DD81530},
    239                                          {0xA375B2C6,0x1E943BBC},
    240                                          {0xA2E1E950,0x1E2A532E}}; /* 48kS/s */
    241 
    242