From 8aa20cfc982d13d555e99c04d1ffc23cd2dfdd7b Mon Sep 17 00:00:00 2001 From: dwarning Date: Wed, 24 Jan 2024 23:16:44 +0100 Subject: [PATCH] fft window functions back to correct scaling - no need need for post scaling step --- src/maths/fft/fftext.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/maths/fft/fftext.c b/src/maths/fft/fftext.c index b5695ce62..fd0be8863 100644 --- a/src/maths/fft/fftext.c +++ b/src/maths/fft/fftext.c @@ -115,32 +115,43 @@ fft_windows(char *window, double *win, double *time, int length, double maxt, do if (maxt-time[i] > span) win[i] = 0.0; else if (maxt-time[i] < span/2) - win[i] = 2 * (maxt-time[i]) / span; + win[i] = 4.0 * (maxt-time[i]) / span; else - win[i] = 2.0 - 2 * (maxt-time[i]) / span; + win[i] = 4.0 - 4.0 * (maxt-time[i]) / span; } else if (eq(window, "hann") || eq(window, "hanning") || eq(window, "cosine")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) win[i] = 0.0; else - win[i] = 0.5 - 0.5*cos(2*M_PI*(time[i]-maxt)/span); + win[i] = 1.0 - cos(2*M_PI*(time[i]-maxt)/span); } else if (eq(window, "hamming")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) win[i] = 0.0; else - win[i] = 0.54 - 0.46*cos(2*M_PI*(time[i]-maxt)/span); + win[i] = 1.0 - 0.46/0.54*cos(2*M_PI*(time[i]-maxt)/span); } else if (eq(window, "blackman")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { - win[i] = 0.42; - win[i] -= 0.50*cos(2*M_PI*(time[i]-maxt)/span); - win[i] += 0.08*cos(4*M_PI*(time[i]-maxt)/span); + win[i] = 1.0; + win[i] -= 0.50/0.42*cos(2*M_PI*(time[i]-maxt)/span); + win[i] += 0.08/0.42*cos(4*M_PI*(time[i]-maxt)/span); + } + } + else if (eq(window, "blackmanharris")) + for (i = 0; i < length; i++) { + if (maxt-time[i] > span) { + win[i] = 0; + } else { + win[i] = 1.0; + win[i] -= 0.48829/0.35875*cos(2*M_PI*(time[i]-maxt)/span); + win[i] += 0.14128/0.35875*cos(4*M_PI*(time[i]-maxt)/span); + win[i] -= 0.01168/0.35875*cos(6*M_PI*(time[i]-maxt)/span); } } else if (eq(window, "flattop")) @@ -148,16 +159,16 @@ fft_windows(char *window, double *win, double *time, int length, double maxt, do if (maxt-time[i] > span) { win[i] = 0; } else { - win[i] = 0.21557895; - win[i] -= 0.41663158*cos(2*M_PI*(time[i]-maxt)/span); - win[i] += 0.277263158*cos(4*M_PI*(time[i]-maxt)/span); - win[i] -= 0.083578947*cos(6*M_PI*(time[i]-maxt)/span); - win[i] += 0.006947368*cos(8*M_PI*(time[i]-maxt)/span); + win[i] = 1.0; + win[i] -= 1.93*cos(2*M_PI*(time[i]-maxt)/span); + win[i] += 1.29*cos(4*M_PI*(time[i]-maxt)/span); + win[i] -= 0.388*cos(6*M_PI*(time[i]-maxt)/span); + win[i] += 0.032*cos(8*M_PI*(time[i]-maxt)/span); } } else if (eq(window, "gaussian")) { sigma = 1.0/order; - scale = 0.5/sigma; + scale = 0.83/sigma; for (i = 0; i < length; i++) { if (maxt-time[i] > span) win[i] = 0;