lin2db & db2lin

lin2db & db2lin lin2db 计算方式 $$ y = 20 \times \log_{10}x $$查表代码 static float log2lut_base_float[8] = { 0, 0.169925001442312f, 0.321928094887362f, 0.459431618637297f, 0.584962500721156f, 0.700439718141092f, 0.807354922057604f, 0.906890595608519f }; static float log2lut_frac_float[8] = { 0.169925001442312f, 0.152003093445050f, 0.137503523749935f, 0.125530882083859f, 0.115477217419936f, 0.106915203916512f, 0.0995356735509144f, 0.0931094043914815f }; inline float lin2dbLut(float x) { //10*log10(x) 3.0103*log2(x) float M, result; int xi = *(int*)&x;//interpret float as raw int number int E = (xi >> 23) - 127;//float point, the 30~23bit is exponent xi &= 0x007FFFFF;//extract the mantissa bit 22~0bit xi |= ((int)127 << 23);//set the exponent bit to 127, which actuall is 0 M = *(float*)&xi - 1;//interpret the mantissa as float M = M * 8; result = (E + log2lut_base_float[(int)M] + (M - (int)M) * log2lut_frac_float[(int)M]) * 6.020599913279624; return result; // return (log2lut(x)*6.020599913279624); } 快速计算 ...

August 18, 2026 · 4 min · 794 words · hy