我正在学习如何使用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))
答案 0 :(得分:3)
你能告诉我如何摆脱正常化因素,或者我是否以不同方式失败?
为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 的整数。