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

📄 dtx_dec.c

📁 这是一个平台无关的标准C的AMR解码库
💻 C
📖 第 1 页 / 共 3 页
字号:
/********************************************************************************      GSM AMR-NB speech codec   R98   Version 7.6.0   December 12, 2001*                                R99   Version 3.3.0                *                                REL-4 Version 4.1.0                ********************************************************************************      File             : dtx_dec.c*      Purpose          : Decode comfort noise when in DTX*******************************************************************************//*******************************************************************************                         MODULE INCLUDE FILE AND VERSION ID******************************************************************************/#include "dtx_dec.h"const char dtx_dec_id[] = "@(#)$Id $" dtx_dec_h; /*******************************************************************************                         INCLUDE FILES******************************************************************************/#ifdef __PRINT_TEST
#include <stdio.h>
#include <stdlib.h>
#endif //#ifdef __PRINT_TEST
#include "typedef.h"#include "basic_op.h"#include "oper_32b.h"#include "copy.h"#include "set_zero.h"#include "mode.h"#include "log2.h"#include "lsp_az.h"#include "pow2.h"#include "a_refl.h"#include "b_cn_cod.h"#include "syn_filt.h"#include "lsp_lsf.h"#include "reorder.h"#include "count.h"#include "q_plsf_5.tab"#include "lsp.tab"/*******************************************************************************                         LOCAL VARIABLES AND TABLES******************************************************************************/#define PN_INITIAL_SEED 0x70816958L   /* Pseudo noise generator seed value  *//*************************************************** * Scaling factors for the lsp variability operation * ***************************************************/static const Word16 lsf_hist_mean_scale[M] = {   20000,   20000,   20000,   20000,   20000,   18000,   16384,    8192,       0,       0};/************************************************* * level adjustment for different modes Q11      * *************************************************/static const Word16 dtx_log_en_adjust[9] ={  -1023, /* MR475 */   -878, /* MR515 */   -732, /* MR59  */   -586, /* MR67  */   -440, /* MR74  */   -294, /* MR795 */   -148, /* MR102 */      0, /* MR122 */      0, /* MRDTX */};/*******************************************************************************                         PUBLIC PROGRAM CODE******************************************************************************//*****************************************************************************  Function    : dtx_dec_init****************************************************************************/ int dtx_dec_init (dtx_decState **st){   dtx_decState* s;      if (st == (dtx_decState **) NULL){#ifdef __PRINT_TEST
      fprintf(stderr, "dtx_dec_init: invalid parameter\n");
#endif //#ifdef __PRINT_TEST
      return -1;    }      *st = NULL;      /* allocate memory */   if ((s= (dtx_decState *) malloc(sizeof(dtx_decState))) == NULL){#ifdef __PRINT_TEST
      fprintf(stderr, "dtx_dec_init: can not malloc state structure\n");
#endif //#ifdef __PRINT_TEST
      return -1;   }      dtx_dec_reset(s);   *st = s;      return 0;} /*****************************************************************************  Function    : dtx_dec_reset****************************************************************************/int dtx_dec_reset (dtx_decState *st){   int i;   if (st == (dtx_decState *) NULL){#ifdef __PRINT_TEST
      fprintf(stderr, "dtx_dec_reset: invalid parameter\n");
#endif //#ifdef __PRINT_TEST
      return -1;   }      st->since_last_sid = 0;   st->true_sid_period_inv = (1 << 13);     st->log_en = 3500;     st->old_log_en = 3500;   /* low level noise for better performance in  DTX handover cases*/      st->L_pn_seed_rx = PN_INITIAL_SEED;   /* Initialize state->lsp [] and state->lsp_old [] */   Copy(lsp_init_data, &st->lsp[0], M);   Copy(lsp_init_data, &st->lsp_old[0], M);   st->lsf_hist_ptr = 0;   st->log_pg_mean = 0;   st->log_en_hist_ptr = 0;   /* initialize decoder lsf history */   Copy(mean_lsf, &st->lsf_hist[0], M);   for (i = 1; i < DTX_HIST_SIZE; i++)   {      Copy(&st->lsf_hist[0], &st->lsf_hist[M*i], M);   }   Set_zero(st->lsf_hist_mean, M*DTX_HIST_SIZE);   /* initialize decoder log frame energy */    for (i = 0; i < DTX_HIST_SIZE; i++)   {      st->log_en_hist[i] = st->log_en;   }   st->log_en_adjust = 0;   st->dtxHangoverCount = DTX_HANG_CONST;   st->decAnaElapsedCount = 32767;      st->sid_frame = 0;          st->valid_data = 0;                st->dtxHangoverAdded = 0;      st->dtxGlobalState = DTX;       st->data_updated = 0;    return 0;} /*****************************************************************************  Function    : dtx_dec_exit****************************************************************************/void dtx_dec_exit (dtx_decState **st){   if (st == NULL || *st == NULL)      return;      /* deallocate memory */   free(*st);   *st = NULL;      return;}/*****************************************************************************  Function    : dtx_dec*                ***************************************************************************/int dtx_dec(   dtx_decState *st,                /* i/o : State struct                    */   Word16 mem_syn[],                /* i/o : AMR decoder state               */   D_plsfState* lsfState,           /* i/o : decoder lsf states              */   gc_predState* predState,         /* i/o : prediction states               */   Cb_gain_averageState* averState, /* i/o : CB gain average states          */   enum DTXStateType new_state,     /* i   : new DTX state                   */   enum Mode mode,                  /* i   : AMR mode                        */   Word16 parm[],                   /* i   : Vector of synthesis parameters  */   Word16 synth[],                  /* o   : synthesised speech              */   Word16 A_t[]                     /* o   : decoded LP filter in 4 subframes*/   ){   Word16 log_en_index;   Word16 i, j;   Word16 int_fac;   Word32 L_log_en_int;   Word16 lsp_int[M];   Word16 log_en_int_e;   Word16 log_en_int_m;   Word16 level;   Word16 acoeff[M + 1];   Word16 refl[M];   Word16 pred_err;   Word16 ex[L_SUBFR];   Word16 ma_pred_init;   Word16 log_pg_e, log_pg_m;   Word16 log_pg;   Flag negative;   Word16 lsf_mean;   Word32 L_lsf_mean;   Word16 lsf_variab_index;   Word16 lsf_variab_factor;   Word16 lsf_int[M];   Word16 lsf_int_variab[M];   Word16 lsp_int_variab[M];   Word16 acoeff_variab[M + 1];   Word16 lsf[M];   Word32 L_lsf[M];   Word16 ptr;   Word16 tmp_int_length;   /*  This function is called if synthesis state is not SPEECH     *  the globally passed  inputs to this function are     * st->sid_frame     * st->valid_data     * st->dtxHangoverAdded    * new_state  (SPEECH, DTX, DTX_MUTE)    */   test(); test();   if ((st->dtxHangoverAdded != 0) &&        (st->sid_frame != 0))   {      /* sid_first after dtx hangover period */      /* or sid_upd after dtxhangover        */      /* set log_en_adjust to correct value */      st->log_en_adjust = dtx_log_en_adjust[mode];                ptr = add(st->lsf_hist_ptr, M);                               move16();       test();      if (sub(ptr, 80) == 0)      {         ptr = 0;                                                   move16();      }      Copy( &st->lsf_hist[st->lsf_hist_ptr],&st->lsf_hist[ptr],M);             ptr = add(st->log_en_hist_ptr,1);                             move16();      test();      if (sub(ptr, DTX_HIST_SIZE) == 0)      {         ptr = 0;                                                   move16();      }      move16();      st->log_en_hist[ptr] = st->log_en_hist[st->log_en_hist_ptr]; /* Q11 */            /* compute mean log energy and lsp *       * from decoded signal (SID_FIRST) */               st->log_en = 0;                                               move16();      for (i = 0; i < M; i++)      {         L_lsf[i] = 0;                                              move16();      }

⌨️ 快捷键说明

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