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

numpy.sin模拟采样频率时101Hz采样下计算结果异常问题咨询

问题根本原因

这个现象既不是np.sin的计算缺陷,也不是float64数据类型的精度异常,本质是时间轴生成逻辑存在错误,101Hz的参数设置刚好让所有采样点落在正弦信号的过零点上,你观测到的1e-14量级结果是浮点数计算的正常舍入误差,完全符合预期。

具体问题拆解

  • 你对np.linspace的间隔计算逻辑存在误用:np.linspace(start, end, num)默认会同时包含首尾两个端点,因此相邻采样点的间隔是(end - start)/(num - 1),而非(end - start)/num。
  • 当设置采样频率为101Hz时,代码中计算的采样点数N = 1*101 = 101,调用np.linspace(0, 1, 101)生成的实际时间点间隔为1/(101-1) = 0.01s,对应的真实采样率是100Hz,并非你设定的101Hz。
  • 将时间点代入正弦公式计算:信号频率f=50Hz,每个采样点的相位为2π*50*t = 2π*50*0.01*k = π*k(k取0到100的整数),数学上sin(π*k)的精确值就是0,你看到的1e-14量级结果,只是浮点数近似表示π时的固有精度误差,不属于计算错误。

其他采样频率未触发异常的原因

其余测试采样频率下,linspace生成的点间隔不会刚好凑出π整数倍的相位:

  • 100Hz采样时,N=100,点间隔为1/99≈0.0101s,相位不会落在π的整数倍上,正弦值计算结果正常
  • 102Hz采样时,N=102,点间隔为1/101≈0.0099s,同样不会出现所有点对齐过零点的情况

修复方案

要生成和设定采样率匹配的正确时间轴,选择任意一种写法即可:

  1. 使用np.arange生成,天然不包含右边界,间隔严格等于采样周期:
    linear = np.arange(0, T, 1/i)
    
  2. 继续使用np.linspace时,关闭终点包含参数,保证点间隔为1/fs:
    N = int(T * i)
    linear = np.linspace(0, T, N, endpoint=False)
    

修复后重新运行代码,101Hz采样下的正弦信号幅值就会恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:15:31