From 34230e18e592684b841183784030809deef564e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20J=C3=A4rvisalo?= Date: Tue, 15 Jul 2025 17:15:49 +0300 Subject: [PATCH] Exponential smoothing FFT:n arvoille. Rauhoittaa piikkien pomppimista. --- src/fft.cpp | 3 ++- src/main.cpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/fft.cpp b/src/fft.cpp index 186c935..fd85612 100644 --- a/src/fft.cpp +++ b/src/fft.cpp @@ -71,7 +71,8 @@ void compute_fft(float* time_data, float* freq_out) { for (int i = 0; i < FFT_SIZE / 2; ++i) { float mag = sqrtf(real[i] * real[i] + imag[i] * imag[i]) / FFT_SIZE; - + //float db = 20.0f * log10f(mag + 1e-6f); // Decibels + //float normalized = (db + 60.0f) / 60.0f; // [0,1] freq_out[i] = mag; } } diff --git a/src/main.cpp b/src/main.cpp index 474a6d0..3156cf0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -189,8 +189,14 @@ int __cdecl main(int argc, char* argv[]) //maximum = max(fft_output[i], maximum); //fft_output[i] = fft_output[i] / maximum; if (i < (FFT_SIZE / 4)) // Limit uniform fft size. High frequencys contain nothing interesing. - { - fft_uniform[i] = min(1.0,fft_output[i]*20.0); + { + float gain = 50.0f; + float alpha = 0.15f; // "Hidastaa" FFT:n piikkejä + float threshhold = 0.05f; // Alin arvo mikä päästetään shaderille (vähentää "noisea") + float x_t = fft_output[i] * gain; + // Exponential smoothing kaava + // s(t) = alpha*x(t)+(1-alpha)*s(t-1) + fft_uniform[i] = (x_t < threshhold) ? 0.f : alpha*(x_t) + (1-alpha)*fft_uniform[i]; } }