Obtención de diferentes resultados FFT en LTspice en comparación con MATLAB y Python

3

Tengo un 10 segundos de datos muestreados. La tasa de muestreo es 1kHz. Subí el archivo de texto que es un tiempo de dos columnas frente a los datos de voltaje; se puede descargar aquí .

Realicé FFT en MATLAB, Python y LTspice. MATLAB y Python están de acuerdo cuando grabo pero obtengo un resultado diferente en LTspice.

Aquí debajo está el código que uso y el gráfico con MATLAB:

ts = 0.001; %sampling interval (sec)
Fs = 1./ts;    %sampling frequency (Hz)
L = length(y); %number of samples
complex = fft(y)/L; % complex signals
f = 0 : Fs/L : Fs/2; % frequency bins
amplitude = 2*abs(complex(1:L/2+1)); % amplitudes
pow = (amplitude).^2/2*(L/Fs); % power
semilogx(f,20*log10(amplitude),'-b');
grid on;
xlabel('Frequency [Hz]')
ylabel('dB')

AcontinuaciónsemuestraelcódigoqueusoylatramaconPython:

plt.figure()y=v_inT=1/sampling_rateN=len(y)yf=scipy.fftpack.fft(y)xf=np.linspace(0.0,1.0/(2.0*T),N/2)amplitude=2.0/N*np.abs(yf[:N//2])pow=(N/sampling_rate)*amplitude*amplitude/2plt.semilogx(xf,20*np.log10(amplitude),'b')plt.grid()plt.xlabel('Frequency[Hz]')plt.ylabel('dB')

Yfinalmente,transmitílaseñaldelarchivodetextoalgeneradordeseñalesenLTspice(usandolaopcióndearchivoPWL)yrealicéFFTyobtengoelsiguientegráfico:

MATLAB y Python muestran el punto máximo de db como -46.2dB, pero Ltspice muestra este punto como -49.3dB. Esta no es una diferencia muy pequeña.

¿Cuál podría ser la razón de esta diferencia? ¿Estoy haciendo algo mal en MATLAB y Python al evaluar FFT o LTspice está mal?

    
pregunta cm64

1 respuesta

4

A pesar de los tiempos fijos proporcionados por el archivo PWL, LTspice es un motor SPICE, simulador analógico, lo que significa que la simulación no tendrá ni siquiera pasos. En Matlab y Python, puede contabilizar correctamente las muestras exactas que se describen en la definición. LTspice necesita simularlo, por lo que, como todos los motores SPICE analógicos, tiene un tiempo irregular.

Puedes aumentar el paso del tiempo y / o agregar .opt plotwinsize=0 , numdgt=15 , lo que mejorará el resultado. A ver si eso ayuda.

[editar] Sin embargo, no importa lo que hagas, LTspice mostrará los valores RMS en la ventana FFT (a diferencia del comando .four ). [/ edit]

Este es mi intento usando lo anterior (paso de tiempo 25u):

ParecebastantecercanoalaversióndePython.EnLTspiceFFTusé24000puntosyconfiguré"Número de puntos" en 1 (suavizado polinomial).

    
respondido por el a concerned citizen

Lea otras preguntas en las etiquetas