Я пробовал гуглить и википедировать это, но я не получил никаких ответов, кроме «это потому, что частота входного сигнала находится между двумя корзинами».
Я понимаю, что это причина, но я не могу понять, почему утечка распространяется на несколько соседних бункеров, а не только на один соседний бункер.
Чтобы проиллюстрировать, о чем я говорю, вот некоторые смоделированные данные (код в конце поста):
Выше приведен спектр БПФ (построенный в логарифмическом масштабе) синусоидальной волны с частотой 10. Частота дискретизации равна единице, а число выборок равно 100. График сдвинут по БПФ. Там явно только пик в бункере 10, а остальные порядка числовой ошибки, или там около.
Это частотный спектр на сгенерированной частоте 10,1. Очевидно, что существует «утечка» в большее количество бункеров, чем в непосредственно смежный бункер.
Это сюжет для частоты 10,5.
Вопрос: Почему существует эта утечка, и почему она распространяется на все другие ячейки, а не непосредственно на соседнюю ячейку?
Код, для тех, кто заинтересован (код 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()
Я изменил xFreq
значение с 10.0
на 10.5
и т. Д.