From a0dc0bb60875ed4d51af5b1368071626881de2a2 Mon Sep 17 00:00:00 2001 From: dwarning Date: Tue, 3 Mar 2026 09:55:57 +0100 Subject: [PATCH] Special Nyquist scaling only for even length --- src/frontend/com_fft.c | 13 ++++++++----- src/maths/cmaths/cmath4.c | 7 ++++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/frontend/com_fft.c b/src/frontend/com_fft.c index 864bf8bb9..b141c8c29 100644 --- a/src/frontend/com_fft.c +++ b/src/frontend/com_fft.c @@ -185,9 +185,10 @@ com_fft(wordlist *wl) fdvec[i][j].cx_real = out[j][0]/scale; fdvec[i][j].cx_imag = out[j][1]/scale; } - fdvec[i][fpts-1].cx_real = out[fpts-1][0]/scale/2.0; - fdvec[i][fpts-1].cx_imag = 0.0; - + if (length % 2 == 0) { + fdvec[i][fpts-1].cx_real = out[fpts-1][0]/scale/2.0; + fdvec[i][fpts-1].cx_imag = 0.0; + } } fftw_destroy_plan(plan_forward); @@ -425,8 +426,10 @@ com_psd(wordlist *wl) if (!finite(noipower)) break; } - fdvec[i][fpts-1].cx_real = out[fpts-1][0]*out[fpts-1][0]/intres; - fdvec[i][fpts-1].cx_imag = 0; + if (length % 2 == 0) { + fdvec[i][fpts-1].cx_real = out[fpts-1][0]*out[fpts-1][0]/intres; + fdvec[i][fpts-1].cx_imag = 0; + } noipower += fdvec[i][fpts-1].cx_real; #else /* Green's FFT */ diff --git a/src/maths/cmaths/cmath4.c b/src/maths/cmaths/cmath4.c index b40c29cac..427a21dc3 100644 --- a/src/maths/cmaths/cmath4.c +++ b/src/maths/cmaths/cmath4.c @@ -781,9 +781,10 @@ cx_fft(void *data, short int type, int length, int *newlength, short int *newtyp outdata[i].cx_real = out[i][0]/scale; outdata[i].cx_imag = out[i][1]/scale; } - outdata[fpts-1].cx_real = out[fpts-1][0]/scale/2.0; - outdata[fpts-1].cx_imag = 0.0; - + if (length % 2 == 0) { + outdata[fpts-1].cx_real = out[fpts-1][0]/scale/2.0; + outdata[fpts-1].cx_imag = 0.0; + } fftw_free(ind); #else /* Green's FFT */