www.pudn.com > AVS_M_ver10.rar > hf_func.c


/* 
*********************************************************************** 
* COPYRIGHT AND WARRANTY INFORMATION 
* 
* Copyright 2007  Audio Video Coding Standard, Part ¢ú 
* 
* This software module was developed by AVS Audio sub-group 
* 
* DISCLAIMER OF WARRANTY 
* 
* These software programs are available to the users without any 
* license fee or royalty on an "as is" basis. The AVS disclaims 
* any and all warranties, whether express, implied, or statutory, 
* including any implied warranties of merchantability or of fitness 
* for a particular purpose. In no event shall the contributors or  
* the AVS be liable for any incidental, punitive, or consequential 
* damages of any kind whatsoever arising from the use of this program. 
* 
* This disclaimer of warranty extends to the user of this program 
* and user's customers, employees, agents, transferees, successors, 
* and assigns. 
* 
* The AVS does not represent or warrant that the program furnished 
* hereunder are free of infringement of any third-party patents. 
* Commercial implementations of AVS, including shareware, may be 
* subject to royalty fees to patent holders. Information regarding 
* the AVS patent policy is available from the AVS Web site at 
* http://www.avs.org.cn 
* 
* THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE AVS PATENT POLICY. 
************************************************************************ 
*/ 
 
#include  
#include  
#include  
#include "../include/amr_plus.h" 
/*---------------------------------------------------------------------* 
 * routine match_gain_6k4()                                            * 
 * ~~~~~~~~~~~~~~~~~~~~~~~~                                            * 
 * Find the gain to match amplitude of both filters at 6.4kHz.         * 
 * Gain is returned in log domain.                                     * 
 *---------------------------------------------------------------------*/ 
float match_gain_6k4(float *AqLF, float *AqHF) 
{ 
  float tmp, gain; 
  float buf[M+L_SUBFR]; 
  float code[L_SUBFR]; 
  int i; 
  /* generate 1/(1+0.9 z^{-1}) over one subframe (HF signal close to a sinusoid at 6.4 kHz) */ 
  set_zero(buf, M); 
  tmp = 1.0; 
  for (i=0; i= 0.0) { 
      exc_hf[i] -= tmp; 
    } else { 
      exc_hf[i] += tmp; 
    } 
  } 
  *mem = lp_amp; 
  return; 
} 
/*---------------------------------------------------------------------* 
 * routine soft_exc_hf_new()                                           * 
 * ~~~~~~~~~~~~~~~~~~~~~                                               * 
 * reduce buzziness from excitation.                                   * 
 *---------------------------------------------------------------------*/ 
void soft_exc_hf_new(float *exc_hf, float *mem, int l_frame) 
{ 
  float tmp, lp_amp; 
  int i; 
  lp_amp = *mem; 
  for (i=0; i= 0.0) { 
      exc_hf[i] -= tmp; 
    } else { 
      exc_hf[i] += tmp; 
    } 
  } 
  *mem = lp_amp; 
  return; 
} 
/*---------------------------------------------------------------------* 
 * routine smooth_ener_hf()                                            * 
 * ~~~~~~~~~~~~~~~~~~~~~~~~                                            * 
 * smooth energy evolution of HF synthesis subframe.                   * 
 *---------------------------------------------------------------------*/ 
void smooth_ener_hf(float *HF, float *threshold) 
{ 
  float tmp, ener; 
  int i; 
  /* compute energy over subframe */ 
  ener = 0.0001f; 
  for (i=0; i *threshold) { 
      tmp = *threshold; 
    } 
  } 
  else { 
    tmp = tmp/1.414f; 
    if (tmp < *threshold) { 
      tmp = *threshold; 
    } 
  } 
  /* set the threshold for next subframer to the current modified energy */ 
  *threshold = tmp; 
  /* apply correction scale factor to HF signal */ 
  tmp = (float)sqrt(tmp/ener); 
  for (i=0; i