¿Cuál es la basura al final de mi FFT en LTSPICE?


8

¿Por qué las FFT tienen basura en el extremo de alta frecuencia? Supongamos que voy a simular este circuito en LTSPICE:

esquemático

simular este circuito : esquema creado con CircuitLab

Donde los parámetros de seno y simulación LTSPICE son:

SINE(0 1 1K 0 0 0 1000)
.tran 1 startup

Luego le pido a LTSPICE que me dé una FFT sin ventana y 1,000,000 de puntos: FFT

¿Para qué sirve toda la basura al final? Esperaría solo un pico a 1KHz, no uno adicional a 3KHz, etc. ¿Le sucede esto a todas las FFT? ¿Qué controla los picos que obtienes después de tu fundamental?


¿Realmente puedes identificar las otras frecuencias? ¿Son todos múltiplos impares de 1 kHz? En ese caso, algo está distorsionando su seno "perfecto" para que parezca más "rectangular", y podría ser la precisión numérica que ltspice usa internamente.
Marcus Müller

1
No miraría por debajo de -100dB pero comenzaría con el 3er armónico, no parece que haya una ventana problemática
Tony Stewart Sunnyskyguy EE75

1
Podría tener algo que ver con la compresión de forma de onda. Consulte esta otra pregunta para obtener más detalles y cómo verificar si ese es el caso. electronics.stackexchange.com/questions/338292/…
mkeith

No puedo reproducir estos datos, mi versión de LTspice quiere más de 1e6 puntos simulados para obtener una FFT de 1e6 puntos, es decir, un paso de tiempo máximo de 1e-6.
ruidosos

¿Necesita cuasi pico para que coincida con el espectro de audio para la modulación BW?
Tony Stewart Sunnyskyguy EE75

Respuestas:


4

La respuesta de @ D.Brown ya es muy buena, por lo que solo agregaré algunas cosas menores. El algoritmo de LTspice es personalizado y acepta un número de puntos sin potencia de dos. Esto no significa que la resolución no sea importante. Aún así, 1kHz sobre 1s significa un número entero de períodos, por lo que no hay necesidad de ventanas o suavizado binomial para reducir el ruido (ajustes en la ventana FFT). Sin embargo, lo que @mkeith mencionó es que, por defecto, LTspice utiliza una compresión de forma de onda (300 puntos por pantalla, IIRC), lo que significa que cualquier otro punto se reduce y la resolución de la forma de onda se ve afectada. La solución para esto es un paso de tiempo más estricto o .option plotwinsize=0el último que elimina la compresión de la forma de onda. Esto es lo que sucede cuando se agrega esta opción, pero no se impone ningún paso de tiempo:

defecto

Esto es probablemente lo que ves, más o menos, entonces, ¿cuál es la opción? Está simulando una forma de onda de 1 kHz en un período de tiempo de 1 s . El circuito, si se le puede llamar así, es una fuente y carga simples, y la fuente es armónica, una tarea fácil para el solucionador de matrices, por lo que LTspice, como todos los motores SPICE, si siente que la derivada es suave, duplicará su paso de tiempo para no ralentizar la simulación, y seguirá duplicándola hasta alcanzar algún límite interno, momento en el cual volará sobre la simulación. El resultado es una forma de onda gruesa, que ni siquiera plotwinsizepuede mejorar demasiado.

La otra cura, el paso temporal impuesto, ahora se necesita para mejorar la resolución. Aquí está el resultado con un 1μs paso de tiempo:

10u

Es mejor, pero está realizando un FFT de 1 millón de puntos, lo que requiere, quizás no sorprendentemente, 1 millón de puntos de tiempo, por lo que el paso de tiempo máximo debe establecerse en 1μs. Además, la opción numdgtse establece en un valor> 7 que, según el libro, permite una precisión doble:

ultra

Todavía hay un piso de ruido ligeramente tambaleante, pero el nivel ahora es inferior a -250dB. Esto está cerca de la precisión de la máquina. Hacer el paso de tiempo 1/1048576 (2 ^ -20) no mejora los resultados (puede verificarlo usted mismo).

Al final, depende de cuánto ruido de piso esté dispuesto a aceptar. El comentario de @Tony Stewart es de una sensibilidad práctica, por debajo de 100 ~ 120dB significa menos de 1 ~ 10μV a 1V, que es todo un logro.


Gracias por trabajar en esta respuesta. Como comentario aparte, me ha destacado que LTspice funciona de manera drásticamente diferente en macOS en comparación con Windows. (Supongo que esta es la versión de Windows)
ruidosos

@loudnoises Sí, aunque bajo Wine, no es que importe. He visto algunos puntos, aquí y allá, en Yahoo LTspice Group, pero como no soy un usuario de Mac, no insistí en ellos. Podría ser que también es una cuestión de configuración, oculta bajo el capó diferente, pero realmente, no estoy seguro.
un ciudadano preocupado

¡Excelente! Ahora, mirando el archivo de ayuda de LTSPICE, debería haber notado esto: "LTspice utiliza un algoritmo FFT patentado que permite un número arbitrario de puntos de datos, es decir, sin limitarse a una potencia de 2. Cuando espera hacer FFT de su simulación datos, es probable que desee desactivar la compresión de forma de onda, estipular un paso de tiempo máximo y posiblemente incluso utilizar el formato de archivo de forma de onda de doble precisión para reducir el ruido de fondo numérico ".
watkipet

@un ciudadano preocupado: cuando dijo: "Aquí está el resultado con un paso de tiempo de 1 μs", ¿quiso decir: "Aquí está el resultado con un paso de tiempo de 10 μs"?
watkipet

@loudnoises Estoy usando la versión nativa de macOS. Pero sí veo los mismos resultados que @a ciudadano preocupado.
watkipet

15

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.


Con respecto a DFT versus FFT, el menú del botón derecho en LTSPICE lo llama "FFT" mientras que el diálogo de configuración lo llama "DFFT". Ahora, leyendo el archivo de ayuda, veo lo que un ciudadano preocupado mencionó acerca de que LTSPICE acepta un número de puntos sin poder de dos.
watkipet

0

Razón posible: -

Cuando dibuja una onda transitoria en un simulador, se interpola entre cálculos reales para minimizar el trabajo duro que se está realizando y permitir que se muestre un resultado más rápido en la pantalla.

La configuración predeterminada para el paso de tiempo máximo en LTSpice podría ser 100 us, por lo que entre estos puntos tiene resultados interpolados, es decir, no son perfectos y contribuyen a la distorsión vista como armónicos en el FFT.

Intente configurar su paso de tiempo máximo para que sea mucho más pequeño de lo que es actualmente y vea qué sucede.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.