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

📄 ec_gains.cpp

📁 实现3GPP的GSM中AMR语音的CODECS。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        st->gbuf[i - 1] = st->gbuf[i];    }    st->gbuf[4] = *gain_code;    return;}------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/void ec_gain_code_update(    ec_gain_codeState *st,    /* i/o : State struct                     */    Word16 bfi,               /* i   : flag: frame is bad               */    Word16 prev_bf,           /* i   : flag: previous frame was bad     */    Word16 *gain_code,        /* i/o : decoded innovation gain          */    Flag   *pOverflow){    Word16 i;    /* limit gain_code by previous good gain if previous frame was bad */    if (bfi == 0)    {        if (prev_bf != 0)        {            if (sub(*gain_code, st->prev_gc, pOverflow) > 0)            {                *gain_code = st->prev_gc;            }        }        st->prev_gc = *gain_code;    }    /* update EC states: previous gain, gain buffer */    st->past_gain_code = *gain_code;    for (i = 1; i < 5; i++)    {        st->gbuf[i - 1] = st->gbuf[i];    }    st->gbuf[4] = *gain_code;    return;}/****************************************************************************//*------------------------------------------------------------------------------ FUNCTION NAME: ec_gain_pitch------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:  st = pointer to a pointer to a structure containing code       state data of stucture type ec_gain_pitchState  state = state of the state machine of type Word16  pOverflow = pointer to overflow indicator of type Flag  Outputs:  state = pointer to a pointer to a structure containing code          state data of stucture type ec_gain_pitchState  gain_pitch = pointer to pitch gain (Q14) of type Word16  pOverflow = 1 if there is an overflow else it is zero. Returns:    None. Global Variables Used:    None. Local Variables Needed:    None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function conceals the error using code gain implementation in this function.------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES ec_gain.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE    static const Word16 pdown[7] =    {        32767, 32112, 32112, 26214,        9830, 6553, 6553    };    Word16 tmp;    // calculate median of last five gains    tmp = gmed_n (st->pbuf, 5);    // new gain = minimum(median, past_gain) * pdown[state]    if (sub (tmp, st->past_gain_pit) > 0)    {        tmp = st->past_gain_pit;    }    *gain_pitch = mult (tmp, pdown[state]);------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/void ec_gain_pitch(    ec_gain_pitchState *st, /* i/o : state variables                   */    Word16 state,           /* i   : state of the state machine        */    Word16 *gain_pitch,     /* o   : pitch gain (Q14)                  */    Flag   *pOverflow){    static const Word16 pdown[7] =    {        32767, 32112, 32112, 26214,        9830, 6553, 6553    };    Word16 tmp;    /* calculate median of last five gains */    tmp = gmed_n(st->pbuf, 5);    /* new gain = minimum(median, past_gain) * pdown[state] */    if (sub(tmp, st->past_gain_pit, pOverflow) > 0)    {        tmp = st->past_gain_pit;    }    *gain_pitch = mult(tmp, pdown[state], pOverflow);}/****************************************************************************//*------------------------------------------------------------------------------ FUNCTION NAME: ec_gain_pitch_reset------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:  state = state of the state machine of type Word16  pOverflow = pointer to overflow indicator of type Flag  Outputs:  state = pointer to a pointer to a structure containing code          state data of stucture type ec_gain_pitchState  pOverflow = 1 if there is an overflow else it is zero. Returns:    None. Global Variables Used:    None. Local Variables Needed:    None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION Function:   ec_gain_pitch_reset Purpose:    Resets state memory------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES ec_gain.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODEint ec_gain_pitch_reset (ec_gain_pitchState *state){  Word16 i;  if (state == (ec_gain_pitchState *) NULL){      // fprintf(stderr, "ec_gain_pitch_reset: invalid parameter\n");      return -1;  }  for(i = 0; i < 5; i++)      state->pbuf[i] = 1640;  state->past_gain_pit = 0;  state->prev_gp = 16384;  return 0;}------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/Word16 ec_gain_pitch_reset(ec_gain_pitchState *state){    Word16 i;    if (state == (ec_gain_pitchState *) NULL)    {        /* fprintf(stderr, "ec_gain_pitch_reset: invalid parameter\n"); */        return -1;    }    for (i = 0; i < 5; i++)        state->pbuf[i] = 1640;    state->past_gain_pit = 0;    state->prev_gp = 16384;    return 0;}/****************************************************************************//*------------------------------------------------------------------------------ FUNCTION NAME: ec_gain_pitch_update------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:  st = pointer to a pointer to a structure containing code       state data of stucture type ec_gain_pitchState  bfi = flag indicating the frame is bad of type Word16  prev_bf = flag indicating the previous frame was bad of type Word16  gain_pitch = pointer to pitch gain of type Word16  pOverflow = pointer to overflow indicator of type Flag  Outputs:  state = pointer to a pointer to a structure containing code          state data of stucture type ec_gain_pitchState  gain_pitch = pointer to pitch gain of type Word16  pOverflow = 1 if there is an overflow else it is zero. Returns:    None. Global Variables Used:    None. Local Variables Needed:    None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION  Purpose     : update the pitch gain concealment state;                limit gain_pitch if the previous frame was bad                Call this function always after decoding (or concealing)                the gain------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES ec_gain.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE    Word16 i;    if (bfi == 0)    {        if (prev_bf != 0)        {            if (sub (*gain_pitch, st->prev_gp) > 0)            {                *gain_pitch = st->prev_gp;            }        }        st->prev_gp = *gain_pitch;    }    st->past_gain_pit = *gain_pitch;    if (sub (st->past_gain_pit, 16384) > 0)  // if (st->past_gain_pit > 1.0)    {        st->past_gain_pit = 16384;    }    for (i = 1; i < 5; i++)    {        st->pbuf[i - 1] = st->pbuf[i];    }    st->pbuf[4] = st->past_gain_pit;------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/void ec_gain_pitch_update(    ec_gain_pitchState *st, /* i/o : state variables                   */    Word16 bfi,             /* i   : flag: frame is bad                */    Word16 prev_bf,         /* i   : flag: previous frame was bad      */    Word16 *gain_pitch,     /* i/o : pitch gain                        */    Flag   *pOverflow){    Word16 i;    if (bfi == 0)    {        if (prev_bf != 0)        {            if (sub(*gain_pitch, st->prev_gp, pOverflow) > 0)            {                *gain_pitch = st->prev_gp;            }        }        st->prev_gp = *gain_pitch;    }    st->past_gain_pit = *gain_pitch;    if (sub(st->past_gain_pit, 16384, pOverflow) > 0)        /* if (st->past_gain_pit > 1.0) */    {        st->past_gain_pit = 16384;    }    for (i = 1; i < 5; i++)    {        st->pbuf[i - 1] = st->pbuf[i];    }    st->pbuf[4] = st->past_gain_pit;}

⌨️ 快捷键说明

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