From 69194df4d9a2f985423eca7d44c3d3292cc8baad Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 4 Jun 2019 14:41:50 +0200 Subject: Transfer Fn: skip phase calculation for silence and small signal levels This fixes some division by zero as well as rounding issues for signals < -160dBFS, resulting in garbage being displayed.. --- gtk2_ardour/fft.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'gtk2_ardour/fft.cc') diff --git a/gtk2_ardour/fft.cc b/gtk2_ardour/fft.cc index 2d44328759..e07aed6c59 100644 --- a/gtk2_ardour/fft.cc +++ b/gtk2_ardour/fft.cc @@ -79,12 +79,15 @@ FFT::analyze(ARDOUR::Sample *input, WindowingType windowing_type) for (uint32_t i = 1; i < _data_size - 1; ++i) { power = (Re * Re) + (Im * Im); - phase = atanf(Im / Re); - - if (Re < 0.0 && Im > 0.0) { - phase += M_PI; - } else if (Re < 0.0 && Im < 0.0) { - phase -= M_PI; + if (power < 1e-16) { + phase = 0; + } else { + phase = atanf (Im / Re); + if (Re < 0.0 && Im > 0.0) { + phase += M_PI; + } else if (Re < 0.0 && Im < 0.0) { + phase -= M_PI; + } } _power_at_bin[i] += power; -- cgit v1.2.3