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

📄 amrcode_comm.h

📁 AMR-NB 的编码实现,纯C, VC下建立工程即可用.
💻 H
字号:


/*******************************************************************************
**      File                  : AmrCode_comm.h
*      Purpose           : Declaration of public interface of AMR-NB SPEECH CODER
        Date                 : 2006 -01-18   create
**********************************************************************************/


#ifndef AMRENC_INTERFACE_H
#define AMRENC_INTERFACE_H
#include "typedef.h"
#include "vad.h"
#include "amrcode_public.h"

#ifdef MMS_IO#define AMR_MAGIC_NUMBER "#!AMR\n"#define MAX_PACKED_SIZE (MAX_SERIAL_SIZE /8 + 2)#endif/* frame size in serial bitstream file (frame type + serial stream + flags) */#define SERIAL_FRAMESIZE (1+MAX_SERIAL_SIZE+5)
/****** const defines *****/
#define L_TOTAL      320                     /* Total size of speech buffer.             */
#define L_WINDOW     240                  /* Window size in LP analysis               */
#define L_FRAME      160                     /* Frame size                               */
#define L_FRAME_BY2  80                   /* Frame size divided by 2                  */
#define L_SUBFR      40                       /* Subframe size                            */
#define L_CODE       40                        /* codevector length                        */
#define NB_TRACK     5                       /* number of tracks                         */
#define STEP         5                            /* codebook step size                       */
#define NB_TRACK_MR102  4              /* number of tracks mode mr102              */
#define STEP_MR102      4                   /* codebook step size mode mr102            */
#define M            10                             /* Order of LP filter                       */
#define MP1          (M+1)                      /* Order of LP filter + 1                   */
#define LSF_GAP      205                      /* Minimum distance between LSF after quantization; 50 Hz = 205                    */
#define LSP_PRED_FAC_MR122 21299 /* MR122 LSP prediction factor (0.65 Q15) */#define AZ_SIZE       (4*M+4)              /* Size of array of LP filters in 4 subfr.s */
#define PIT_MIN_MR122 18                 /* Minimum pitch lag (MR122 mode)           */
#define PIT_MIN       20                        /* Minimum pitch lag (all other modes)      */
#define PIT_MAX       143                      /* Maximum pitch lag                        */
#define L_INTERPOL    (10+1)               /* Length of filter for interpolation       */
#define L_INTER_SRCH  4                     /* Length of filter for CL LTP search  interpolation                            */
        #define MU       26214                   /* Factor for tilt compensation filter 0.8  */
#define AGC_FAC  29491              /* Factor for automatic gain control 0.9    */
        #define L_NEXT       40                /* Overhead in LP analysis                  */
#define SHARPMAX  13017           /* Maximum value of pitch sharpening        */
#define SHARPMIN  0                   /* Minimum value of pitch sharpening        */
                                                                                                                                                    #define MAX_PRM_SIZE    57        /* max. num. of params                      */
#define MAX_SERIAL_SIZE 244     /* max. num. of serial bits                 */
                                                                          #define GP_CLIP   15565                /* Pitch gain clipping = 0.95               */
#define N_FRAME   7                      /* old pitch gains in average calculation   */
#define EHF_MASK 0x0008             /* encoder homing frame pattern             */

#define LTPG_MEM_SIZE 5            /* number of stored past LTP coding gains + 1 */
#define DTX_HIST_SIZE 8#define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1)#define DTX_HANG_CONST 7         /* yields eight frames of SP HANGOVER  */


typedef enum 
{ 
	RX_SPEECH_GOOD = 0,
	RX_SPEECH_DEGRADED,
	RX_ONSET,
	RX_SPEECH_BAD,
	RX_SID_FIRST,
	RX_SID_UPDATE,
	RX_SID_BAD,
	RX_NO_DATA,
	RX_N_FRAMETYPES  
}RXFrameType;


/* Channel decoded frame type */typedef enum 
{ 
	CHDEC_SID_FIRST = 0,
	CHDEC_SID_FIRST_INCOMPLETE,
	CHDEC_SID_UPDATE_INCOMPLETE,
	CHDEC_SID_UPDATE,
	CHDEC_SPEECH,
	CHDEC_SPEECH_ONSET,
	CHDEC_ESCAPE_MARKER,
	CHDEC_ESCAPE_DATA,
	CHDEC_NO_DATA 
}CHDECFrameType ;
/* Channel decoded frame quality */typedef enum
{ 
	CHDEC_GOOD = 0,
	CHDEC_PROBABLY_DEGRADED,
	CHDEC_PROBABLY_BAD,
	CHDEC_BAD
} CHDECFrameQuality ;


typedef struct 
{
    Word16 past_rq[M];                    /* Past quantized prediction error, Q15 */
} Q_plsfState;
typedef struct 
{
  Word16 old_A[M + 1];                   /* Last A(z) for case of unstable filter */
} LevinsonState;      
 typedef struct
 {
    Word16 onset;                                   /* onset state,                   Q0  */
    Word16 prev_alpha;                          /* previous adaptor output,       Q15 */
    Word16 prev_gc;                               /* previous code gain,            Q1  */
    Word16 ltpg_mem[LTPG_MEM_SIZE]; /* LTP coding gain history,       Q13 */                                                             /* (ltpg_mem[0] not used for history) */
} GainAdaptState; 
typedef struct
{
   LevinsonState *levinsonSt;} lpcState;typedef struct
{
   /* Past LSPs */   Word16 lsp_old[M];   Word16 lsp_old_q[M];   /* Quantization state */   Q_plsfState *qSt;} lspState;typedef struct
{
   Word16 past_qua_en[4];               /* normal MA predictor memory,         Q10 */
                                                         /* (contains 20*log10(qua_err))            */
   Word16 past_qua_en_MR122[4];   /* MA predictor memory for MR122 mode, Q10 */                                                         /* (contains log2(qua_err))                */
} gc_predState; 
 typedef struct
{
    Word16 sf0_exp_gcode0;    Word16 sf0_frac_gcode0;    Word16 sf0_exp_target_en;    Word16 sf0_frac_target_en;    Word16 sf0_exp_coeff[5];    Word16 sf0_frac_coeff[5];    Word16 *gain_idx_ptr;        gc_predState     *gc_predSt;    gc_predState     *gc_predUnqSt;    GainAdaptState   *adaptSt;} gainQuantState; /* state variable */typedef struct
{
   /* counters */   Word16 count;      /* gain history Q11 */   Word16 gp[N_FRAME];   } tonStabState;typedef struct 
{
   Word16 T0_prev_subframe;   /* integer pitch lag of previous sub-frame */} Pitch_frState;/* state variable */typedef struct 
{
   Word16 old_T0_med;   Word16 ada_w;   Word16 wght_flg; } pitchOLWghtState;
/* state variable */typedef struct 
{
    Pitch_frState *pitchSt;} clLtpState;typedef struct 
{
   Word16 lsp_hist[M * DTX_HIST_SIZE];   Word16 log_en_hist[DTX_HIST_SIZE];   Word16 hist_ptr;   Word16 log_en_index;   Word16 init_lsf_vq_index;   Word16 lsp_index[3];   /* DTX handler stuff */   Word16 dtxHangoverCount;   Word16 decAnaElapsedCount;} dtx_encState;
typedef struct 
{
  Word16 y2_hi;  Word16 y2_lo;  Word16 y1_hi;  Word16 y1_lo;  Word16 x0;  Word16 x1;} Pre_ProcessState; 
typedef struct
{
    Word16 sid_update_rate;       /* Send SID Update every sid_update_rate frame */
    Word16 sid_update_counter; /* Number of frames since last SID          */    Word16 sid_handover_debt;  /* Number of extra SID_UPD frames to schedule*/   TXFrameType prev_ft;} sid_syncState; 
typedef struct 
{
   /* Speech vector */   Word16 old_speech[L_TOTAL];   Word16 *speech, *p_window, *p_window_12k2;   Word16 *new_speech;             /* Global variable */      /* Weight speech vector */   Word16 old_wsp[L_FRAME + PIT_MAX];   Word16 *wsp;   /* OL LTP states */   Word16 old_lags[5];   Word16 ol_gain_flg[2];   /* Excitation vector */   Word16 old_exc[L_FRAME + PIT_MAX + L_INTERPOL];   Word16 *exc;   /* Zero vector */   Word16 ai_zero[L_SUBFR + MP1];   Word16 *zero;   /* Impulse response vector */   Word16 *h1;   Word16 hvec[L_SUBFR * 2];   /* Substates */   lpcState   *lpcSt;   lspState   *lspSt;   clLtpState *clLtpSt;   gainQuantState  *gainQuantSt;   pitchOLWghtState *pitchOLWghtSt;   tonStabState *tonStabSt;   vadState *vadSt;   Flag dtx;   dtx_encState *dtx_encSt;   /* Filter's memory */   Word16 mem_syn[M], mem_w0[M], mem_w[M];   Word16 mem_err[M + L_SUBFR], *error;   Word16 sharp;} cod_amrState;
typedef struct
{
    Pre_ProcessState *pre_state;    cod_amrState   *cod_amr_state;    Flag dtx;
} Speech_Encode_FrameState;
typedef struct
{
  Speech_Encode_FrameState* SpeechEncodeFrameState;
  
  sid_syncState* SidsyncState;
  
}AmrNBCoder;


#endif


⌨️ 快捷键说明

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