在伪谱法的Python实现中,使用了 numpy.fft.rfft
函数实现了一个由实数到复数域的快速傅里叶变换。本文介绍其与 numpy.fft.fft
的区别。
阅读文档可知,对于numpy.fft.fft
: Compute the one-dimensional discrete Fourier Transform.,即计算一维离散傅里叶变换。
而对于 numpy.fft.rfft
则是:Compute the one-dimensional discrete Fourier Transform for real input. 计算实数输入的一维离散傅里叶变换。
看起区别不大,那么对于同一组实数输入有什么区别呢?尝试以下代码:
time = np.arange(0, 10, 0.01)
x = np.sin(2 * np.pi * 1 * time)
plt.figure(figsize=[6,2])
plt.plot(time,x)
plt.show()
y = np.fft.fft(x)
yr = np.fft.rfft(x)
plt.figure()
plt.subplot(211)
plt.plot(np.abs(y))
mst()
plt.subplot(212)
plt.plot(np.abs(yr))
mst()
plt.show()
得到输出:
可以看到,对于 numpy.fft.fft
(上图),因为实函数的输入,输出是一对共轭对称的序列。
而numpy.fft.rfft
(下图) 输出的则是去掉对称后更接近理解中的频域信息的序列。
同样的,因为因为二者的采样率皆相同,故 rfft
的序列长度为 fft
的一半,即为输入序列的一半。