#ifndef _floor0_table_h
#define _floor0_table_h

typedef struct
{
	int32_t val;
	int     shift;
} fromdB_look;

#define FROMdB_LOOKUP_SZ 35
#define FROMdB2_LOOKUP_SZ 32
#define FROMdB_SHIFT 5
#define FROMdB2_SHIFT 3
#define FROMdB2_MASK 31

// exp(-4*x*ln(10)/20)
//  expressed as (a >> b) << 1, unit is 1<<32
//  the additional << 1 comes from dB2 which is in 1<<31
static const fromdB_look FROMdB_LOOKUP[FROMdB_LOOKUP_SZ] =
{
  { 0x40000000, -3} , { 0x50C335D3, -2} 
, { 0x65EA59FD, -1} , { 0x404DE61F, -1} 
, { 0x51258315, 0} , { 0x66666666, 1} 
, { 0x409C2B0F, 1} , { 0x518847FE, 2} 
, { 0x66E309CB, 3} , { 0x40EACF44, 3} 
, { 0x51EB851E, 4} , { 0x676044E4, 5} 
, { 0x4139D330, 5} , { 0x524F3B06, 6} 
, { 0x67DE186D, 7} , { 0x4189374A, 7} 
, { 0x52B36A50, 8} , { 0x685C8519, 9} 
, { 0x41D8FC07, 9} , { 0x53181389, 10} 
, { 0x68DB8BAA, 11} , { 0x422921D9, 11} 
, { 0x537D3747, 12} , { 0x695B2CD4, 13} 
, { 0x4279A938, 13} , { 0x53E2D61E, 14} 
, { 0x69DB6957, 15} , { 0x42CA929D, 15} 
, { 0x5448F0AC, 16} , { 0x6A5C41F7, 17} 
, { 0x431BDE80, 17} , { 0x54AF877B, 18} 
, { 0x6ADDB764, 19} , { 0x436D8D54, 19} 
, { 0x55169B28, 20} };

// exp((-1/16-x/8)*ln(10)/20)
// unit is 1<<31
static const int32_t FROMdB2_LOOKUP[FROMdB2_LOOKUP_SZ] =
{
  0x7F150FC2, 0x7D4439D8, 0x7B7A082E, 0x79B6627B
, 0x77F930CB, 0x76425B84, 0x7491CB62, 0x72E76976
, 0x71431F23, 0x6FA4D622, 0x6E0C787B, 0x6C79F088
, 0x6AED28F1, 0x69660CAD, 0x67E486FE, 0x66688374
, 0x64F1EDEA, 0x6380B282, 0x6214BDAA, 0x60ADFC16
, 0x5F4C5ABE, 0x5DEFC6E5, 0x5C982E0F, 0x5B457E04
, 0x59F7A4CF, 0x58AE90BC, 0x576A3059, 0x562A7274
, 0x54EF4618, 0x53B89A90, 0x52865F62, 0x51588452
};

#endif
