blob: 1d8bedd7e22eb2d800a003071a3a308ec462bd09 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
/*
* Copyright (C) 2004-2010 NXP Software
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _LVPSA_PRIVATE_H_
#define _LVPSA_PRIVATE_H_
#include "LVPSA.h"
#include "BIQUAD.h"
#include "LVPSA_QPD.h"
#include "LVM_Macros.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**********************************************************************************
CONSTANT DEFINITIONS
***********************************************************************************/
/* Memory */
#define LVPSA_INSTANCE_ALIGN 4 /* 32-bit alignment for structures */
#define LVPSA_SCRATCH_ALIGN 4 /* 32-bit alignment for long data */
#define LVPSA_COEF_ALIGN 4 /* 32-bit alignment for long words */
#define LVPSA_DATA_ALIGN 4 /* 32-bit alignment for long data */
#define LVPSA_MEMREGION_INSTANCE 0 /* Offset to instance memory region in memory table */
#define LVPSA_MEMREGION_PERSISTENT_COEF 1 /* Offset to persistent coefficients memory region in memory table */
#define LVPSA_MEMREGION_PERSISTENT_DATA 2 /* Offset to persistent taps memory region in memory table */
#define LVPSA_MEMREGION_SCRATCH 3 /* Offset to scratch memory region in memory table */
#define LVPSA_NR_SUPPORTED_RATE 9 /* From 8000Hz to 48000Hz */
#define LVPSA_NR_SUPPORTED_SPEED 3 /* LOW, MEDIUM, HIGH */
#define LVPSA_MAXBUFFERDURATION 4000 /* Maximum length in ms of the levels buffer */
#define LVPSA_MAXINPUTBLOCKSIZE 5000 /* Maximum length in mono samples of the block to process */
#define LVPSA_NBANDSMIN 1 /* Minimum number of frequency band */
#define LVPSA_NBANDSMAX 30 /* Maximum number of frequency band */
#define LVPSA_MAXCENTERFREQ 20000 /* Maximum possible center frequency */
#define LVPSA_MINPOSTGAIN -15 /* Minimum possible post gain */
#define LVPSA_MAXPOSTGAIN 15 /* Maximum possible post gain */
#define LVPSA_MINQFACTOR 25 /* Minimum possible Q factor */
#define LVPSA_MAXQFACTOR 1200 /* Maximum possible Q factor */
#define LVPSA_MAXLEVELDECAYFACTOR 0x4111 /* Decay factor for the maximum values calculation */
#define LVPSA_MAXLEVELDECAYSHIFT 14 /* Decay shift for the maximum values calculation */
#define LVPSA_MAXUNSIGNEDCHAR 0xFF
#define LVPSA_FsInvertShift 31
#define LVPSA_GAINSHIFT 11
#define LVPSA_FREQSHIFT 25
/**********************************************************************************
TYPES DEFINITIONS
***********************************************************************************/
#define LVPSA_InternalRefreshTime 0x0014 /* 20 ms (50Hz) in Q16.0 */
#define LVPSA_InternalRefreshTimeInv 0x0666 /* 1/20ms left shifted by 15 */
#define LVPSA_InternalRefreshTimeShift 15
/* Precision of the filter */
typedef enum
{
LVPSA_SimplePrecisionFilter, /* Simple precision */
LVPSA_DoublePrecisionFilter /* Double precision */
} LVPSA_BPFilterPrecision_en;
typedef struct
{
LVM_CHAR bControlPending; /* Flag incating a change of the control parameters */
LVM_UINT16 nBands; /* Number of bands of the spectrum analyzer */
LVM_UINT16 MaxInputBlockSize; /* Maximum input data buffer size */
LVPSA_ControlParams_t CurrentParams; /* Current control parameters of the module */
LVPSA_ControlParams_t NewParams; /* New control parameters given by the user */
LVPSA_MemTab_t MemoryTable;
LVPSA_BPFilterPrecision_en *pBPFiltersPrecision; /* Points a nBands elements array that contains the filter precision for each band */
Biquad_Instance_t *pBP_Instances; /* Points a nBands elements array that contains the band pass filter instance for each band */
Biquad_1I_Order2_Taps_t *pBP_Taps; /* Points a nBands elements array that contains the band pass filter taps for each band */
QPD_State_t *pQPD_States; /* Points a nBands elements array that contains the QPD filter instance for each band */
QPD_Taps_t *pQPD_Taps; /* Points a nBands elements array that contains the QPD filter taps for each band */
LVM_UINT16 *pPostGains; /* Points a nBands elements array that contains the post-filter gains for each band */
LVPSA_FilterParam_t *pFiltersParams; /* Copy of the filters parameters from the input parameters */
LVM_UINT16 nSamplesBufferUpdate; /* Number of samples to make 20ms */
LVM_INT32 BufferUpdateSamplesCount; /* Counter used to know when to put a new value in the buffer */
LVM_UINT16 nRelevantFilters; /* Number of relevent filters depending on sampling frequency and bands center frequency */
LVM_UINT16 LocalSamplesCount; /* Counter used to update the SpectralDataBufferAudioTime */
LVM_UINT16 DownSamplingFactor; /* Down sampling factor depending on the sampling frequency */
LVM_UINT16 DownSamplingCount; /* Counter used for the downsampling handling */
LVM_UINT16 SpectralDataBufferDuration; /* Length of the buffer in time (ms) defined by the application */
LVM_UINT8 *pSpectralDataBufferStart; /* Starting address of the buffer */
LVM_UINT8 *pSpectralDataBufferWritePointer; /* Current position of the writting pointer of the buffer */
LVPSA_Time SpectralDataBufferAudioTime; /* AudioTime at which the last value save occured in the buffer */
LVM_UINT32 SpectralDataBufferLength; /* Number of spectrum data value that the buffer can contain (per band)
= SpectralDataBufferDuration/20ms */
LVM_UINT8 *pPreviousPeaks; /* Points to a nBands elements array that contains the previous peak value of the level
detection. Those values are decremented after each call to the GetSpectrum function */
}LVPSA_InstancePr_t, *pLVPSA_InstancePr_t;
/**********************************************************************************
FUNCTIONS PROTOTYPE
***********************************************************************************/
/************************************************************************************/
/* */
/* FUNCTION: LVPSA_ApplyNewSettings */
/* */
/* DESCRIPTION: */
/* Reinitialize some parameters and changes filters' coefficients if */
/* some control parameters have changed. */
/* */
/* PARAMETERS: */
/* pInst Pointer to the instance */
/* */
/* RETURNS: */
/* LVPSA_OK Always succeeds */
/* */
/************************************************************************************/
LVPSA_RETURN LVPSA_ApplyNewSettings (LVPSA_InstancePr_t *pInst);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _LVPSA_PRIVATE_H */
|