mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	
		
			
	
	
		
			216 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			216 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 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
 |