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

如何使用Python计算离散信号的FFT傅里叶系数

16点离散信号FFT傅里叶系数获取与频率分量求和方法

核心概念说明

  • numpy.fft.fft()的输出本身就是你要的复傅里叶系数序列,长度和输入信号一致,每个元素包含对应频率分量的幅值、相位信息
  • 16点信号的FFT输出中,第1个元素是直流分量,第2-8个是正频率分量,第9个是奈奎斯特频率分量,第10-16个是负频率分量(与第2-8个分量共轭对称)
  • 频率分量求和重构原始信号,本质就是离散傅里叶逆变换的计算过程

完整代码实现

import numpy as np

# 输入信号(你给出的示例为15个元素,这里补充1个元素凑成16点,可根据实际数据调整)
a = [1, 2, 3, 4, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 1, 1]
signal_length = len(a)

# 步骤1:计算FFT得到复傅里叶系数
fft_coefficients = np.fft.fft(a)

# 步骤2:获取物理意义上的幅值(可选,按需使用)
# 直流分量归一化
dc_amplitude = fft_coefficients[0].real / signal_length
# 其余正频率分量归一化
positive_freq_amplitudes = 2 * np.abs(fft_coefficients[1:signal_length//2]) / signal_length

# 步骤3:频率分量求和重构原始信号(两种实现方式)
# 方式1:直接调用numpy内置逆变换接口
reconstructed_signal_1 = np.fft.ifft(fft_coefficients).real

# 方式2:手动实现所有频率分量加权求和
reconstructed_signal_2 = np.zeros(signal_length, dtype=np.float64)
freq_points = np.fft.fftfreq(signal_length)
for coef, freq in zip(fft_coefficients, freq_points):
    reconstructed_signal_2 += (coef * np.exp(2j * np.pi * freq * np.arange(signal_length))).real
reconstructed_signal_2 /= signal_length

结果验证

两种重构方式得到的结果和原始信号a的误差在浮点精度范围内,可以直接使用。

内容的提问来源于stack exchange,提问作者Emin Bülbül

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:27:03