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

加速度计数据FFT仅在0Hz出现尖峰的原因及代码排查问询

加速度计FFT仅0Hz有尖峰的原因及代码问题分析

我基于某台机器的振动采集了x、y、z三个方向的加速度计数据,但生成的FFT结果仅在0Hz处有一个尖峰。请问出现该现象的原因是什么?我的代码是否存在问题?

相关资料:

  • X方向加速度计时域图
  • 生成FFT的脚本:
from scipy.fft import fft, fftfreq
N = 1192
yf = fft(x)
xf = fftfreq(N,1/5)[0:1191] 

plt.plot(xf, np.abs(yf))

plt.xlabel('Frequency (Hz)')
plt.ylabel("Amplitude")
plt.title("FFT on X direction")
  • FFT结果图

原因分析及代码问题

1. 时域数据的直流偏移是核心原因

从X方向时域图可见,数据整体偏离零点,存在明显的直流分量。FFT的0Hz尖峰正是这个直流分量的直接体现。如果机器振动的交流信号幅值远小于直流偏移,就会导致其他频率成分被完全掩盖,只留下0Hz的尖峰。

2. 代码存在的几个问题

  • FFT频率轴截取错误:fftfreq(N,1/5)返回长度为N的数组,包含正负频率。对于实信号的FFT,只需保留前N//2 + 1个点(正频率部分)即可,而代码中截取到1191点(接近N),会包含冗余的负频率数据,影响对有效频率成分的观察。
  • 未去除直流分量:做FFT前没有减去信号均值,导致直流分量的幅值远大于振动信号的交流分量,直接掩盖了其他频率的峰值。
  • 采样率匹配问题:代码中采样率设为5Hz,对应的奈奎斯特频率是2.5Hz。如果机器振动的频率高于这个值,会发生混叠,导致FFT无法正确捕捉振动频率;若振动频率过低,也可能被直流分量掩盖。

解决建议

  • 先去除直流分量:对原始数据做x = x - np.mean(x)处理后再执行FFT。
  • 正确截取频率轴和幅值:
    xf = fftfreq(N, 1/5)[:N//2]
    yf_amp = np.abs(yf)[:N//2]
    plt.plot(xf, yf_amp)
    
  • 确认采样率是否与实际采集一致,同时排查机器振动频率是否在0-2.5Hz范围内,若超出需调整采样率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:39:14