numpy 傅里叶变换产生意想不到的结果
numpy Fourier transformation produces unexpected results
我目前正在学习傅立叶变换并使用 Python 来尝试它。
我这里有一个代码片段:
x = np.arange(0,50,0.1)
T = 5
y = np.sin(T*np.pi*x)
freq = np.fft.rfftfreq(x.size)
y_ft = np.fft.rfft(y)
plt.plot(freq, np.abs(y_ft))
它生成如下正确的图表:
但是当我把T改成10的时候,图表是这样的:
我原以为我会得到一个类似于第一个峰值右移的图表,因为我只是扩大了循环时间。
为什么增加循环时间会产生如此意想不到的结果?
您正在对信号进行有效采样。使用您的代码,您采样的频率是 1/0.1 或 10 rad/second。你的第一个正弦曲线的频率正好在 Nyquist frequency (5 rad/second) 上。你的第二个正弦波的频率超出了奈奎斯特,因此你的信号没有被正确采样。解决方案:增加采样频率(例如x = np.arange(0, 50, 0.01)
)。
看看你的 T=10 信号在绘制时的样子(你可以看到它不像采样点处的单个正弦曲线):
我目前正在学习傅立叶变换并使用 Python 来尝试它。
我这里有一个代码片段:
x = np.arange(0,50,0.1)
T = 5
y = np.sin(T*np.pi*x)
freq = np.fft.rfftfreq(x.size)
y_ft = np.fft.rfft(y)
plt.plot(freq, np.abs(y_ft))
它生成如下正确的图表:
但是当我把T改成10的时候,图表是这样的:
我原以为我会得到一个类似于第一个峰值右移的图表,因为我只是扩大了循环时间。
为什么增加循环时间会产生如此意想不到的结果?
您正在对信号进行有效采样。使用您的代码,您采样的频率是 1/0.1 或 10 rad/second。你的第一个正弦曲线的频率正好在 Nyquist frequency (5 rad/second) 上。你的第二个正弦波的频率超出了奈奎斯特,因此你的信号没有被正确采样。解决方案:增加采样频率(例如x = np.arange(0, 50, 0.01)
)。
看看你的 T=10 信号在绘制时的样子(你可以看到它不像采样点处的单个正弦曲线):