1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-------------------------------------------------------------------* 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * WB_VAD_C.H * 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-------------------------------------------------------------------* 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * Constants for Voice Activity Detection. * 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-------------------------------------------------------------------*/ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#ifndef __WB_VAD_C_H__ 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define __WB_VAD_C_H__ 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define FRAME_LEN 256 /* Length (samples) of the input frame */ 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define COMPLEN 12 /* Number of sub-bands used by VAD */ 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define UNIRSHFT 7 /* = log2(MAX_16/UNITY), UNITY = 256 */ 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SCALE 128 /* (UNITY*UNITY)/512 */ 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define TONE_THR (Word16)(0.65*MAX_16) /* Threshold for tone detection */ 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* constants for speech level estimation */ 36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SP_EST_COUNT 80 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SP_ACTIVITY_COUNT 25 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA_SP_UP (Word16)((1.0 - 0.85)*MAX_16) 39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA_SP_DOWN (Word16)((1.0 - 0.85)*MAX_16) 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define NOM_LEVEL 2050 /* about -26 dBov Q15 */ 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SPEECH_LEVEL_INIT NOM_LEVEL /* initial speech level */ 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define MIN_SPEECH_LEVEL1 (Word16)(NOM_LEVEL * 0.063) /* NOM_LEVEL -24 dB */ 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define MIN_SPEECH_LEVEL2 (Word16)(NOM_LEVEL * 0.2) /* NOM_LEVEL -14 dB */ 45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define MIN_SPEECH_SNR 4096 /* 0 dB, lowest SNR estimation, Q12 */ 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Time constants for background spectrum update */ 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA_UP1 (Word16)((1.0 - 0.95)*MAX_16) /* Normal update, upwards: */ 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA_DOWN1 (Word16)((1.0 - 0.936)*MAX_16) /* Normal update, downwards */ 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA_UP2 (Word16)((1.0 - 0.985)*MAX_16) /* Forced update, upwards */ 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA_DOWN2 (Word16)((1.0 - 0.943)*MAX_16) /* Forced update, downwards */ 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA3 (Word16)((1.0 - 0.95)*MAX_16) /* Update downwards */ 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA4 (Word16)((1.0 - 0.9)*MAX_16) /* For stationary estimation */ 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ALPHA5 (Word16)((1.0 - 0.5)*MAX_16) /* For stationary estimation */ 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Constants for VAD threshold */ 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define THR_MIN (Word16)(1.6*SCALE) /* Minimum threshold */ 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define THR_HIGH (Word16)(6*SCALE) /* Highest threshold */ 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define THR_LOW (Word16)(1.7*SCALE) /* Lowest threshold */ 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define NO_P1 31744 /* ilog2(1), Noise level for highest threshold */ 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define NO_P2 19786 /* ilog2(0.1*MAX_16), Noise level for lowest threshold */ 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define NO_SLOPE (Word16)(MAX_16*(float)(THR_LOW-THR_HIGH)/(float)(NO_P2-NO_P1)) 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SP_CH_MIN (Word16)(-0.75*SCALE) 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SP_CH_MAX (Word16)(0.75*SCALE) 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SP_P1 22527 /* ilog2(NOM_LEVEL/4) */ 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SP_P2 17832 /* ilog2(NOM_LEVEL*4) */ 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SP_SLOPE (Word16)(MAX_16*(float)(SP_CH_MAX-SP_CH_MIN)/(float)(SP_P2-SP_P1)) 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Constants for hangover length */ 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define HANG_HIGH 12 /* longest hangover */ 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define HANG_LOW 2 /* shortest hangover */ 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define HANG_P1 THR_LOW /* threshold for longest hangover */ 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define HANG_P2 (Word16)(4*SCALE) /* threshold for shortest hangover */ 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define HANG_SLOPE (Word16)(MAX_16*(float)(HANG_LOW-HANG_HIGH)/(float)(HANG_P2-HANG_P1)) 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Constants for burst length */ 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define BURST_HIGH 8 /* longest burst length */ 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define BURST_LOW 3 /* shortest burst length */ 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define BURST_P1 THR_HIGH /* threshold for longest burst */ 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define BURST_P2 THR_LOW /* threshold for shortest burst */ 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define BURST_SLOPE (Word16)(MAX_16*(float)(BURST_LOW-BURST_HIGH)/(float)(BURST_P2-BURST_P1)) 83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Parameters for background spectrum recovery function */ 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define STAT_COUNT 20 /* threshold of stationary detection counter */ 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define STAT_THR_LEVEL 184 /* Threshold level for stationarity detection */ 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define STAT_THR 1000 /* Threshold for stationarity detection */ 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Limits for background noise estimate */ 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define NOISE_MIN 40 /* minimum */ 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define NOISE_MAX 20000 /* maximum */ 93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define NOISE_INIT 150 /* initial */ 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Thresholds for signal power (now calculated on 2 frames) */ 96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define VAD_POW_LOW (Word32)30000L /* If input power is lower than this, VAD is set to 0 */ 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define POW_TONE_THR (Word32)686080L /* If input power is lower,tone detection flag is ignored */ 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Constants for the filter bank */ 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define COEFF3 13363 /* coefficient for the 3rd order filter */ 101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define COEFF5_1 21955 /* 1st coefficient the for 5th order filter */ 102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define COEFF5_2 6390 /* 2nd coefficient the for 5th order filter */ 103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define F_5TH_CNT 5 /* number of 5th order filters */ 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define F_3TH_CNT 6 /* number of 3th order filters */ 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif //__WB_VAD_C_H__ 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 110