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

Python使用np.fft.fft处理加速度数据后量级与单位问题求解

FFT结果量级变化原因及单位说明

量级变小的原因

  • numpy的np.fft.fft默认输出未做归一化,幅度与输入信号长度正相关,你代码中执行的Y = np.fft.fft(data1); P2 = abs(Y/L)是标准的幅度归一化操作,目的是让频域幅度与时域信号的物理幅度对应,这步操作本身是正确的。
  • 时域原始数据的-20~20 m/s²是峰峰值,是所有频率分量相位叠加后的极值,而频域幅值谱展示的是单个频率分量的独立幅度,宽频振动场景下能量分散在多个频率点,单个频率的幅度自然远小于时域峰峰值,这是正常现象,不是计算错误。
  • 如果你确认幅值量级和预期偏差过大,可以先检查是否在FFT前对原始数据做过缩放到[-1,1]区间的前置归一化操作,该操作会直接降低频域输出的量级。

FFT输出的单位设置

你当前代码计算得到的P1是单边线性幅值谱,单位和输入的加速度单位完全一致,为m/s²,不需要额外做单位转换。
你可以用仿真信号验证计算逻辑的正确性:构造一个幅值为10 m/s²、频率为1000Hz的正弦信号,长度和你的实测数据一致,用同样的代码做FFT处理,最终1000Hz频点对应的P1值应该接近10,即可证明归一化逻辑和单位对应关系正确。

参考处理代码

Fs = 51200                             
T = 1/Fs  
L = len(data1)         
t = np.arange(0,L-1)*T      
Y = np.fft.fft(data1)
P2 = abs(Y/L)
P1 = P2[0:int(L/2+1)]
P1[1:-1] = 2*P1[1:-1]
f = Fs*np.arange(0,L/2+1)/L

数据可视化参考

FFT处理前(原始加速度数据)

FFT处理前原始加速度数据

FFT处理后(单位为m/s²)

FFT处理后结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:06:00