parent
19768a1cb6
commit
1af7004d7a
@ -1,50 +0,0 @@ |
|||||||
/* ----------------------------------------------------------------------
|
|
||||||
* https://community.arm.com/tools/f/discussions/4292/cmsis-dsp-new-functionality-proposal/22621#22621
|
|
||||||
* Fast approximation to the log2() function. It uses a two step |
|
||||||
* process. First, it decomposes the floating-point number into |
|
||||||
* a fractional component F and an exponent E. The fraction component |
|
||||||
* is used in a polynomial approximation and then the exponent added |
|
||||||
* to the result. A 3rd order polynomial is used and the result |
|
||||||
* when computing db20() is accurate to 7.984884e-003 dB. |
|
||||||
** ------------------------------------------------------------------- */ |
|
||||||
|
|
||||||
float log2f_approx_coeff[4] = {1.23149591368684f, -4.11852516267426f, 6.02197014179219f, -3.13396450166353f}; |
|
||||||
|
|
||||||
float log2f_approx(float X) |
|
||||||
{ |
|
||||||
float *C = &log2f_approx_coeff[0]; |
|
||||||
float Y; |
|
||||||
float F; |
|
||||||
int E; |
|
||||||
|
|
||||||
// This is the approximation to log2()
|
|
||||||
F = frexpf(fabsf(X), &E); |
|
||||||
|
|
||||||
// Y = C[0]*F*F*F + C[1]*F*F + C[2]*F + C[3] + E;
|
|
||||||
Y = *C++; |
|
||||||
Y *= F; |
|
||||||
Y += (*C++); |
|
||||||
Y *= F; |
|
||||||
Y += (*C++); |
|
||||||
Y *= F; |
|
||||||
Y += (*C++); |
|
||||||
Y += E; |
|
||||||
return(Y); |
|
||||||
} |
|
||||||
|
|
||||||
// https://codingforspeed.com/using-faster-exponential-approximation/
|
|
||||||
inline float expf_approx(float x) { |
|
||||||
x = 1.0f + x / 1024; |
|
||||||
x *= x; x *= x; x *= x; x *= x; |
|
||||||
x *= x; x *= x; x *= x; x *= x; |
|
||||||
x *= x; x *= x; |
|
||||||
return x; |
|
||||||
} |
|
||||||
|
|
||||||
inline float unitToDb(float unit) { |
|
||||||
return 6.02f * log2f_approx(unit); |
|
||||||
} |
|
||||||
|
|
||||||
inline float dbToUnit(float db) { |
|
||||||
return expf_approx(db * 2.302585092994046f * 0.05f); |
|
||||||
} |
|
Loading…
Reference in new issue