当我们听到一段音乐、测量一组振动数据,或观察一幅图像时,眼前得到的通常是“信号随时间或空间怎样变化”。傅里叶变换则提出了另一个问题:这个复杂信号由哪些频率成分组成,每种成分有多强,它们之间的相位关系是什么?
它像一副数学棱镜:棱镜把白光分成不同颜色,傅里叶变换把复杂信号分解成不同频率的正弦波。这个想法连接了声音、图像、通信、雷达、医学成像、机械故障诊断、控制系统、偏微分方程和数据压缩。本文不要求读者预先掌握高等数学证明;我们会先建立直觉,再逐层补上公式与工程细节。

一、先别急着算:傅里叶变换到底在做什么?
假设钢琴、吉他和人声同时演奏。麦克风只记录到一条随时间上下起伏的电压曲线,各种声音已经叠在一起。仅看波形,很难说出其中有哪些音高;如果把它转换到频率域,基频、泛音和噪声却会在不同频率位置显现出来。
因此可以把两种视角概括为:
- 时域(time domain):横轴是时间,回答“信号在每一时刻是多少”。
- 频域(frequency domain):横轴是频率,回答“信号含有哪些快慢不同的振荡成分”。
这不是把信号换成了另一个信号,而是用另一套坐标描述同一个对象。平面上的向量可以用横、纵坐标表示,也可以改用旋转后的坐标轴;傅里叶变换所做的事情非常相似,只不过“坐标轴”变成了不同频率的复指数(或正弦、余弦)。只要保留完整的幅度和相位,逆傅里叶变换就能把频谱无损地还原为原信号。
一句话直觉:傅里叶变换是在询问信号:“你和频率为 f 的标准振荡有多像?”把所有 f 都问一遍,就得到完整频谱。
二、傅里叶世界的基本积木:正弦波
最简单的周期振荡可写为:
x(t) = A cos(2πft + φ)
- A(幅度)决定振荡有多强,例如声音有多响。
- f(频率)表示每秒振荡多少次,单位是 Hz。
- φ(初相位)决定波形在时间轴上从哪里开始。
- 2πf(角频率 ω)的单位是 rad/s,因此也常写为 x(t)=A cos(ωt+φ)。
为什么偏偏用正弦波?因为它既足够简单,又具有极好的稳定性:正弦波经过线性时不变系统后,频率不会改变,只会改变幅度和相位;对它求导、积分,仍然是同频率的正弦波;不同整数频率的正弦波在完整周期上还具有正交性。这些性质让复杂的微分方程和卷积运算在频域中大幅简化。
欧拉公式:把正弦和余弦统一起来
复数形式不是故弄玄虚,而是同时携带幅度与相位的紧凑语言。欧拉公式为:
ejθ = cos θ + j sin θ (j² = −1)
把 θ 换成 2πft,ej2πft 就像复平面上以频率 f 匀速旋转的指针。傅里叶变换可以理解为:让信号分别与各种转速的指针相乘并累积;当转速匹配时,各项会同向叠加,得到较大的结果,不匹配时则会互相抵消。
三、从“相关性”理解频率检测
要检测信号 x(t) 中是否含有频率 f,可以把它与 cos(2πft) 和 sin(2πft) 分别相乘,再在一段时间上积分。若频率一致,同相部分会持续累加;若频率不同,正负区域往往彼此抵消。这与向量点积判断两个方向的相似程度完全同构。
使用复指数后,两个检测一次完成:
X(f) = ∫−∞∞ x(t)e−j2πft dt
这就是连续时间傅里叶变换。结果 X(f) 通常是复数:其模 |X(f)| 表示该频率成分的强弱,其辐角 arg X(f) 表示相位。指数前的负号意味着用反向旋转去“抵消”待测成分的旋转;抵消成功时,该成分变为近似静止的向量,积分后留下较大结果。
四、傅里叶级数:先拆解周期信号
傅里叶级数处理周期信号。若 x(t) 的周期为 T0,基频 f0=1/T0,它可在适当条件下表示成基频及其整数倍谐波的叠加:
x(t) = Σk=−∞∞ Ckej2πkf₀t
Ck = (1/T₀) ∫t₀t₀+T₀ x(t)e−j2πkf₀t dt
周期信号的频谱只出现在 kf0 这些离散频率上,所以是“线谱”。例如理想方波由基频和无穷多个奇次谐波组成,谐波幅度随次数大致按 1/k 下降。保留的谐波越多,重建波形越接近方波,但跳变附近仍会出现固定比例的过冲,这叫吉布斯现象。它提醒我们:不连续边沿需要非常宽的频率范围来描述。
若让周期 T0 越来越长,谱线间隔 f0 越来越小,离散的傅里叶级数频谱逐渐变成连续频谱,便自然过渡到傅里叶变换。
五、连续傅里叶变换与逆变换
本文采用“普通频率 f(Hz)”的约定。变换对为:
正变换:X(f) = ∫−∞∞ x(t)e−j2πft dt
逆变换:x(t) = ∫−∞∞ X(f)ej2πft df
有些教材用角频率 ω=2πf,此时指数写成 e−jωt,逆变换前通常多一个 1/(2π)。两种定义都正确,关键是从头到尾保持同一约定。很多“公式差一个 2π”的争论,本质只是坐标和归一化习惯不同。
幅度谱、相位谱与功率谱
- 幅度谱 |X(f)|:每个频率成分有多强。
- 相位谱 ∠X(f):各频率成分相对时间原点的位置。
- 功率谱 |X(f)|²:常用于观察能量或功率在频率上的分布。
- 功率谱密度 PSD:单位频宽内的平均功率,适合随机、长时间信号;它不是“把一次 FFT 取平方”这么简单,实际常通过分段、加窗和平均(例如 Welch 方法)来估计。
相位绝不是可有可无。两个信号可以拥有完全相同的幅度谱,却因相位不同而呈现完全不同的时域波形和边缘位置。图像处理中,幅度更像“含有哪些尺度”,相位往往更强地决定“物体在哪里、轮廓是什么”。
负频率是什么?
负频率不是物理频率低于零,而是复平面上相反方向的旋转。对于实值信号,有共轭对称关系 X(−f)=X*(f),因此正负频率携带镜像信息。一个实余弦可写成两个反向旋转的复指数之和:
cos(2πf₀t) = ½ej2πf₀t + ½e−j2πf₀t
所以它在 +f0 与 −f0 处各有一个分量。工程中画实信号的单边谱时,常把正频率非直流分量乘以 2,以补回被省略的负频率能量。
六、最重要的变换性质
| 性质 | 时域 | 频域 | 直观意义 |
|---|---|---|---|
| 线性 | ax(t)+by(t) | aX(f)+bY(f) | 可分别分析后再叠加 |
| 时移 | x(t−t₀) | X(f)e−j2πft₀ | 延迟改变相位,不改变幅度谱 |
| 频移/调制 | x(t)ej2πf₀t | X(f−f₀) | 乘载波会搬移频谱 |
| 尺度变换 | x(at) | (1/|a|)X(f/a) | 时间压缩,频谱展宽 |
| 微分 | dx(t)/dt | j2πfX(f) | 高频被更强地放大 |
| 卷积 | x(t)∗h(t) | X(f)H(f) | 复杂卷积变成逐频率相乘 |
| 相乘 | x(t)h(t) | X(f)∗H(f) | 截断、加窗会让频谱发生卷积 |
| 能量守恒 | ∫|x(t)|²dt | ∫|X(f)|²df | 能量只是换了一种坐标表达 |
其中卷积定理尤其重要。线性时不变系统满足 y(t)=x(t)∗h(t),变到频域后成为 Y(f)=X(f)H(f)。系统对每个频率所做的事,都浓缩在频率响应 H(f) 里:低通滤波器保留低频、衰减高频;高通滤波器相反;带通滤波器只允许一个频段通过。长序列卷积也可用 FFT → 逐点相乘 → IFFT 高效完成。
七、从连续世界到计算机:采样与奈奎斯特条件
计算机不能保存连续时间的每一点,只能以采样频率 fs 每秒记录 fs 个样本。采样间隔为 Δt=1/fs。要在理想条件下从样本唯一重建一个带限信号,采样频率必须严格高于信号最高频率 fmax 的两倍:
fs > 2fmax ,奈奎斯特频率 fN=fs/2
若信号含有超过 fs/2 的频率,它会折叠到较低频率,看起来像另一个完全不同的信号,这就是混叠(aliasing)。采样之后通常无法仅靠数字算法判断某个低频究竟是真实低频还是折叠下来的高频,所以采样前要用模拟抗混叠低通滤波器限制带宽,并给滤波器留出实际过渡带。

八、离散傅里叶变换(DFT)
拿到 N 个离散样本 x[0],x[1],…,x[N−1] 后,计算机使用 DFT:
X[k] = Σn=0N−1 x[n]e−j2πkn/N ,k=0,…,N−1
x[n] = (1/N)Σk=0N−1 X[k]ej2πkn/N
这里每个 k 对应一个频率格点(frequency bin):
fk = kfs/N ,频率间隔 Δf = fs/N = 1/T
T=N/fs 是记录总时长。由 Δf=1/T 可见,频率分辨率主要由观察时长决定:想区分 100 Hz 与 100.5 Hz,记录时间至少要达到约 2 秒,实际还要考虑窗函数与信噪比。仅提高采样率而不延长记录时长,通常不会让相邻频率更容易分开。
DFT 还有一个容易忽视的假设:输入的 N 个样本被视为某个无限周期序列的一段。换句话说,算法默认最后一个样本之后会无缝接回第一个样本。如果首尾不连续,周期拼接处就人为制造了尖锐边沿,从而产生额外的宽带频率成分。
九、FFT 是什么?它不是另一种变换
FFT(Fast Fourier Transform,快速傅里叶变换)是计算 DFT 的高效算法族,而不是新的数学变换。直接按定义计算 N 个频率、每个频率累加 N 项,需要约 O(N²) 次运算;FFT 利用复指数的周期性和对称性,把问题递归拆分,典型复杂度降为 O(N log N)。
例如 N=1,048,576 时,N² 约为 1.1 万亿,而 Nlog2N 约为 2100 万,数量级差距巨大。Cooley–Tukey 算法可把长度 N 分解成较小因子的组合;2 的幂长度往往很快,但现代 FFT 库也能有效处理许多合数长度。遇到较大的质数长度时,库可能改用 Bluestein 或 Rader 等算法。
关系总结:傅里叶变换是思想与连续数学;DFT 是有限离散数据的变换定义;FFT 是快速计算 DFT 的算法。
十、真实 FFT 为什么会“漏”得到处都是?
如果信号频率刚好落在某个 DFT 格点,而且截取区间包含整数个周期,能量会集中在对应格点。若不满足这个条件,首尾拼接产生不连续,能量就扩散到周围频率,这叫频谱泄漏(spectral leakage)。它不是软件算错,而是有限观察窗口的必然结果。
工程上会在 FFT 前将数据乘以窗函数,使两端平滑接近零。常见选择包括:
- 矩形窗:等于不加窗。主瓣窄,但旁瓣高;适合严格同步、整数周期的数据。
- Hann 窗:通用且稳健,常用于频率分析。
- Hamming 窗:首个旁瓣较低,语音等场景常见。
- Blackman / Blackman–Harris 窗:旁瓣更低,适合在强分量旁寻找弱分量,但主瓣更宽。
- Flat-top 窗:幅值测量准确度好,但频率分辨能力较弱。

加窗会降低可见幅值,因此做定量幅值测量时,需要按窗的相干增益修正;做噪声功率估计时,还要考虑等效噪声带宽。只想“看看峰在哪”时可以暂不深究,但若结果要用于标定或验收,这些修正不可忽略。
零填充能提高分辨率吗?
在 N 个样本后补零到更长长度,会让 FFT 输出的频率点更密,曲线看起来更平滑,也有利于估计峰值位置;但它只是对原有频谱进行更密的采样,不会增加新的观测信息,也不能真正分开本来就无法分辨的两个近邻频率。真正提高分辨率要延长有效记录时间,或使用适合问题的参数化估计方法。
十一、怎样正确读一张 FFT 频谱?
- 先确认采样率与单位。横轴上限通常是 fs/2;时间单位若不是秒,频率单位也会随之改变。
- 检查直流分量。X[0] 对应信号平均值。若只关心交流成分,可先减去均值,但应明确记录这一预处理。
- 确认单边谱还是双边谱。实信号的双边谱对称;单边幅度谱通常需把非直流、非奈奎斯特项乘 2。
- 确认归一化。不同软件可能在正变换、逆变换或两边分配 1/N。不能脱离定义直接比较数值。
- 确认幅值类型。峰值、峰峰值、RMS、功率、功率谱密度不是同一个量;对正弦波,RMS=峰值/√2。
- 检查窗函数。窗会改变主瓣宽度、旁瓣与幅值,需要和测量目的匹配。
- 检查记录长度。Δf=fs/N=1/T。频率分辨率不足时,不要过度解释一个宽峰。
- 留意混叠。靠近奈奎斯特频率的异常峰尤其值得检查模拟滤波和更高采样率。
- 结合时域。削顶、脉冲、漂移、丢样等问题在时域可能更直观;永远不要只看一张频谱下结论。
十二、一个可以运行的 Python / NumPy 示例
下面构造一个含 50 Hz、120 Hz 和少量噪声的信号,去均值、加 Hann 窗,然后计算单边幅度谱。代码中的“除以窗函数之和”是在校正窗的相干增益,使频率恰好落在格点上的正弦峰值更接近原始峰值幅度。
import numpy as np
import matplotlib.pyplot as plt
# 1. 采样参数
fs = 1000.0 # 采样率:1000 Hz
duration = 2.0 # 记录时长:2 s
t = np.arange(0, duration, 1 / fs)
# 2. 构造信号:50 Hz 幅值1.0,120 Hz 幅值0.4,再加噪声
rng = np.random.default_rng(42)
x = (1.0 * np.sin(2 * np.pi * 50 * t)
+ 0.4 * np.sin(2 * np.pi * 120 * t + 0.7)
+ 0.15 * rng.normal(size=t.size))
# 3. 预处理:去直流,加 Hann 窗
x = x - np.mean(x)
window = np.hanning(len(x))
xw = x * window
# 4. 实信号只需 rfft;rfftfreq 生成对应频率轴
X = np.fft.rfft(xw)
freq = np.fft.rfftfreq(len(x), d=1 / fs)
# 5. 单边峰值幅度谱;直流和奈奎斯特点不应乘2
amplitude = 2.0 * np.abs(X) / np.sum(window)
amplitude[0] /= 2.0
if len(x) % 2 == 0:
amplitude[-1] /= 2.0
# 6. 找出较明显的峰(这里只作简易演示)
indices = np.argsort(amplitude)[-8:]
for i in indices[np.argsort(freq[indices])]:
print(f"{freq[i]:7.2f} Hz : {amplitude[i]:.3f}")
# 7. 绘图
plt.figure(figsize=(10, 4))
plt.plot(freq, amplitude)
plt.xlim(0, 250)
plt.xlabel("Frequency (Hz)")
plt.ylabel("Peak amplitude")
plt.title("Single-sided amplitude spectrum")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
因为总时长为 2 秒,所以 Δf=1/T=0.5 Hz。输出应在 50 Hz 与 120 Hz 附近出现主要峰。噪声使其他频点不为零;若每次更换随机种子,噪声底也会改变,而两个确定性正弦峰仍稳定存在。
二维 FFT:图像频域的最小示例
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
img = np.asarray(Image.open("input.png").convert("L"), dtype=float)
F = np.fft.fft2(img) # 二维 DFT
Fc = np.fft.fftshift(F) # 把零频移到图像中央
spectrum = np.log1p(np.abs(Fc))
plt.imshow(spectrum, cmap="gray")
plt.title("Log magnitude spectrum")
plt.axis("off")
plt.show()
二维频谱中心附近代表缓慢变化的亮度与大尺度结构,离中心越远代表越高的空间频率,通常对应细节、纹理和边缘。图像某方向上的条纹,会在频域中表现为与其方向垂直的成对亮点。显示时使用 log(1+|F|),是因为直流和低频常比高频强很多,直接线性显示会让弱成分几乎全黑。
十三、短时傅里叶变换:当频率随时间变化
普通傅里叶变换告诉我们整段信号“总体含有哪些频率”,却不告诉我们这些频率在什么时候出现。对稳定的电机转速信号这可能够用,但语音、音乐、鸟鸣、变速机械和瞬态故障都是非平稳信号。解决方法之一是短时傅里叶变换(STFT):用一个短窗沿时间轴滑动,对每个局部片段做 FFT。
STFT{x}(τ,f) = ∫ x(t)w(t−τ)e−j2πftdt
把每个时间窗的频谱按时间排列,就得到声谱图(spectrogram):横轴时间、纵轴频率、颜色表示强度。窗越短,越能定位瞬间变化,但频率分辨率越差;窗越长,频率更精细,但事件发生时刻更模糊。这是时频不确定性的一种表现,不存在同时无限精确的时间与频率分辨率。
十四、傅里叶变换在现实中怎样发挥作用?
1. 音频与语音
均衡器在不同频带上调整增益;降噪算法估计噪声频谱并抑制它;音高检测寻找基频与谐波;MP3/AAC 等感知编码虽然常使用与傅里叶思想密切相关的变换(例如 MDCT),核心仍是把信号转换到更易按听觉重要性分配比特的域。
2. 通信系统
调制把基带频谱搬移到载波附近;滤波选择需要的信道;OFDM 把高速数据分配到许多正交子载波上,发送端使用 IFFT 合成时域波形,接收端用 FFT 分离子载波。Wi‑Fi、4G/5G 和数字电视中都能看到这种思想。
3. 图像处理
二维傅里叶变换把图像分解为空间频率:低频对应缓慢变化的区域,高频对应边缘和细纹理。去除周期性条纹、频域滤波、模糊核分析、图像配准和光学衍射都离不开它。需要注意,简单粗暴地切掉高频会产生振铃,因为频域硬截断相当于在空间域与长尾 sinc 核卷积。
4. 机械振动与故障诊断
旋转机械故障常在转频、倍频、齿轮啮合频率或轴承特征频率附近留下峰值及边带。例如不平衡常增强 1× 转频,对中不良可能增强 2× 分量,周期冲击会激发宽带共振。但真实诊断不能只凭“一根峰”判故障,还要结合工况、传感器方向、转速同步、包络解调、趋势数据与设备结构。
5. 医学与科学计算
MRI 采集的数据位于所谓 k 空间,经过傅里叶重建得到图像;X 射线 CT 的重建也与傅里叶切片思想密切相关。在偏微分方程中,傅里叶变换可把空间微分变成频域乘法,例如二阶导数对应 −(2πf)²,从而把某些微分方程转化为更容易求解的代数方程。
十五、几个经典变换对带来的直觉
| 时域对象 | 频域形态 | 启示 |
|---|---|---|
| 无限长单频正弦 | ±f₀ 处的冲激 | 时间上无限长,频率可无限精确 |
| 很短的脉冲 | 很宽的频谱 | 变化越快,需要的高频越多 |
| 矩形脉冲 | sinc 形频谱 | 时间硬截断产生频域旁瓣 |
| 高斯函数 | 仍是高斯函数 | 时频集中性质非常好 |
| 冲激序列 | 另一个冲激序列 | 揭示采样造成的频谱周期复制 |
| 常数 | 零频处的冲激 | 不随时间变化就是纯直流 |
这里存在一条贯穿全文的规律:一个域里越集中,另一个域里通常越分散。极短脉冲需要宽频带;极窄频带信号必须持续较长时间。通信脉冲整形、雷达距离分辨率、短时频谱分析和滤波器设计,都在与这种时频权衡打交道。
十六、常见误区与排查清单
- 误区:FFT 点数越多,任何情况下分辨率都越高。
若只是零填充,图更平滑但真实分辨能力不变;增加实际采样时长才增加信息。 - 误区:奈奎斯特频率就是可放心测量的最高频率。
实际抗混叠滤波器需要过渡带,目标信号带宽通常应明显低于 fs/2。 - 误区:频谱峰高度就是原始正弦幅值。
它还取决于 N、单双边谱、FFT 归一化、窗函数、峰值/RMS定义以及频率是否落在格点上。 - 误区:加窗总会让频谱更准确。
窗是在旁瓣、主瓣宽度和幅值误差之间交换,不同目的应选不同窗。 - 误区:删除频谱中的高频就一定能干净降噪。
信号本身的边缘和瞬态也需要高频,硬切频谱还可能引入时域振铃。 - 误区:幅度谱相同,信号就相同。
丢弃相位后无法一般性重建原信号。 - 误区:一个峰就对应一个物理原因。
谐波、调制边带、结构共振、窗泄漏、混叠、电源干扰和非线性都可能产生峰,必须结合系统知识验证。 - 误区:FFT 适合所有非平稳信号。
频率随时间明显变化时,应考虑 STFT、小波变换、同步分析或其他时频方法。
十七、进一步理解:傅里叶变换其实是一种“换基”
在线性代数中,一个向量可以投影到一组正交基上,投影系数就是它在各基方向上的坐标。DFT 也是如此:长度 N 的序列被投影到 N 个彼此正交的复指数基上,X[k] 就是坐标。DFT 矩阵的每一行对应一个频率,逆 DFT 则把这些坐标重新组合回原序列。
这个视角能解释很多现象:
- 正交性保证不同频率可以被分别测量。
- 完整保留所有复系数时,变换是可逆的。
- 频域滤波是在另一组坐标中修改系数。
- 压缩的本质通常是找到一种基,使信号能量集中在少量系数上,再近似丢弃不重要的系数。
- 傅里叶基擅长表示全局周期结构,却不擅长定位短促事件,这促使人们发展 STFT、小波等局部化基。
十八、学习路线:怎样真正掌握傅里叶变换?
- 先画图。用 Python 合成两三个正弦波,分别观察时域和频域。
- 改变一个变量。依次修改幅度、频率、相位、采样率和记录长度,观察频谱怎么变。
- 故意制造问题。选择非整数周期产生泄漏,降低采样率制造混叠,补零观察“更密但不更清晰”的频谱。
- 手算小型 DFT。对 N=4 或 N=8 的序列计算一次,理解 X[k] 是复数投影,不必长期手算。
- 掌握卷积定理。分别在时域直接卷积、频域相乘,比较结果和速度。
- 分析真实数据。从一段录音、加速度计或传感器 CSV 入手,同时看时域、幅度谱与声谱图。
- 最后补严格数学。再学习函数空间、正交基、收敛条件、广义函数和分布理论,会更容易理解公式为何成立。
十九、常见问题
Q1:傅里叶变换会丢失信息吗?
理想数学变换和完整精度的 DFT 是可逆的,本身不丢信息。真正的信息损失通常来自只保留幅度而丢相位、删掉频率系数、量化、有限精度、截断或有损压缩。
Q2:为什么测量到的频率不是整数?
频率格点由 Δf=fs/N 决定,但真实频率不必刚好落在格点上。可以延长记录、零填充后对峰插值,或采用更精细的频率估计算法;同时应考虑噪声、窗函数和时钟误差。
Q3:什么时候用 rfft,什么时候用 fft?
输入是实数时,负频率由共轭对称性决定,rfft 只返回非负频率,计算和存储更省;输入本身是复数(例如 I/Q 信号)或需要完整正负频率时,用 fft。
Q4:怎样选择 FFT 长度?
先根据所需频率分辨率确定实际观察时长 T≈1/Δf,再由 N≈Tfs 得到样本数。为了计算方便可补零到库擅长的长度,但不要把补零误认为新增观测。实时系统还要在延迟、刷新率、重叠比例和计算量之间权衡。
Q5:傅里叶变换只能分析周期信号吗?
不是。傅里叶级数主要描述周期信号,连续傅里叶变换可以描述许多非周期信号。DFT 则对有限数据进行变换,但数学上会把这段数据视为周期延拓,因此才出现边界与加窗问题。
二十、总结
傅里叶变换最核心的思想并不复杂:把信号投影到不同频率的正弦/复指数基上,得到各频率的幅度和相位;需要时再把这些成分组合回来。
- 时域回答“何时发生什么”,频域回答“包含哪些变化速度”。
- 傅里叶级数描述周期信号的离散谐波,傅里叶变换给出连续频谱,DFT 处理有限离散数据,FFT 快速计算 DFT。
- 采样率决定无混叠带宽,记录时长决定基础频率间隔。
- 加窗缓解边界不连续造成的泄漏,但会引入主瓣与旁瓣的权衡。
- 幅度与相位共同构成完整频谱,归一化、单双边谱和单位必须明确。
- 卷积定理让滤波和系统分析变得简单,也是 FFT 在工程中如此重要的原因之一。
真正掌握它的最佳方式,是把公式、图形和代码放在一起:合成信号、改变参数、故意制造混叠与泄漏,再亲手把它修正。当你能够从频谱反推时域中发生了什么,也能预见一次截断、延迟、调制或滤波会怎样改变频谱时,傅里叶变换就不再是一串难记的积分,而会成为一种自然的观察方式。
延伸阅读:NumPy FFT 文档、SciPy Signal 文档、FFTW 文档;以及任一本系统讲解信号与系统、数字信号处理的教材。阅读时请先确认所用公式采用 f 还是 ω,以及归一化常数放在正变换还是逆变换中。