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

📄 ex_ctrl.c

📁 arm音频编解码库
💻 C
字号:
/***************************************************************************      GSM AMR-NB speech codec   R98   Version 7.6.0   December 12, 2001*                                R99   Version 3.3.0                *                                REL-4 Version 4.1.0                ***********************************************************************************      File             : ex_ctrl.c*      Purpose          : Excitation Control module in background noise**********************************************************************************//**********************************************************************************                         MODULE INCLUDE FILE AND VERSION ID*********************************************************************************/#include "ex_ctrl.h"const char ex_ctrl_id[] = "@(#)$Id $" ex_ctrl_h;#include <stdlib.h>#include <stdio.h>#include "typedef.h"#include "basic_op.h"#include "count.h"#include "cnst.h"#include "copy.h"#include "set_zero.h"#include "gmed_n.h"#include "sqrt_l.h"/**********************************************************************************                         LOCAL VARIABLES AND TABLES*********************************************************************************//*-----------------------------------------------------------------* *   Decoder constant parameters (defined in "cnst.h")             * *-----------------------------------------------------------------* *   L_FRAME       : Frame size.                                   * *   L_SUBFR       : Sub-frame size.                               * *-----------------------------------------------------------------*//**********************************************************************************                         PUBLIC PROGRAM CODE*********************************************************************************//*****************************************************************************  Function    : Ex_ctrl*  Purpose     : Charaterice synthesis speech and detect background noise*  Returns     : background noise decision; 0 = no bgn, 1 = bgn****************************************************************************/Word16 Ex_ctrl (Word16 excitation[],   /*i/o: Current subframe excitation   */                Word16 excEnergy,      /* i : Exc. Energy, sqrt(totEx*totEx)*/                Word16 exEnergyHist[], /* i : History of subframe energies  */                Word16 voicedHangover, /* i : # of fr. after last voiced fr.*/                Word16 prevBFI,        /* i : Set i previous BFI            */                Word16 carefulFlag     /* i : Restrict dymamic in scaling   */                ){   Word16 i, exp;   Word16 testEnergy, scaleFactor, avgEnergy, prevEnergy;   Word32 t0;   /* get target level */   avgEnergy = gmed_n(exEnergyHist, 9);                    move16();   prevEnergy = shr( add (exEnergyHist[7], exEnergyHist[8]) ,1);   test ();   if ( sub (exEnergyHist[8], prevEnergy) < 0)   {      prevEnergy = exEnergyHist[8];         move16 ();   }   /* upscaling to avoid too rapid energy rises  for some cases */   test (); test ();   if ( sub (excEnergy, avgEnergy) < 0 && sub (excEnergy, 5) > 0)   {      testEnergy = shl(prevEnergy, 2);  /* testEnergy = 4*prevEnergy; */      test (); test ();      if ( sub (voicedHangover, 7) < 0 || prevBFI != 0 )      {         /* testEnergy = 3*prevEnergy */         testEnergy = sub (testEnergy, prevEnergy);        }      test ();      if ( sub (avgEnergy, testEnergy) > 0)      {         avgEnergy = testEnergy;         move16 ();      }      /* scaleFactor=avgEnergy/excEnergy in Q0 (const 29 below)*/      exp = norm_s (excEnergy);      excEnergy = shl (excEnergy, exp);      excEnergy = div_s ((Word16) 16383, excEnergy);      t0 = L_mult (avgEnergy, excEnergy);      t0 = L_shr (t0, sub (20, exp));  /* const=30 for t0 in Q0, 20 for Q10 */      if ( L_sub(t0, 32767) > 0 )      {         t0 = 32767; move32 ();   /* saturate  */      }      scaleFactor = extract_l (t0);       /* test if scaleFactor > 3.0 */      test (); test ();      if ( carefulFlag != 0 && sub(scaleFactor, 3072) > 0 )       {         scaleFactor = 3072;              move16 ();      }      /* scale the excitation by scaleFactor */      for (i = 0; i < L_SUBFR; i++)      {         t0 = L_mult (scaleFactor, excitation[i]);         t0 = L_shr (t0, 11);         excitation[i] = extract_l (t0);      }    }   return 0;}

⌨️ 快捷键说明

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