217 lines
6.1 KiB
C
217 lines
6.1 KiB
C
|
|
/******************************************************************
|
|
|
|
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
|
|
|