Browse Source

window weightings between 0 and 1 for fft vector function and command

pre-master-46
dwarning 2 years ago
parent
commit
9e41383dd9
  1. 26
      src/maths/fft/fftext.c

26
src/maths/fft/fftext.c

@ -114,31 +114,33 @@ fft_windows(char *window, double *win, double *time, int length, double maxt, do
for (i = 0; i < length; i++) {
if (maxt-time[i] > span)
win[i] = 0.0;
else if (maxt-time[i] < span/2)
win[i] = 2 * (maxt-time[i]) / span;
else
win[i] = 1.0 - 2.0 * fabs((time[i]-maxt)-span/2) / span;
win[i] = 2.0 - 2 * (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] = 1.0 - cos(2*M_PI*(time[i]-maxt)/span);
win[i] = 0.5 - 0.5*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] = 1.0 - 0.46/0.54*cos(2*M_PI*(time[i]-maxt)/span);
win[i] = 0.54 - 0.46*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] = 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);
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);
}
}
else if (eq(window, "flattop"))
@ -146,16 +148,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] = 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);
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);
}
}
else if (eq(window, "gaussian")) {
sigma = 1.0/order;
scale = 0.83/sigma;
scale = 0.5/sigma;
for (i = 0; i < length; i++) {
if (maxt-time[i] > span)
win[i] = 0;

Loading…
Cancel
Save