14f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* ------------------------------------------------------------------
24f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * Copyright (C) 1998-2009 PacketVideo
34f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber *
44f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
54f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * you may not use this file except in compliance with the License.
64f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * You may obtain a copy of the License at
74f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber *
84f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
94f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber *
104f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * Unless required by applicable law or agreed to in writing, software
114f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
124f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
134f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * express or implied.
144f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * See the License for the specific language governing permissions
154f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * and limitations under the License.
164f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber * -------------------------------------------------------------------
174f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber */
184f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/****************************************************************************************
194f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas HuberPortions of this file are derived from the following 3GPP standard:
204f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
214f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber    3GPP TS 26.073
224f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
234f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber    Available from http://www.3gpp.org
244f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
254f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
264f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas HuberPermission to distribute, modify and use this file under the standard license
274f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huberterms listed above has been obtained from the copyright holder.
284f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber****************************************************************************************/
294f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/*
304f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber********************************************************************************
314f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber**-------------------------------------------------------------------------**
324f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber**                                                                         **
334f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber**     GSM AMR-NB speech codec   R98   Version 7.5.0   March 2, 2001       **
344f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber**                               R99   Version 3.2.0                       **
354f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber**                               REL-4 Version 4.0.0                       **
364f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber**                                                                         **
374f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber**-------------------------------------------------------------------------**
384f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber********************************************************************************
394f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber*
404f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber*      File             : cnst_vad.h
414f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber*      Purpose          : Constants and definitions for VAD
424f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber*
434f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber********************************************************************************
444f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber*/
454f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#ifndef cnst_vad_h
464f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define cnst_vad_h "$Id $"
474f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
484f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define FRAME_LEN 160    /* Length (samples) of the input frame          */
494f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define COMPLEN 9        /* Number of sub-bands used by VAD              */
504f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define INV_COMPLEN 3641 /* 1.0/COMPLEN*2^15                             */
514f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define LOOKAHEAD 40     /* length of the lookahead used by speech coder */
524f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
534f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define UNITY 512        /* Scaling used with SNR calculation            */
544f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define UNIRSHFT 6       /* = log2(MAX_16/UNITY)                         */
554f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
564f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define TONE_THR (Word16)(0.65*MAX_16) /* Threshold for tone detection   */
574f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
584f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Constants for background spectrum update */
594f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define ALPHA_UP1   (Word16)((1.0 - 0.95)*MAX_16)  /* Normal update, upwards:   */
604f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define ALPHA_DOWN1 (Word16)((1.0 - 0.936)*MAX_16) /* Normal update, downwards  */
614f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define ALPHA_UP2   (Word16)((1.0 - 0.985)*MAX_16) /* Forced update, upwards    */
624f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define ALPHA_DOWN2 (Word16)((1.0 - 0.943)*MAX_16) /* Forced update, downwards  */
634f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define ALPHA3      (Word16)((1.0 - 0.95)*MAX_16)  /* Update downwards          */
644f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define ALPHA4      (Word16)((1.0 - 0.9)*MAX_16)   /* For stationary estimation */
654f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define ALPHA5      (Word16)((1.0 - 0.5)*MAX_16)   /* For stationary estimation */
664f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
674f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Constants for VAD threshold */
684f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define VAD_THR_HIGH 1260 /* Highest threshold                 */
694f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define VAD_THR_LOW  720  /* Lowest threshold                  */
704f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define VAD_P1 0          /* Noise level for highest threshold */
714f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define VAD_P2 6300       /* Noise level for lowest threshold  */
724f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define VAD_SLOPE (Word16)(MAX_16*(float)(VAD_THR_LOW-VAD_THR_HIGH)/(float)(VAD_P2-VAD_P1))
734f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
744f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Parameters for background spectrum recovery function */
754f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define STAT_COUNT 20         /* threshold of stationary detection counter         */
764f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define STAT_COUNT_BY_2 10    /* threshold of stationary detection counter         */
774f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CAD_MIN_STAT_COUNT 5  /* threshold of stationary detection counter         */
784f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
794f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define STAT_THR_LEVEL 184    /* Threshold level for stationarity detection        */
804f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define STAT_THR 1000         /* Threshold for stationarity detection              */
814f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
824f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Limits for background noise estimate */
834f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define NOISE_MIN 40          /* minimum */
844f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define NOISE_MAX 16000       /* maximum */
854f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define NOISE_INIT 150        /* initial */
864f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
874f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Constants for VAD hangover addition */
884f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define HANG_NOISE_THR 100
894f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define BURST_LEN_HIGH_NOISE 4
904f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define HANG_LEN_HIGH_NOISE 7
914f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define BURST_LEN_LOW_NOISE 5
924f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define HANG_LEN_LOW_NOISE 4
934f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
944f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Thresholds for signal power */
954f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define VAD_POW_LOW (Word32)15000     /* If input power is lower,                    */
964f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/*     VAD is set to 0                         */
974f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define POW_PITCH_THR (Word32)343040  /* If input power is lower, pitch              */
984f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/*     detection is ignored                    */
994f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1004f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define POW_COMPLEX_THR (Word32)15000 /* If input power is lower, complex            */
1014f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* flags  value for previous frame  is un-set  */
1024f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1034f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1044f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Constants for the filter bank */
1054f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define LEVEL_SHIFT 0      /* scaling                                  */
1064f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define COEFF3   13363     /* coefficient for the 3rd order filter     */
1074f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define COEFF5_1 21955     /* 1st coefficient the for 5th order filter */
1084f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define COEFF5_2 6390      /* 2nd coefficient the for 5th order filter */
1094f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1104f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Constants for pitch detection */
1114f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define LTHRESH 4
1124f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define NTHRESH 4
1134f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1144f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* Constants for complex signal VAD  */
1154f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_THRESH_ADAPT_HIGH  (Word16)(0.6 * MAX_16) /* threshold for adapt stopping high    */
1164f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_THRESH_ADAPT_LOW  (Word16)(0.5 * MAX_16)  /* threshold for adapt stopping low     */
1174f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_THRESH_IN_NOISE  (Word16)(0.65 * MAX_16)  /* threshold going into speech on       */
1184f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* a short term basis                   */
1194f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1204f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_THRESH_HANG  (Word16)(0.70 * MAX_16)      /* threshold                            */
1214f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_HANG_LIMIT  (Word16)(100)                 /* 2 second estimation time             */
1224f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_HANG_LENGTH  (Word16)(250)                /* 5 second hangover                    */
1234f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1244f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_LOWPOW_RESET (Word16) (0.40 * MAX_16)     /* init in low power segment            */
1254f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_MIN_CORR (Word16) (0.40 * MAX_16)         /* lowest adaptation value              */
1264f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1274f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_BURST 20                                  /* speech burst length for speech reset */
1284f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_ADAPT_SLOW (Word16)(( 1.0 - 0.98) * MAX_16)        /* threshold for slow adaption */
1294f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_ADAPT_FAST (Word16)((1.0 - 0.92) * MAX_16)         /* threshold for fast adaption */
1304f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#define CVAD_ADAPT_REALLY_FAST (Word16)((1.0 - 0.80) * MAX_16)  /* threshold for really fast   */
1314f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber/* adaption                    */
1324f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber
1334f1efc098cb5791c3e9f483f2af84aef70d2d0a0Andreas Huber#endif
134