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

如何使用Python基于时间与幅值数据计算信号4s后周期段的频率

信号频率计算实现步骤

1. 数据预处理

首先从原始数据中截取时间大于4s的信号段,同时计算采样频率:

  • 筛选所有满足时间>4的时间、幅值对作为计算样本
  • 基于时间序列的平均间隔计算采样频率fs = 1/平均时间差,若原始数据为非均匀采样,需先使用scipy.interpolate做重采样得到均匀时间步长的信号

2. FFT计算核心代码

直接套用以下代码即可完成计算,只需替换你自己的时间、幅值数组变量:

import numpy as np

# 替换为你自己的原始时间数组、幅值数组
time_arr = 你的时间列数组
amp_arr = 你的幅值列数组

# 截取4s后的有效信号段
valid_mask = time_arr > 4
t_valid = time_arr[valid_mask]
amp_valid = amp_arr[valid_mask]

# 计算采样频率
dt = np.mean(np.diff(t_valid))
fs = 1 / dt
n = len(amp_valid)

# 去除直流分量后做FFT,避免0Hz峰值干扰
fft_res = np.fft.fft(amp_valid - np.mean(amp_valid))
freqs = np.fft.fftfreq(n, d=1/fs)[:n//2]
spectrum = 2 / n * np.abs(fft_res[:n//2])

# 提取主频率(频谱峰值对应频率)
main_frequency = freqs[np.argmax(spectrum)]
print(f"信号主频率:{main_frequency:.4f} Hz")

3. 优化方案(噪声场景适用)

如果你的信号存在明显噪声,建议使用功率谱估计替代直接FFT,抗干扰性更强:

from scipy.signal import welch

freqs, power = welch(amp_valid, fs=fs, nperseg=min(256, len(amp_valid)//2))
main_frequency = freqs[np.argmax(power)]

结果校验

你可以先通过曲线目视估算4s后信号的近似周期T,对应频率为1/T,和计算结果对照,误差在可接受范围内即可确认结果有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:36:05