You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python的傅里叶变换分析:提频至100Hz后绘图异常

解决FFT分析100Hz信号异常的问题

哦,这个问题我太熟了——这是典型的采样混叠问题,完全是因为违反了奈奎斯特采样定理导致的!

问题根源分析

先看你原来的采样设置:

x = np.linspace(0,5,100)

总时长5秒,只采了100个点,算下来采样率 Fs = 100/5 = 20Hz。根据奈奎斯特采样定理,采样率必须至少是目标信号频率的2倍,才能准确还原信号。你的目标频率是100Hz,那采样率至少得200Hz才行,但你现在只有20Hz,远低于要求,高频信号会被“折叠”到低频区域,导致FFT结果完全失真。

解决方案:提高采样率

只需要增加采样点数,让采样率满足 Fs > 2*100 = 200Hz 即可。比如我们把采样点数提高到10000个,这样采样率就变成了2000Hz,远高于要求的最低值。

修改后的完整代码:

import numpy as np
import matplotlib.pyplot as plt

# 5秒内采样10000个点,采样率Fs=2000Hz(满足奈奎斯特准则)
x = np.linspace(0, 5, 10000)
# 100Hz的正弦信号
y = np.sin(2*np.pi*100*x)

# 傅里叶变换
f = np.fft.fft(y)
# 计算频率轴
freq = np.fft.fftfreq(len(y), d=x[1]-x[0])

# 只绘制正频率部分(FFT结果对称,正频率足够说明问题)
positive_freq_mask = freq > 0
plt.plot(freq[positive_freq_mask], abs(f[positive_freq_mask])**2)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Power')
plt.title('FFT of 100Hz Sine Wave')
plt.show()

额外注意事项

  • 采样率最好留有余量(比如是信号频率的4-5倍),避免因为信号边缘或采样误差导致的混叠
  • FFT的结果是对称的,绘制时只展示正频率部分会更清晰,避免冗余信息
  • 如果不能大幅提高采样率,也可以先对信号进行低通滤波,但前提是滤波截止频率低于奈奎斯特频率,不过这只适用于有多余高频噪声的场景,对你这种纯100Hz信号来说,提高采样率是最直接有效的办法

内容的提问来源于stack exchange,提问作者Ayumu Kasugano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:39:03