周期信号是否真的存在傅里叶变换,是很多初学信号与系统的读者最困惑的一点。教材里既说“周期信号不满足绝对可积条件,不能用傅里叶变换”,又会在频谱分析时直接画出周期信号的一根根离散谱线,还用傅里叶变换去推导采样定理。这种前后“矛盾”很容易让人思路走偏。本文把这套逻辑完整梳理一遍:先讲周期信号为什么能写成傅里叶级数,再推导周期信号傅里叶变换为什么是一串冲激,最后用 Python 做几个直观仿真,帮助你把连续傅里叶变换、傅里叶级数、DFT/FFT 之间的关系一次串起来。
阅读本文不需要很深的基础,但如果你已经学过傅里叶级数和傅里叶变换的基本定义,理解起来会更快。内容偏重原理讲解与工程对照,比较适合电子信息、通信、自动化相关专业的学生,也适合正在做频谱分析、采样系统设计、信号仿真开发的工程师。
1. 为什么周期信号也能做傅里叶变换
1.1 从傅里叶级数说起
周期信号最自然的数学描述是傅里叶级数。一个周期为 (T) 的信号 (x(t)),如果满足一定条件,可以分解成一系列频率为基波频率整数倍的正弦、余弦分量之和。
设基波角频率为:
[ \omega_0=\frac{2\pi}{T} ]
那么指数形式的傅里叶级数可以写成:
[ x(t)=\sum_{n=-\infty}^{\infty}C_n e^{jn\omega_0 t} ]
其中傅里叶级数系数为:
[ C_n=\frac{1}{T}\int_{T}x(t)e^{-jn\omega_0 t},dt ]
这里的 (C_n) 是复数,它的模反映了第 (n) 次谐波分量的幅度,辐角反映了该次谐波的初始相位。由于 (n) 只取整数,所以周期信号的频率分量天然就是离散的,相邻两根谱线之间的频率间隔固定为:
[ \Delta f=\frac{1}{T} ]
这一条是整个周期信号频谱分析的基础。周期越长,谱线越密;周期越短,谱线越疏。
1.2 傅里叶变换的适用范围
傅里叶变换通常定义为:
[ X(\omega)=\int_{-\infty}^{\infty}x(t)e^{-j\omega t},dt ]
这个式子对信号的时间范围没有限制,积分区间是整个实轴。为了保证积分收敛,一般要求信号满足绝对可积或平方可积条件。对于周期信号而言,它在整个时间轴上无限重复。只要信号不是恒等于零,它在无限区间上的能量就是无穷大,因此直接代入上式,积分往往不收敛。
所以严格地说,在普通函数意义下,周期信号没有经典傅里叶变换。但这并不影响工程中使用周期信号频谱,因为我们可以引入冲激函数,在广义函数意义下定义它的傅里叶变换。
这就解释了教材中看似矛盾的现象:一方面说周期信号不满足傅里叶变换条件,另一方面,正弦信号、周期方波、周期冲激串又都给出了对应的傅里叶变换表达式。这两种说法的本质区别在于:是不是允许使用冲激函数。
1.3 周期信号频谱的特殊形态
周期信号傅里叶级数中的谱线,表示的是“某次谐波的幅度”,单位是信号本身的物理单位,例如伏特;而傅里叶变换的物理含义是“频谱密度”,单位是信号单位除以赫兹或弧度每秒。当周期信号的傅里叶变换中出现冲激时,冲激的强度才有实际意义,直接画“高度”没有意义。
如果只看这个区别,初学者很容易把傅里叶级数系数 (C_n) 和傅里叶变换 (X(\omega)) 混淆。后面我们会证明,这两个概念之间有非常简单漂亮的换算关系:
[ X(\omega)=2\pi\sum_{n=-\infty}^{\infty}C_n\delta(\omega-n\omega_0) ]
也就是说,周期信号的傅里叶变换,是一组位于离散频率点 (n\omega_0) 处的冲激,每个冲激的强度由傅里叶级数系数乘以 (2\pi) 得到。这个结论是贯穿全文的核心。
2. 数学基础:傅里叶级数与几个重要条件
2.1 三角函数形式与指数形式
很多教材先从三角函数形式的傅里叶级数讲起:
[ x(t)=a_0+\sum_{n=1}^{\infty}\left(a_n\cos(n\omega_0 t)+b_n\sin(n\omega_0 t)\right) ]
其中:
[ a_0=\frac{1}{T}\int_{T}x(t),dt ]
[ a_n=\frac{2}{T}\int_{T}x(t)\cos(n\omega_0 t),dt ]
[ b_n=\frac{2}{T}\int_{T}x(t)\sin(n\omega_0 t),dt ]
三角函数形式直观,便于理解奇偶性带来的化简。指数形式则更简洁,也更适合与傅里叶变换、卷积运算衔接。两种形式通过欧拉公式转换:
[ e^{j\theta}=\cos\theta+j\sin\theta ]
在推导周期信号的傅里叶变换时,使用指数形式最方便,因为每个复指数分量的傅里叶变换形式非常清晰。
2.2 狄利克雷条件与吉布斯现象
并不是所有周期信号都能展开成傅里叶级数。傅里叶级数存在的充分条件通常称为狄利克雷条件,主要包括三条:
| 条件 | 说明 |
|---|---|
| 在一个周期内绝对可积 | 信号在一个周期内积分的绝对值有限 |
| 在一个周期内只有有限个极值点 | 不能在一个周期内无限次上下震荡 |
| 在一个周期内只有有限个间断点 | 间断点处的跳变值也必须有限 |
工程中遇到的周期信号,绝大多数都能满足这些条件。即使是理想方波,在一个周期内也只有两个跳变点,完全可以展开成傅里叶级数。
吉布斯现象是傅里叶级数截断时的典型现象:用有限次谐波去逼近一个带有跳变的周期信号时,在跳变点附近会出现固定大小的过冲,约为跳变值的 9%。随着谐波次数增加,过冲会越来越窄,但峰值不会消失。这不是算法实现错误,而是傅里叶级数逼近本身的性质,在实际滤波器设计和波形合成中需要留意。
2.3 为什么一定要引入冲激函数
如果只在“常规函数”范围内讨论,周期信号没有傅里叶变换。但实际频谱分析、调制解调、采样理论都要用到周期信号的傅里叶变换。
引入单位冲激函数 (\delta(t)) 后,傅里叶变换可以推广到广义函数。例如常数信号的傅里叶变换为一个冲激:
[ 1 \longleftrightarrow 2\pi\delta(\omega) ]
直流信号只在零频率处有能量,所以它的频谱是位于 (\omega=0) 处的冲激。这个结论是后面推导周期信号傅里叶变换的基础。
3. 核心推导:周期信号的傅里叶变换
3.1 先求复指数信号的傅里叶变换
考虑最简单的周期复指数信号:
[ x(t)=e^{j\omega_0 t} ]
由常数信号傅里叶变换对和傅里叶变换的频移性质,可以得到:
[ e^{j\omega_0 t}\longleftrightarrow 2\pi\delta(\omega-\omega_0) ]
频移性质的本质是:时域乘以一个复指数,相当于频谱在频域搬移。所以单频复指数信号的频谱,是一个位于 (\omega=\omega_0) 处的冲激。
同理:
[ e^{-j\omega_0 t}\longleftrightarrow 2\pi\delta(\omega+\omega_0) ]
这个结果虽然简单,却是整个周期信号傅里叶变换推导的基石。
3.2 对傅里叶级数逐项做变换
设 (x(t)) 是周期为 (T) 的信号,其指数形式傅里叶级数为:
[ x(t)=\sum_{n=-\infty}^{\infty}C_n e^{jn\omega_0 t} ]
对等号两边同时做傅里叶变换。由于傅里叶变换具有线性性质,可以将变换运算交换到求和号内部:
[ X(\omega)=\sum_{n=-\infty}^{\infty}C_n\cdot \mathcal{F}\left{e^{jn\omega_0 t}\right} ]
根据上一小节的结论:
[ \mathcal{F}\left{e^{jn\omega_0 t}\right} =2\pi\delta(\omega-n\omega_0) ]
所以最终得到:
[ X(\omega)=2\pi\sum_{n=-\infty}^{\infty}C_n\delta(\omega-n\omega_0) ]
这就是周期信号傅里叶变换的通用公式。它说明周期信号的频谱不是连续曲线,而是一串冲激,每个冲激出现在谐波频率 (n\omega_0) 上,强度与该次谐波的傅里叶级数系数成正比。
3.3 离散谱与频谱密度之间的关系
有时候读者会问:为什么书上写周期矩形脉冲的频谱是一根根“线谱”,但又说傅里叶变换结果是冲激?这两种说法是否矛盾?
不矛盾。傅里叶级数分析给出的是离散的幅度谱,纵轴是各次谐波的幅度 (C_n)。傅里叶变换给出的则是一个“密度”概念,在谐波频率处密度为无穷大,因此用冲激表示。平时画频谱图时,习惯直接画 (C_n) 的离散谱线,但严格写成傅里叶变换表达式时,必须保留 (2\pi\delta(\omega-n\omega_0))。
如果把周期信号的周期 (T) 不断增大,基波频率 (\omega_0) 会不断减小,谱线会不断变密。当周期趋于无穷大,即信号退化为非周期信号时,离散谱就过渡成了连续谱。这就是从傅里叶级数到傅里叶变换的极限视角。
4. 常见周期信号的傅里叶变换
4.1 余弦信号与正弦信号
对于余弦信号:
[ \cos(\omega_0 t)=\frac{e^{j\omega_0 t}+e^{-j\omega_0 t}}{2} ]
利用前文复指数的傅里叶变换结果,可得:
[ \cos(\omega_0 t) \longleftrightarrow \pi\left[\delta(\omega-\omega_0)+\delta(\omega+\omega_0)\right] ]
也就是说,余弦信号的频谱是左右对称的两根冲激,一根在正频率 (\omega_0) 处,一根在负频率 (-\omega_0) 处。
对于正弦信号:
[ \sin(\omega_0 t) =\frac{e^{j\omega_0 t}-e^{-j\omega_0 t}}{2j} ]
其傅里叶变换为:
[ \sin(\omega_0 t) \longleftrightarrow j\pi\left[\delta(\omega+\omega_0)-\delta(\omega-\omega_0)\right] ]
两个冲激的方向相反,体现了正弦函数的奇对称性。
4.2 周期矩形脉冲串
周期矩形脉冲串是工程中非常典型的周期信号。设脉冲幅度为 (A),脉冲宽度为 (\tau),周期为 (T),且在一个周期内:
[ x(t)= \begin{cases} A, & |t|\le \frac{\tau}{2}\ 0, & \frac{\tau}{2}<|t|<\frac{T}{2} \end{cases} ]
先计算傅里叶级数系数。直流分量为:
[ C_0=\frac{A\tau}{T} ]
第 (n) 次谐波系数为:
[ C_n=\frac{A\tau}{T}\cdot\frac{\sin(n\omega_0\tau/2)}{n\omega_0\tau/2} ]
其中 (\omega_0=2\pi/T)。于是周期矩形脉冲串的傅里叶变换为:
[ X(\omega) =2\pi\sum_{n=-\infty}^{\infty} \frac{A\tau}{T} \frac{\sin(n\omega_0\tau/2)}{n\omega_0\tau/2} \delta(\omega-n\omega_0) ]
这个结果有很多工程结论。谱线包络的第一个零点在频率 (1/\tau) 附近;脉宽越窄,包络的主瓣越宽,高频分量越丰富。所以窄脉冲的带宽往往比宽脉冲更大,这在雷达和通信系统中直接影响距离分辨率和带宽设计。
4.3 周期冲激串
周期冲激串可以写成:
[ p(t)=\sum_{m=-\infty}^{\infty}\delta(t-mT) ]
它在每个整数倍周期处都有一个单位冲激。对它求傅里叶级数时,只需要在一个周期内积分:
[ C_n=\frac{1}{T}\int_{-T/2}^{T/2}\delta(t)e^{-jn\omega_0 t},dt =\frac{1}{T} ]
也就是说,周期冲激串的所有谐波分量的幅度相同,都等于 (1/T)。因此其傅里叶变换为:
[ P(\omega)=\frac{2\pi}{T}\sum_{n=-\infty}^{\infty}\delta(\omega-n\omega_0) ]
这是一个非常有对称美的结论:时域中的周期冲激串,其傅里叶变换仍然是频域中的周期冲激串。冲激串在采样理论中非常关键,现实中的理想采样就可以抽象成信号乘以周期冲激串。
4.4 常用变换对速查
| 时域信号 | 傅里叶变换 |
|---|---|
| (1) | (2\pi\delta(\omega)) |
| (e^{j\omega_0 t}) | (2\pi\delta(\omega-\omega_0)) |
| (\cos(\omega_0 t)) | (\pi[\delta(\omega-\omega_0)+\delta(\omega+\omega_0)]) |
| (\sin(\omega_0 t)) | (j\pi[\delta(\omega+\omega_0)-\delta(\omega-\omega_0)]) |
| 周期冲激串 (\sum\delta(t-mT)) | (\frac{2\pi}{T}\sum\delta(\omega-n\omega_0)) |
| 周期信号 (\sum C_n e^{jn\omega_0 t}) | (2\pi\sum C_n\delta(\omega-n\omega_0)) |
这张表不需要死记,关键在于理解两个变换规则:复指数函数的傅里叶变换是一个冲激;傅里叶级数与傅里叶变换之间存在 (2\pi C_n) 的缩放关系。
5. 从连续到离散:与 DFT/FFT 的关系
5.1 为什么要单独讨论离散频率
连续周期信号理论上用傅里叶级数就可以分析,但实际工程中,信号进入计算机前必须采样,计算机只能处理有限长度的离散序列。真正在代码里跑的是 FFT,它在数学上对应的是离散傅里叶变换。
很多同学把 FFT 的结果直接理解成“周期信号的傅里叶变换”,实际上这中间还需要经过采样和截断两个步骤。周期信号先被采样成离散序列,再被截断成有限长度,然后做 FFT。每一步都会影响最终看到的频谱形态。
如果采样频率为 (f_s),采样点数为 (N),那么 FFT 的频率分辨率是:
[ \Delta f=\frac{f_s}{N}=\frac{1}{T_{window}} ]
其中:
[ T_{window}=N\cdot T_s ]
是时域截断窗口的总时长。窗口长度越长,频率分辨率越高,谱线之间的间距越小。
5.2 栅栏效应与整数周期截断
假设一个连续周期信号的基频是 (f_0=5\text{Hz}),采样率 (f_s=1000\text{Hz}),窗口长度 (T_{window}=1\text{s}),那么 FFT 频率分辨率为 (1\text{Hz}),5Hz 正好落在某个离散频点上。这种情况下,FFT 结果中可以看到非常清晰的谱线,因为窗口里包含了完整的 5 个信号周期。
如果窗口长度改为 (0.9\text{s}),FFT 分辨率变为 (1/0.9\approx1.11\text{Hz}),5Hz 就不再是离散频点的整数倍。此时信号能量会“泄漏”到所有相邻频点,原本单根的谱线变成一片旁瓣。这就是栅栏效应和频谱泄漏带来的影响。
从数学上说,对无限长序列做矩形窗截断,相当于原信号频谱与一个 (\text{sinc}) 函数的卷积。(\text{sinc}) 函数的旁瓣就是我们看到的泄漏分量。因此,做频谱分析时,让窗口长度尽量覆盖信号周期的整数倍,是降低泄漏最简单有效的手段之一。
5.3 频谱泄漏的工程本质
频谱泄漏不是 FFT 算法本身的问题,而是把无限长周期信号硬生生截断产生的。截断相当于给信号乘上了一个矩形窗,而矩形窗在频域有旁瓣。这些旁瓣和原信号的谱线卷积后,就形成了泄漏。
如果截断长度刚好是整数个周期,矩形窗的频域零点正好落在其他谐波谱线上,泄漏在离散采样点上就不会被看到。一旦截断长度不是整数周期,任何谐波谱线都会受到相邻旁瓣的干扰,频谱就变得不再干净。
同理,当信号本身不是严格周期时,“整数周期截断”无从谈起,就需要使用汉宁窗、海明窗等窗函数来压低旁瓣,代价是主瓣会变宽。这是频谱分析中一个典型的权衡。
6. Python 仿真验证
6.1 环境准备
本文示例使用 Python 3 编写,依赖 NumPy 和 Matplotlib。如果还没有安装,可以执行:
pip install numpy matplotlib代码中会用到以下模块:
import numpy as np import matplotlib.pyplot as plt下文所有代码都是完整可运行的。建议在 Jupyter Notebook 或 VS Code 中逐段运行,观察输出。
6.2 用傅里叶级数合成方波
先看最直观的例子:方波可以由无限多次奇次谐波叠加而成。取一个周期为 (T=1\text{s})、幅度 (A=1) 的奇对称方波,在一个周期内:
[ x(t)= \begin{cases} 1, & 0<t<\frac{T}{2}\ -1, & \frac{T}{2}<t<T \end{cases} ]
它的三角形式傅里叶级数为:
[ x(t)=\frac{4}{\pi}\sum_{k=1,3,5,\dots}\frac{1}{k}\sin(2\pi k f_0 t) ]
下面的代码用前 21 次谐波合成方波,并与理想方波对比:
import numpy as np import matplotlib.pyplot as plt f0 = 1.0 # 基频 1Hz T = 1.0 / f0 # 周期 fs = 10000 # 绘图时的高采样率 t = np.linspace(0, 2 * T, int(fs * 2 * T), endpoint=False) # 理想方波:前半周期为 1,后半周期为 -1 x_ideal = np.where(np.mod(t, T) < T / 2, 1.0, -1.0) def fs_square(t, A=1.0, f0=1.0, n_terms=21): """用前 n_terms 次奇次谐波合成方波""" x = np.zeros_like(t) for k in range(1, n_terms + 1, 2): x += (1.0 / k) * np.sin(2 * np.pi * f0 * k * t) return 4 * A / np.pi * x x_21 = fs_square(t, A=1.0, f0=f0, n_terms=21) plt.figure(figsize=(10, 4)) plt.plot(t, x_ideal, 'k--', linewidth=1.5, label='ideal square wave') plt.plot(t, x_21, linewidth=1.0, label='Fourier series, N=21') plt.xlabel('t/s') plt.ylabel('x(t)') plt.legend() plt.grid(True) plt.tight_layout() plt.show()运行这段代码,可以明显看到:在方波跳变处,合成波形出现了振荡,这就是吉布斯现象。谐波次数越高,振荡范围越靠近跳变点,过冲幅度仍然保持在跳变值的 9% 左右。
6.3 计算周期矩形脉冲的傅里叶级数系数
矩形脉冲串的傅里叶级数系数适合用 NumPy 批量计算。设幅度 (A=1),周期 (T=1\text{s}),脉冲宽度 (\tau=0.2\text{s})。
import numpy as np A = 1.0 T = 1.0 tau = 0.2 w0 = 2 * np.pi / T # 计算 n 从 -10 到 10 的傅里叶级数系数 n_arr = np.arange(-10, 11) C = np.zeros_like(n_arr, dtype=float) for i, n in enumerate(n_arr): if n == 0: C[i] = A * tau / T else: C[i] = (A * tau / T) * np.sin(n * w0 * tau / 2) / (n * w0 * tau / 2) for n, c in zip(n_arr, C): print(f"n={n:3d}, C_n={c:.6f}")从输出中可以观察到两个结论:第一,直流系数为 (0.2),等于脉冲占空比;第二,系数在 (n=5) 附近接近 0,因为频谱包络的第一个零点出现在:
[ \frac{n\omega_0\tau}{2}=\pi ]
即:
[ n=\frac{T}{\tau}=5 ]
这说明脉冲越窄,包络零点的 (n) 越大,高频分量衰减越慢。
6.4 FFT 谱线与截断泄漏对比
下面用 FFT 观察方波的谱线,并对比“整周期截断”和“非整周期截断”的区别。这里用方波代替矩形脉冲串,重点看谱线位置和泄漏形态。
import numpy as np import matplotlib.pyplot as plt fs = 1000.0 f0 = 5.0 def make_square(T_total): """生成 T_total 秒的 5Hz 方波""" N = int(fs * T_total) t = np.arange(N) / fs # 使用余弦型方波,避免采样点正好落在跳变点附近 x = np.sign(np.cos(2 * np.pi * f0 * t)) return x def single_side_spectrum(x): """计算单边幅度谱""" N = len(x) X = np.fft.fft(x) freq = np.fft.fftfreq(N, 1 / fs) half = N // 2 mag = np.abs(X[:half]) * 2 / N return freq[:half], mag # 第一种情况:窗口长度 1s,正好包含 5 个完整周期 plt.figure(figsize=(12, 8)) x1 = make_square(1.0) freq1, mag1 = single_side_spectrum(x1) plt.subplot(2, 1, 1) plt.stem(freq1, mag1, basefmt=" ") plt.xlim(0, 60) plt.title("Integer period truncation: 1.0s window") plt.xlabel("Frequency (Hz)") plt.ylabel("Magnitude") plt.grid(True) # 第二种情况:窗口长度 0.9s,包含 4.5 个周期,不是完整周期 x2 = make_square(0.9) freq2, mag2 = single_side_spectrum(x2) plt.subplot(2, 1, 2) plt.stem(freq2, mag2, basefmt=" ") plt.xlim(0, 60) plt.title("Non-integer period truncation: 0.9s window") plt.xlabel("Frequency (Hz)") plt.ylabel("Magnitude") plt.grid(True) plt.tight_layout() plt.show()运行后可以看到上图中理想位置 (5\text{Hz},15\text{Hz},25\text{Hz}\dots) 处出现清晰谱峰,且偶次谐波接近 0。下图由于截断窗口不是整数周期,频谱上出现了大量旁瓣,谱峰也不再集中在少数几个频点上。这就是频谱泄漏的直观体现。
需要注意,这里绘制的是幅度谱的显示值,FFT 数值做过 (2/N) 的单边谱显示处理,并没有对窗函数效应做精细补偿。工程上如果要与理论傅里叶级数系数精确对比,还需要考虑窗函数、采样点数、信号幅度等因素。
7. 常见问题与误区排查
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 周期信号直接代入傅里叶变换公式不收敛 | 信号不满足绝对可积条件,常规傅里叶变换不存在 | 引入冲激函数,使用广义傅里叶变换定义 |
| 把 (C_n) 和 (X(\omega)) 当成同一个量 | 傅里叶级数是离散幅度谱,傅里叶变换是频谱密度 | 记住关系 (X(\omega)=2\pi\sum C_n\delta(\omega-n\omega_0)) |
| FFT 得到的谱线和理论谱线不完全一致 | 截断窗口没有包含整数倍周期,或归一化方式不同 | 尽量整周期截断,并确认 DFT 归一化方式 |
| 矩形脉冲频谱零点位置找不到 | 零点位置与脉宽和周期有关,不是固定值 | 计算 (n=T/\tau),或绘制包络函数观察 |
| 有限谐波合成方波有振荡 | 吉布斯现象,不是程序错误 | 增加谐波次数,振荡会变窄但过冲不会完全消失 |
| 频谱图出现非谐波频率分量 | 频谱泄漏、采样率不足或信号本身不稳定 | 检查时域截断长度,必要时加窗函数 |
8. 工程建议与最佳实践
8.1 频谱分析前先预估基频
做周期信号频谱分析时,不要一上来就写 FFT。先明确信号的周期 (T) 或基频 (f_0),然后设计采样参数,尽量让窗口长度等于信号周期的整数倍。这样能显著减少频谱泄漏,得到的谱线也更接近理论分析结果。
如果事先不知道信号周期,可以先做一次粗略 FFT,从频谱中找到峰值位置,再反向调整窗口长度,做第二次精细分析。这种“先粗后细”的流程在实际数据处理中很实用。
8.2 注意理论谱与 FFT 幅度谱的归一化
理论分析中,周期矩形脉冲的傅里叶级数系数 (C_n) 是一个与采样无关的连续数学量。而 FFT 输出的幅度与采样点数 (N)、窗函数、信号幅度都有关系。不要直接把 FFT 纵轴和理论 (C_n) 画在同一张图里比较,必须先明确归一化方式。
对于包含直流分量的实信号,单边谱的直流分量通常除以 (N),其他频率分量乘以 (2/N)。这只是一种常用显示方式,不同教材和软件实现可能有差异,阅读文档时要留意。
8.3 谨慎处理冲激函数
冲激函数是广义函数,不能把它当作普通函数去计算函数值。在论文或报告中,写周期信号的傅里叶变换时,要明确写出“在广义函数意义下”或“引入冲激函数后”这个前提。否则容易在数学严谨性上出问题。
在代码中,不要试图直接生成一个真正的 (\delta(t)) 序列来模拟冲激,DFT 中不会出现冲激函数。要观察周期信号频谱,直接分析 FFT 谱峰即可,不要把“理论冲激串”和“FFT 谱线”混为一谈。
8.4 条件允许时使用解析公式交叉验证
FFT 能给出数值结果,但数值结果容易掩盖理解层面的错误。建议对矩形脉冲、方波、正弦信号这类可以被解析求解的周期信号,先用傅里叶级数公式算出理论系数,再和 FFT 结果对比。如果两者谱峰位置和相对幅度不一致,通常说明采样参数或截断方式有问题。
这种“理论解析 + 数值验证”的方法,比单纯运行代码更可靠,也能帮助你在调试复杂信号时快速定位问题。
9. 总结与后续学习路线
这篇内容可以提炼成三个核心结论:
第一,周期信号在常规函数意义下没有傅里叶变换