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

📄 int_lpc.cpp

📁 实现3GPP的GSM中AMR语音的CODECS。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                             present frame (M)                               */    Word16 Az[],       /* o :interpolated LP parameters                             in subframes 1 and 3 (AZ_SIZE)                  */    Flag  *pOverflow){    Word16 i;    Word16 lsp[M];    Word16 *p_lsp_old = &lsp_old[0];    Word16 *p_lsp_mid = &lsp_mid[0];    Word16 *p_lsp_new = &lsp_new[0];    Word16 *p_lsp     = &lsp[0];    /*  lsp[i] = lsp_mid[i] * 0.5 + lsp_old[i] * 0.5 */    for (i = M >> 1; i != 0; i--)    {        *(p_lsp++) = (*(p_lsp_old++) >> 1) + (*(p_lsp_mid++) >> 1);        *(p_lsp++) = (*(p_lsp_old++) >> 1) + (*(p_lsp_mid++) >> 1);    }    Lsp_Az(lsp, Az, pOverflow);            /* Subframe 1 */    Az += MP1 * 2;    p_lsp_mid = &lsp_mid[0];    p_lsp     = &lsp[0];    for (i = M >> 1; i != 0; i--)    {        *(p_lsp++) = (*(p_lsp_mid++) >> 1) + (*(p_lsp_new++) >> 1);        *(p_lsp++) = (*(p_lsp_mid++) >> 1) + (*(p_lsp_new++) >> 1);    }    Lsp_Az(lsp, Az, pOverflow);            /* Subframe 3 */    return;}/*------------------------------------------------------------------------------ FUNCTION NAME: lsp------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:    lsp_old -- array of type Word16 -- LSP vector at the                                       4th subfr. of past frame (M)    lsp_new -- array of type Word16 -- LSP vector at the 4th subfr. of                                       present frame (M) Outputs:    Az -- array of type Word16 -- interpolated LP parameters in.                                  all subframes.    pOverflow -- pointer to type Flag -- Overflow indicator Returns:    None Global Variables Used: Local Variables Needed:    None------------------------------------------------------------------------------ FUNCTION DESCRIPTION PURPOSE:  Interpolates the LSPs and convert to LP parameters to get           a different LP filter in each subframe. DESCRIPTION:    The 20 ms speech frame is divided into 4 subframes.    The LSPs are quantized and transmitted at the 4th subframe    (once per frame) and interpolated at the 1st, 2nd and 3rd subframe.         |------|------|------|------|            sf1    sf2    sf3    sf4      F0                          F1    sf1:   3/4 F0 + 1/4 F1         sf3:   1/4 F0 + 3/4 F1    sf2:   1/2 F0 + 1/2 F1         sf4:       F1------------------------------------------------------------------------------ REQUIREMENTS None------------------------------------------------------------------------------ REFERENCES int_lpc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE------------------------------------------------------------------------------ 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 Int_lpc_1to3(    Word16 lsp_old[], /* input : LSP vector at the 4th SF of past frame    */    Word16 lsp_new[], /* input : LSP vector at the 4th SF of present frame */    Word16 Az[],      /* output: interpolated LP parameters in all SFs     */    Flag   *pOverflow){    Word16 i;    Word16 temp;    Word16 temp2;    Word16 lsp[M];    for (i = 0; i < M; i++)    {        temp = shr(lsp_old[i], 2, pOverflow);        temp = sub(lsp_old[i], temp, pOverflow);        temp2 = shr(lsp_new[i], 2, pOverflow);        lsp[i] = add(temp2, temp, pOverflow);    }    Lsp_Az(        lsp,        Az,        pOverflow);        /* Subframe 1 */    Az += MP1;    for (i = 0; i < M; i++)    {        temp = shr(lsp_new[i], 1, pOverflow);        temp2 = shr(lsp_old[i], 1, pOverflow);        lsp[i] = add(temp, temp2, pOverflow);    }    Lsp_Az(        lsp,        Az,        pOverflow);        /* Subframe 2 */    Az += MP1;    for (i = 0; i < M; i++)    {        temp = shr(lsp_new[i], 2, pOverflow);        temp = sub(lsp_new[i], temp, pOverflow);        temp2 = shr(lsp_old[i], 2, pOverflow);        lsp[i] = add(temp2, temp, pOverflow);    }    Lsp_Az(        lsp,        Az,        pOverflow);       /* Subframe 3 */    Az += MP1;    Lsp_Az(        lsp_new,        Az,        pOverflow);        /* Subframe 4 */    return;}/*------------------------------------------------------------------------------ FUNCTION NAME: Int_lpc_1to3_2------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:    lsp_old -- array of type Word16 -- LSP vector at the                                       4th subfr. of past frame (M)    lsp_new -- array of type Word16 -- LSP vector at the 4th subfr. of                                       present frame (M) Outputs:    Az -- array of type Word16 -- interpolated LP parameters in.                                  subfr 1, 2, and 3.    pOverflow -- pointer to type Flag -- Overflow indicator Returns:    None Global Variables Used:    None Local Variables Needed:    None------------------------------------------------------------------------------ FUNCTION DESCRIPTION Interpolation of the LPC parameters. Same as the previous function but we do not recompute Az() for subframe 4 because it is already available.------------------------------------------------------------------------------ REQUIREMENTS None------------------------------------------------------------------------------ REFERENCES int_lpc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE------------------------------------------------------------------------------ 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 Int_lpc_1to3_2(    Word16 lsp_old[],  /* input : LSP vector at the 4th SF of past frame    */    Word16 lsp_new[],  /* input : LSP vector at the 4th SF of present frame */    Word16 Az[],       /* output: interpolated LP parameters in SFs 1,2,3   */    Flag   *pOverflow){    Word16 i;    Word16 temp;    Word16 temp2;    Word16 lsp[M];    for (i = 0; i < M; i++)    {        temp = shr(lsp_old[i], 2, pOverflow);        temp = sub(lsp_old[i], temp, pOverflow);        temp2 = shr(lsp_new[i], 2, pOverflow);        lsp[i] = add(temp2, temp, pOverflow);    }    Lsp_Az(        lsp,        Az,        pOverflow);        /* Subframe 1 */    Az += MP1;    for (i = 0; i < M; i++)    {        temp = shr(lsp_new[i], 1, pOverflow);        temp2 = shr(lsp_old[i], 1, pOverflow);        lsp[i] = add(temp2, temp, pOverflow);    }    Lsp_Az(        lsp,        Az,        pOverflow);        /* Subframe 2 */    Az += MP1;    for (i = 0; i < M; i++)    {        temp = shr(lsp_new[i], 2, pOverflow);        temp = sub(lsp_new[i], temp, pOverflow);        temp2 = shr(lsp_old[i], 2, pOverflow);        lsp[i] = add(temp, temp2, pOverflow);    }    Lsp_Az(        lsp,        Az,        pOverflow);        /* Subframe 3 */    return;}

⌨️ 快捷键说明

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