Ho provato a cercare su Google e a cercarlo su Wikipedia, ma non ho ottenuto alcuna risposta oltre "è perché la frequenza del segnale di input è compresa tra due bin".
Capisco che questa è la ragione, ma ciò che non riesco a capire è perché la perdita sembra estendersi a più contenitori adiacenti anziché a un solo contenitore adiacente.
Per illustrare di cosa sto parlando, ecco alcuni dati simulati (codice alla fine del post):
Sopra è lo spettro FFT (tracciato su una scala logaritmica) di un'onda sinusoidale di frequenza 10. La frequenza di campionamento è una e il numero di campioni è 100. Il grafico è stato spostato FFT. C'è chiaramente solo un picco nel bin 10, e il resto è nell'ordine dell'errore numerico, o in giro.
Questo è lo spettro di frequenza con una frequenza generata di 10.1. Chiaramente c'è "perdita" in più contenitori oltre al bidone immediatamente adiacente.
Questa è la trama per una frequenza di 10,5.
Domanda: Perché esiste questa perdita e perché si estende a tutti gli altri contenitori, anziché al contenitore adiacente immediato?
Codice, per chiunque sia interessato (codice Python)
import numpy as np
import matplotlib.pyplot as plt
xFreq = 10.5
xSize = 100.0
xPeriod = xSize/xFreq
x = np.linspace(1,xSize,xSize)
data = np.sin(2*np.pi*x/xPeriod)
fft = np.fft.fft(data)
fft = np.fft.fftshift(fft)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(abs(fft), "o")
ax.set_yscale('log')
plt.show()
Ho cambiato il xFreq
valore da 10.0
a 10.5
, ecc.