在
伪谱法的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
的一半,即为输入序列的一半。