信号与系统学到 2-4 这一节,课表上写着“连续时间傅立叶变换”,很多人就以为只是把前面周期信号的傅立叶级数换个名字,结果一做题就懵了。连续时间傅立叶变换(CTFT)是整个频域分析的分水岭:它能处理非周期信号,把“频谱”从离散的谱线变成连续的谱密度,后续的采样定理、滤波器设计、调制解调全都建立在它上面。这篇内容适合三类人:正在学信号与系统、被“傅立叶变换到底跟傅立叶级数什么关系”卡住的同学;考研复习想快速把公式和性质串成体系的人;以及工作中需要重新捡起频域分析的工程师。我尽量把推导直觉、手算步骤和容易踩的坑一次讲透。
1. 连续时间傅立叶变换到底在干什么
1.1 从“频率成分”到“频谱密度”的思维切换
先看定义。一个连续时间信号 x(t) 的傅立叶变换是:
$$X(j\omega) = \int_{-\infty}^{+\infty} x(t) e^{-j\omega t} dt$$
反变换是:
$$x(t) = \frac{1}{2\pi} \int_{-\infty}^{+\infty} X(j\omega) e^{j\omega t} d\omega$$
很多课本把这组公式直接砸给你,却不解释为什么是积分、为什么前面带 1/(2π)、为什么用 e^{-jωt} 而不是别的。我当初学的时候也卡了很久。后来我的理解是:正变换本质上是在做“相关性检测”——把 x(t) 和每一个复数正弦 e^{jωt} 做内积,得到的 X(jω) 就表示信号里“这个频率的成分有多少”。注意是连续扫描所有频率,所以严格说 X(jω) 不是傅立叶级数里那个“幅度 Ck”,而是频谱密度,单位是“幅度 × 时间”,对应到频域就是“幅度 / 频率”。这个概念的切换极其关键:周期信号的频谱是离散的线谱,每根谱线的高度就是那个频率分量的真实幅度;非周期信号的频谱是连续的面,X(jω) 本身是密度,只有对频率做积分才能得到真实幅度。
反变换为什么有 1/(2π)?因为正变换做完,频谱被压缩到了角频率域。 ω = 2πf,积分变量从 f 换成 ω 时就多出 2π 的因子。你可以把 X(jω) 理解成无数个 e^{jωt} 按“密度”叠加,密度叠加完要还原真实信号幅度,就得乘上 dω/(2π)。这个因子配合后面讲的对偶性,用多了自然就记住,不用死背。
1.2 为什么核函数偏偏是 e^{-jωt}
有人会问:为什么分解成 e^{jωt} 而不是 cos、sin?第一,复数指数同时包含了 cos 和 sin 两个分量,处理相位天然方便。一个频率成分不光有幅度还有相位,用 cos 展开需要在公式里同时出现正余弦两个系数,而 e^{jωt} 的实部和虚部天然承载了这两个信息。第二,LTI 系统对复指数输入的处理极其简单——输出等于输入乘上频响 H(jω),e^{jωt} 是线性时不变系统的本征函数。这一条才是频域分析在工程里能用的根本原因。如果你非要用三角函数展开,卷积定理、系统频响这些概念会变得绕脖子。
另外提醒一点:工程上有时会把傅立叶变换写成关于频率 f 的形式,只差一个 2π 缩放:
$$X(f) = \int_{-\infty}^{+\infty} x(t) e^{-j 2\pi ft} dt$$
两种写法没有谁对谁错,但做题时一定要统一。下面的推导我统一用角频率 ω,避免来回换算出错。
2. 从傅立叶级数到傅立叶变换:很多教材没讲透的“极限过程”
2.1 周期延拓与非周期极限怎么衔接
这一小节我想把“为什么非周期信号也要有傅立叶分析”讲清楚,因为它直接决定了你对公式的记忆方式。
周期信号 x_T(t) 可以展开成傅立叶级数:
$$x(t) = \sum_{k=-\infty}^{+\infty} C_k e^{jk\omega_0 t}, \quad \omega_0 = \frac{2\pi}{T}$$
Ck 由在一个周期上的积分得到。现在让周期 T 无限增大,信号就“不再重复”,变成一个非周期信号。这个过程中,基频 ω0 = 2π/T 趋近于 0,离散谱线间隔越来越密。原本孤立的谱线 Ck(位置在 kω0)越来越靠近,极限情况下变成一条连续曲线——这就是 X(jω)。所以傅立叶变换不是推翻傅立叶级数,而是傅立叶级数在周期趋近无穷时的极限形式。
我当时听老师讲这个“极限”觉得太抽象,后来自己推了一遍才踏实。你可以设一个有限长的信号,只在 [-T/2, T/2] 内有值,其他为 0。把它按周期 T 重复成周期信号,写出 FS 系数:
$$C_k = \frac{1}{T} \int_{-T/2}^{T/2} x(t) e^{-jk\omega_0 t} dt$$
如果定义:
$$X(j\omega) = \int_{-T/2}^{T/2} x(t) e^{-j\omega t} dt$$
那么显然 Ck = X(jkω0) / T。随着 T 增大,ω0 变小,谱线变多,每条谱线的幅度 Ck 也趋近于 0——因为能量被摊到越来越多的谱线上。但注意,Ck 与 T 的乘积(也就是 X(jkω0))是有限且连续的。所以真正的物理量是“谱密度”,不是单根谱线的值。
2.2 收敛条件与吉布斯现象:不是所有信号都能直接套公式
用积分定义计算时,信号要保证傅立叶变换存在。最常用的一组条件是狄利克雷条件,和 FS 的要求类似:信号绝对可积,即 ∫|x(t)|dt < ∞;在任何有限区间内只有有限个极值点;只有有限个不连续点。满足这些条件时,变换收敛,且在连续点处反变换能精确还原 x(t);在不连续点处,反变换收敛到左右极限的平均值。
这里有个经典坑:很多同学以为“绝对可积”是傅立叶变换存在的必要条件,其实不是。它是充分条件之一。现实中很多常用信号并不可积,比如常数、阶跃、符号函数、周期信号,它们照样有傅立叶变换,只是结果里会出现冲激函数(后面会细说)。所以遇到不可积信号时不要慌,查表或者用广义函数理论去推,不要直接说“不存在”。
吉布斯现象也同样值得留意:用有限项逼近一个带跳变的信号时,跳变点附近会出现固定约 8.9% 的过冲,不管取多少项都不会消失,只是过冲区域越来越窄。这是频域截断带来的固有现象,不是计算错误。图像压缩、滤波器设计里如果处理不好,边缘会出现振铃,根源就是它。
3. 常用信号变换对:手算推导与记忆技巧
3.1 必须背熟的几个“基本款”
下面几组变换对是后续所有计算的基石,我建议你不仅要记住结果,还要能自己推一遍。
矩形脉冲。设 x(t) = A,|t| ≤ τ/2,其他为 0:
$$X(j\omega) = \int_{-\tau/2}^{\tau/2} A e^{-j\omega t} dt = \frac{2A}{\omega} \sin\left(\frac{\omega \tau}{2}\right) = A\tau ,\text{sinc}\left(\frac{\omega\tau}{2\pi}\right)$$
这里“sinc”用归一化定义还是非归一化定义,不同教材不一样。我只是用 sinc(x) 表示 sin(πx)/(πx) 这种常见写法,自己推导时按 sin 处理就行。注意 X(0) = Aτ,正好等于信号与时间轴的面积,这个检查很实用。
单边指数衰减信号。x(t) = e^{-at}u(t),a > 0:
$$X(j\omega) = \frac{1}{a+j\omega}$$
模值是 1/√(a²+ω²)(这是一个低通形状的谱),相位是 -arctan(ω/a)。这个结果很好记,而且可以由它推出很多其他变换对,比如把 a 往 0 靠近就得到阶跃相关的式子。
单位冲激。δ(t) 的变换是:
$$\mathcal{F}[\delta(t)] = 1$$
意思是一个冲激包含了所有频率分量,且幅度均匀。反过来,常数 1 的变换是 2πδ(ω),说明纯直流在频域只在 ω = 0 处有能量。这两条合起来记住“时域冲激 ↔ 频域常数”“时域常数 ↔ 频域冲激”,遇到很多问题能秒解。
阶跃信号和符号函数。符号函数 sgn(t) = 1(t>0)、-1(t<0)。它不是绝对可积,但可以用极限法求:
$$\mathcal{F}[\text{sgn}(t)] = \frac{2}{j\omega}$$
阶跃 u(t) 可以写成 (1 + sgn(t))/2,所以:
$$\mathcal{F}[u(t)] = \pi\delta(\omega) + \frac{1}{j\omega}$$
很多初学者不理解为什么会有 πδ(ω)。我提供一个直觉:阶跃里含有一个直流分量——它在 t>0 时恒为 1,所以必然有 ω=0 处的冲激;另外它在 0 点跳变,跳变贡献了类似符号函数的高频分量 1/(jω)。如果你从能量角度看,阶跃既不是能量有限也不是绝对可积,自然要用冲激来处理直流部分。这个结论在很多控制系统的拉普拉斯变换对应里也会用到,值得写进笔记。
3.2 周期信号的傅立叶变换:一句话结论
周期信号不满足绝对可积,但它的变换同样存在,而且结果是频域里的冲激串。
最经典的例子是余弦信号:
$$\cos(\omega_0 t) ;\xleftrightarrow{\mathcal{F}}; \pi\left[\delta(\omega-\omega_0) + \delta(\omega+\omega_0)\right]$$
正弦则对应:
$$\sin(\omega_0 t) ;\xleftrightarrow{\mathcal{F}}; -j\pi\left[\delta(\omega-\omega_0) - \delta(\omega+\omega_0)\right]$$
一般化的结论:任何周期信号都可以先用傅立叶级数展开成一系列 e^{jkω0t},而指数信号 e^{jkω0t} 的傅立叶变换是 2πδ(ω - kω0)。于是周期信号的频谱就是原离散谱线 Ck 乘上 2π 后搬到对应频率位置,变成一串冲激。这个“周期 ↔ 离散”的对应关系,是后面采样定理、离散傅立叶变换理解的基础。
我把常用变换对整理成一张表,方便复习:
| 时域信号 x(t) | 傅立叶变换 X(jω) | 备注 |
|---|---|---|
| δ(t) | 1 | 全频带均匀 |
| 1 | 2πδ(ω) | 直流 |
| δ(t - t0) | e^{-jωt0} | 时移 → 相位旋转 |
| e^{-at}u(t), a>0 | 1/(a+jω) | 低通形状 |
| t e^{-at}u(t), a>0 | 1/(a+jω)² | 二阶低通 |
| sgn(t) | 2/(jω) | 跳跃产生高频 |
| u(t) | πδ(ω) + 1/(jω) | 直流+高频混合 |
| e^{-a|t|}, a>0 | 2a/(a²+ω²) | 双边指数 |
| 矩形脉冲(幅度A,宽度τ) | Aτ · 2 sin(ωτ/2)/(ωτ) | 主瓣+旁瓣 |
| cos(ω0 t) | π[δ(ω-ω0)+δ(ω+ω0)] | 两条冲激 |
| sin(ω0 t) | -jπ[δ(ω-ω0)-δ(ω+ω0)] | 虚数,带相位 |
4. 傅立叶变换的性质:做题提速的关键,也是系统分析的命脉
4.1 时移、频移和尺度变换的直观含义
性质这部分不光是公式堆砌,每一个性质都对应一个工程直觉。先说三个最简单的。
线性。这个不用多讲,满足叠加。做题时把复杂信号拆成表里的基本信号,各算各的再加起来即可。
时移。若 x(t) → X(jω),则 x(t - t0) → X(jω)e^{-jωt0}。它只改变相位,不改变幅度谱。这一条说明时间上平移信号,不会改变信号各个频率分量的强度,只会改变它们的相对相位。滤波器设计里“线性相位”的概念就来源于此。
频移。x(t)e^{jω0t} → X(j(ω - ω0))。它就是把频谱整体搬到 ω0 附近,调制原理的本质:要把基带信号搬到高频,就用载波 e^{jω0t} 去乘。在通信系统里天天都在用。
尺度变换。若 x(t) → X(jω),则:
$$x(at) ;\xleftrightarrow{\mathcal{F}}; \frac{1}{|a|} X\left(j\frac{\omega}{a}\right)$$
a 变大时信号在时域被压缩,频谱被展宽、幅度减小;a 变小时时域被拉伸,频谱变窄、幅度变大。这是“时域越窄,频域越宽”的不确定性原理在傅立叶层面的体现。做脉冲设计时,想缩短脉冲宽度,就得接受占用更大带宽。
4.2 对偶性、卷积定理、Parseval 公式
对偶性是我觉得最“划算”的一条性质。因为正变换和反变换只差一个 1/(2π),所以很多时频结论可以成对记忆:
若 x(t) → X(jω),则 X(t) → 2π x(-ω)。
举个例子:前面说常数 1 → 2πδ(ω),对偶一下就能推出 δ(t) → 1,两组结论互为镜像。做题遇到不熟悉的信号时,先想想它是不是某个已知变换的“对偶形式”。能省大量计算。
卷积定理。这是全书最核心的性质,没有之一:
$$x_1(t) * x_2(t) ;\xleftrightarrow{\mathcal{F}}; X_1(j\omega), X_2(j\omega)$$
时域卷积等于频域相乘。为什么 LTI 系统的输出 y(t) = h(t) * x(t) 在频域里就是 Y(jω) = H(jω)X(jω)?就是这个定理。有了它,你把系统时域的卷积运算变成频域乘法,再配合常用的变换对和查表,很多复杂的积分瞬间就能解出来。反过来说,时域相乘对应频域卷积(除 2π),这就是调制和采样中频谱搬移的理论依据。我建议你把这组性质用笔手推一遍傅立叶级数的卷积,再过渡到广义的卷积定理,记牢它是后面所有系统分析的支柱。
Parseval 定理。能量形式的定理也非常实用:
$$\int_{-\infty}^{+\infty} |x(t)|^2 dt = \frac{1}{2\pi} \int_{-\infty}^{+\infty} |X(j\omega)|^2 d\omega$$
它保证能量在时域和频域是守恒的。它除了帮你验证变换计算结果,在功率谱密度估计、随机信号分析里也几乎是定义级的工具。补充一句:对于功率信号(比如周期信号),因为有冲激的存在,通常要把它先写成 FS 或受限信号的极限,再用功率谱密度来描述,这个细节在工作中很有用。
我把性质表列出来,方便当速查手册用:
| 性质 | 时域 | 频域 |
|---|---|---|
| 线性 | a x1 + b x2 | a X1 + b X2 |
| 时移 | x(t - t0) | X(jω)e^{-jωt0} |
| 频移 | x(t)e^{jω0t} | X(j(ω - ω0)) |
| 尺度变换 | x(at) | (1/ |
| 对偶性 | X(t) | 2π x(-ω) |
| 时域卷积 | x1 * x2 | X1 X2 |
| 频域卷积 | x1 x2 | (1/2π)(X1 * X2) |
| 时域微分 | dx/dt | jω X(jω) |
| 频域微分 | -jt x(t) | dX/dω |
| 帕塞瓦尔 | ∫ | x |
5. 实操演练:用手算跑通矩形脉冲的完整流程
5.1 从定义出发的分段积分
看再多的公式,不如亲手算一道经典题。下面我用矩形脉冲做完整例子,把过程拆到每一步,你照着走一遍基本就能掌握套路。
信号定义:
$$x(t) = \begin{cases} A, & |t| \le \tau/2 \ 0, & \text{otherwise} \end{cases}$$
第一步,套正变换公式。因为信号只在有限区间非零,积分区间可以截断:
$$X(j\omega) = \int_{-\tau/2}^{\tau/2} A e^{-j\omega t} dt$$
注意:很多新手容易把积分上下限写错,或者忘了只在非零区间积分。这个区间就是信号的支撑区间,写对了后面才好算。
第二步,直接积。e 指数的积分是个经典公式:
$$\int e^{-j\omega t} dt = \frac{e^{-j\omega t}}{-j\omega}$$
所以:
$$X(j\omega) = A \cdot \frac{e^{-j\omega t}}{-j\omega} \bigg|_{-\tau/2}^{\tau/2} = \frac{A}{-j\omega}\left(e^{-j\omega \tau/2} - e^{j\omega \tau/2}\right)$$
注意上下限代入时不要慌,符号要看清楚。括号里是 e^{-ja} - e^{ja} = -2j sin(a),所以:
$$X(j\omega) = \frac{A}{j\omega} \cdot 2j\sin\left(\frac{\omega\tau}{2}\right) = \frac{2A}{\omega}\sin\left(\frac{\omega\tau}{2}\right)$$
这样就算完了。很多同学在这一步容易把分母的 ω 丢掉,或者在 e 指数的符号上出错。我的建议是把欧拉公式写在旁边,每步代入都检查一遍正负号。
第三步,整理成漂亮形式,并做两个快速检查。
写成:
$$X(j\omega) = A\tau \cdot \frac{\sin(\omega\tau/2)}{\omega\tau/2}$$
这里令 sinc 参数为 ωτ/2,就是标准的“Sa 函数”形状。检查点有二。第一,ω=0 时用极限:因为 sin(x)/x → 1,所以 X(0) = Aτ,等于时域函数与坐标轴围成的面积。这个检查适用所有信号,如果算出来不是面积,基本可以判断积分过程出错。第二,零点位置:当 ωτ/2 = kπ(k 为非零整数),即 ω = 2kπ/τ 时,X = 0。这些正是旁瓣和主瓣之间过零的位置。你可以取 A=1、τ=1,画出来看主瓣在 [-2π, 2π] 之间,零点在 ±2π。这样的图形你多画几次,对“时域宽度和频域零点位置成反比”就有直觉了。
5.2 用性质做核验:一题多解才是真学会
算完直接结果后,我强烈建议再用性质验一遍。以矩形脉冲为例,你可以把它看成两个阶跃之差:
$$x(t) = A,u\left(t+\frac{\tau}{2}\right) - A,u\left(t-\frac{\tau}{2}\right)$$
用阶跃的变换 u(t) → πδ(ω) + 1/(jω),配合线性与时移性质:
$$ X(j\omega) = A e^{j\omega\tau/2}\left[\pi\delta(\omega) + \frac{1}{j\omega}\right] - A e^{-j\omega\tau/2}\left[\pi\delta(\omega) + \frac{1}{j\omega}\right] $$
注意 e^{jωτ/2}δ(ω) 和 e^{-jωτ/2}δ(ω) 在 ω=0 时都等于 δ(ω),所以冲激项其实互相抵消(直觉也很好理解:矩形脉冲没有直流平均之外的奇异直流)。剩下的就是:
$$A\left(e^{j\omega\tau/2} - e^{-j\omega\tau/2}\right)\frac{1}{j\omega} = \frac{2Aj\sin(\omega\tau/2)}{j\omega} = \frac{2A}{\omega}\sin\left(\frac{\omega\tau}{2}\right)$$
结果与直接积分完全一致。这种“一题多解”不是炫技,而是核验计算是否出错的有效手段。此后你遇到阶跃组合成的信号,就知道可以直接用性质拆,不用每次从定义积分重头算。
除此之外,还可以用 Parseval 定理做一次能量核算。比如取 A=1、τ=1,时域能量是 1。频域积分 (1/2π)∫ |2 sin(ω/2)/ω|² dω 也应该等于 1。这种计算稍繁琐,但是当你不太确定某一个变换对的系数时,这是最可靠的验算方式。我自己学的时候就用过这个办法,能很快抓出漏了 1/(2π) 或者 2 的倍数错误。
6. 常见坑与排查经验:挂在黑板上的“血泪史”
6.1 理论中的高频易错点
以下几个问题是我在学习和答疑过程中见过最多的,每一个都能让你在考场上或工程分析里栽跟头。
第一,收敛条件与不可积信号的冲突。前面说过,绝对可积是充分非必要。做题时如果机械地先用“绝对可积”去判一个信号,然后说它“没有傅立叶变换”,就会丢掉阶跃、周期信号等一批重要情况。正确的姿势是:先看是不是“基本信号”,再查表或利用性质求广义变换。很多工程信号都不是能量有限信号,但照样有频谱,只是频谱里可能出现冲激。不要一看到不可积就停手。
第二,频率变量 f 和 ω 混用导致漏因子。同样一个信号,用角频率写是 1/(a+jω),用频率写可能是 1/(a+j2πf)。变换对表如果用 ω 版本,做完再除 2π 或补 2π 时就特别容易出错。我的习惯是全程只用 ω,只在最后涉及实际采样率或物理频率时才换成 f=ω/(2π)。你要是习惯用 f,那就别在做题中途切单位。
第三,算周期信号忘了冲激串。很多人对周期信号直接拿非周期信号的公式去积分,发现不收敛,就不知道怎么办。周期信号的傅立叶变换一定是频域里的冲激串,每一项的位置对应谐波频率,幅度对应 2πCk。如果你做到一个周期信号变换后没有出现 δ 函数,大概率是漏了冲激或者把 FS 系数和 FT 幅度混为一谈。
第四,时移中的相位号总写错。时移 x(t - t0) 应该乘 e^{-jωt0},方向反了就会把相位搞成反向。快速检验方法就是看信号“向右移动”后,各频率分量是否滞后——滞后对应负相位,所以是负指数。这个判断比死记公式可靠。
6.2 计算和验证时的自查清单
下面是我自己解决问题时的排查顺序。遇到和傅立叶变换有关的一题做错了,按这个顺序查一遍,通常能在两分钟内定位问题:
- 检查积分区间是否正确。非零区间写错是最高频的错误。
- 检查 e^{j...} 的符号。代入上下限时最容易漏符号。
- 检查最终结果在 ω=0 的值是否等于时域信号的面积(适用于可积信号)。
- 检查量纲。如果 X 的量纲不对,可能漏了时间单位或 2π 系数。
- 检查是否存在周期性或直流分量。如果信号有直流,结果里要有 δ(ω) 项,没有就是算错了。
- 用 Parseval 定理做一个粗评估。频域能量和时域能量差别悬殊时,基本可以确定系数有误。
- 最后再用数值手段验证。比如在 Python 里用 numpy 的 FFT 近似连续信号的变换,看峰值位置和主瓣形状对不对(注意 FFT 是离散且周期性的,只能做定性验证,别把两者直接等同)。
我个人还有一个学习习惯:把每一章出现的变换对和性质都做一张“双栏卡片”,一栏是时域表达式,一栏是频域表达式,随时翻看。等到后面学到拉普拉斯变换时,这张卡片能帮你快速做对比:把 jω 换成 s 就是很多公式的拉氏版本,但要注意拉氏变换的收敛域(ROC)这个额外的维度。连续时间傅立叶变换学扎实了,拉普拉斯变换、采样定理、离散傅立叶变换就是在这个地基上添砖加瓦。
我把矩形脉冲从定义积分、性质核验到能量验证完整跑完一遍之后,最大的感受是:傅立叶变换不难,难的是不熟悉的时候每一步都在怀疑自己。它不像解微分方程那样有很多“巧劲”,本质就是积分、性质、表格三件套。只要多算几道典型题,把常用变换对和性质变成肌肉记忆,后面看到任何系统框图或者调制模型,你都能下意识地在脑子里画出频谱搬移的过程——那时候这门课才算真正入门了。