LVDBE_Tables.c revision 2c8e5cab3faa6d360e222b7a6c40a80083d021ac
1/*
2 * Copyright (C) 2004-2010 NXP Software
3 * Copyright (C) 2010 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17/************************************************************************************
18
19     $Author: beq07716 $
20     $Revision: 1009 $
21     $Date: 2010-06-28 14:14:15 +0200 (Mon, 28 Jun 2010) $
22
23*************************************************************************************/
24
25
26/************************************************************************************/
27/*                                                                                  */
28/*    Includes                                                                      */
29/*                                                                                  */
30/************************************************************************************/
31
32#include "LVDBE.h"
33#include "LVDBE_Coeffs.h"               /* Filter coefficients */
34#include "BIQUAD.h"
35
36
37/************************************************************************************/
38/*                                                                                  */
39/*    Coefficients constant table                                                   */
40/*                                                                                  */
41/************************************************************************************/
42
43/*
44 * High Pass Filter Coefficient table
45 */
46const BQ_C32_Coefs_t LVDBE_HPF_Table[] = {
47    /* Coefficients for 55Hz centre frequency */
48    {HPF_Fs8000_Fc55_A2,                /* 8kS/s coefficients */
49     HPF_Fs8000_Fc55_A1,
50     HPF_Fs8000_Fc55_A0,
51     -HPF_Fs8000_Fc55_B2,
52     -HPF_Fs8000_Fc55_B1},
53    {HPF_Fs11025_Fc55_A2,                /* 11kS/s coefficients */
54     HPF_Fs11025_Fc55_A1,
55     HPF_Fs11025_Fc55_A0,
56     -HPF_Fs11025_Fc55_B2,
57     -HPF_Fs11025_Fc55_B1},
58    {HPF_Fs12000_Fc55_A2,                /* 12kS/s coefficients */
59     HPF_Fs12000_Fc55_A1,
60     HPF_Fs12000_Fc55_A0,
61     -HPF_Fs12000_Fc55_B2,
62     -HPF_Fs12000_Fc55_B1},
63    {HPF_Fs16000_Fc55_A2,                /* 16kS/s coefficients */
64     HPF_Fs16000_Fc55_A1,
65     HPF_Fs16000_Fc55_A0,
66     -HPF_Fs16000_Fc55_B2,
67     -HPF_Fs16000_Fc55_B1},
68    {HPF_Fs22050_Fc55_A2,                /* 22kS/s coefficients */
69     HPF_Fs22050_Fc55_A1,
70     HPF_Fs22050_Fc55_A0,
71     -HPF_Fs22050_Fc55_B2,
72     -HPF_Fs22050_Fc55_B1},
73    {HPF_Fs24000_Fc55_A2,                /* 24kS/s coefficients */
74     HPF_Fs24000_Fc55_A1,
75     HPF_Fs24000_Fc55_A0,
76     -HPF_Fs24000_Fc55_B2,
77     -HPF_Fs24000_Fc55_B1},
78    {HPF_Fs32000_Fc55_A2,                /* 32kS/s coefficients */
79     HPF_Fs32000_Fc55_A1,
80     HPF_Fs32000_Fc55_A0,
81     -HPF_Fs32000_Fc55_B2,
82     -HPF_Fs32000_Fc55_B1},
83    {HPF_Fs44100_Fc55_A2,                /* 44kS/s coefficients */
84     HPF_Fs44100_Fc55_A1,
85     HPF_Fs44100_Fc55_A0,
86     -HPF_Fs44100_Fc55_B2,
87     -HPF_Fs44100_Fc55_B1},
88    {HPF_Fs48000_Fc55_A2,                /* 48kS/s coefficients */
89     HPF_Fs48000_Fc55_A1,
90     HPF_Fs48000_Fc55_A0,
91     -HPF_Fs48000_Fc55_B2,
92     -HPF_Fs48000_Fc55_B1},
93
94    /* Coefficients for 66Hz centre frequency */
95    {HPF_Fs8000_Fc66_A2,                /* 8kS/s coefficients */
96     HPF_Fs8000_Fc66_A1,
97     HPF_Fs8000_Fc66_A0,
98     -HPF_Fs8000_Fc66_B2,
99     -HPF_Fs8000_Fc66_B1},
100    {HPF_Fs11025_Fc66_A2,                /* 11kS/s coefficients */
101     HPF_Fs11025_Fc66_A1,
102     HPF_Fs11025_Fc66_A0,
103     -HPF_Fs11025_Fc66_B2,
104     -HPF_Fs11025_Fc66_B1},
105    {HPF_Fs12000_Fc66_A2,                /* 12kS/s coefficients */
106     HPF_Fs12000_Fc66_A1,
107     HPF_Fs12000_Fc66_A0,
108     -HPF_Fs12000_Fc66_B2,
109     -HPF_Fs12000_Fc66_B1},
110    {HPF_Fs16000_Fc66_A2,                /* 16kS/s coefficients */
111     HPF_Fs16000_Fc66_A1,
112     HPF_Fs16000_Fc66_A0,
113     -HPF_Fs16000_Fc66_B2,
114     -HPF_Fs16000_Fc66_B1},
115    {HPF_Fs22050_Fc66_A2,                /* 22kS/s coefficients */
116     HPF_Fs22050_Fc66_A1,
117     HPF_Fs22050_Fc66_A0,
118     -HPF_Fs22050_Fc66_B2,
119     -HPF_Fs22050_Fc66_B1},
120    {HPF_Fs24000_Fc66_A2,                /* 24kS/s coefficients */
121     HPF_Fs24000_Fc66_A1,
122     HPF_Fs24000_Fc66_A0,
123     -HPF_Fs24000_Fc66_B2,
124     -HPF_Fs24000_Fc66_B1},
125    {HPF_Fs32000_Fc66_A2,                /* 32kS/s coefficients */
126     HPF_Fs32000_Fc66_A1,
127     HPF_Fs32000_Fc66_A0,
128     -HPF_Fs32000_Fc66_B2,
129     -HPF_Fs32000_Fc66_B1},
130    {HPF_Fs44100_Fc66_A2,                /* 44kS/s coefficients */
131     HPF_Fs44100_Fc66_A1,
132     HPF_Fs44100_Fc66_A0,
133     -HPF_Fs44100_Fc66_B2,
134     -HPF_Fs44100_Fc66_B1},
135    {HPF_Fs48000_Fc66_A2,                /* 48kS/s coefficients */
136     HPF_Fs48000_Fc66_A1,
137     HPF_Fs48000_Fc66_A0,
138     -HPF_Fs48000_Fc66_B2,
139     -HPF_Fs48000_Fc66_B1},
140
141    /* Coefficients for 78Hz centre frequency */
142    {HPF_Fs8000_Fc78_A2,                /* 8kS/s coefficients */
143     HPF_Fs8000_Fc78_A1,
144     HPF_Fs8000_Fc78_A0,
145     -HPF_Fs8000_Fc78_B2,
146     -HPF_Fs8000_Fc78_B1},
147    {HPF_Fs11025_Fc78_A2,                /* 11kS/s coefficients */
148     HPF_Fs11025_Fc78_A1,
149     HPF_Fs11025_Fc78_A0,
150     -HPF_Fs11025_Fc78_B2,
151     -HPF_Fs11025_Fc78_B1},
152    {HPF_Fs12000_Fc78_A2,                /* 12kS/s coefficients */
153     HPF_Fs12000_Fc78_A1,
154     HPF_Fs12000_Fc78_A0,
155     -HPF_Fs12000_Fc78_B2,
156     -HPF_Fs12000_Fc78_B1},
157    {HPF_Fs16000_Fc78_A2,                /* 16kS/s coefficients */
158     HPF_Fs16000_Fc78_A1,
159     HPF_Fs16000_Fc78_A0,
160     -HPF_Fs16000_Fc78_B2,
161     -HPF_Fs16000_Fc78_B1},
162    {HPF_Fs22050_Fc78_A2,                /* 22kS/s coefficients */
163     HPF_Fs22050_Fc78_A1,
164     HPF_Fs22050_Fc78_A0,
165     -HPF_Fs22050_Fc78_B2,
166     -HPF_Fs22050_Fc78_B1},
167    {HPF_Fs24000_Fc78_A2,                /* 24kS/s coefficients */
168     HPF_Fs24000_Fc78_A1,
169     HPF_Fs24000_Fc78_A0,
170     -HPF_Fs24000_Fc78_B2,
171     -HPF_Fs24000_Fc78_B1},
172    {HPF_Fs32000_Fc78_A2,                /* 32kS/s coefficients */
173     HPF_Fs32000_Fc78_A1,
174     HPF_Fs32000_Fc78_A0,
175     -HPF_Fs32000_Fc78_B2,
176     -HPF_Fs32000_Fc78_B1},
177    {HPF_Fs44100_Fc78_A2,                /* 44kS/s coefficients */
178     HPF_Fs44100_Fc78_A1,
179     HPF_Fs44100_Fc78_A0,
180     -HPF_Fs44100_Fc78_B2,
181     -HPF_Fs44100_Fc78_B1},
182    {HPF_Fs48000_Fc78_A2,                /* 48kS/s coefficients */
183     HPF_Fs48000_Fc78_A1,
184     HPF_Fs48000_Fc78_A0,
185     -HPF_Fs48000_Fc78_B2,
186     -HPF_Fs48000_Fc78_B1},
187
188    /* Coefficients for 90Hz centre frequency */
189    {HPF_Fs8000_Fc90_A2,                /* 8kS/s coefficients */
190     HPF_Fs8000_Fc90_A1,
191     HPF_Fs8000_Fc90_A0,
192     -HPF_Fs8000_Fc90_B2,
193     -HPF_Fs8000_Fc90_B1},
194    {HPF_Fs11025_Fc90_A2,                /* 11kS/s coefficients */
195     HPF_Fs11025_Fc90_A1,
196     HPF_Fs11025_Fc90_A0,
197     -HPF_Fs11025_Fc90_B2,
198     -HPF_Fs11025_Fc90_B1},
199    {HPF_Fs12000_Fc90_A2,                /* 12kS/s coefficients */
200     HPF_Fs12000_Fc90_A1,
201     HPF_Fs12000_Fc90_A0,
202     -HPF_Fs12000_Fc90_B2,
203     -HPF_Fs12000_Fc90_B1},
204    {HPF_Fs16000_Fc90_A2,                /* 16kS/s coefficients */
205     HPF_Fs16000_Fc90_A1,
206     HPF_Fs16000_Fc90_A0,
207     -HPF_Fs16000_Fc90_B2,
208     -HPF_Fs16000_Fc90_B1},
209    {HPF_Fs22050_Fc90_A2,                /* 22kS/s coefficients */
210     HPF_Fs22050_Fc90_A1,
211     HPF_Fs22050_Fc90_A0,
212     -HPF_Fs22050_Fc90_B2,
213     -HPF_Fs22050_Fc90_B1},
214    {HPF_Fs24000_Fc90_A2,                /* 24kS/s coefficients */
215     HPF_Fs24000_Fc90_A1,
216     HPF_Fs24000_Fc90_A0,
217     -HPF_Fs24000_Fc90_B2,
218     -HPF_Fs24000_Fc90_B1},
219    {HPF_Fs32000_Fc90_A2,                /* 32kS/s coefficients */
220     HPF_Fs32000_Fc90_A1,
221     HPF_Fs32000_Fc90_A0,
222     -HPF_Fs32000_Fc90_B2,
223     -HPF_Fs32000_Fc90_B1},
224    {HPF_Fs44100_Fc90_A2,                /* 44kS/s coefficients */
225     HPF_Fs44100_Fc90_A1,
226     HPF_Fs44100_Fc90_A0,
227     -HPF_Fs44100_Fc90_B2,
228     -HPF_Fs44100_Fc90_B1},
229    {HPF_Fs48000_Fc90_A2,                /* 48kS/s coefficients */
230     HPF_Fs48000_Fc90_A1,
231     HPF_Fs48000_Fc90_A0,
232     -HPF_Fs48000_Fc90_B2,
233     -HPF_Fs48000_Fc90_B1}};
234
235/*
236 * Band Pass Filter coefficient table
237 */
238const BP_C32_Coefs_t LVDBE_BPF_Table[] = {
239    /* Coefficients for 55Hz centre frequency */
240    {BPF_Fs8000_Fc55_A0,                /* 8kS/s coefficients */
241     -BPF_Fs8000_Fc55_B2,
242     -BPF_Fs8000_Fc55_B1},
243    {BPF_Fs11025_Fc55_A0,                /* 11kS/s coefficients */
244     -BPF_Fs11025_Fc55_B2,
245     -BPF_Fs11025_Fc55_B1},
246    {BPF_Fs12000_Fc55_A0,                /* 12kS/s coefficients */
247     -BPF_Fs12000_Fc55_B2,
248     -BPF_Fs12000_Fc55_B1},
249    {BPF_Fs16000_Fc55_A0,                /* 16kS/s coefficients */
250     -BPF_Fs16000_Fc55_B2,
251     -BPF_Fs16000_Fc55_B1},
252    {BPF_Fs22050_Fc55_A0,                /* 22kS/s coefficients */
253     -BPF_Fs22050_Fc55_B2,
254     -BPF_Fs22050_Fc55_B1},
255    {BPF_Fs24000_Fc55_A0,                /* 24kS/s coefficients */
256     -BPF_Fs24000_Fc55_B2,
257     -BPF_Fs24000_Fc55_B1},
258    {BPF_Fs32000_Fc55_A0,                /* 32kS/s coefficients */
259     -BPF_Fs32000_Fc55_B2,
260     -BPF_Fs32000_Fc55_B1},
261    {BPF_Fs44100_Fc55_A0,                /* 44kS/s coefficients */
262     -BPF_Fs44100_Fc55_B2,
263     -BPF_Fs44100_Fc55_B1},
264    {BPF_Fs48000_Fc55_A0,                /* 48kS/s coefficients */
265     -BPF_Fs48000_Fc55_B2,
266     -BPF_Fs48000_Fc55_B1},
267
268    /* Coefficients for 66Hz centre frequency */
269    {BPF_Fs8000_Fc66_A0,                /* 8kS/s coefficients */
270     -BPF_Fs8000_Fc66_B2,
271     -BPF_Fs8000_Fc66_B1},
272    {BPF_Fs11025_Fc66_A0,                /* 11kS/s coefficients */
273     -BPF_Fs11025_Fc66_B2,
274     -BPF_Fs11025_Fc66_B1},
275    {BPF_Fs12000_Fc66_A0,                /* 12kS/s coefficients */
276     -BPF_Fs12000_Fc66_B2,
277     -BPF_Fs12000_Fc66_B1},
278    {BPF_Fs16000_Fc66_A0,                /* 16kS/s coefficients */
279     -BPF_Fs16000_Fc66_B2,
280     -BPF_Fs16000_Fc66_B1},
281    {BPF_Fs22050_Fc66_A0,                /* 22kS/s coefficients */
282     -BPF_Fs22050_Fc66_B2,
283     -BPF_Fs22050_Fc66_B1},
284    {BPF_Fs24000_Fc66_A0,                /* 24kS/s coefficients */
285     -BPF_Fs24000_Fc66_B2,
286     -BPF_Fs24000_Fc66_B1},
287    {BPF_Fs32000_Fc66_A0,                /* 32kS/s coefficients */
288     -BPF_Fs32000_Fc66_B2,
289     -BPF_Fs32000_Fc66_B1},
290    {BPF_Fs44100_Fc66_A0,                /* 44kS/s coefficients */
291     -BPF_Fs44100_Fc66_B2,
292     -BPF_Fs44100_Fc66_B1},
293    {BPF_Fs48000_Fc66_A0,                /* 48kS/s coefficients */
294     -BPF_Fs48000_Fc66_B2,
295     -BPF_Fs48000_Fc66_B1},
296
297    /* Coefficients for 78Hz centre frequency */
298    {BPF_Fs8000_Fc78_A0,                /* 8kS/s coefficients */
299     -BPF_Fs8000_Fc78_B2,
300     -BPF_Fs8000_Fc78_B1},
301    {BPF_Fs11025_Fc78_A0,                /* 11kS/s coefficients */
302     -BPF_Fs11025_Fc78_B2,
303     -BPF_Fs11025_Fc78_B1},
304    {BPF_Fs12000_Fc78_A0,                /* 12kS/s coefficients */
305     -BPF_Fs12000_Fc78_B2,
306     -BPF_Fs12000_Fc78_B1},
307    {BPF_Fs16000_Fc78_A0,                /* 16kS/s coefficients */
308     -BPF_Fs16000_Fc78_B2,
309     -BPF_Fs16000_Fc78_B1},
310    {BPF_Fs22050_Fc78_A0,                /* 22kS/s coefficients */
311     -BPF_Fs22050_Fc78_B2,
312     -BPF_Fs22050_Fc78_B1},
313    {BPF_Fs24000_Fc78_A0,                /* 24kS/s coefficients */
314     -BPF_Fs24000_Fc78_B2,
315     -BPF_Fs24000_Fc78_B1},
316    {BPF_Fs32000_Fc78_A0,                /* 32kS/s coefficients */
317     -BPF_Fs32000_Fc78_B2,
318     -BPF_Fs32000_Fc78_B1},
319    {BPF_Fs44100_Fc78_A0,                /* 44kS/s coefficients */
320     -BPF_Fs44100_Fc78_B2,
321     -BPF_Fs44100_Fc78_B1},
322    {BPF_Fs48000_Fc78_A0,                /* 48kS/s coefficients */
323     -BPF_Fs48000_Fc78_B2,
324     -BPF_Fs48000_Fc78_B1},
325
326    /* Coefficients for 90Hz centre frequency */
327    {BPF_Fs8000_Fc90_A0,                /* 8kS/s coefficients */
328     -BPF_Fs8000_Fc90_B2,
329     -BPF_Fs8000_Fc90_B1},
330    {BPF_Fs11025_Fc90_A0,                /* 11kS/s coefficients */
331     -BPF_Fs11025_Fc90_B2,
332     -BPF_Fs11025_Fc90_B1},
333    {BPF_Fs12000_Fc90_A0,                /* 12kS/s coefficients */
334     -BPF_Fs12000_Fc90_B2,
335     -BPF_Fs12000_Fc90_B1},
336    {BPF_Fs16000_Fc90_A0,                /* 16kS/s coefficients */
337     -BPF_Fs16000_Fc90_B2,
338     -BPF_Fs16000_Fc90_B1},
339    {BPF_Fs22050_Fc90_A0,                /* 22kS/s coefficients */
340     -BPF_Fs22050_Fc90_B2,
341     -BPF_Fs22050_Fc90_B1},
342    {BPF_Fs24000_Fc90_A0,                /* 24kS/s coefficients */
343     -BPF_Fs24000_Fc90_B2,
344     -BPF_Fs24000_Fc90_B1},
345    {BPF_Fs32000_Fc90_A0,                /* 32kS/s coefficients */
346     -BPF_Fs32000_Fc90_B2,
347     -BPF_Fs32000_Fc90_B1},
348    {BPF_Fs44100_Fc90_A0,                /* 44kS/s coefficients */
349     -BPF_Fs44100_Fc90_B2,
350     -BPF_Fs44100_Fc90_B1},
351    {BPF_Fs48000_Fc90_A0,                /* 48kS/s coefficients */
352     -BPF_Fs48000_Fc90_B2,
353     -BPF_Fs48000_Fc90_B1}};
354
355
356/************************************************************************************/
357/*                                                                                  */
358/*    AGC constant tables                                                           */
359/*                                                                                  */
360/************************************************************************************/
361
362/* Attack time (signal too large) */
363const LVM_INT16 LVDBE_AGC_ATTACK_Table[] = {
364    AGC_ATTACK_Fs8000,
365    AGC_ATTACK_Fs11025,
366    AGC_ATTACK_Fs12000,
367    AGC_ATTACK_Fs16000,
368    AGC_ATTACK_Fs22050,
369    AGC_ATTACK_Fs24000,
370    AGC_ATTACK_Fs32000,
371    AGC_ATTACK_Fs44100,
372    AGC_ATTACK_Fs48000};
373
374/* Decay time (signal too small) */
375const LVM_INT16 LVDBE_AGC_DECAY_Table[] = {
376    AGC_DECAY_Fs8000,
377    AGC_DECAY_Fs11025,
378    AGC_DECAY_Fs12000,
379    AGC_DECAY_Fs16000,
380    AGC_DECAY_Fs22050,
381    AGC_DECAY_Fs24000,
382    AGC_DECAY_Fs32000,
383    AGC_DECAY_Fs44100,
384    AGC_DECAY_Fs48000};
385
386/* Gain for use without the high pass filter */
387const LVM_INT32 LVDBE_AGC_GAIN_Table[] = {
388    AGC_GAIN_0dB,
389    AGC_GAIN_1dB,
390    AGC_GAIN_2dB,
391    AGC_GAIN_3dB,
392    AGC_GAIN_4dB,
393    AGC_GAIN_5dB,
394    AGC_GAIN_6dB,
395    AGC_GAIN_7dB,
396    AGC_GAIN_8dB,
397    AGC_GAIN_9dB,
398    AGC_GAIN_10dB,
399    AGC_GAIN_11dB,
400    AGC_GAIN_12dB,
401    AGC_GAIN_13dB,
402    AGC_GAIN_14dB,
403    AGC_GAIN_15dB};
404
405/* Gain for use with the high pass filter */
406const LVM_INT32 LVDBE_AGC_HPFGAIN_Table[] = {
407    AGC_HPFGAIN_0dB,
408    AGC_HPFGAIN_1dB,
409    AGC_HPFGAIN_2dB,
410    AGC_HPFGAIN_3dB,
411    AGC_HPFGAIN_4dB,
412    AGC_HPFGAIN_5dB,
413    AGC_HPFGAIN_6dB,
414    AGC_HPFGAIN_7dB,
415    AGC_HPFGAIN_8dB,
416    AGC_HPFGAIN_9dB,
417    AGC_HPFGAIN_10dB,
418    AGC_HPFGAIN_11dB,
419    AGC_HPFGAIN_12dB,
420    AGC_HPFGAIN_13dB,
421    AGC_HPFGAIN_14dB,
422    AGC_HPFGAIN_15dB};
423
424
425/************************************************************************************/
426/*                                                                                  */
427/*    Volume control gain and time constant tables                                  */
428/*                                                                                  */
429/************************************************************************************/
430
431/* dB to linear conversion table */
432const LVM_INT16 LVDBE_VolumeTable[] = {
433    0x4000,             /* -6dB */
434    0x47FB,             /* -5dB */
435    0x50C3,             /* -4dB */
436    0x5A9E,             /* -3dB */
437    0x65AD,             /* -2dB */
438    0x7215,             /* -1dB */
439    0x7FFF};            /*  0dB */
440
441const LVM_INT16 LVDBE_VolumeTCTable[] = {
442    VOL_TC_Fs8000,
443    VOL_TC_Fs11025,
444    VOL_TC_Fs12000,
445    VOL_TC_Fs16000,
446    VOL_TC_Fs22050,
447    VOL_TC_Fs24000,
448    VOL_TC_Fs32000,
449    VOL_TC_Fs44100,
450    VOL_TC_Fs48000};
451
452const LVM_INT16 LVDBE_MixerTCTable[] = {
453    MIX_TC_Fs8000,
454    MIX_TC_Fs11025,
455    MIX_TC_Fs12000,
456    MIX_TC_Fs16000,
457    MIX_TC_Fs22050,
458    MIX_TC_Fs24000,
459    MIX_TC_Fs32000,
460    MIX_TC_Fs44100,
461    MIX_TC_Fs48000};
462
463
464