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

📄 g729ev_tdbwe_encoder.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 "G729EV_TDBWE_encoder.h"#include "G729EV_TDBWE_extract_time_envelope.h"#include "G729EV_TDBWE_extract_frequency_envelope.h"#include "G729EV_TDBWE_vector_quantization.h"#include "G729EV_G729_ld8k.h"/*--------------------------------------------------------------------------* *  Function  G729EV_TDBWE_quantization()                                   * *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                   * *  Quantization of the TDBWE parameter set by "mean removed VQ"            * *--------------------------------------------------------------------------*/void G729EV_TDBWE_quantization(Word16 * parameters_tdbwe, /* (i) Q.10, the unquantized parameter set */                               Word16 * coder_parameters) /* (o) codebook indices */{  Word16    i;  UWord16   vq_index;  Word16    mu, mu_q;  Word16   *parameters;  Word16   *coder_param_ptr;  /* initialize pointer to TDBWE parameters */  coder_param_ptr = coder_parameters;  /* compute mean time envelope */  mu = (Word16) 0;#ifdef WMOPS  move16();#endif  parameters = parameters_tdbwe + G729EV_TDBWE_PAROFS_TIME_ENVELOPE;  FOR(i = 0; i < G729EV_TDBWE_NB_SUBFRAMES; i++)  {    mu = add(mu, shr(parameters[i], 3));  }  mu = shr(mu, 1);  /* quantize mean */  G729EV_TDBWE_vector_quantization(&mu,                                   G729EV_TDBWE_MEAN_TIME_ENV_cb,                                   &vq_index, 1, G729EV_TDBWE_MEAN_TIME_ENV_NUMBER_ENTRIES);  /* write vq_index to coder_parameters */  *coder_param_ptr++ = vq_index;#ifdef WMOPS  move16();#endif  /* reconstruct quantized mean (table look-up) */  mu_q = G729EV_TDBWE_MEAN_TIME_ENV_cb[vq_index];#ifdef WMOPS  move16();#endif  /* remove quantized mean from time envelope */  parameters = parameters_tdbwe + G729EV_TDBWE_PAROFS_TIME_ENVELOPE;  /* parameters_tdbwe + 0 */  FOR(i = 0; i < G729EV_TDBWE_NB_SUBFRAMES; i++)  {    parameters[i] = sub(parameters[i], mu_q);#ifdef WMOPS    move16();#endif  }  /* quantize mean-removed time envelope */  parameters = parameters_tdbwe + G729EV_TDBWE_PAROFS_TIME_ENVELOPE;  FOR(i = 0; i < G729EV_TDBWE_TIME_ENV_SPLIT_VQ_NUMBER_SPLITS; i++)  {    G729EV_TDBWE_vector_quantization(&parameters[i * 8],                                     G729EV_TDBWE_TIME_ENV_cb, &vq_index, 8, G729EV_TDBWE_TIME_ENV_NUMBER_ENTRIES);    /* write vq_index to coder_parameters */    *coder_param_ptr++ = vq_index;#ifdef WMOPS    move16();#endif  }  /* remove quantized mean from frequency envelope */  parameters = parameters_tdbwe + G729EV_TDBWE_PAROFS_FREQ_ENVELOPE;  FOR(i = 0; i < G729EV_TDBWE_NB_SUBBANDS; i++)  {    parameters[i] = sub(parameters[i], mu_q);#ifdef WMOPS    move16();#endif  }  /* quantize mean-removed frequency envelope */  parameters = parameters_tdbwe + G729EV_TDBWE_PAROFS_FREQ_ENVELOPE;  FOR(i = 0; i < G729EV_TDBWE_FREQ_ENV_SPLIT_VQ_NUMBER_SPLITS; i++)  {    G729EV_TDBWE_vector_quantization(&parameters[i * 4],                                     G729EV_TDBWE_FREQ_ENV_cb[i],                                     &vq_index, 4, G729EV_TDBWE_FREQ_ENV_NUMBER_ENTRIES[i]);    /* write vq_index to coder_parameters */    *coder_param_ptr++ = vq_index;#ifdef WMOPS    move16();#endif  }}/*--------------------------------------------------------------------------* *  Function  G729EV_TDBWE_encoder_init()                                   * *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                   * *  Initialization of the TDBWE encoder                                     * *--------------------------------------------------------------------------*/void G729EV_TDBWE_encoder_init(G729EV_TDBWE_CODSTAT * state)  /* (o) */{  G729EV_G729_Set_zero(state->old_speech, G729EV_TDBWE_MEM_SPEECH);}/*--------------------------------------------------------------------------* *  Function  G729EV_TDBWE_encoder()                                        * *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                        * *  TDBWE encoder (parameter extraction),                                   * *  computes and quantize time/frequency envelopes                          * *--------------------------------------------------------------------------*/void G729EV_TDBWE_encoder(G729EV_TDBWE_CODSTAT * state, /* (i/o)  */                          Word16 * input_hi,            /* (i)    Q.0, high band input signal @ 8kHz */                          Word16 * coder_parameters,    /* (o)    quantized parameter set (codebook indices) */                          Word16 * input_hi_delay)      /* (o)    delayed input */{  Word16    parameters[G729EV_TDBWE_NB_PARAMETERS]; /* Q10 */  Word16   *new_speech;  Word16   *speech;  Word16    old_speech[G729EV_TDBWE_L_TOTAL];  /*-------------*  * set pointers *  *--------------*/  new_speech = old_speech + G729EV_TDBWE_MEM_SPEECH;  /* New speech     */  speech = new_speech - G729EV_TDBWE_L_NEXT;  /* Present frame  */#if (WMOPS)  move16();  move16();#endif  /*--------------*  * update buffer *  *---------------*/  G729EV_G729_Copy(state->old_speech, old_speech, G729EV_TDBWE_MEM_SPEECH);  G729EV_G729_Copy(input_hi, new_speech, G729EV_TDBWE_L_FRAME);  /*--------------------------------*  * extract and quantize envelopes  *  *---------------------------------*/  /* time envelope extraction */  G729EV_TDBWE_extract_time_envelope(speech + G729EV_TDBWE_DELTA_TIME_ENV, 0, /* nls */                                     &parameters[G729EV_TDBWE_PAROFS_TIME_ENVELOPE], G729EV_TDBWE_NB_SUBFRAMES);  /* extraction of the frequency envelope for the 2nd 10ms frame */  G729EV_TDBWE_extract_frequency_envelope(speech + (G729EV_TDBWE_L_FRAME2 + G729EV_TDBWE_DELTA_FREQ_ENV), 0,  /* nls */                                          &parameters[G729EV_TDBWE_PAROFS_FREQ_ENVELOPE]);  /* quantize the parameter set and write bitstream */  G729EV_TDBWE_quantization(parameters, coder_parameters);  /*--------------*  * update memory *  *---------------*/  G729EV_G729_Copy(&old_speech[G729EV_TDBWE_L_FRAME], state->old_speech, G729EV_TDBWE_MEM_SPEECH);  G729EV_G729_Copy(speech, input_hi_delay, G729EV_TDBWE_L_FRAME);}

⌨️ 快捷键说明

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