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