我正在学习如何将numpy用于快速傅立叶变换微分。在下面的代码中,我创建了一个简单的正弦函数,并尝试获取余弦。结果显示在图像中,似乎有一个归一化因子,尽管阅读了文档我还是不明白,这使我无法获得正确的结果。

您能否告诉我如何摆脱标准化因素,或者我是否以其他方式失败?
还请解释为什么数组长度为奇数时不存在奈奎斯特频率。

x = np.arange(start=-300., stop=300.1, step=0.1)
sine = np.sin(x)

Y = np.fft.rfft(a=sine, n=len(x))
L = 2.*np.pi #period
N = size(Y)

for k, y in enumerate(Y):
    Y[k] *= 2.*np.pi*1j*k/L

# if N is even, the last entry is the Nyquist frequency.
#if N is odd, there it is not there.
if N%2 == 0:
    Y[-1] *= 0.

cosine = np.fft.irfft(a=Y, n=len(x))


python - 通过numpy FFT进行数值微分-LMLPHP

最佳答案

您能否告诉我如何摆脱标准化因素,或者我是否以其他方式失败?


为术语np.exp()添加2.*np.pi*1j*k/L。该项似乎是相位旋转量,因此其范数应为1。

for k in range(N):
    Y[k] *= np.exp(2.*np.pi*1j*k/L)



  还请解释为什么数组长度为奇数时不存在奈奎斯特频率。


这是离散傅立叶变换的本质。简而言之,当采样点的数量N为奇数时,不存在等于N / 2的整数。

关于python - 通过numpy FFT进行数值微分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48133518/

10-10 01:11