Sto cercando di ottenere un po 'di controllo sulla funzionalità fft di Python, e una delle cose strane su cui sono incappato è che non sembra applicarsi lo Parseval's theorem, dato che dà una differenza di circa 50 ora, mentre dovrebbe essere 0.Teorema di Parseval in Python
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack as fftpack
pi = np.pi
tdata = np.arange(5999.)/300
dt = tdata[1]-tdata[0]
datay = np.sin(pi*tdata)+2*np.sin(pi*2*tdata)
N = len(datay)
fouriery = abs(fftpack.rfft(datay))/N
freqs = fftpack.rfftfreq(len(datay), d=(tdata[1]-tdata[0]))
df = freqs[1] - freqs[0]
parceval = sum(datay**2)*dt - sum(fouriery**2)*df
print parceval
plt.plot(freqs, fouriery, 'b-')
plt.xlim(0,3)
plt.show()
sono abbastanza sicuro che si tratta di un fattore di normalizzazione, ma non mi sembra di essere in grado di trovare, come di tutte le informazioni che posso trovare su questa funzione è il scipy.fftpack.rfft documentation.
Grazie per la correzione! – unutbu
Da notare: in parte questo è un aspetto del problema generale che i numeri in virgola mobile non sono la stessa cosa dei numeri reali. – Marcin
@Marcin Sì, cambiato '==' in a '-' nel segno di spunta ... – Jaime