Hay varias partes en esta respuesta. Baso esta respuesta en las características del algoritmo FFT. No estoy familiarizado con la implementación específica de LTSpice, pero el comportamiento que informa es exactamente lo que esperaría.
Las implementaciones de FFT más comunes operan con una potencia entera de 2 puntos de datos. Por lo tanto, la mayoría de las implementaciones aumentarían sus 1,000,000 de puntos de datos a 1,048,576 puntos de datos y realizarían la FFT en eso. Tenga en cuenta que esta longitud no es un número entero de ondas sinusoidales.
Existen métodos alternativos de transformación de Fourier que descomponen los datos de manera diferente. Por lo general, se denominan métodos de Transformación discreta de Fourier (DFT) y son más lentos y considerablemente más complejos de implementar. Casi nunca los he encontrado en aplicaciones prácticas. La FFT es una implementación específica de DFT que requiere que el número de puntos de datos sea una potencia entera de 2 (o, a veces, una potencia entera de 4).
Por lo tanto, supongo que LTSpice está rellenando sus datos a 1,048,576 puntos de datos, los 48,576 valores de datos agregados al final contienen una constante.
Ahora puede ver el problema: su búfer de 1,048,576 muestras tiene 1,000 ondas sinusoidales, cada una de 1,000 muestras, seguido de 48,576 valores constantes. Esto no puede representarse por una suma de ondas sinusoidales de frecuencia de 1 kHz. En cambio, los resultados de FFT muestran los valores de alta frecuencia adicionales necesarios para reconstruir su señal.
Para determinar si este es el problema, cree un búfer de 1.048.576 muestras que contenga una onda sinusoidal con un período de 1.024 muestras. Las altas frecuencias deben reducirse considerablemente en magnitud.
Ahora, en cuanto al efecto de aplicar una ventana:
El algoritmo FFT conceptualmente "envuelve" los datos, por lo que el último punto de los datos de entrada es seguido por el primer punto de los datos de entrada. Es decir, la FFT se calcula como si los datos fueran infinitos, repetidos circularmente, como un vector con la secuencia: x [0], x [1], ..., x [1048574], x [1048575], x [ 0], x [1], ...
Este ajuste puede resultar en una transición de paso entre el último punto en el búfer de datos y el primer punto. Esta transición de paso genera resultados FFT con grandes contribuciones (espurias) de altas frecuencias. El propósito de una ventana es eliminar este problema. La función de ventana va a cero en ambos extremos, por lo que en su caso, w [0] yw [999999] serían ambos cero. Cuando los datos se multiplican por la ventana, los valores se vuelven cero al principio y al final, por lo que no hay transición de paso en el ajuste.
La función de ventana que aplica altera el contenido de frecuencia del búfer, elige una función que presente una compensación aceptable. Un gaussiano es un buen punto de partida. Para cualquier aplicación práctica en la que no pueda controlar con precisión el contenido de frecuencia de los datos, deberá aplicar una función de ventana para eliminar la transición de paso implícita debido a la longitud de los datos.
Problemas residuales:
Hay otra fuente potencial de ruido espectral de alta frecuencia en la FFT. El efecto aumenta con la longitud de FFT, y podría ser algo que se puede ver en algunos casos en 1,000,000 de puntos de datos.
El bucle interno del algoritmo FFT utiliza los puntos alrededor de un círculo en el plano complejo: e ^ (i * theta), donde el algoritmo itera 'theta' de 0 a 2 * pi en pasos sucesivamente más finos, hasta el número de puntos en el FFT. Es decir, si calcula una FFT en 1.048.576 muestras, en una de las iteraciones del bucle externo, el bucle interno calculará e ^ (i * theta), donde theta = 2 * pi * n / N, donde N es 1.048.576 , iterando n de 0 a 1.048.575. Esto se hace mediante el método obvio de multiplicar sucesivamente por e ^ (i * 2 * pi / N).
Puede ver el problema: a medida que N se hace grande, e ^ (i * 2 * pi / N) se vuelve muy cercano a 1, y se multiplica N veces. Con punto flotante de doble precisión, los errores son pequeños, pero creo que puede ver el ruido de fondo resultante si se mira con cuidado. Con punto flotante de precisión simple, en 1,000,000 de puntos de datos, el cálculo de FFT produce un ruido de fondo significativo.
Existen técnicas alternativas para calcular e ^ (i * theta) que eliminan este problema, pero la implementación es más compleja. Solo he tenido que crear tal implementación una vez.