comparison libtwamr/vad2.h @ 410:0152c069d01f

libtwamr: integrate VAD2 main body
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 07 May 2024 01:14:14 +0000
parents
children
comparison
equal deleted inserted replaced
409:4184ccc136a3 410:0152c069d01f
1 /*
2 ********************************************************************************
3 *
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
5 * R99 Version 3.3.0
6 * REL-4 Version 4.1.0
7 *
8 ********************************************************************************
9 *
10 * File : vad2.h
11 * Purpose : Voice Activity Detection (VAD) for AMR (option 2)
12 *
13 ********************************************************************************
14 */
15
16 #ifndef vad2_h
17 #define vad2_h "$Id $"
18
19 #include "typedef.h"
20
21 /***** Defines ****/
22
23 #define YES 1
24 #define NO 0
25 #define ON 1
26 #define OFF 0
27 #define TRUE 1
28 #define FALSE 0
29
30 #define FRM_LEN 80
31 #define DELAY 24
32 #define FFT_LEN 128
33
34 #define NUM_CHAN 16
35 #define LO_CHAN 0
36 #define HI_CHAN 15
37
38 #define UPDATE_THLD 35
39 #define HYSTER_CNT_THLD 6
40 #define UPDATE_CNT_THLD 50
41
42 #define SHIFT_STATE_0 0 /* channel energy scaled as 22,9 */
43 #define SHIFT_STATE_1 1 /* channel energy scaled as 27,4 */
44
45 #define NOISE_FLOOR_CHAN_0 512 /* 1.0 scaled as 22,9 */
46 #define MIN_CHAN_ENRG_0 32 /* 0.0625 scaled as 22,9 */
47 #define MIN_NOISE_ENRG_0 32 /* 0.0625 scaled as 22,9 */
48 #define INE_NOISE_0 8192 /* 16.0 scaled as 22,9 */
49 #define FRACTIONAL_BITS_0 9 /* used as input to fn10Log10() */
50
51 #define NOISE_FLOOR_CHAN_1 16 /* 1.0 scaled as 27,4 */
52 #define MIN_CHAN_ENRG_1 1 /* 0.0625 scaled as 27,4 */
53 #define MIN_NOISE_ENRG_1 1 /* 0.0625 scaled as 27,4 */
54 #define INE_NOISE_1 256 /* 16.0 scaled as 27,4 */
55 #define FRACTIONAL_BITS_1 4 /* used as input to fn10Log10() */
56
57 #define STATE_1_TO_0_SHIFT_R (FRACTIONAL_BITS_1-FRACTIONAL_BITS_0) /* state correction factor */
58 #define STATE_0_TO_1_SHIFT_R (FRACTIONAL_BITS_0-FRACTIONAL_BITS_1) /* state correction factor */
59
60 #define HIGH_ALPHA 29491 /* 0.9 scaled as 0,15 */
61 #define LOW_ALPHA 22938 /* 0.7 scaled as 0,15 */
62 #define ALPHA_RANGE (HIGH_ALPHA - LOW_ALPHA)
63 #define DEV_THLD 7168 /* 28.0 scaled as 7,8 */
64
65 #define PRE_EMP_FAC (-26214) /* -0.8 scaled as 0,15 */
66
67 #define CEE_SM_FAC 18022 /* 0.55 scaled as 0,15 */
68 #define ONE_MINUS_CEE_SM_FAC 14746 /* 0.45 scaled as 0,15 */
69
70 #define CNE_SM_FAC 3277 /* 0.1 scaled as 0,15 */
71 #define ONE_MINUS_CNE_SM_FAC 29491 /* 0.9 scaled as 0,15 */
72
73 #define FFT_HEADROOM 2
74
75
76 typedef struct
77 {
78 Word16 pre_emp_mem;
79 Word16 update_cnt;
80 Word16 hyster_cnt;
81 Word16 last_update_cnt;
82 Word16 ch_enrg_long_db[NUM_CHAN]; /* scaled as 7,8 */
83
84 Word32 Lframe_cnt;
85 Word32 Lch_enrg[NUM_CHAN]; /* scaled as 22,9 or 27,4 */
86 Word32 Lch_noise[NUM_CHAN]; /* scaled as 22,9 */
87
88 Word16 last_normb_shift; /* last block norm shift count */
89
90 Word16 tsnr; /* total signal-to-noise ratio in dB (scaled as 7,8) */
91 Word16 hangover;
92 Word16 burstcount;
93 Word16 fupdate_flag; /* forced update flag from previous frame */
94 Word16 negSNRvar; /* Negative SNR variance (scaled as 7,8) */
95 Word16 negSNRbias; /* sensitivity bias from negative SNR variance (scaled as 15,0) */
96
97 Word16 shift_state; /* use 22,9 or 27,4 scaling for ch_enrg[] */
98
99 Word32 L_R0;
100 Word32 L_Rmax;
101 Flag LTP_flag; /* Use to indicate the the LTP gain is > LTP_THRESH */
102
103 } vadState2;
104
105 /**** Prototypes ****/
106
107 Word16 vad2 (Word16 *farray_ptr, vadState2 *st);
108 void vad2_reset (vadState2 *st);
109
110 void r_fft (Word16 *farray_ptr);
111 void LTP_flag_update (vadState2 *st, Word16 mode);
112
113 #endif