连续周期信号的傅里叶级数是信号与系统课程里的第一道分水岭。不少同学能把公式背下来却说不清楚“时域波形分解成离散频谱”这件事究竟意味着什么。这里先把核心思想摆出来傅里叶级数把一个具有周期性的连续时间信号表示成一系列频率为基频整数倍的正弦或复指数信号的叠加。拆完之后原来在时间轴上看起来很复杂的波形会变成一张非常直观的离散频谱。它真正有价值的地方不只是考试而是后面所有频域分析的基础。周期信号对应离散谱、非周期信号对应连续谱这个结论最早就是从傅里叶级数推出来的滤波器带宽设计、谐波分析、调制解调、FFT 结果解释也都要回到这个基本分解上。这个主题没有显卡门槛也不需要安装大模型真正的门槛在数学理解和数值验证。这篇文章会从连续周期信号的傅里叶级数定义讲起梳理三角形式与复指数形式、收敛条件和吉布斯现象、频谱与功率的关系再结合方波这个最典型的例子用 Python 做一次级数合成和 FFT 对照验证。最后会整理最常见的理解误区和排查思路。适合刚开始学信号与系统、正在复习考研信号部分、以及需要在 MATLAB 或 Python 里做信号仿真验证的读者。1. 连续周期信号的傅里叶级数核心能力与适用边界1.1 核心能力速览条目说明分析对象连续时间周期信号满足收敛条件即可核心能力将周期信号分解为基频整数倍的正弦/复指数叠加得到离散频谱输出结果直流分量、各次谐波幅度、相位、谱线位置数学基础微积分、欧拉公式、三角函数正交性主要工具Python NumPy/SciPy/Matplotlib或 MATLAB/Simulink硬件要求无特殊要求普通 CPU 机器即可运行仿真典型场景谐波分析、滤波器设计、调制解调理论、功率分析、FFT 结果验证与 FFT 关系周期信号整周期采样后FFT 谱线可用于近似验证理论傅里叶系数不适用对象非周期连续信号、离散时间序列、含无限能量的非稳定信号这本质上是一套数学工具而不是某个需要安装部署的软件包。因此在学习时重点不是“怎么启动”而是“怎么把一个真实波形和这些公式对应起来”。1.2 适用场景与使用边界傅里叶级数适合处理能够写成周期延拓的连续时间信号。比如 50Hz 工频电压波形、电力系统中的谐波电流、周期方波时钟、振荡器输出信号等。工程上很多波形虽然不完美但只要满足一定的收敛条件就能用有限项谐波去逼近和分析。需要注意它的适用边界也很清晰如果信号本身是非周期的应该使用傅里叶变换而不是傅里叶级数。如果信号是离散时间序列应该进入 DTFT、DFT 或 FFT 的框架不能直接套用连续周期信号的积分公式。如果信号在一个周期内不可积或者有无限多个极值点理论上傅里叶级数可能不收敛到原信号。傅里叶级数给出的是频域表示不等于消除了吉布斯效应。用有限项恢复波形时跳变附近会出现振铃过冲这是截断本身造成的。简单说傅里叶级数是理解和计算周期信号频谱的“第一块积木”。先把这个周期与离散谱的关系建立起来后面学傅里叶变换会顺很多。2. 建立数学概念周期、谐波与正交基先从基础概念开始。一个连续时间信号如果满足$$ x(t) x(t T_0) $$那么它是一个周期信号。其中最小的正整数 $T_0$ 称为基波周期$f_0 1/T_0$ 是基频$\omega_0 2\pi f_0$ 是基波角频率。所谓“基波”就是频率最低的那个正弦分量而 $n\omega_0$ 对应的分量称为第 $n$ 次谐波。傅里叶级数的核心观察是一个以 $T_0$ 为周期的信号它的频率成分不会随意出现只能出现在基频的整数倍上。原因很简单如果频率成分不是 $n\omega_0$那么这个成分自身并不以 $T_0$ 为周期叠加后也不可能整体保持周期 $T_0$。选择三角函数作为基函数是因为三角函数族在一个周期内满足正交性。也就是说对任意整数 $m \neq n$有$$ \int_{T_0} \cos(m\omega_0 t)\cos(n\omega_0 t) , dt 0 $$$$ \int_{T_0} \sin(m\omega_0 t)\sin(n\omega_0 t) , dt 0 $$$$ \int_{T_0} \cos(m\omega_0 t)\sin(n\omega_0 t) , dt 0 $$这套正交关系决定了系数可以像“向量投影”一样单独算出来。把周期信号看成无限维空间中的一个点三角函数基就是坐标轴傅里叶系数就是信号在各坐标轴上的投影。3. 三角形式和复指数形式的傅里叶级数3.1 三角形式工程上最常见的表示方法是$$ x(t) a_0 \sum_{n1}^{\infty} \left[ a_n \cos(n\omega_0 t) b_n \sin(n\omega_0 t) \right] $$其中 $a_0$ 是信号的直流分量也就是一个周期内的平均值$$ a_0 \frac{1}{T_0} \int_{T_0} x(t) , dt $$$a_n$ 和 $b_n$ 分别为余弦项和正弦项系数$$ a_n \frac{2}{T_0} \int_{T_0} x(t) \cos(n\omega_0 t) , dt $$$$ b_n \frac{2}{T_0} \int_{T_0} x(t) \sin(n\omega_0 t) , dt $$这里要留意不同教材的记法差异。有的教材把直流项写成 $a_0/2$相应系数公式会多一个 $1/2$ 的差别。做习题或写代码时先确认自己采用的是哪一种定义否则计算结果会整体偏移一个系数。三角形式的优点是物理意义直观每个频率成分都由一个余弦项和一个正弦项描述两者合起来决定该频率分量的幅度和相位。3.2 复指数形式复指数形式是信号处理中更通用的写法$$ x(t) \sum_{n-\infty}^{\infty} C_n e^{j n \omega_0 t} $$其中傅里叶系数为$$ C_n \frac{1}{T_0} \int_{T_0} x(t) e^{-j n \omega_0 t} , dt $$使用复指数形式后公式更紧凑正负频率同时出现推导卷积、调制等性质也更方便。3.3 两种形式的换算关系如果把欧拉公式代入三角形式就能得到两种形式之间的关系。对实数信号正频率分量的复指数系数与三角系数之间有如下关系$$ C_n \frac{a_n - j b_n}{2}, \quad n 0 $$$$ C_{-n} \frac{a_n j b_n}{2}, \quad n 0 $$直流项满足$$ C_0 a_0 $$因此三角形式中某次余弦分量的实际幅度是 $\sqrt{a_n^2 b_n^2}$而复指数形式中正频率分量的幅度是它的一半。这就是为什么很多频谱图上双边谱的谱线高度只有单边谱的一半。4. 收敛条件与吉布斯现象并不是任意周期信号都能用傅里叶级数完美表示。傅里叶级数收敛需要满足狄利克雷条件一个周期内信号绝对可积。一个周期内只有有限个极大值和极小值。一个周期内只有有限个第一类间断点。通常工程上遇到的周期信号都能满足这些条件所以理论分析时不必过于担心。但如果信号是理想冲激串、阶跃串这类广义函数就需要在广义函数意义下理解收敛。收敛的结果也很明确在信号的连续点处傅里叶级数收敛于原信号值。在信号的跳变点处傅里叶级数收敛于左右极限的平均值。用有限项谐波逼近时跳变点附近会出现过冲和振铃这种现象叫吉布斯现象。吉布斯现象是傅里叶级数截断误差的典型表现把它归结为“傅里叶级数错了”是不对的。随着谐波项数增加过冲区域会越来越窄但最大过冲幅度并不会消失大约保持在跳变幅度的 9% 左右。这个现象在实际通信系统和滤波器设计中经常会遇到比如带宽受限的方波信号会产生振铃。5. 频谱的物理含义幅度、相位与功率傅里叶级数把周期信号变成一组离散谱线。对于每个谐波频率 $n\omega_0$可以画出幅度谱和相位谱。幅度谱告诉你“这个频率成分有多大”相位谱告诉你“这个成分在时间轴上偏移了多少”。一个周期信号的平均功率可以表示为$$ P \frac{1}{T_0} \int_{T_0} |x(t)|^2 , dt $$在频域中帕塞瓦尔定理给出了另一个计算方式。对三角形式如果采用上面直流项为 $a_0$ 的定义有$$ P a_0^2 \frac{1}{2}\sum_{n1}^{\infty} (a_n^2 b_n^2) $$对复指数形式则有$$ P \sum_{n-\infty}^{\infty} |C_n|^2 $$这意味着无论你在时域计算能量还是在频域把每条谱线的能量加起来结果都是一样的。工程上经常用这个关系来检查谐波分析是否做对也可以用来计算总谐波失真等指标。6. 典型周期信号的谐波结构学习傅里叶级数时不能只背公式要把几个典型信号的变化规律记住。最简单的余弦信号只有一根谱线。方波则非常典型一个幅度为 $A$、周期为 $T_0$ 的奇对称方波可以展开为$$ x(t) \frac{4A}{\pi}\sum_{n1,3,5,\dots}^{\infty} \frac{1}{n}\sin(n\omega_0 t) $$从公式可以看出只包含奇次谐波没有偶次谐波。第 $n$ 次谐波幅度按 $1/n$ 衰减。方波存在不连续跳变所以高频分量衰减较慢只有一阶衰减速度。三角波或更平滑的连续分段线性信号则不同通常谐波幅度按 $1/n^2$ 甚至更快衰减。这说明信号的平滑程度越高高频能量越小。反过来说时域越尖锐、跳变越剧烈频域展得越宽。这个直觉对滤波器设计非常重要。周期冲激串的傅里叶级数也值得记住。一个周期为 $T_0$ 的冲激串$$ p(t) \sum_{k-\infty}^{\infty} \delta(t - kT_0) $$的傅里叶系数恒定为 $1/T_0$也就是说它在频域是一排等幅谱线。这个概念在采样定理推导中会反复出现。7. 从傅里叶级数到傅里叶变换为什么要重视这个桥梁傅里叶级数处理的是周期信号傅里叶变换处理的是非周期信号。两者之间并不是两个完全无关的数学工具而是一个极限过程。如果一个信号的周期 $T_0$ 不断增加那么基频$$ f_0 \frac{1}{T_0} $$会不断变小对应频谱上相邻谱线的间隔也会越来越小。当周期趋于无穷非周期信号可以看成周期无穷大的周期信号这时离散谱线之间的距离趋近于零求和就变成了积分。从工程角度记住下面这个对应关系就够了周期信号在频域是离散谱。非周期信号在频域是连续谱。DFT/FFT 处理的有限长离散序列频谱依然是离散的。这也是很多初学者容易混淆的地方。如果看到周期信号频谱图画成连续曲线那大概率有问题如果看到非周期信号频谱画成一根根离散谱线也需要谨慎判断。8. Python 数值实验方波级数合成与 FFT 验证8.1 实验环境这里用 Python 做验证主要依赖三个库pip install numpy scipy matplotlib代码不需要 GPU也不需要额外下载模型文件普通笔记本即可运行。建议在 Jupyter Notebook 中分步执行方便观察每一张图和每一组输出。8.2 用级数合成方波先定义方波和级数合成函数。以周期 $T2s$、幅度 $A1$ 的方波为例理论级数为$$ x(t) \frac{4}{\pi}\sum_{n1,3,5,\dots} \frac{1}{n}\sin(n\pi t) $$代码如下import numpy as np import matplotlib.pyplot as plt T 2.0 # 方波周期 A 1.0 # 方波幅度 omega0 2 * np.pi / T # 从 t0.05 开始避开 t0 处的跳变点 t np.linspace(0.05, 4.05, 4000, endpointFalse) def square_wave(t): 理想方波0-T/2 为 AT/2-T 为 -A tt t % T return np.where(tt T / 2, A, -A) def synthesize(t, max_n): 用不超过 max_n 次的奇次谐波合成方波 total np.zeros_like(t) for n in range(1, max_n 1, 2): total (4 * A / np.pi) * (1 / n) * np.sin(n * omega0 * t) return total fig, axes plt.subplots(2, 2, figsize(12, 6)) for ax