From 97d5b680455401ec8d9997e228e2e3c7a8ddfd1d Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Mon, 21 Jan 2019 11:36:50 +0100 Subject: [PATCH] added quick and dirty decibel approximation --- utils.hh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/utils.hh b/utils.hh index 16ea615..f5165bb 100644 --- a/utils.hh +++ b/utils.hh @@ -43,7 +43,27 @@ TYPE delta(TYPE x) template TYPE decibel(TYPE v) { +#if 0 return TYPE(10) * log10(v); +#else + static constexpr TYPE + // 2*1024*10/l(10) + scale = 8894.350989378597430295120259412072085389250678859091274024013479236L, + inv1 = TYPE(1) / TYPE(1), + inv3 = TYPE(1) / TYPE(3), + inv5 = TYPE(1) / TYPE(5), + inv7 = TYPE(1) / TYPE(7), + inv9 = TYPE(1) / TYPE(9), + inv11 = TYPE(1) / TYPE(11), + inv13 = TYPE(1) / TYPE(13); + TYPE x = v; + for (int i = 0; i < 10; ++i) + x = sqrt(x); + x = (x - TYPE(1)) / (x + TYPE(1)); + TYPE xx = x * x; + return scale * x * (xx * (xx * (xx * (xx * (xx * (xx * + inv13 + inv11) + inv9) + inv7) + inv5) + inv3) + inv1); +#endif } }