⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coder.h

📁 高通的cmda语音压缩算法is96a源代码. 针对自己的dsp将最耗时的c改成汇编就几乎是商用代码了.
💻 H
字号:
/**********************************************************************/
/* QCELP Variable Rate Speech Codec - Simulation of TIA IS96-A, service */
/*     option one for TIA IS95, North American Wideband CDMA Digital  */
/*     Cellular Telephony.                                            */
/*                                                                    */
/* (C) Copyright 1993, QUALCOMM Incorporated                          */
/* QUALCOMM Incorporated                                              */
/* 10555 Sorrento Valley Road                                         */
/* San Diego, CA 92121                                                */
/*                                                                    */
/* Note:  Reproduction and use of this software for the design and    */
/*     development of North American Wideband CDMA Digital            */
/*     Cellular Telephony Standards is authorized by                  */
/*     QUALCOMM Incorporated.  QUALCOMM Incorporated does not         */
/*     authorize the use of this software for any other purpose.      */
/*                                                                    */
/*     The availability of this software does not provide any license */
/*     by implication, estoppel, or otherwise under any patent rights */
/*     of QUALCOMM Incorporated or others covering any use of the     */
/*     contents herein.                                               */
/*                                                                    */
/*     Any copies of this software or derivative works must include   */
/*     this and all other proprietary notices.                        */
/**********************************************************************/
/* coder.h - contains most of the parameters for the QCELP algorithm */

#include"defines.h"

/**************************/
/* Basic Coder Parameters */
/**************************/
#define FSIZE      160        /* Overall frame size                     */
#define NUMRATES     5

/**********************/
/* LPC/LSP Parameters */
/**********************/
#define LPCSIZE    160        /* LPC frame size                         */
#define LPCOFFSET   60        /* Offset of LPC frame to Fsize           */
#define LPCORDER    10
#define LPC_CENTER LPCOFFSET+(LPCSIZE)/2

static float MIN_DELTA_LSP[NUMRATES][LPCORDER] =
{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ -.01, -.01, -.01, -.01, -.01, -.01, -.01, -.01, -.01, -.01},
{ -.01, -.01, -.01, -.01, -.01, -.01, -.01, -.01, -.01, -.01},
{ -.015, -.015, -.03, -.03, -.03, -.02, -.02, -.02, -.02, -.02 },
{ .015-.04545, .025-.09091, .05-.13636, .085-.18182, .120-.22727, 
.170-.27273, .215-.31818, .265-.36364, .335-.40909, .38-.45455}};  

static float MAX_DELTA_LSP[NUMRATES][LPCORDER] =
{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{  .01,  .01,  .01,  .01,  .01,  .01,  .01,  .01,  .01,  .01},
{  .01,  .01,  .01,  .01,  .01,  .01,  .01,  .01,  .01,  .01},
{  .015,  .015,  .03,  .03,  .03,  .02,  .02,  .02,  .02,  .02 },
{ .100-.04545, .125-.09091, .190-.13636, .245-.18182, .290-.22727, 
.325-.27273, .370-.31818, .40-.36364, .440-.40909, .47-.45455}};  


static INTTYPE NUM_LSP_QLEVELS[NUMRATES][LPCORDER] =
{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
{ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}};

static float LSP_DPCM_DECAY[NUMRATES]={ .90625, .90625, .90625, .90625, 0.0};
#define LSP_SPREAD_FACTOR           .01
static  float SMOOTH_FACTOR[NUMRATES][2] = 
{{0.0, 0.0}, {0.125, 0.9}, {0.125, 0.9}, {0.125, 0.125}, {0.0, 0.0}};
#define BWE_FACTOR                  .9883
#define PERCEPT_WGHT_FACTOR         .8
#define PF_ZERO_WGHT_FACTOR         .5
#define PF_POLE_WGHT_FACTOR         .8
#define AGC_FACTOR                  .9375

/****************************/
/* Rate Decision Parameters */
/****************************/
static  float RATE_THRESH[2][3][3] = 
{ {{ -0.5544613/100000.0,  4.047152,  362},
   { -1.5297330/100000.0,  8.750045, 1136},
   { -3.9570500/100000.0, 18.89962,  3347}},
  {{  0.9043945/10000000.0, 3.535748, -62071},
   { -1.9860070/10000000.0, 4.941658, 223951},
   { -4.8384770/10000000.0, 8.63002,  645864}} };
#define LOW_THRESH_LIM        160000	     
#define HIGH_THRESH_LIM      5059644
#define THRESH_UPDATE_FACTOR 1.00547

/********************/
/* Pitch Parameters */
/********************/
static  INTTYPE  PITCHSF[NUMRATES]       = {0, 0, 1, 2, 4};
#define MAX_PITCH_SF 4             /* used for array size definitions */
#define LENGTH_OF_IMPULSE_RESPONSE  20 /* used in pitch & cb searches */
#define MINB                 0.0
#define MAXB                 2.0
#define NUMBER_OF_B_LEVELS   9
#define MINLAG      17          /* The minimum and maximum pitch lags */
#define MAXLAG     143
                               /* pitch gain saturation for erasures  */
                               /* depending on the # of errs in a row */
static  float ERASE_B_SAT[5]= {2.0, 0.9, 0.6, 0.3, 0.0};
                               /* pitch gain code saturation for FRLs */
                               /* depending on the # of errs in a row */
static  float FRL_B_SAT[5]  = {2.0, 0.75, 0.5, 0.25, 0.0};

/***********************/
/* Codebook Parameters */
/***********************/
static  INTTYPE  CBSF   [NUMRATES]       = {0, 1, 2, 4, 8};
#define GORDER               2

#define CBLENGTH   128

static float CODEBOOK[CBLENGTH]= {
    0.0, -2.0,  0.0, -1.5,  0.0,  0.0,  0.0,  0.0, 
    0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0, 
    0.0, -1.5, -1.0,  0.0,  0.0,  0.0,  0.0,  0.0, 
    0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  2.5, 
    0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  2.0,  0.0, 
    0.0,  1.5,  1.0,  0.0,  1.5,  2.0,  0.0,  0.0, 
    0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0, 
    0.0,  0.0,  0.0,  0.0,  0.0,  1.5,  0.0,  0.0, 
   -1.5,  1.5,  0.0,  0.0, -1.0,  0.0,  1.5,  0.0, 
    0.0,  0.0,  0.0,  0.0,  0.0,  0.0, -2.5,  0.0, 
    0.0,  0.0,  0.0,  1.5,  0.0,  0.0,  0.0,  1.5, 
    0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  2.0, 
    0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0, 
    0.0,  1.5,  3.0, -1.5, -2.0,  0.0, -1.5, -1.5, 
    1.5, -1.5,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0, 
    0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0 }; 

static INTTYPE FG[73] = 
{  -2, -2, -2, -2, -1,  0,  0,  0,  1,  2,  3,  4,  5,
    6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
   18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 27, 28, 
   29, 30, 31, 32, 33, 34, 35, 36, 36, 37, 38, 39, 40, 
   41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 
   53, 54, 54, 55, 56, 57, 58, 58};

static INTTYPE QG[NUMRATES][4]= 
{{0, 0, 0, 0}, {-4, -2, 0, 2}, {-4, -2, 0, 2}, {-4, 0, 4, 8}, {-4, 0, 4, 8}};

static float GA[73] = 
{   .5, .5, .625, .75, .75, .875, 1.0, 1.125, 1.25, 1.375, 1.625, 
    1.75, 2.0, 2.25, 2.5, 2.875, 3.125, 3.5, 4.0, 4.5, 5.0, 
    5.625, 6.25, 7.125, 8.0, 8.875, 10.0, 11.25, 12.625, 14.125, 
    15.875, 17.75, 20.0, 22.375, 25.125, 28.125, 31.625,
    35.5, 39.75, 44.625, 50.125, 56.25, 63.125, 70.75, 79.375,
    89.125, 100.0, 112.25, 125.875, 141.25, 158.5, 177.875, 199.5, 
    223.875, 251.25, 281.875, 316.25, 354.875, 398.125, 446.625,
    501.125, 562.375, 631.0, 708.0, 794.375, 891.25, 1000.0, 1122.0,
    1258.875, 1412.5, 1584.875, 1778.25, 1995.25};

/***************************/
/* Data Packing Parameters */
/***************************/
#define WORDS_PER_PACKET 12
static INTTYPE NUMBITS[NUMRATES] = {0, 16, 40, 80, 171};

/* In these tables, "0" corresponds to the first parameter in a set */
/* rather than "1" as specified in PN 3119                          */
/* This allows indices starting at 0, as is the norm in C programs  */
/* For example, the lowest LSP is LSP0, not LSP1                    */
static INTTYPE BIT_DATA4[171][3] =
{  {LSP, 0, 2}, {LSP, 0, 3}, {LSP, 1, 2}, {LSP, 1, 3}, /* 167 */
    {LSP, 2, 2}, {LSP, 2, 3}, {LSP, 3, 2}, {LSP, 3, 3}, /* 163 */
    {LSP, 4, 2}, {LSP, 4, 3}, {LSP, 5, 2}, {LSP, 5, 3}, /* 159 */
    {LSP, 6, 2}, {LSP, 6, 3}, {LSP, 7, 2}, {LSP, 7, 3}, /* 155 */
    {LSP, 8, 2}, {LSP, 8, 3}, {LSP, 9, 2}, {LSP, 9, 3}, /* 151 */
    {LSP, 0, 1}, {LSP, 0, 0}, {LSP, 1, 1}, {LSP, 1, 0}, /* 147 */
    {LSP, 2, 1}, {LSP, 2, 0}, {LSP, 3, 1}, {CBGAIN, 0, 1}, /* 143 */
    {LSP, 3, 0}, {LSP, 4, 1}, {LSP, 4, 0}, {LSP, 5, 1}, /* 139 */
    {LSP, 5, 0}, {LSP, 6, 1}, {LSP, 6, 0}, {CBGAIN, 1, 1}, /* 135 */
    {LSP, 7, 1}, {LSP, 7, 0}, {LSP, 8, 1}, {LSP, 8, 0}, /* 131*/
    {LSP, 9, 1}, {LSP, 9, 0}, {PGAIN, 0, 2}, {CBGAIN, 2, 1}, /* 127 */
    {PGAIN, 0, 1}, {PGAIN, 0, 0}, {PLAG, 0, 6}, {PLAG, 0, 5}, /* 123 */
    {PLAG, 0, 4}, {PLAG, 0, 3}, {PLAG, 0, 2}, {CBGAIN, 3, 1}, /* 119 */
    {PLAG, 0, 1}, {PLAG, 0, 0}, {CBINDEX, 0, 6}, {CBINDEX, 0, 5}, /* 115 */
    {CBINDEX, 0, 4}, {CBINDEX, 0, 3}, {CBINDEX, 0, 2}, {CBGAIN, 4, 1},/* 111 */
    {CBINDEX, 0, 1}, {CBINDEX, 0, 0}, {CBGAIN, 0, 2}, {CBGAIN, 0, 0}, /* 107 */
    {CBINDEX, 1, 6}, {CBINDEX, 1, 5}, {CBINDEX, 1, 4}, {CBGAIN, 5, 1},/* 103 */
    {CBINDEX, 1, 3}, {CBINDEX, 1, 2}, {CBINDEX, 1, 1}, {CBINDEX, 1, 0},/* 99 */
    {CBGAIN, 1, 2}, {CBGAIN, 1, 0}, {PGAIN, 1, 2}, {CBGAIN, 6, 1}, /* 95 */ 
    {PGAIN, 1, 1}, {PGAIN, 1, 0}, {PLAG, 1, 6}, {PLAG, 1, 5}, /* 91 */
    {PLAG, 1, 4}, {PLAG, 1, 3}, {PLAG, 1, 2}, {CBGAIN, 7, 1}, /* 87 */
    {PLAG, 1, 1}, {PLAG, 1, 0}, {CBINDEX, 2, 6}, {CBINDEX, 2, 5}, /* 83 */
    {CBINDEX, 2, 4}, {CBINDEX, 2, 3}, {CBINDEX, 2, 2}, {PCB, 0, 10}, /* 79 */
    {CBINDEX, 2, 1}, {CBINDEX, 2, 0}, {CBGAIN, 2, 2}, {CBGAIN, 2, 0}, /* 75 */
    {CBINDEX, 3, 6}, {CBINDEX, 3, 5}, {CBINDEX, 3, 4}, {PCB, 0, 9}, /* 71 */
    {CBINDEX, 3, 3}, {CBINDEX, 3, 2}, {CBINDEX, 3, 1}, {CBINDEX, 3, 0},/* 67 */
    {CBGAIN, 3, 2}, {CBGAIN, 3, 0}, {PGAIN, 2, 2}, {PCB, 0, 8}, /* 63 */
    {PGAIN, 2, 1}, {PGAIN, 2, 0}, {PLAG, 2, 6}, {PLAG, 2, 5}, /* 59 */
    {PLAG, 2, 4}, {PLAG, 2, 3}, {PLAG, 2, 2}, {PCB, 0, 7}, /* 55 */
    {PLAG, 2, 1}, {PLAG, 2, 0}, {CBINDEX, 4, 6}, {CBINDEX, 4, 5}, /* 51 */
    {CBINDEX, 4, 4}, {CBINDEX, 4, 3}, {CBINDEX, 4, 2}, {PCB, 0, 6}, /* 47 */
    {CBINDEX, 4, 1}, {CBINDEX, 4, 0}, {CBGAIN, 4, 2}, {CBGAIN, 4, 0}, /* 43 */
    {CBINDEX, 5, 6}, {CBINDEX, 5, 5}, {CBINDEX, 5, 4}, {PCB, 0, 5}, /* 39 */
    {CBINDEX, 5, 3}, {CBINDEX, 5, 2}, {CBINDEX, 5, 1}, {CBINDEX, 5, 0},/* 35 */
    {CBGAIN, 5, 2}, {CBGAIN, 5, 0}, {PGAIN, 3, 2}, {PCB, 0, 4}, /* 31 */
    {PGAIN, 3, 1}, {PGAIN, 3, 0}, {PLAG, 3, 6}, {PLAG, 3, 5}, /* 27 */
    {PLAG, 3, 4}, {PLAG, 3, 3}, {PLAG, 3, 2}, {PCB, 0, 3}, /* 23 */
    {PLAG, 3, 1}, {PLAG, 3, 0}, {CBINDEX, 6, 6}, {CBINDEX, 6, 5}, /* 19 */
    {CBINDEX, 6, 4}, {CBINDEX, 6, 3}, {CBINDEX, 6, 2}, {PCB, 0, 2}, /* 15 */
    {CBINDEX, 6, 1}, {CBINDEX, 6, 0}, {CBGAIN, 6, 2}, {CBGAIN, 6, 0}, /* 11 */
    {CBINDEX, 7, 6}, {CBINDEX, 7, 5}, {CBINDEX, 7, 4}, {PCB, 0, 1}, /* 7 */
    {CBINDEX, 7, 3}, {CBINDEX, 7, 2}, {CBINDEX, 7, 1}, {CBINDEX, 7, 0}, /* 3 */
    {CBGAIN, 7, 2}, {CBGAIN, 7, 0}, {PCB, 0, 0}}; /* 0 */

static INTTYPE BIT_DATA3[80][3] =
{ {LSP, 0, 1},  {LSP, 0, 0},  {LSP, 1, 1},  {LSP, 1, 0},  {LSP, 2, 1},  
  {LSP, 2, 0},  {LSP, 3, 1},  {LSP, 3, 0},  {LSP, 4, 1},  {LSP, 4, 0},  
  {LSP, 5, 1},  {LSP, 5, 0},  {LSP, 6, 1},  {LSP, 6, 0},  {LSP, 7, 1},  
  {LSP, 7, 0},  {LSP, 8, 1},  {LSP, 8, 0},  {LSP, 9, 1},  {LSP, 9, 0},  
  {PGAIN, 0, 2}, {PGAIN, 0, 1}, {PGAIN, 0, 0},
  {PLAG, 0, 6}, {PLAG, 0, 5}, {PLAG, 0, 4}, {PLAG, 0, 3}, 
  {PLAG, 0, 2}, {PLAG, 0, 1}, {PLAG, 0, 0}, 
  {CBINDEX, 0, 6}, {CBINDEX, 0, 5}, {CBINDEX, 0, 4},
  {CBINDEX, 0, 3}, {CBINDEX, 0, 2}, {CBINDEX, 0, 1}, {CBINDEX, 0, 0},
  {CBGAIN, 0, 2}, {CBGAIN, 0, 1}, {CBGAIN, 0, 0}, 
  {CBINDEX, 1, 6}, {CBINDEX, 1, 5}, {CBINDEX, 1, 4},
  {CBINDEX, 1, 3}, {CBINDEX, 1, 2}, {CBINDEX, 1, 1}, {CBINDEX, 1, 0},
  {CBGAIN, 1, 2}, {CBGAIN, 1, 1}, {CBGAIN, 1, 0}, 
  {PGAIN, 1, 2}, {PGAIN, 1, 1}, {PGAIN, 1, 0},
  {PLAG, 1, 6}, {PLAG, 1, 5}, {PLAG, 1, 4}, {PLAG, 1, 3}, 
  {PLAG, 1, 2}, {PLAG, 1, 1}, {PLAG, 1, 0}, 
  {CBINDEX, 2, 6}, {CBINDEX, 2, 5}, {CBINDEX, 2, 4},
  {CBINDEX, 2, 3}, {CBINDEX, 2, 2}, {CBINDEX, 2, 1}, {CBINDEX, 2, 0},
  {CBGAIN, 2, 2}, {CBGAIN, 2, 1}, {CBGAIN, 2, 0}, 
  {CBINDEX, 3, 6}, {CBINDEX, 3, 5}, {CBINDEX, 3, 4},
  {CBINDEX, 3, 3}, {CBINDEX, 3, 2}, {CBINDEX, 3, 1}, {CBINDEX, 3, 0},
  {CBGAIN, 3, 2}, {CBGAIN, 3, 1}, {CBGAIN, 3, 0}}; 

static INTTYPE BIT_DATA2[40][3] =
{ {LSP, 0, 0}, {LSP, 1, 0}, {LSP, 2, 0}, {LSP, 3, 0}, {LSP, 4, 0},  
  {LSP, 5, 0}, {LSP, 6, 0}, {LSP, 7, 0}, {LSP, 8, 0}, {LSP, 9, 0},  
  {PGAIN, 0, 2}, {PGAIN, 0, 1}, {PGAIN, 0, 0},
  {PLAG, 0, 6}, {PLAG, 0, 5}, {PLAG, 0, 4}, {PLAG, 0, 3}, 
  {PLAG, 0, 2}, {PLAG, 0, 1}, {PLAG, 0, 0}, 
  {CBINDEX, 0, 6}, {CBINDEX, 0, 5}, {CBINDEX, 0, 4},
  {CBINDEX, 0, 3}, {CBINDEX, 0, 2}, {CBINDEX, 0, 1}, {CBINDEX, 0, 0},
  {CBGAIN, 0, 2}, {CBGAIN, 0, 1}, {CBGAIN, 0, 0}, 
  {CBINDEX, 1, 6}, {CBINDEX, 1, 5}, {CBINDEX, 1, 4},
  {CBINDEX, 1, 3}, {CBINDEX, 1, 2}, {CBINDEX, 1, 1}, {CBINDEX, 1, 0},
  {CBGAIN, 1, 2}, {CBGAIN, 1, 1}, {CBGAIN, 1, 0}};

static INTTYPE BIT_DATA1[16][3] =
/* CBSEED bits actually correspond to the bits chosen from SD */ 
{ {CBSEED, 0, 15}, {LSP, 0, 0}, {LSP, 1, 0}, {LSP, 2, 0}, 
  {CBSEED, 0, 11}, {LSP, 3, 0}, {LSP, 4, 0}, {LSP, 5, 0}, 
  {CBSEED, 0, 7}, {LSP, 6, 0}, {LSP, 7, 0}, {LSP, 8, 0}, 
  {CBSEED, 0, 3}, {LSP, 9, 0}, {CBGAIN, 0, 1}, {CBGAIN, 0, 0}};




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -