
做信号处理这几年被问得最多的基础问题之一就是傅里叶变换到底有几种。网上的教程翻来覆去讲公式但很少有人能把顺序理清楚连续周期信号对应傅里叶级数连续非周期信号对应傅里叶变换离散周期信号对应离散傅里叶级数离散非周期信号对应离散时间傅里叶变换。听着像绕口令实际上就是一个二维分类坐标的事。这篇文章我打算把四种形式彻底讲透从“为什么会有四种”出发把公式、物理含义、工程对应关系全部串起来最后再补上我个人常用的记忆方法和踩坑经验。无论你是刚接触《信号与系统》的学生还是已经用FFT做数据分析、需要回头补基础知识的工程师都可以照着这篇文章把这块拼图补完整。1. 四种形式从哪里来一张二维分类表理清全部关系1.1 时域和频域分别发生什么变化傅里叶变换本质上是把一个信号从时域换到频域去观察。但它有四种变体这件事很多人一开始会觉得奇怪一个变换而已怎么还能有四胞胎原因在于我们手里拿到的信号在时域上有两种状态——连续还是离散周期还是非周期频域同样有这两种状态。两个维度一交叉就成了四种组合。时域连续 非周期对应的是最经典的傅里叶变换FT频域结果是连续非周期。时域连续 周期就是傅里叶级数FS频域结果是离散的谱线每根谱线对应一个谐波分量。时域离散 非周期对应的是离散时间傅里叶变换DTFT频域结果是连续的但会以采样频率周期重复。时域离散 周期对应的是离散傅里叶级数DFS频域结果也是离散且周期的。这个对应关系是理解整篇文章的核心。你不需要一开始就背公式只要抓住一个规律时域离散会让频域周期化时域周期会让频域离散化。后面所有公式和性质都能从这个规律推出来。1.2 四种形式与工程术语的对应关系实际工程里你听到最多的名词是DFT和FFT很多教材会把DFT描述成DFS的“主值区间截断”。这个说法听起来很抽象其实就是把DFS取其中一个周期来用。我们的计算机只能处理有限长度的离散序列所以真正跑在硬件和软件里的是DFT而FFT是DFT的高效算法。至于FS、FT、DTFT更多是理论分析和推导时的工具。时域形态频域形态名称工程中常见应用连续、周期离散、非周期傅里叶级数FS分析周期性信号谐波比如电网、机械振动连续、非周期连续、非周期傅里叶变换FT理论推导、解析计算比如电路响应离散、非周期连续、周期离散时间傅里叶变换DTFT分析数字滤波器频率响应理论离散、周期离散、周期离散傅里叶级数DFS周期序列分析理论桥梁离散、有限长离散、有限长离散傅里叶变换DFT频谱分析、FFT实现、实际应用这张表建议你保存下来。做题也好、做工程也好先把信号形态放进表里就知道该用哪套工具了。2. 逐个拆解四种形式的公式与物理含义2.1 连续周期信号与傅里叶级数FS周期信号可以看作是无数个正弦波叠加的结果。傅里叶级数做的是找出这些正弦波的幅度和相位它的正变换是 $X[k] \frac{1}{T}\int_{T} x(t) e^{-j2\pi k t / T} dt$其中 $T$ 是信号周期$k$ 是谐波次数。逆变换是 $x(t) \sum_{k-\infty}^{\infty} X[k] e^{j2\pi k t / T}$。这里的核心是频率分量只存在于 $\frac{1}{T}$ 的整数倍上所以频域是离散的谱线。谱线的间隔由周期决定周期越大谱线间隔越小周期无穷大时谱线就密成了连续频谱此时FS自然过渡为FT。这个极限思想很重要它解释了为什么非周期信号会有连续频谱。FS在电力系统、机械故障诊断里非常常用。比如你测到一个转动机械的振动信号基频对应的转频二倍频、三倍频都是异常磨损的指示信号。通过FS提取出各次谐波就能判断是什么位置出了问题。2.2 连续非周期信号与傅里叶变换FT连续非周期信号的傅里叶变换是 $X(f) \int_{-\infty}^{\infty} x(t) e^{-j2\pi f t} dt$逆变换是 $x(t) \int_{-\infty}^{\infty} X(f) e^{j2\pi f t} df$。相比FS这里的频率变量 $f$ 连续变化频谱不再是离散谱线而是一个函数。物理意义上FT可以看成把周期信号的周期推向无穷大谱线间隔趋近于零于是离散谱变成了连续谱。代价是解析计算难度加大很多信号没有解析形式的FT只能用数值方法逼近。典型的解析变换对包括矩形脉冲对应 $sinc$ 函数、高斯脉冲对应高斯函数、三角脉冲对应 $sinc^2$ 函数。实际工程里FT的理论意义大于直接计算意义。因为计算机处理不了一个连续时间的无限长信号但很多系统分析比如模拟滤波器频率响应的推导、通信系统前端信号频谱分析仍然要从FT出发理解。2.3 离散非周期信号与离散时间傅里叶变换DTFT离散时间信号 $x[n]$ 的DTFT写成 $X(e^{j\omega}) \sum_{n-\infty}^{\infty} x[n] e^{-j\omega n}$。注意这里的 $\omega$ 是归一化角频率单位是弧度/样本它连续变化并且结果是关于 $\omega$ 以 $2\pi$ 为周期的周期函数。DTFT最反常的一点是时域离散频域反而连续。这一点我当年理解了很久。直观的原因是离散序列的频谱被以采样频率的所有整数倍频率复制了一份又一份叠加在一起后整体成为周期函数但单个周期内部频谱值是连续的因为序列在时间上没有周期性不存在谐波约束。DTFT是数字信号处理的理论基石。FIR滤波器的频率响应、数字滤波器设计中的频率指标都是用DTFT来分析和描述的。它和FT的区别在于FT处理模拟信号时频域是连续非周期DTFT处理数字序列时频域是连续周期。2.4 离散周期信号与离散傅里叶级数DFS离散周期序列 $x[n]$周期为 $N$其离散傅里叶级数是 $X[k] \sum_{n0}^{N-1} x[n] e^{-j2\pi k n / N}$逆变换是 $x[n] \frac{1}{N}\sum_{k0}^{N-1} X[k] e^{j2\pi k n / N}$。这里时域频域都是离散且周期的级数和也变成了有限长求和这使得DFS理论上很适合计算机计算。但实际工程中我们拿到的信号长度是有限的并不是真正的周期信号。把DFT当作DFS的一个周期来取就是对这种尴尬局面的妥协先把有限长序列做周期延拓假设它是周期的算出DFS再取主值区间。所有基于FFT的频谱分析底层逻辑都是这个。3. 实战记忆方法三角脉冲的傅里叶变换与对偶规律3.1 三角脉冲的傅里叶变换为什么是sinc平方很多人在考场上背不出三角脉冲的傅里叶变换因为函数形式看着复杂容易记混。这里我给出一个几乎不用背的推导链条三角脉冲可以看成两个矩形脉冲的卷积。时域卷积对应频域相乘矩形脉冲的傅里叶变换是 $sinc$ 函数两个 $sinc$ 相乘就是 $sinc^2$。所以一句话矩形是 $sinc$三角形是 $sinc$ 的平方。具体来说宽度为 $T$、幅度为 $1$ 的三角脉冲 $x(t) tri(t/T)$其傅里叶变换为 $X(f) T \cdot sinc^2(fT)$。这里的 $sinc$ 函数定义是 $\frac{\sin(\pi x)}{\pi x}$。如果是宽度为 $T$ 的矩形脉冲 $rect(t/T)$其傅里叶变换是 $T \cdot sinc(fT)$。两相比较三角脉冲频谱的主瓣更宽旁瓣衰减更快按频率平方衰减这是因为时域信号更“平滑”高频分量自然更少。这个记忆方法还可以推广。比如梯形脉冲可以看成两个宽度不同的矩形卷积频谱就是两个 $sinc$ 相乘升余弦脉冲频谱和 $sinc$ 相关但形式更复杂。只要养成“从卷积角度看波形”的习惯很多变换对都不用死记。3.2 一句话记忆法时域离散频域周期时域周期频域离散这句话建议你写在笔记本扉页上。四种傅里叶变换归根到底就这一条对偶关系时域离散 - 频域周期对应DTFT和DFS中频谱的周期性时域周期 - 频域离散对应FS和DFS中频谱是离散谱线时域非周期 - 频域连续对应FT和DTFT中频谱连续时域连续 - 频域非周期对应FT和FS中频谱不重复。这四句话是两两组合。比如DFS时域离散又周期那频域必然既离散又周期DTFT时域离散但非周期那频域连续且周期FT时域连续非周期那频域连续非周期FS时域连续周期那频域离散非周期。我每次用这个规律判断自己有没有用错公式从没翻过车。比如看到一个算法里把频谱离散化我第一反应是它在频域做了“采样”那频域采样对应的是时域周期化说明算法是在处理一个假想的周期信号。这种思辨能力比背十个公式都管用。3.3 一张记忆表时频对应关系与常用变换对信号波形时域频谱频域记忆口诀矩形脉冲$sinc$ 函数矩形变 $sinc$三角脉冲$sinc^2$ 函数三角是矩形的卷积所以是平方高斯脉冲高斯函数只有高斯变换还是高斯冲激函数 $\delta(t)$常数 $1$时域窄到极限频域宽到极限常数 $1$冲激函数 $\delta(f)$时域宽到极限频域窄到极限周期冲激串冲激串冲激串的频谱还是冲激串间隔互为倒数这张表配合“时域离散频域周期、时域周期频域离散”这个规律基本可以应付绝大多数基础场景。你不需要背整本《信号与系统》的公式表只要记住几个代表波形和那两句话很多变换对都可以现场推。4. 工程中真正在用的是哪种从四兄弟到FFT4.1 连续信号怎么变成DFT能处理的数据前面说了那么多理论到了工程里真正跑在计算机里的几乎都是DFT通常用FFT实现。一个连续信号 $x(t)$ 要变成DFT能处理的数据需要经历三步第一步是采样以采样率 $f_s$ 对连续信号等间隔采样得到离散序列 $x[n]$。这一步对应的是时域离散化结果就是频谱周期性重复重复周期是 $f_s$。第二步是截断取有限长 $N$ 个样本这在频域等价于乘一个矩形窗会让频谱出现旁瓣泄漏。第三步是频域离散化DFT输出的频率点只有 $N$ 个间隔为 $\Delta f f_s / N$恰好分布在DTFT这一个周期内的 $N$ 个均匀点上。所以你可以把DFT理解为“对DTFT的一个周期做等间隔采样再取一个周期”。这就能解释FFT频谱图的横轴从0到 $f_s$或归一化0到1纵轴对应频谱密度在不同频率点的采样值。4.2 DFT和DFS的关系周期延拓的视角我举个例子把这个关系说清楚。假设你手头有 $N 1000$ 个采样点你把它当作一个周期为1000的周期序列的头一个周期其余部分假想是无限重复。DFS算出来的频谱结果也是一个周期为1000的离散序列DFT只是取了其中一组主值。周期延拓这个动作是隐式的所以很多做工程的人不知道采集的信号被做了“无限重复”这个假设。一旦数据两端左右拼起来不平滑频谱里就会出现额外的频谱泄漏。这也是为什么加窗比如汉宁窗、海明窗能改善泄漏——窗函数把数据两端强制压低周期延拓后的“接缝”不再明显。工程中一个常见问题是FFT后的频谱看起来有好多毛刺和基座不是理想的理论谱线。这往往不是计算问题而是物理模型的问题你实际是在对周期延拓后的信号算DFS而你的数据并不真的满足周期性。理解了这一点很多频域分析的困惑就迎刃而解。4.3 从FS/FT到DFT的参数换算与幅度校正使用FFT做频谱分析时经常有人问为什么频谱峰值幅度和信号真实幅度对不上这个问题要从DFT的定义来说。DFT正变换是 $X[k] \sum_{n0}^{N-1} x[n] e^{-j2\pi kn/N}$如果信号是频率 $f_0$、幅度 $A$ 的正弦波且 $f_0$ 恰好落在某个频率点上那么峰值幅度大约是 $A \cdot N / 2$。还原真实幅度的方法是频谱幅度除以 $N/2$直流分量除以 $N$。下面这段Python代码展示了完整的单边频谱分析和幅度校正流程import numpy as np from numpy.fft import fft fs 1000.0 # 采样率单位 Hz N 1000 # 采样点数 t np.arange(N) / fs # 时间轴 # 两个正弦波叠加50Hz幅度2.0120Hz幅度1.0 x 2.0 * np.sin(2 * np.pi * 50.0 * t) 1.0 * np.sin(2 * np.pi * 120.0 * t) X fft(x) # 单边频谱取前一半先除以N非直流分量再乘2 mag np.abs(X[:N // 2]) / N mag[1:] * 2 # 频率轴 freq np.arange(N // 2) * fs / N # 找出幅度最大的两个频率点 peak_idx np.argsort(mag)[-2:] for idx in sorted(peak_idx): print(f频率: {freq[idx]:.1f} Hz, 幅度: {mag[idx]:.3f})输出结果应当接近频率: 50.0 Hz, 幅度: 2.000 频率: 120.0 Hz, 幅度: 1.000这个校正原理源自FS的系数定义DFT峰值乘以校正系数后得到的是信号在该频率处的有效幅度。理解这点后你就不再会被频谱图上看起来很小的峰值误导了。5. 常见问题与排查技巧实录5.1 频谱出现镜像或重叠现象是FFT结果在 $f_s/2$ 以上的频率像是主频谱的镜像翻转。这其实是正常的因为DFT输出的后半段对应负频率分量单边谱只显示 $0$ 到 $f_s/2$ 的正频率段。如果你看到超过 $f_s/2$ 的频谱有实实在在的频率成分那就要警惕混叠了信号的最高频率超过了奈奎斯特频率 $f_s/2$高频成分被折叠回低频区域。混叠的解决办法很直接既提高采样率把采样率设到信号最高频率的4倍以上增加余量又要在采样前加抗混叠低通滤波器把不需要的高频成分滤掉。另外要注意采样后滤波就晚了一旦混叠发生缺失的频率信息无法从数字信号中恢复。5.2 谱线泄漏与栅栏效应泄漏是截断造成的。取有限长数据相当于给无限长信号乘了一个矩形窗矩形窗的频谱是 $sinc$所以原本一根理论谱线被展宽成 $sinc$ 形状能量向旁瓣扩散。表现为谱线变胖、底部出现波动、与真实谱线之间出现“栅栏效应”一样的盲区真正的峰顶落在两个频率采样点之间时你看到的峰值会比实际低频率位置也有偏差。解决泄漏首选加窗汉宁窗、海明窗可以压低旁瓣代价是主瓣变宽频率分辨能力下降。解决栅栏效应可以用零填充增加FFT点数但这只是对频谱做插值频率点更密了并不改变真实分辨率。真实分辨率由信号有效时长决定近似为 $1/T_{meas}$其中 $T_{meas}$ 是采样持续时间。5.3 幅度算出来对不上理论值除了4.3里提到的归一化问题还有一种常见情况是频率泄露导致的峰值偏低。如果信号频率不在FFT频率栅格上能量分散到相邻好几个谱线上单根的峰值幅度就变小了。这时即使做了幅度校正读数依然偏低。解决办法通常是用窗函数并做幅值修正或者增大采样点数让频率栅格更密更推荐的方法是对峰值附近的谱线做插值计算比如利用相邻两根谱线幅度估算真实峰值的频率和幅度工程上叫“短时傅里叶变换峰值插值”或“加权修正法”。如果信号是多个很接近的频率成分先加分窗再考虑插值否则频率分辨不开一切幅度读取都失去意义。5.4 频率分辨率不够怎么办频率分辨率 $\Delta f f_s / N$也就是说采样时长越长分辨率越高两个频率靠得越近的谱线才能被分开。但要注意分辨率不由FFT点数单独决定采样点数提高了但采样时长不变也只是插值分辨不了更近的频率。想真正提高分辨率只有增加采样时间。如果数据已经收集完了无法再采样那就需要用更高级的方法比如基于子空间的高分辨率算法MUSIC、ESPRIT或者压缩感知类方法它们能突破瑞利限但计算复杂对信噪比也有要求。常规工程场景我更推荐先保证足够的采样时长再用加窗和插值做打磨。5.5 常见问题速查表现象可能原因排查思路与对策超过 $f_s/2$ 出现新频率成分混叠提高采样率采样前加低通滤波峰值偏矮、谱线底部宽频谱泄漏加窗处理优先选汉宁窗峰值位置偏差、幅度抖动栅栏效应零填充插值或峰值插值修正直流分量巨大、掩盖低频成分信号有直流偏移先减均值再做FFT多次测量频谱不一致触发位置不一致增加同步触发或使用相干平均加窗后幅值偏小窗函数能量损失使用窗函数幅度修正系数提示FFT只能看到频谱的幅度信息相位信息要从副本来读。如果只关心幅值建议用单边谱加幅度校正如果还要提取相位则要保留频域复数值的结果不要直接取绝对值。6. 写在最后的一些体会当年我也在四种傅里叶变换的公式里绕了很久后来发现突破口不是公式本身而是“时域离散对应频域周期、时域周期对应频域离散”这个对偶规律。从那以后碰到任何和频谱有关的工程问题我都先问自己一句话我手里的信号在时域是什么形态要看的频谱是连续还是离散是周期还是非周期这一步想清楚了该用FS、FT、DTFT、DFS还是DFT答案自己就出来了。还有一个小技巧想分享考前或面试前突击傅里叶变换时别先背公式先把三角脉冲和矩形脉冲这两个变换对画在纸上再把它们通过卷积和尺度变换扩展出去。这两个变换对可以说是信号与系统的“乘法口诀表”比抱着半本书啃效率高得多。如果你正准备系统学数字信号处理建议把今天讲的内容和“采样定理”“窗函数”放在一起理解。四种形式是骨架采样和加窗是血肉把这三块捏在一起你再回头看FFT的任何参数设置都能知道它在理论上动的是哪一根弦。