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