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

为什么类高斯函数经numpy FFT变换后在傅里叶空间不呈高斯形态?

numpy.fft结果异常原因与输出解读

绘图结果不符合预期的原因

  • 输出顺序问题:numpy.fft.fft()的默认输出没有将零频率分量放在数组中心,索引0位置对应直流分量,接下来依次排列正频率分量直到奈奎斯特频率,数组后半段则是负频率分量,按从接近-奈奎斯特频率向-1的顺序排列。实信号的傅里叶变换为共轭对称结构,类高斯信号的频谱本身也对称,所以你直接按数组索引绘图时,会看到左右两个对称的峰,而非单个居中的类高斯形态。
  • 缺少频率轴映射:你直接使用数组索引作为x轴绘图,没有对应到真实的物理频率值,也无法体现正负频率的分布逻辑,进一步放大了观感上的不符合预期。

numpy.fft输出的正确解读方法

numpy.fft.fft()的输出数组每个位置的取值和对应频率严格绑定,你可以按以下步骤处理和解读:

  1. 首先获取对应频率轴:你需要已知原信号的采样步长dx(即原函数x轴相邻两个采样点的间隔)和采样点数N = len(func),调用numpy.fft.fftfreq(N, dx)即可得到和fft输出数组一一对应的频率数组。
  2. 按需调整频谱展示形式:
    • 如果你需要展示完整的对称频谱,调用numpy.fft.fftshift()将零频率分量移动到数组中心,再绘图即可得到居中的类高斯形态,示例代码如下:
import numpy as np
from numpy.fft import fft, fftfreq, fftshift
import matplotlib.pyplot as plt

# 假设x为原函数的横坐标数组,func为原函数采样值数组
N = len(func)
dx = x[1] - x[0]
# 生成原始频率数组、计算fft
freq = fftfreq(N, dx)
func_fourier = fft(func)
# 移频得到居中的频谱和对应频率轴
freq_shifted = fftshift(freq)
amp_shifted = fftshift(np.abs(func_fourier))
# 绘图即可得到符合预期的类高斯频谱
plt.plot(freq_shifted, amp_shifted)
plt.show()
  • 如果你只需要正频率部分的频谱,直接取输出数组前半段和对应正频率绘制即可:
positive_freq = freq[:N//2]
positive_amp = np.abs(func_fourier)[:N//2]
plt.plot(positive_freq, positive_amp)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:24:02