Puede que haya literatura sobre esto, y no soy un experto, pero creo que hay un método sencillo para calcular directamente lo que quieres:
En primer lugar, la FFT no es más que un algoritmo rápido para la DFT. Para el siguiente método, tendrá que calcular directamente los coeficientes de la DFT. Recordemos la fórmula para un solo coeficiente (ligeramente modificada de Wikipedia para que coincida con lo que digo a continuación):
$$X_k := \frac{1}{N} \sum_{n=0}^{N-1} x_n e^{-\pi i k \frac{2n+1}{N}}$$
Esto se puede interpretar como una discretización de la integral (espero haberlo entendido bien):
$$Y_k := \int_0^1 y(t) e^{-2 \pi i k t} dt$$
En $x$ es un $N$ -tupla, $y$ se supone que es la función continua en $[0,1]$ que $x$ se aproxima. Cada $n=0,\dots,N-1$ está asociado al intervalo $[a_n,b_n]:=[\frac{n}{N},\frac{n+1}{N}]$ por lo que la unión de todos los intervalos es $[0,1]$ . También tiene sentido suponer que existe un $t_n\in[0,1]$ tal que $x_n = y(t_n)$ , digamos $t_n := \frac{a_n + b_n}{2}$ . (Esto es lo que he utilizado implícitamente en la primera fórmula, convirtiéndola en una aproximación de la suma del punto medio. Por favor, pregunte si esto no está claro).
Ahora, la entrada que tienes es básicamente una discretización diferente $z$ de $y$ que es un $M$ -tupla ( $M$ siendo posiblemente diferente de $N$ ), y donde $a_m$ , $b_m$ y $t_m$ para $m=0,\dots,M-1$ vienen dadas por su variable timestep. (Usted mismo tiene que decidir si se dan los límites del intervalo o los puntos de medición; sin embargo, tiene que asegurarse de que $a_0=0$ y $b_{M-1}=1$ .) Lo que necesitas es una suma que discretice adecuadamente la integral anterior, que sería (esperemos, de nuevo):
$$Z_k := \sum_{m=0}^{M-1} (b_m-a_m) z_m e^{-2 \pi i k t_m}$$
Si el paso de tiempo es completamente variable, se pueden obtener coeficientes distintos de cero para valores arbitrariamente grandes. $k$ pero puedes dejar de calcular donde quieras, por supuesto.
Ahora bien, calcular estas sumas no es tan rápido como una FFT, pero hay varias cosas que se pueden hacer para que sea computacionalmente factible. Lo más importante es calcular los senos y cosenos sólo una vez para cada $m$ es decir, iterar sobre $m$ a nivel exterior, no $k$ . Debe precalcular las tablas seno/coseno si tiene una "resolución de tiempo" fija de la que cada paso de tiempo es un múltiplo; de lo contrario, utilice implementaciones seno/coseno que favorezcan la velocidad frente a la precisión.
Si quieres solapamiento entre "ventanas" DFT consecutivas (no estoy seguro de si esta es la palabra correcta aquí), hay una manera de reutilizar la parte de cada suma que está en ambas ventanas. Otra forma de reducir la sobrecarga de tiempo es utilizar diferentes longitudes de ventana para cada coeficiente, lo que le da una resolución de frecuencia variable (por ejemplo, logarítmica). No tengo tiempo para explicar esto ahora, pero puedes enviarme un correo para más detalles a SebastianR@gmx.de si realmente quieres implementar esto.