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

如何将1分钟间隔的NumPy振幅数组转换为FFT可用信号?

将分钟间隔的NumPy数组转换为FFT分析用信号

你的一维NumPy数组本身就是时域信号,直接可用于FFT分析,只需补充采样频率参数并做必要预处理即可。以下是具体步骤和代码示例:

1. 明确采样频率

数据按1分钟间隔采集,因此采样频率为:

fs = 1/60  # 单位:Hz(每分钟1次采样,即每秒1/60次)

2. 预处理(推荐)

为避免FFT结果中直流分量(信号均值)的干扰,建议先去除直流分量:

import numpy as np

# 示例数组(实际为数千条数据)
a = np.array([5, 7, -6, 9, 0, 1, 15, -2, 8])
# 去除直流分量
signal = a - np.mean(a)

3. 执行FFT并生成幅度谱

使用numpy.fft模块完成FFT计算,同时生成对应的频率轴:

n = len(signal)
# 执行FFT(输出为复数数组)
fft_complex = np.fft.fft(signal)
# 计算幅度谱(复数的绝对值)
amplitude = np.abs(fft_complex)
# 生成频率轴
freqs = np.fft.fftfreq(n, d=1/fs)

4. 提取正频率部分(可选)

FFT结果是对称的,通常只需分析正频率区间:

# 筛选正频率索引
positive_mask = freqs >= 0
positive_freqs = freqs[positive_mask]
positive_amplitude = amplitude[positive_mask]

5. 幅度谱归一化(可选)

如果需要让幅度谱对应原始信号的实际振幅,可进行归一化:

# 归一化:整体除以样本数,正频率分量(除直流外)乘以2
positive_amplitude_norm = positive_amplitude / n
positive_amplitude_norm[1:] *= 2

优化:针对实信号的快速FFT

因为你的信号是实数值,使用np.fft.rfft可直接得到正频率部分结果,效率更高:

# 实信号优化FFT
rfft_complex = np.fft.rfft(signal)
r_amplitude = np.abs(rfft_complex)
r_freqs = np.fft.rfftfreq(n, d=1/fs)

# 归一化
r_amplitude_norm = r_amplitude / n
r_amplitude_norm[1:-1] *= 2  # 最后一个频率为Nyquist频率,无需乘2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:32:08