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

📄 gaintcx.c

📁 关于AMR-WB+语音压缩编码的实现代码
💻 C
字号:
#include <float.h>
#include <stdlib.h>
#include <math.h>
#include "../include/amr_plus.h"
int q_gain_tcx(    /* output: return quantization index */
  float code[],    /* (i)  : quantized vector           */
  int lcode,       /* (i)  : frame size                 */
  float *gain      /* in/out: quantized gain            */
)
{
  int    i, index;
  float  tmp, gcode0, gcode;
  /* energy */
  tmp = 0.01f;
  for(i=0; i<lcode; i++) {
    tmp += code[i] * code[i];
  }
  gcode0 = 4.0f * (float)sqrt(tmp/((float)lcode));
  /* quantize gain of code */
  gcode = *gain * gcode0;
  if (gcode < FLT_MIN) {
    gcode = FLT_MIN;
  }
  tmp = 28.0f * (float)log10(gcode);       /* step of 0.714 dB */
  index = (int)floor(tmp + 0.5);
  if (index < 0) {
    index = 0;
  }
  if (index > 127) {
    index = 127;
  }
  gcode = (float)pow(10.0, ((float)index)/28.0) / gcode0;
  *gain = gcode;
  return(index);
}
float d_gain_tcx(  /* output: gain                    */
  int index,       /* (i)  : index                    */
  float code[],    /* (i)  : quantized vector         */
  int lcode,       /* (i)  : frame size               */
  int bfi,         /* (i)  : 1=gain lost              */
  float *old_rms)  /* (i/o): for frame recovery       */
{
  int i;
  float tmp, gain, gcode0, rms;
  /* energy */
  tmp = FLT_MIN;
  for(i=0; i<lcode; i++) {
   tmp += code[i] * code[i];
  }
  rms = (float)sqrt(tmp/(float)lcode);
  if (bfi == 0)
  {
    gcode0 = 4.0f * rms;
    gain = (float)pow(10.0, ((float)index)/28.0) / gcode0;		
    *old_rms = gain*rms;        /* rms of gain*code[] */
  }
  else 
  {
    (*old_rms) *= .7f;       /* decrease energy by -3dB */
    gain = *old_rms / rms;
  } 
  return(gain);
}

⌨️ 快捷键说明

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