📄 operate.h
字号:
#include <assert.h>
#include <string.h>
#define int long
#define SASR
typedef short word; /* 16 bit signed int */
typedef int longword; /* 32 bit signed int */
typedef unsigned short uword; /* unsigned word */
typedef unsigned int ulongword; /* unsigned longword */
#define MIN_WORD (-32768)
#define MAX_WORD ( 32767)
#define MIN_LONGWORD ((-2147483647)-1)
#define MAX_LONGWORD ( 2147483647)
#ifdef SASR /* >> is a signed arithmetic shift right */
#undef SASR
#define SASR(x, by) ((x) >> (by))
#endif /* SASR */
struct gsm610_state {
word dp0[ 280 ]; /*LTP分析时储存前面3个子序列的估计值*/
word pre_so; /* Offset_com. 上一个缩减的数据SO(k-1)*/
longword l_pre_sof; /* Offset_com. 存储Sof(k-1)*2^15*/
int pre_sof; /* Preemphasis 存储Sof(k-1)*/
word u[8]; /* short_term_aly_filter.c 短期过滤分析保存上组u[0..7]*/
word LARpp[8]; /* 存放上一帧LPC相关系数LARpp[0..7] */
word nrp; /* long_term.c, synthesis 保存上一个滞后值 初始化为40 */
word v[9]; /* short_term.c, synthesis 短期过滤合成保存上组v[0..8] */
word pre_s_out; /* decoder.c, Postprocessing 上一个解码完成输出采样值*/
};
/*对应各运算表格参数*/
extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8];
extern word gsm_INVA[8];
extern word gsm_DLB[4], gsm_QLB[4];
extern word gsm_H[11];
extern word gsm_NRFAC[8];
extern word gsm_FAC[8];
/*
* Prototypes from operate.c
*/
extern word gsm_mult (word a, word b);
extern longword gsm_L_mult (word a, word b);
extern word gsm_mult_r (word a, word b);
extern word gsm_div (word num, word denum);
extern word gsm_add ( word a, word b );
extern longword gsm_L_add ( longword a, longword b );
extern word gsm_sub (word a, word b);
extern longword gsm_L_sub (longword a, longword b);
extern word gsm_abs (word a);
extern word gsm_norm ( longword a );
extern longword gsm_L_asl (longword a, int n);
extern word gsm_asl (word a, int n);
extern longword gsm_L_asr (longword a, int n);
extern word gsm_asr (word a, int n);
#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \
((word) (SASR( ((longword)(a) * (longword)(b) + 16384), 15 )))
# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \
(SASR( ((longword)(a) * (longword)(b)), 15 ))
# define GSM_L_MULT(a, b) /* word a, word b */ \
(((longword)(a) * (longword)(b)) << 1)
# define GSM_L_ADD(a, b) \
( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \
: (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \
>= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \
: ((b) <= 0 ? (a) + (b) \
: (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \
? MAX_LONGWORD : utmp))
#define GSM_ADD(a, b) \
((unsigned int)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \
MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp)
#define GSM_SUB(a, b) \
((unsigned int)((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \
? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp))
#define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -