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