📄 int_lpc.cpp
字号:
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 + -