fft window functions back to correct scaling - no need need for post scaling step

This commit is contained in:
dwarning 2024-01-24 23:16:44 +01:00
parent d92569742f
commit 8aa20cfc98
1 changed files with 24 additions and 13 deletions

View File

@ -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;