搞信号与系统、做控制算法、玩数字信号处理的人大概都经历过那么一个阶段傅里叶变换、拉普拉斯变换、z变换三个东西摆在一起公式长得像亲戚性质表背得滚瓜烂熟可一旦落到具体问题上就犯迷糊不知道该掏哪一个。考试的时候还能靠题感蒙一蒙进了工程现场就露馅——有人拿傅里叶变换去分析发散信号积分算出来不收敛还在那死磕有人用拉普拉斯变换去处理采样数据忘了离散和连续根本不是一个域还有人把z变换的收敛域直接扔掉只看那个分式表达式最后反变换出来一个因果性完全相反的序列仿真结果和实测对不上查了半天才发现是ROC写错了。这篇就专门聊这三个变换的对比。我不打算按教材的章节顺序来念而是按实际干活时会怎么选、边界在哪、会踩什么坑这条线组织。内容偏工程视角讲清楚它们各自管什么、解什么方程、怎么互相换算顺带把三角脉冲的傅里叶变换这个老被考、老被忘的点拆开讲透给一套能直接背下来用的记忆路径。适合正在啃信号与系统课程的同学也适合工作里偶尔要翻出这些工具、但细节已经有点模糊的工程师。1. 三个变换不是三选一而是同一条主线上的三个位置1.1 从解微分方程这条主线看它们的分工先把结论摆出来这三个变换本质上是同一个思路在不同对象上的三次落地思路就是——把时域里难处理的运算微分、积分、卷积、差分搬到另一个域里变成简单的代数运算乘、除、加算完再搬回来。这条主线想明白了三者的关系就顺了。微分方程求解是最典型的场景。连续时间系统的动态特性写成微分方程里面有一堆 d/dt直接解非常麻烦。拉普拉斯变换把微分算子变成乘以 s把积分算子变成除以 s一个微分方程瞬间变成一个关于 s 的代数方程解出 H(s) 或者 X(s) 之后做部分分式展开再查表反变换回去整个过程机械、稳定、不容易错。这就是拉普拉斯变换在连续系统里的核心价值。傅里叶变换是拉普拉斯变换的一个特例。当信号满足一定条件、并且拉普拉斯变换的收敛域包含虚轴的时候把 s 取成 jω拉普拉斯变换就退化成傅里叶变换。它换来的是物理意义最直白的频域分解——信号由哪些频率成分、各占多少幅度和相位。代价是适用范围窄很多增长的信号比如 e^{2t}u(t)压根没有傅里叶变换。z变换是拉普拉斯变换在离散域的对应物。离散序列没有微分有的是延迟和差分z变换把延迟一个采样变成乘以 z^{-1}差分方程于是也变成代数方程。它和拉普拉斯变换的关系通过 z e^{sT} 这条映射线连起来T 是采样周期。理解这条映射你就能把连续域的稳定判据直接平移到离散域。所以学习顺序上我个人的建议是先彻底搞懂拉普拉斯变换它是母体再把 s 换成 jω 得到傅里叶变换再把 s 的复平面换成 z 平面得到 z变换。反过来学先背傅里叶变换那堆性质表很容易学成一盘散沙。1.2 一张表看清三者的适用对象和定义式概念对照一开始就摆清楚后面的推导才不容易串。变换定义式变换变量作用对象核心用途傅里叶变换X(jω)∫x(t)e^{-jωt}dtjω纯虚连续信号频谱分析、滤波设计拉普拉斯变换X(s)∫x(t)e^{-st}dtsσjω复连续信号解微分方程、系统函数z变换X(z)Σx[n]z^{-n}z复离散序列解差分方程、数字滤波三点补充说明。第一傅里叶变换的积分下限有时写成 0^- 有时写成 -∞取决于信号是不是因果别看到两种写法就以为有一处错了。第二拉普拉斯变换和傅里叶变换都是连续域的只是变量范围不一样一个是整个复平面一个只有虚轴那一根线。第三z变换里的 z 是个复数写成 z re^{jΩ}其中 r 是模、Ω 是相角这个 r 和连续域的 σ 是打通的具体在第三节讲。还有个容易忽略的点单边变换和双边变换的区别。单边拉普拉斯变换积分从 0^- 开始默认信号在 t0 处为零好处是能把初始条件自然带进方程特别适合解带初值的微分方程双边变换从 -∞ 开始用于纯信号分析。z变换同理单边 z变换求和从 n0 开始双边从 -∞ 开始。做控制、做电路题的绝大多数情况下用的都是单边做滤波器频率响应分析时用双边。这个选择不是随便定的选错了初始条件就丢了。2. 定义式只是壳收敛域才是灵魂2.1 傅里叶变换的隐含前提绝对可积很多人学傅里叶变换时只记公式把它当无条件成立的工具结果在分析阶跃信号、周期信号时怎么算都不对。问题出在积分 ∫x(t)e^{-jωt}dt 要存在收敛x(t) 必须满足一些条件教科书一般给的是绝对可积∫|x(t)|dt ∞。这是个充分条件不是必要条件但足以覆盖大部分实际信号。为什么强调这个因为它决定了你能不能直接用定义式去算。u(t) 的傅里叶变换理论上不满足绝对可积但工程上我们照样用靠的是引入狄拉克函数 δ(ω)把 1/(jω) πδ(ω) 这样的结果凑出来。这在数学上属于广义函数的意义下成立考试会考但你要清楚这是在放宽条件不是在打脸。一个自检的习惯拿到一个信号先看它随时间怎么变化。如果它在无穷远处既不发散、总能量又有限傅里叶变换基本能算。如果它随时间指数增长或者是个持续的周期信号直接上傅里叶变换就会翻车这时候要么用拉普拉斯/z变换要么接受广义函数的结果。2.2 拉普拉斯变换用衰减因子把发散信号救回来拉普拉斯变换的高明之处就是在被变换的信号上乘了一个实指数衰减因子 e^{-σt}。当 σ 取得足够大时原本发散的信号被压住了积分就能收敛。算完之后 σ 作为一个参数保留在结果里收敛域就是让积分收敛的那些 σ 的取值集合。拿 x(t) e^{at}u(t) 举例。乘上 e^{-σt} 之后变成 e^{(a-σ)t}u(t)只要 σ a指数就是衰减的积分收敛得到 X(s) 1/(s-a)收敛域 Re{s} a。这里 a 可以是正数、负数、复数a 是复数的时候收敛域就是个半平面。这个乘衰减因子的动作本质上是把频率轴从纯虚轴挪到了复平面上的一条竖线 σ。傅里叶变换只在 σ0 这根线上看信号拉普拉斯在整块区域里看。视野大了能处理的对象就多了。代价是算出来的结果多了个 σ 的维度需要靠收敛域把信号和表达式重新对应起来——这正是下一小节要展开的坑。2.3 z变换把离散世界的那套东西对应过来z变换的逻辑和拉普拉斯一模一样只是对象换成了序列。z 是个复数写成 z re^{jΩ}代入定义式 X(z) Σx[n]z^{-n} Σx[n]r^{-n}e^{-jΩn}。看这个形式就知道r^{-n} 就是离散版的衰减因子r 对应连续域 e^{σT}Ω 对应 ωT。当 r 1也就是 |z| 1单位圆时z变换退化成 DTFT离散时间傅里叶变换。这和连续域里虚轴上的拉普拉斯变成傅里叶是完全平行的结构。所以如果你已经理解了连续域那套离散域几乎是照抄一遍只是把轴换成圆把半平面换成圆内/圆外。离散域有个连续域没有的特性周期性。因为 e^{jΩ} 和 e^{j(Ω2π)} 是同一个复数z变换在单位圆上天然以 2π 为周期重复。这个周期性是采样带来的后果也是频率混叠现象的根源。做数字滤波器设计时这个周期性会直接影响频率响应的设计方式必须心里有数。2.4 同一个表达式配不同的收敛域就是两个完全不同的信号这是我认为三个变换里最容易被忽略、也最坑人的一点单独拎出来说。连续域的例子X(s) 1/(s-a)。如果收敛域是 Re{s} a对应的原信号是 e^{at}u(t)因果、右边信号。如果收敛域是 Re{s} a对应的是 -e^{at}u(-t)反因果、左边信号。同一个式子两条不同的信号差别完全在收敛域。离散域的例子更典型X(z) z/(z-a) 1/(1-az^{-1})。收敛域 |z| |a| 对应 a^n u[n]收敛域 |z| |a| 对应 -a^n u[-n-1]。两个序列一个随 n 增长在正方向一个只在负方向出现。这带来一个实操结论做反变换时收敛域和表达式是同等重要的两个输入。只给表达式不给收敛域反变换是不唯一的。我在带项目时见过新人把收敛域写在草稿纸角落然后就丢了最后仿真波形和理论对不上来回找了两天。更进一步收敛域还直接决定了系统稳定性。连续系统稳定的充要条件是收敛域包含虚轴jω 轴离散系统稳定的充要条件是收敛域包含单位圆。因果系统的收敛域是最右极点的右侧连续或最外极点的外侧离散所以因果且稳定就要求所有极点都在左半平面连续或单位圆内离散。你看稳定性判据其实是收敛域概念的一个推论不是孤立的规则。3. s平面到z平面的映射把三张图叠成一张3.1 核心映射关系 z e^{sT} 到底怎么摊开把 s σ jω 代入 z e^{sT}得到 z e^{σT} · e^{jωT}。拆成模和相角|z| e^{σT}∠z ωT。这条式子就是两个平面之间的翻译官。逐条看映射结果。s 平面的虚轴σ0映射到 |z| e^0 1也就是单位圆。s 左半平面σ0映射到 e^{σT} 1也就是单位圆内部。s 右半平面映射到单位圆外部。稳定性判据在这三句话里就串起来了左半平面 ↔ 圆内 ↔ 稳定。再看频率轴。s 平面上沿虚轴从 -j∞ 走到 j∞映射到 z 平面上是沿单位圆转圈而且 ω 每增加 2π/T∠z 就增加 2π回到同一个点。翻译成人话离散域的频率是周期重复的周期是 2π/T归一化后就是 2π。这就是为什么数字滤波器设计里频率响应只画 0 到 π或者 -π 到 π那一段后面的都是重复的镜像。还有个容易搞混的细节s 平面上的 ω 和 z 平面上的 Ω ωT单位不一样。连续域 ω 是 rad/s离散域 Ω 是 rad/sampleT 是采样周期。单位换算错了画出来的频率响应会整体缩放看着形状对了但位置不对排查起来特别费劲。3.2 稳定性判据、频率响应、因果性在一张图上全部对齐把前面几节的内容收拢成一张对照表我建议直接抄在笔记本第一页。概念连续域s平面离散域z平面稳定区域左半平面 Re{s}0单位圆内 |z|1临界稳定虚轴极点落此单位圆极点落此不稳定区域右半平面单位圆外频率响应沿 jω 轴取值沿单位圆取值频率周期性无非周期有周期 2π因果系统收敛域最右极点右侧最外极点外侧这张表的价值在于它让你不用分别记两套规则。离散域那些看起来独立的判据其实全是连续域规则通过 ze^{sT} 平移过去的。考试时如果一时想不起单位圆内是稳定还是不稳定就从 ze^{sT} 现场推一遍比死记硬背靠谱。再补一个映射的坑z e^{sT} 这条映射把 s 平面沿虚轴做周期性折叠。s 平面上 ω 相差 2π/T 的多个点会映射到 z 平面上同一个点。这意味着从 s 到 z 是多对一的反过来 z 到 s 是一对多、需要用 ln 且要指定分支。做连续控制器离散化时这个多值性是根源各种离散化方法前向欧拉、后向欧拉、双线性变换本质上就是用不同的近似去处理这个 log各有各的频率畸变特性。这一点在做数字控制系统时是实打实要面对的不是纯数学游戏。3.3 双线性变换工程里最常用的那座桥从连续设计搬到离散实现最常用的桥是双线性变换也叫 Tustin 变换核心式子是 s (2/T)·(z-1)/(z1)。它把整个左半平面映射到单位圆内稳定性保证不丢代价是频率轴被压缩了需要用预畸变prewarping把关键频率点校正回来。具体做法设计前把关心的角频率 ω 用 Ω 2·arctan(ωT/2)/T 换算成实际要用的频率设计完再映射回去。这个预畸变步骤不做截止频率会偏截止频率越高偏得越厉害。我在做音频滤波器时踩过这个坑截止频率设 8 kHz、采样率 44.1 kHz不预畸变的话实测截止点偏了好几百 Hz。相比之下前向欧拉s (z-1)/T和后向欧拉s (z-1)/(zT)简单但前向欧拉会把一部分左半平面映射到圆外可能把原本稳定的系统变成不稳定做之前一定要验算。后向欧拉和双线性都是稳定的映射工程里更常用后两种。4. 三角脉冲的傅里叶变换别硬背用卷积关系推4.1 三角脉冲是矩形脉冲卷自己得到的三角脉冲的傅里叶变换之所以难记是因为直接从定义式去积那个分段线性函数做起来又长又容易错。换个思路用时域卷积对应频域相乘这条性质一步就出来了。先看矩形脉冲。宽度 τ、高度 1、中心在原点记作 g(t) rect(t/τ)它的傅里叶变换是 τ·sa(ωτ/2)其中 sa(x) sin(x)/x。这个应该很熟。现在让矩形脉冲和自己做卷积。两个长度为 τ 的矩形卷积结果是一个底宽 2τ、峰高 τ 的三角脉冲中心仍在原点。按卷积定理时域卷积对应频域相乘于是这个三角脉冲的频谱就是 [τ·sa(ωτ/2)]²也就是 τ²·sa²(ωτ/2)。验证一下三角脉冲的面积是底乘高的一半底 2τ、高 τ面积等于 τ²频谱在 ω0 处 sa(0)1算出来 τ²对得上。零点位置在 ωτ/2 kπk 为非零整数即 ω 2kπ/τ也对得上。如果三角脉冲高度是 A 而不是 τ带宽参数还是 τ那频谱就是 A·τ·sa²(ωτ/2)。这里参数分清楚τ 控制底宽底宽为 2τA 控制峰高两个是独立的。我用一个约定把符号固定下来——记 Λ(t/τ) 表示底宽 2τ、峰高 1 的三角脉冲那么 Λ(t/τ) ↔ τ·sa²(ωτ/2)。4.2 从信号光滑度这个直觉反推衰减速度记住三角脉冲谱是 sa 的平方之后还能再记一条更底层的规律时域信号的连续/光滑程度决定频域包络的衰减速度。矩形脉冲有跳变不连续频谱包络按 1/ω 衰减。三角脉冲本身连续但它的一阶导数有跳变在峰顶和两端折角处频谱按 1/ω² 衰减。如果构造一个一阶导也连续的波形比如升余弦频谱能按 1/ω³ 衰减。这条规律可以用分部积分推出来每做一次分部积分时域的微分就搬到频域变成乘 jω 在分母上而积分能不能进一步降阶就看时域函数在边界处是否为零、是否连续。跳变越多谱衰减越慢。时域波形光滑度特征频谱包络衰减零点间距矩形脉冲有跳变1/ωΔω2π/τ三角脉冲连续导数跳变1/ω²Δω2π/τ升余弦脉冲导数也连续1/ω³Δω2π/τ这张表的实战用处很大。做频谱规划、估算带外泄漏、判断滤波器阶数时你不必精确算出每个频率的值只要知道包络的衰减阶数就能判断这个波形适不适合用在这种带宽约束下。三角脉冲比矩形脉冲谱衰减快所以在要求低带外泄漏的场合用三角脉冲或者更光滑的窗函数比用矩形窗更好这是窗函数设计里非常基础的一条经验但很多人只记结论不理解原因换个波形就不会推了。4.3 记忆路径总结三步能在草稿纸上复原真到考试或者面试现场别指望能默写出积分过程按下面三步走第一步回忆矩形脉冲的变换 τ·sa(ωτ/2)。第二步回忆三角脉冲等于两个半宽矩形卷积。注意这里有个参数陷阱底宽 2τ 的三角脉冲等于两个宽度都是 τ 的矩形卷积。如果你写成两个宽度 2τ 的矩形卷积那得到的是底宽 4τ 的三角脉冲参数就错了。第三步把第一步的结果平方得 τ²·sa²(ωτ/2)。如果峰高是 A乘上 A/τ 变成 A·τ·sa²(ωτ/2)。再顺手核对三件事峰值对不对sa(0)1ω0 处应为脉冲面积、零点间距对不对Δω 2π/τ、衰减阶数对不对平方所以是 1/ω²。三项都对上基本不会错。5. 把三个变换丢进代码里跑一遍5.1 连续域从拉普拉斯到频率响应的数值验证光看公式容易虚跑一遍数值最踏实。下面这段 Python 用数值积分近似验证三角脉冲的傅里叶变换顺带和理论值对比。import numpy as np tau 1.0 # 三角脉冲底宽为 2*tau fs 400.0 # 采样率 T_total 60.0 t np.arange(-T_total/2, T_total/2, 1/fs) # 构造三角脉冲底宽 2*tau峰高 1 tri np.maximum(1 - np.abs(t)/tau, 0.0) # 选几个频点做数值积分 w_list np.array([0.1, 0.5, 1.0, 2.0, 5.0]) for w in w_list: # 数值傅里叶变换实部 X_num np.trapezoid(tri * np.cos(w*t), t) # 理论值tau * sa^2(w*tau/2) x w*tau/2 X_theo tau * (np.sin(x)/x)**2 print(fw{w:4.1f} 数值{X_num:.6f} 理论{X_theo:.6f})跑出来数值和理论基本吻合误差主要来自截断和积分步长。这里有两个实操细节值得说。第一np.trapz在新版 NumPy 里已经改名成np.trapezoid老代码直接跑会报 AttributeError这是个很常见的版本坑。第二积分区间别取太窄时域窗口截断相当于乘了个矩形窗频域会引入卷积造成的纹波取到信号基本衰减完为止这里 60 秒对 τ1 足够。同一个脚本换成矩形脉冲把tri换成rect (np.abs(t) tau/2).astype(float)理论值换成tau*np.sin(w*tau/2)/(w*tau/21e-12)就能对比两种波形的谱衰减速度直观验证第 4 节的规律。5.2 离散域z变换与 DTFT 的关系可视化离散侧同样可以验证。取因果序列 x[n] 0.8^n·u[n]z变换是 X(z) z/(z-0.8)收敛域 |z| 0.8。单位圆上的值就是它的 DTFT。import numpy as np a 0.8 N 200 # 序列截断长度 n np.arange(N) x a**n Omega np.linspace(0, 2*np.pi, 512) z np.exp(1j*Omega) # 数值求和得到 X(e^{jOmega}) X_num np.array([np.sum(x * zi**(-n)) for zi in z]) # 理论值 z/(z-a) X_theo z/(z-a) err np.max(np.abs(X_num - X_theo)) print(最大误差:, err) # 检查稳定性极点在 0.8位于单位圆内 - 稳定截断长度 N 取多大是个经验值。对 |a|1 的因果序列a^N 衰减到可忽略即可N200 时 0.8^200 已经远小于浮点精度误差只来自离散求和的截断。反过来如果 a1极点在单位圆外数值求和根本不收敛脚本会跑出巨大值——这本身就是不稳定的数值表现是个很直观的自检方式。把这个脚本稍微改一下让 a 取 1.2看看 X_num 会怎么炸再对照极点位置在单位圆外你对单位圆这个稳定性边界会有完全不同的体感比看公式印象深得多。5.3 用符号运算把连续和离散的对应关系摆在一起如果装了 MATLAB 或 SymPy可以直接让机器帮你做符号变换把三种变换的对应关系一次列出来对建立直觉很有帮助。syms t n z s % 连续域因果指数信号的拉普拉斯变换 laplace(exp(-2*t)*heaviside(t), t, s) % 得到 1/(s2) % 离散域指数序列的z变换 ztrans(0.5^n, n, z) % 得到 z/(z-0.5)import sympy as sp t, n, z, s sp.symbols(t n z s, realFalse) # 连续域拉普拉斯变换 sp.laplace_transform(sp.exp(-2*t), t, s) # (1/(s2), -2, True) # 离散域z变换 sp.ztrans(0.5**n, n, z) # z/(z-0.5)注意 SymPy 的laplace_transform返回一个三元组第三个元素是收敛条件如-2 re(s)这就是自动给出的收敛域。很多人用符号工具时只看第一个元素把收敛条件扔了结果反变换时对不上。这个和手算时丢掉收敛域是同一个错误工具不会替你思考。把连续和离散的结果并排看你会发现结构完全对称1/(s2) 对应 e^{-2t}u(t)z/(z-0.5) 对应 0.5^n·u[n]。极点位置一个在 s-2左半平面稳定一个在 z0.5单位圆内稳定判据一模一样。6. 踩过的坑和排查思路6.1 常见问题速查表现象可能原因排查方向反变换结果因果性不对收敛域漏写或写错检查ROC是极点右侧还是左侧仿真发散但理论说稳定离散化方法把左半平面映射到圆外换用双线性或后向欧拉频率响应整体偏移预畸变没做或ω/T单位换算错核对采样周期和角频率单位数值积分结果不收敛时域窗口太短或采样太粗加大窗口、减小步长z变换求和爆炸序列本身发散查极点是否在单位圆外频谱包络衰减比预期慢时域有跳变或截断窗太硬换更光滑的窗函数三角脉冲谱参数对不上卷积的矩形宽度取错底宽2τ对应两个宽τ矩形卷积6.2 几条只有实际操作才会积累的经验第一初值定理和终值定理可以用来快速自检。算出 X(s) 之后如果原信号有明确的初值和终值用 x(0)lim_{s→∞}sX(s)、x(∞)lim_{s→0}sX(s) 对一下能立刻发现量纲或者系数错误。我用这招抓出过好几次差 2π 或者差 T 的疏漏。前提是终值定理要求所有极点在左半平面允许原点处一个一阶极点条件不满足时极限会给出错误答案别乱用。第二离散域里 z^{-1} 到底代表什么一定要落到具体系统上说。在信号处理里 z^{-1} 是单位延迟在有些控制教材里为了写成幂级数形式会把 z 和 z^{-1} 的定义反过来。看别人的推导时先确认这个约定不然整段推导都读反了。这是个非常隐蔽的坑跨教材对照时尤其容易中招。第三数值变换永远有边界效应。用有限长度的 DFT 去近似理论频谱相当于给信号加了矩形窗频域就是理论谱和窗谱的卷积会抹平尖锐的峰、产生旁瓣。要判断一个毛刺到底是信号本身的性质还是截断引入的把窗口长度翻倍再看一次真特征位置不动截断伪影会跟着变。第四把三个变换的工具箱整理成一份个人清单。看到信号先分类是连续还是离散、是因果还是非因果、有没有指数增长、是要频谱还是要解方程。四个问题问完用哪个变换基本就定了。这个分类过程练熟了比背一百条性质表都有用。7. 什么场景该掏哪个变换把选型逻辑收成几条可以直接套用的判断。做纯频谱分析、看信号里有哪些频率成分、设计模拟滤波器用傅里叶变换。前提是信号在时间上不发散、能量有限。碰到周期信号或者阶跃这种理想化信号接受用广义函数表达的结果即可这是工程约定。解连续时间系统的微分方程、推导系统函数、分析模拟电路的传递函数、判断模拟控制系统稳定性用拉普拉斯变换。带初始条件的问题用单边纯信号分析用双边。收敛域必须和表达式一起写这是硬性要求。处理采样序列、设计数字滤波器、解差分方程、分析离散控制系统用 z变换。稳定性看单位圆因果性看收敛域内外频率响应看单位圆上取值。从连续设计搬到离散实现优先用双线性变换加预畸变。做数字信号处理的频域分析、看离散序列的频谱形状可以直接用 DTFT也就是单位圆上的 z变换。它比完整 z变换轻但拿不到稳定性信息因为它只看圆上那一条线。我个人的习惯是手边常备三张图s 平面标出极点位置和收敛域、z 平面标出极点位置和单位圆、以及一张信号分类流程图。遇到新问题先往这三张图上放放得进去说明分类清楚了放不进去说明还没想明白。这套流程在带新人时特别好用比从头推导一遍快得多也更容易把概念性的错误在动手之前就拦下来。最后分享一个小技巧。如果一时分不清某个结论属于哪个变换就回到定义式做一次量纲检查连续域里 s 的量纲是 1/秒频率离散域里 z 无量纲。凡是算式里出现 s 和 z 混用、或者时间 t 和序号 n 混用的多半是哪一步做了不该做的换算。这一招救过我好几次尤其是在对照不同教材公式的时候。