/****************************************************************** | |
iLBC Speech Coder ANSI-C Source Code | |
iLBC_define.h | |
Copyright (C) The Internet Society (2004). | |
All Rights Reserved. | |
******************************************************************/ | |
#include <string.h> | |
#ifndef __iLBC_ILBCDEFINE_H | |
#define __iLBC_ILBCDEFINE_H | |
/* general codec settings */ | |
#define FS (float)8000.0 | |
#define BLOCKL_20MS 160 | |
#define BLOCKL_30MS 240 | |
#define BLOCKL_MAX 240 | |
#define NSUB_20MS 4 | |
#define NSUB_30MS 6 | |
#define NSUB_MAX 6 | |
#define NASUB_20MS 2 | |
#define NASUB_30MS 4 | |
#define NASUB_MAX 4 | |
#define SUBL 40 | |
#define STATE_LEN 80 | |
#define STATE_SHORT_LEN_30MS 58 | |
#define STATE_SHORT_LEN_20MS 57 | |
/* LPC settings */ | |
#define LPC_FILTERORDER 10 | |
#define LPC_CHIRP_SYNTDENUM (float)0.9025 | |
#define LPC_CHIRP_WEIGHTDENUM (float)0.4222 | |
#define LPC_LOOKBACK 60 | |
#define LPC_N_20MS 1 | |
#define LPC_N_30MS 2 | |
#define LPC_N_MAX 2 | |
#define LPC_ASYMDIFF 20 | |
#define LPC_BW (float)60.0 | |
#define LPC_WN (float)1.0001 | |
#define LSF_NSPLIT 3 | |
#define LSF_NUMBER_OF_STEPS 4 | |
#define LPC_HALFORDER (LPC_FILTERORDER/2) | |
/* cb settings */ | |
#define CB_NSTAGES 3 | |
#define CB_EXPAND 2 | |
#define CB_MEML 147 | |
#define CB_FILTERLEN 2*4 | |
#define CB_HALFFILTERLEN 4 | |
#define CB_RESRANGE 34 | |
#define CB_MAXGAIN (float)1.3 | |
/* enhancer */ | |
#define ENH_BLOCKL 80 /* block length */ | |
#define ENH_BLOCKL_HALF (ENH_BLOCKL/2) | |
#define ENH_HL 3 /* 2*ENH_HL+1 is number blocks | |
in said second sequence */ | |
#define ENH_SLOP 2 /* max difference estimated and | |
correct pitch period */ | |
#define ENH_PLOCSL 20 /* pitch-estimates and pitch- | |
locations buffer length */ | |
#define ENH_OVERHANG 2 | |
#define ENH_UPS0 4 /* 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) | |
#define ENH_NBLOCKS (BLOCKL_MAX/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 | |
/* Down sampling */ | |
#define FILTERORDER_DS 7 | |
#define DELAY_DS 3 | |
#define FACTOR_DS 2 | |
/* bit stream defs */ | |
#define NO_OF_BYTES_20MS 38 | |
#define NO_OF_BYTES_30MS 50 | |
#define NO_OF_WORDS_20MS 19 | |
#define NO_OF_WORDS_30MS 25 | |
#define STATE_BITS 3 | |
#define BYTE_LEN 8 | |
#define ULP_CLASSES 3 | |
/* 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 | |
/* type definition encoder instance */ | |
typedef struct iLBC_ULP_Inst_t_ { | |
int lsf_bits[6][ULP_CLASSES+2]; | |
int start_bits[ULP_CLASSES+2]; | |
int startfirst_bits[ULP_CLASSES+2]; | |
int scale_bits[ULP_CLASSES+2]; | |
int state_bits[ULP_CLASSES+2]; | |
int extra_cb_index[CB_NSTAGES][ULP_CLASSES+2]; | |
int extra_cb_gain[CB_NSTAGES][ULP_CLASSES+2]; | |
int cb_index[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2]; | |
int cb_gain[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2]; | |
} iLBC_ULP_Inst_t; | |
/* type definition encoder instance */ | |
typedef struct iLBC_Enc_Inst_t_ { | |
/* flag for frame size mode */ | |
int mode; | |
/* basic parameters for different frame sizes */ | |
int blockl; | |
int nsub; | |
int nasub; | |
int no_of_bytes, no_of_words; | |
int lpc_n; | |
int state_short_len; | |
const iLBC_ULP_Inst_t *ULP_inst; | |
/* analysis filter state */ | |
float anaMem[LPC_FILTERORDER]; | |
/* old lsf parameters for interpolation */ | |
float lsfold[LPC_FILTERORDER]; | |
float lsfdeqold[LPC_FILTERORDER]; | |
/* signal buffer for LP analysis */ | |
float lpc_buffer[LPC_LOOKBACK + BLOCKL_MAX]; | |
/* state of input HP filter */ | |
float hpimem[4]; | |
} iLBC_Enc_Inst_t; | |
/* type definition decoder instance */ | |
typedef struct iLBC_Dec_Inst_t_ { | |
/* flag for frame size mode */ | |
int mode; | |
/* basic parameters for different frame sizes */ | |
int blockl; | |
int nsub; | |
int nasub; | |
int no_of_bytes, no_of_words; | |
int lpc_n; | |
int state_short_len; | |
const iLBC_ULP_Inst_t *ULP_inst; | |
/* synthesis filter state */ | |
float syntMem[LPC_FILTERORDER]; | |
/* old LSF for interpolation */ | |
float lsfdeqold[LPC_FILTERORDER]; | |
/* pitch lag estimated in enhancer and used in PLC */ | |
int last_lag; | |
/* PLC state information */ | |
int prevLag, consPLICount, prevPLI, prev_enh_pl; | |
float prevLpc[LPC_FILTERORDER+1]; | |
float prevResidual[NSUB_MAX*SUBL]; | |
float per; | |
unsigned long seed; | |
/* previous synthesis filter parameters */ | |
float old_syntdenum[(LPC_FILTERORDER + 1)*NSUB_MAX]; | |
/* state of output HP filter */ | |
float hpomem[4]; | |
/* enhancer state information */ | |
int use_enhancer; | |
float enh_buf[ENH_BUFL]; | |
float enh_period[ENH_NBLOCKS_TOT]; | |
} iLBC_Dec_Inst_t; | |
#endif | |