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

📄 g729ev_g729_lspdec.c

📁 最新的ITU-T的宽带语音编解码标准G.729.1,是对原先的G.729的最好的调整.码流输出速率可以进行自适应调整.满足未来通信要求.希望对大家有所帮助.
💻 C
字号:
/* ITU-T G.729EV Optimization/Characterization Candidate                         *//* Version:       1.0.a                                                          *//* Revision Date: June 28, 2006                                                  *//*   ITU-T G.729EV Optimization/Characterization Candidate    ANSI-C Source Code   Copyright (c) 2006    France Telecom, Matsushita Electric, Mindspeed, Siemens AG, ETRI, VoiceAge Corp.   All rights reserved*/#include "stl.h"#include "G729EV_G729_DecStat.h"#include "G729EV_G729_ld8k.h"#include "G729EV_G729_TAB_ld8k.h"#include "G729EV_MAIN_defines.h"#include "G729EV_FEC_tools.h"#ifdef WMOPS#include "count.h"#endif/*---------------------------------------------------------------------------- * G729EV_G729_Lsp_decw_reset -   set the previous LSP vectors *---------------------------------------------------------------------------- */void G729EV_G729_Lsp_decw_reset(Word16 freq_prev[G729EV_G729_MA_NP][G729EV_G729_M],                                Word16 prev_lsp[G729EV_G729_M], Word16 * prev_ma){  Word16    i;  FOR(i = 0; i < G729EV_G729_MA_NP; i++)    G729EV_G729_Copy(&freq_prev_reset[0], &freq_prev[i][0], G729EV_G729_M);  *prev_ma = 0;#ifdef WMOPS  move16();#endif  G729EV_G729_Copy(freq_prev_reset, prev_lsp, G729EV_G729_M);}/*---------------------------------------------------------------------------- * G729EV_G729_Lsp_iqua_cs -  LSP main quantization routine *---------------------------------------------------------------------------- */Word16 G729EV_G729_Lsp_iqua_cs(Word16 freq_prev[G729EV_G729_MA_NP][G729EV_G729_M], Word16 prev_lsp[G729EV_G729_M], Word16 * prev_ma, Word16 prm[],  /* (i)     : indexes of the selected LSP */                               Word16 lsp_q[],  /* (o) Q13 : Quantized LSP parameters    */                               Word16 erase     /* (i)     : frame erase information     */    ){  Word16    buf[G729EV_G729_M]; /* Q13 */  Word16    mode_index;  Word16    code0;  Word16    code1;  Word16    code2;  Word16    tmp16 = 0;  IF(erase == 0)  {                             /* Not frame erasure */    mode_index = s_and(shr(prm[0], G729EV_G729_NC0_B), (Word16) 1);    code0 = s_and(prm[0], (Word16) (G729EV_G729_NC0 - 1));    code1 = s_and(shr(prm[1], G729EV_G729_NC1_B), (Word16) (G729EV_G729_NC1 - 1));    code2 = s_and(prm[1], (Word16) (G729EV_G729_NC1 - 1));    /* compose quantized LSP (lsp_q) from indexes */    G729EV_G729_Lsp_get_quant(lspcb1, lspcb2, code0, code1, code2,                              fg[mode_index], freq_prev, lsp_q, fg_sum[mode_index]);    tmp16 = G729EV_FEC_Lsf_stab(lsp_q, prev_lsp);    /* save parameters to use in case of the frame erased situation */    G729EV_G729_Copy(lsp_q, prev_lsp, G729EV_G729_M);    *prev_ma = mode_index;#ifdef WMOPS    move16();#endif  }  ELSE      IF(sub(erase, -1) == 0) /* Frame erased but look for next filter */  {    Word16    j;    mode_index = s_and(shr(prm[0], G729EV_G729_NC0_B), (Word16) 1);    code0 = s_and(prm[0], (Word16) (G729EV_G729_NC0 - 1));    code1 = s_and(shr(prm[1], G729EV_G729_NC1_B), (Word16) (G729EV_G729_NC1 - 1));    code2 = s_and(prm[1], (Word16) (G729EV_G729_NC1 - 1));    FOR(j = 0; j < G729EV_G729_NC; j++)    {      buf[j] = add(lspcb1[code0][j], lspcb2[code1][j]);#ifdef WMOPS      move16();#endif    }    FOR(j = G729EV_G729_NC; j < G729EV_G729_M; j++)    {      buf[j] = add(lspcb1[code0][j], lspcb2[code2][j]);#ifdef WMOPS      move16();#endif    }    /* interpol old and new filter */    FOR(j = 0; j < G729EV_G729_M; j++)    {      buf[j] = mac_r(L_mult(buf[j], 6554), prev_lsp[j], 26214);#ifdef WMOPS      move16();#endif    }    /* check */    G729EV_G729_Lsp_expand_1_2(buf, G729EV_G729_GAP1);    G729EV_G729_Lsp_expand_1_2(buf, G729EV_G729_GAP2);    /* reconstruct quantized LSP parameters */    G729EV_G729_Lsp_prev_compose(buf, lsp_q, fg[mode_index], freq_prev, fg_sum[mode_index]);    G729EV_G729_Lsp_prev_update(buf, freq_prev);    G729EV_G729_Lsp_stability(lsp_q);    G729EV_G729_Copy(lsp_q, prev_lsp, G729EV_G729_M);    *prev_ma = mode_index;#ifdef WMOPS    move16();#endif  }  ELSE  {                             /* Frame erased */    /* use revious LSP */    G729EV_G729_Copy(prev_lsp, lsp_q, G729EV_G729_M);    /* update freq_prev */    G729EV_G729_Lsp_prev_extract(prev_lsp, buf, fg[*prev_ma], freq_prev, fg_sum_inv[*prev_ma]);    G729EV_G729_Lsp_prev_update(buf, freq_prev);  }  return tmp16;}/*-------------------------------------------------------------------* * Function  G729EV_G729_D_lsp:                                                  * *           ~~~~~~                                                  * *-------------------------------------------------------------------*/Word16 G729EV_G729_D_lsp(Word16 freq_prev[G729EV_G729_MA_NP][G729EV_G729_M], Word16 prev_lsp[G729EV_G729_M], Word16 * prev_ma, Word16 prm[],  /* (i)     : indexes of the selected LSP */                         Word16 lsp_q[],  /* (o) Q15 : Quantized LSP parameters    */                         Word16 erase     /* (i)     : frame erase information     */    ){  Word16    lsf_q[G729EV_G729_M]; /* domain 0.0<= lsf_q <PI in Q13 */  Word16    tmp16 = G729EV_G729_Lsp_iqua_cs(freq_prev, prev_lsp, prev_ma, prm, lsf_q, erase);  /* Convert LSFs to LSPs */  G729EV_G729_Lsf_lsp2(lsf_q, lsp_q, G729EV_G729_M);  return tmp16;}

⌨️ 快捷键说明

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