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

使用Python绘制正弦信号的困惑:不同频率信号图为何一致?

问题原因与解决方案

你的问题核心是**采样定理(奈奎斯特准则)**和时间范围设置不合理导致的信号混叠:

为什么两个信号看起来完全一致?

你设置的时间范围是0到100秒,采样点共1000个,计算下来采样率仅为 1000/100 = 10Hz。根据奈奎斯特准则,要正确还原信号,采样率必须至少是信号最高频率的2倍。对于10MHz(10^7 Hz)的信号,需要至少20MHz的采样率,但你的采样率只有10Hz,远低于要求,因此高频信号发生严重混叠,最终呈现出和10Hz信号一样的伪波形。

同时,100秒的时间范围对于10MHz的信号来说太长了——这个信号在100秒内会振荡10亿次,你的1000个采样点完全无法捕捉它的变化,只能得到随机的采样值,而这些值在视觉上和低频信号重合。

修正后的代码示例

要正确绘制10MHz的正弦信号,你需要缩小时间窗口,只截取几个周期的时间,同时保证采样率足够:

import numpy as np
import matplotlib.pyplot as plt

# 对于10MHz信号,取10个周期的时间:周期T=1/10e6=1e-7秒,10个周期就是1e-6秒
t = np.linspace(0, 1e-6, 1000)  # 时间范围0到1微秒,1000个采样点,采样率1e9Hz,远高于奈奎斯特频率

# 生成信号
signal1 = np.sin(2 * np.pi * 10 * t)  # 10Hz信号,在1微秒内几乎是一条直线
signal2 = np.sin(2 * np.pi * 10e6 * t)  # 10MHz信号,能看到完整的10个周期

# 绘图
plt.figure()
plt.plot(t, signal1, c='r', label='S1 (10Hz)')
plt.plot(t, signal2, c='b', label='S2 (10MHz)')
plt.ylabel('信号强度')
plt.xlabel('时间 (s)')
plt.legend()
plt.show()

如果想同时对比低频和高频信号的差异,可以分别设置合适的时间范围:

  • 对于10Hz信号,用0到1秒的时间范围就能看到完整的10个周期
  • 对于10MHz信号,用0到1e-6秒的时间范围看到10个周期

额外提醒

  • 绘制高频信号时,永远不要用过长的时间范围,否则采样点无法捕捉信号细节
  • 时刻牢记奈奎斯特采样准则:采样率 ≥ 2×信号最高频率,否则必然出现混叠失真

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:42:42