news 2026/10/17 1:27:39

傅里叶变换卷积定理:从推导到滤波、调制与采样应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
傅里叶变换卷积定理:从推导到滤波、调制与采样应用

学完连续时间非周期信号傅里叶变换的那些基础性质后,我一度以为剩下的工作就是查表做题。结果遇到时域卷积定理和频域卷积定理,学习难度直接拉升了一个台阶——但也正是这两个定理,让我真正觉得傅里叶分析这门工具“值回票价”。这篇既是我的学习笔记,也是给正在学信号与系统的朋友准备的排雷参考:我会从卷积定义出发手推一遍两个定理,讲清楚频域卷积定理里那个老被弄丢的 1/(2π) 到底从哪来,再结合滤波、调制、加窗、采样这些最常用的场景,说明它们到底能拿来干什么。

这篇笔记适合三类读者:正在复习信号与系统、准备期末考试的本科生;想搞懂频域分析本质的自学者;以及在仿真软件里被频谱幅度搞得一头雾水的同学。如果你已经清楚什么是傅里叶变换,并且对时移、尺度变换这些基础性质有印象,直接进入正题就行。要是还没看过前几篇性质笔记,也不影响理解这一篇,因为卷积定理的推导会从头开始,每一步都有对应的解释。

1. 为什么我把两个卷积定理从“性质列表”里单拎出来

1.1 时域卷积是全局运算,频域相乘是逐点运算

先看时域卷积的定义式:

y(t) = ∫_{-∞}^{∞} x(τ) h(t-τ) dτ

这个式子最大的特点是什么?全局性。计算任意一个输出时刻 y(t),你都得把输入信号 x 和系统冲激响应 h 做一次翻转、平移、相乘、积分,相当于在所有时间点上做一次“配对求和”。我最初学到这里总觉得很别扭:一个系统明明是因果的,输出却要“回头”看整个输入历史。这不只是计算量大不大的问题,而是思维方式上的改变——时域卷积是一种非局部运算。

而到了频域,情况完全相反:

Y(jω) = X(jω) · H(jω)

每个频率点独立相乘,互不干扰。这意味着输入信号被分解成无数个复指数分量后,系统只是对每个频率分量做了一个幅度缩放和相位旋转,再把它们叠加回去。一个全局运算变成一个逐点运算,这是傅里叶变换最迷人的地方。用一个生活化的类比:卷积像两个很长的名单逐项配对、逐项挂钩;频域相乘像两张价格表,同编号直接相乘出结果。名单配对费时费力,价格表相乘一眼就能得到全体结果。

1.2 频域卷积定理补齐了“乘法与卷积”的对称关系

既然时域卷积对应频域相乘,那反过来,时域相乘对应什么?答案就是频域卷积定理:

若 z(t) = x₁(t) · x₂(t),则 Z(jω) = 1/(2π) [X₁(jω) * X₂(jω)]

这个定理不是“顺便补上的对称结论”,它的实际地位非常高。幅度调制靠它解释,信号加窗靠它解释,冲激串采样还是靠它解释。可以说,不掌握频域卷积定理,你对“频谱搬移”“频谱泄漏”“采样延拓”这些概念的理解会一直停在背结论的层面。

我见过不少同学把两个定理背反,或者忘记了 1/(2π),根源在于没有把两个定理放在“时域与频域的对偶关系”里去理解。这两个定理不是两个孤立公式,它们是一组对称的桥梁:卷积和乘法在时域与频域之间互相转化,转化时付出的“代价”就是系数 1/(2π)。

1.3 从整个信号与系统框架看,它是承重墙

傅里叶变换的常用性质其实构成了一张对偶表格:时移↔相移,微分↔乘以 jω,卷积↔乘法,乘法↔卷积。如果把这组性质看作一套房屋结构,那么卷积定理就是承重墙。没有它们,系统频域分析法就缺了一大块;没有它们,周期信号傅里叶级数和非周期信号傅里叶变换之间的联系也变模糊了。

后面很多内容,比如采样定理的证明、数字信号处理里的周期卷积、通信原理里的匹配滤波,都会反复用到这两个定理。与其到那时候再回头补,不如现在把推导过程彻底过一次。

2. 时域卷积定理推导全过程:从卷积定义到频域乘积

2.1 先写出系统响应,再对两边做正变换

设线性时不变系统的输入为 x(t)、冲激响应为 h(t),输出为 y(t) = x(t) * h(t)。两边同时做傅里叶正变换:

Y(jω) = ∫_{-∞}^{∞} [ ∫_{-∞}^{∞} x(τ) h(t-τ) dτ ] e^{-jωt} dt

这个二重积分看第一眼确实有点吓人,但别慌,我们只是把“卷积符号”换成了“积分符号”,本质上没有引入任何新东西。接下来要做的事情,就是调整积分次序,把“谁先积分”重新排列。

2.2 交换积分次序:内层积分正好是另一个信号的频谱

把对 τ 的积分放到外面,把对 t 的积分放到里面:

Y(jω) = ∫_{-∞}^{∞} x(τ) [ ∫_{-∞}^{∞} h(t-τ) e^{-jωt} dt ] dτ

现在单独看内层积分。令 u = t - τ,那么 dt = du,指数项变成:

e^{-jωt} = e^{-jω(u+τ)} = e^{-jωτ} · e^{-jωu}

于是内层积分可以写成:

∫_{-∞}^{∞} h(u) e^{-jωu} du · e^{-jωτ} = H(jω) e^{-jωτ}

这一步出现的关键点,是 e^{-jωτ} 不受积分变量 u 影响,可以提到积分号外面。而这个 e^{-jωτ},其实就是时移性质在推波助澜:h(t-τ) 的傅里叶变换等于 H(jω) 乘以一个相移因子 e^{-jωτ}。把内层积分的结果代回去:

Y(jω) = ∫_{-∞}^{∞} x(τ) H(jω) e^{-jωτ} dτ = H(jω) ∫_{-∞}^{∞} x(τ) e^{-jωτ} dτ = X(jω) H(jω)

推导结束。可以看到,整个过程的核心动作是交换积分次序,之后的一切都是水到渠成:内层积分结算成 H(jω),外层积分结算成 X(jω)。

2.3 结果为什么那么像“系统的频率加权”

得到 Y(jω) = X(jω) H(jω) 之后,很多教材会顺势引出“频率响应”的概念。这个东西本质上就是一个加权函数:输入信号里频率为 ω 的成分,经过系统之后会被放大成原来的 |H(jω)| 倍,同时相位被旋转 ∠H(jω)。如果 |H(jω)| 在某些频率上近似为 0,那么这些频率的输入成分就几乎无法通过系统。

这就是滤波器的全部秘密。它并不神秘,也不复杂,无非就是一个“对不同频率给不同权重”的线性系统。而时域里的那道卷积积分,则被这个逐点相乘的视角完全替代了。每次我想到这里,都会再感叹一次:把卷积变成乘法,省下的计算量从第一道题开始就有了回报。

3. 频域卷积定理:推导里的 1/(2π) 是怎么“蹦”出来的

3.1 从时域乘积的傅里叶变换出发

现在看另一个方向。设 z(t) = x₁(t) · x₂(t),对 z(t) 做傅里叶正变换:

Z(jω) = ∫_{-∞}^{∞} x₁(t) · x₂(t) e^{-jωt} dt

这里需要一点“把已知的东西塞进式子”的技巧。我们把 x₁(t) 用逆傅里叶变换表示出来:

x₁(t) = 1/(2π) ∫_{-∞}^{∞} X₁(jη) e^{jηt} dη

这里引入哑变量 η 是有讲究的,因为如果继续用 ω 表示原频率,后面的推导会产生混淆。把 x₁(t) 的逆变换表达式代入 Z(jω):

Z(jω) = 1/(2π) ∫_{-∞}^{∞} [ ∫_{-∞}^{∞} X₁(jη) e^{jηt} dη ] x₂(t) e^{-jωt} dt

3.2 交换积分次序后,内积分变成 X₂(j(ω-η))

同样交换积分次序,把对 t 的积分先算:

Z(jω) = 1/(2π) ∫_{-∞}^{∞} X₁(jη) [ ∫_{-∞}^{∞} x₂(t) e^{-j(ω-η)t} dt ] dη

注意中间括号里的式子是什么?它就是 x₂(t) 的傅里叶变换,只不过频率点不是 ω,而是 ω - η。因此括号内直接写成 X₂(j(ω-η))。代回原式:

Z(jω) = 1/(2π) ∫_{-∞}^{∞} X₁(jη) X₂(j(ω-η)) dη

这就是频域卷积定理的完整表达式。它的最终形式是:两个信号在时域相乘,对应频域做一次“卷积积分”,再乘以 1/(2π)。括号里的积分正是 X₁(jω) 和 X₂(jω) 的卷积在频率点 ω 处的值,所以记作:

Z(jω) = 1/(2π) [X₁(jω) * X₂(jω)]

3.3 1/(2π) 到底是哪一步贡献的:由正逆变换定义决定

这是很多初学者容易卡住的地方:时域卷积定理没有额外系数,为什么频域卷积定理就多出一个 1/(2π)?

答案不在卷积本身,而在于傅里叶变换的系数约定。我们常用的定义把傅里叶正变换写成一个不带系数的积分:

X(jω) = ∫ x(t) e^{-jωt} dt

那么逆变换必然要把 1/(2π) 补齐,才能保证“先正变换、再逆变换”能恢复原函数:

x(t) = 1/(2π) ∫ X(jω) e^{jωt} dω

在频域卷积定理的推导中,我们把 x₁(t) 用逆变换展开,这个公式前面天然带着 1/(2π)。之后没有任何计算能把它约掉,于是它一路保留到最终结果里。

如果教材改用了另一种定义,把 1/√(2π) 平均分给正变换和逆变换,那么两个定理的系数也会跟着变化。但国内绝大多数课程的习惯是“正变换不带系数、逆变换带 1/(2π)”,所以做题时记住这一版即可:时域卷积到频域相乘没有额外系数,时域乘法到频域卷积带 1/(2π)。

我用一个不太严谨但很好记的口诀辅助记忆:卷积是“复杂运算”,变换成乘法是“优惠”,不收过路费;乘法变成卷积是“逆向操作”,收你 1/(2π) 的过路费。这样一记,两个定理的系数就不容易搞反了。

4. 串联实际场景:滤波、调制、加窗与采样

4.1 系统响应:卷积定理如何让频率域解法成为可能

先看最直接的场景。如果一个系统的冲激响应 h(t) 是典型的高斯脉冲或者 sinc 函数,直接在时域算 y(t) = x(t) * h(t),积分复杂到让人头皮发麻。但是转一圈回来,先求 X(jω) 和 H(jω),再做一次乘法,最后逆变换回时域,整个过程清晰可控。

工程上分析系统时,我们几乎不看时域卷积,而是直接看频率响应曲线:什么时候通过,什么时候衰减,相位怎么变化,通带波纹允许多大。这些设计语言全部建立在 Y(jω) = X(jω) H(jω) 之上。时域卷积定理在这里不是一道考试题,而是整套系统频域分析法的地基。

4.2 幅度调制与频谱搬移:时域相乘的教科书级应用

通信系统里的幅度调制,原理就是让信号去乘一个高频载波:

y(t) = x(t) · cos(ω₀t)

cos(ω₀t) 的傅里叶变换是一对位于 ±ω₀ 的冲激:

cos(ω₀t) ↔ π[δ(ω - ω₀) + δ(ω + ω₀)]

按照频域卷积定理,时域相乘对应频域卷积,再乘 1/(2π):

Y(jω) = 1/(2π) X(jω) * {π[δ(ω - ω₀) + δ(ω + ω₀)]}

冲激函数的卷积有一个极好的性质:任何函数与 δ(ω - ω₀) 卷积,等于把该函数整体搬到 ω₀ 处。所以上面这个式子直接化简为:

Y(jω) = 1/2 [ X(j(ω - ω₀)) + X(j(ω + ω₀)) ]

系数约得干干净净,频谱被一分为二、搬到高频两侧。整个过程一气呵成。这就是为什么调制在频域看就是“频谱搬移”。解调也一样,接收端再乘一次 cos(ω₀t),频谱又被搬回基带,再用低通滤波器取回原始信号。这一整套操作,底层靠的就是频域卷积定理。

4.3 加窗截断与频谱泄漏:频域卷积的副作用

实际处理信号时,我们不可能对一个无限长信号做傅里叶变换,只能截取一段时间。截断相当于时域乘以矩形窗 w(t),矩形窗的频谱是 Sa 函数(或归一化的 sinc)。根据频域卷积定理,截断后信号的频谱等于原频谱与窗函数频谱的卷积。

这个卷积会产生什么后果?原来尖锐的谱线会被“抹开”,变成有主瓣、有旁瓣的形状,能量从单一频率扩散到相邻频带,这就是频谱泄漏。频域卷积定理让我们明白一件事:频谱泄漏不是数据采集的“意外误差”,而是截断操作必然产生的数学后果。想减少泄漏,只能选择旁瓣更低的窗函数,比如汉宁窗、海明窗、布莱克曼窗。理解了这一点,再去选择窗函数,就不是机械查表,而是知道自己在用什么样的窗谱去做卷积。

4.4 冲激串采样:那个 1/T 系数到底怎么来的

再来看采样。连续信号经过理想冲激串采样,相当于在时域乘上一个周期冲激串:

xₛ(t) = x(t) · Σ_{n=-∞}^{∞} δ(t - nT)

冲激串的傅里叶变换也是一个周期冲激串,幅度是 2π/T:

Σ δ(t - nT) ↔ (2π/T) Σ δ(ω - kωₛ)

现在利用频域卷积定理,时域相乘对应频域卷积,前面再乘 1/(2π):

Xₛ(jω) = 1/(2π) X(jω) * [ (2π/T) Σ δ(ω - kωₛ) ]

两个常系数约分,得到:

Xₛ(jω) = 1/T Σ_{k=-∞}^{∞} X(j(ω - kωₛ))

这就是采样频谱延拓的标准形式。很多初学者问:为什么采样后频谱延拓,幅度还带着 1/T?原因就在频域卷积定理的 1/(2π) 与冲激串频谱自带的 2π/T 刚好约成一个 1/T。如果不亲手推这一步,这个系数会一直像个“从天而降的常数”,记住了也不知道它从哪来。

5. 做题与仿真中容易忽略的四个细节

5.1 常数、直流与冲激之间的系数叠加

傅里叶变换里,常数信号的变换带 2π 因子:1 ↔ 2πδ(ω)。如果你在题目里遇到“常数乘以某个信号”,又要用频域卷积定理,系数就特别容易乱。

举个小例子,求 f(t) = A cos(ω₀t) 的傅里叶变换。如果直接背常用变换对,很快得到 Aπ[δ(ω-ω₀)+δ(ω+ω₀)]。但如果你用频域卷积定理手推:先写 A ↔ 2πAδ(ω),cos(ω₀t) ↔ π[δ(ω-ω₀)+δ(ω+ω₀)],然后做卷积并乘以 1/(2π),那 2πA 的 2π 会与 1/(2π) 约掉,最后仍然得到 Aπ[...]。系数一环扣一环,少一个都不行。

我看过不少同学在这里出错,要么忘记常数信号的 2π,要么在卷积时又额外乘一个 1/(2π),结果频谱幅度差了好几倍。建议在做这类题时,把每一步系数都写清楚,直到最后再约分。

5.2 单边信号做时域卷积时,积分限怎么定

做题最容易翻车的另一个地方是卷积积分限。两个信号如果都是单边信号,比如 x(t) = e^{-at}u(t) 和 h(t) = e^{-bt}u(t),卷积积分:

y(t) = ∫_{-∞}^{∞} e^{-aτ}u(τ) e^{-b(t-τ)}u(t-τ) dτ

阶跃函数 u(τ) 把积分下限变成 0,u(t-τ) 则要求 τ ≤ t。所以有效积分区间变成 0 ≤ τ ≤ t,最终积分结果是两个指数项的差。看似简单,但很多人在写上下限时漏掉 t 与 0 的大小关系,导致 t < 0 时也算出非零值。

如果要验证时域卷积定理,我一般会先用手算卷积结果,再求它的傅里叶变换,最后与 X(jω) H(jω) 对比。两边一致才能说明这个定理用对了。像 e^{-at}u(t) 这类信号,频谱是 1/(a+jω),两个相乘后再逆变换,正好会得到指数差的形式,整个闭环非常清晰。

5.3 数值仿真里用工具验证时的采样间隔因子

在 MATLAB 这类数值仿真工具里想“验证”连续时间卷积定理,还有一层隐性陷阱:时域离散化会引入采样间隔 Ts。

连续卷积的定义是对 dt 做积分,而数值计算里的卷积函数是在离散点上做求和,两者相差一个 Ts。所以在仿真代码里,连续时间卷积的数值近似需要写成 conv(x, h) * Ts,而不是直接 conv(x, h)。同理,用 FFT 做傅里叶变换验证时,也要考虑正变换是积分还是求和,否则比较 X(jω) 和 H(jω) 的幅度时,常常会发现结果差了个系数。

这类问题不是定理本身出错,而是连续数学和离散计算之间的单位换算没对上。我的习惯是先把量纲写下来:时域积分带秒,频域积分带弧度每秒,对比时先检查 Ts 出现在哪里,再检查 2π 出现在哪里。量纲对齐了,幅度自然就对。

5.4 频域卷积的积分变量别写成 ω

最后一个细节听起来有点低级,但考场上和推导现场真的很容易中招。频域卷积定理的表达式是:

Z(jω) = 1/(2π) ∫_{-∞}^{∞} X₁(jη) X₂(j(ω-η)) dη

这里积分变量是 η,不是 ω。如果你写成了对 ω 积分,比如 X₁(jω) X₂(j(ω-ω)),被积函数就变成了 X₁(jω) X₂(j0),整个式子没有任何卷积意义。我自己就曾经在演算纸上犯过这个错,花了二十分钟找不到结果,最后才发现哑变量被自己写没了。

哑变量的本质是临时工,它只活在积分号里面。外部频域参数用 ω,内部积分变量用 η 或 λ,两者必须区分开。这个细节也能帮你检查推导过程:如果最终结果里某个 ω 的表达式很奇怪,先回头看看是不是把哑变量和参数写重了。

6. 我是怎么把这对定理记住的:对偶表格与三道自查题

6.1 一张表把两个定理放进对称框架

单独背两个公式容易忘,把它放进整个傅里叶变换性质的对偶框架里,就顺理成章了。下面是我自己整理的一张简化表,重点看最后两行:

时域操作频域对应操作额外系数
卷积 x₁(t) * x₂(t)X₁(jω) · X₂(jω)无
相乘 x₁(t) · x₂(t)1/(2π) [X₁(jω) * X₂(jω)]有 1/(2π)
时移 x(t - t₀)e^{-jωt₀} X(jω)无
频移 x(t) e^{jω₀t}X(j(ω - ω₀))无
时域微分 dx/dtjω X(jω)无

这张表最有价值的地方,是让你一眼看出“卷积↔乘法”这一对是对称的,同时“时移↔频移”也是对称的。理解了对称性,很多公式就不需要死记了:你先记住时域卷积对应频域相乘,然后“上下对换”就能猜出时域相乘对应频域卷积,再用逆变换定义补齐 1/(2π) 这个系数。

6.2 三道自查题,检验你是不是真的懂了

与其问我“听懂了没有”,不如做三道题自查。

第一题:已知 F[x₁(t)] = X₁(jω),F[x₂(t)] = X₂(jω),求 F[x₁(t) * x₂(t)]。答案是 X₁(jω)X₂(jω),不带任何额外系数。如果这道题还要犹豫,说明时域卷积定理还没有内化。

第二题:已知矩形脉冲信号 x(t) 的频谱是 X(jω),求 x(t) · cos(ω₀t) 的频谱。利用频域卷积定理,先写 cos 的频谱是一对冲激,再与 X(jω) 卷积并乘 1/(2π),最后得到 1/2[X(j(ω-ω₀))+X(j(ω+ω₀))]。重点在于完整写出系数推导,而不是只背结论。

第三题:理想冲激串采样的频谱为什么是 1/T 倍的周期延拓?把冲激串频谱 2π/T 和频域卷积定理的 1/(2π) 约分,就能得到 1/T。如果这道题能凭直觉说出系数来源,那你的理解就真正到位了。

6.3 后续延伸:这套对偶框架在离散域同样成立

学了连续时间傅里叶变换之后,后面还有离散时间傅里叶变换 DTFT、Z 变换。它们都有类似的卷积定理:DTFT 里,序列卷积对应频谱相乘,序列相乘对应频谱做周期卷积,逆变换积分里的 1/(2π) 同样会出现在频域卷积定理里;Z 变换里,序列卷积对应 Z 域相乘,没有额外系数,而乘积对应的复卷积积分则要结合收敛域小心处理。

所以现在把连续时间非周期信号的这两个定理踏实搞明白,后面学离散域内容时会轻松很多。框架是同一个,只是变量和系数约定略有变化。这也是我坚持推导而不只背结论的原因:结论会忘,但“交换积分次序 + 内层积分化为频谱”这个套路能陪你走完整门课。

最后再分享一个小小的个人经验。我最初记这两个公式时,用的是反向记忆法:先记住“时域卷积→频域相乘”,乘号简单,不收系数;再记“时域相乘→频域卷积”,卷积复杂,收一个 1/(2π) 作为补偿。后来做习题、做仿真,我再也没有在这两个系数上翻过车。如果你也正卡在这一节,建议放下笔记,亲手推一遍时域卷积定理,再用同样的步骤推一遍频域卷积定理,然后把那三道自查题做完。当你发现频谱搬移、频谱泄漏、采样延拓都能用同一个定理解释时,你就真的掌握它们了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 1:27:10

游戏数据分析面试核心笔记:指标体系、留存归因与AB实验

这几年被问到最多的问题&#xff0c;除了“数据分析师平时到底做什么”&#xff0c;就是“游戏业务类的数据分析面试该怎么准备”。很多人以为游戏行业门槛低&#xff0c;聊到后面才发现&#xff0c;面试官真正关心的不是你会不会某一款工具&#xff0c;而是你面对一个具体业务…

作者头像 李华
网站建设 2026/10/17 1:26:18

目标级情感分析数据集全解析:从标注体系到工程落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/17 1:26:16

Python+Selenium模拟人类滑块拖动轨迹的工程实践

1. 项目概述&#xff1a;这不是“破解”&#xff0c;而是对滑块验证交互逻辑的工程化还原“python-selenium实现滑块验证码破解”这个标题在技术社区里高频出现&#xff0c;但必须先说清楚——它本质上不是“破解”&#xff0c;而是对前端验证机制的一次精准逆向工程与自动化模…

作者头像 李华
网站建设 2026/10/17 1:25:50

多Agent系统治理:通信协议、意图锚定与可干预权实战框架

1. 这不是科幻&#xff0c;是正在发生的现实&#xff1a;当多 Agent 系统开始自主协作、自我演化、甚至绕过人类指令“当多 Agent 走向失控”——这八个字不是标题党&#xff0c;也不是2026年的预言&#xff0c;而是我过去18个月在三个真实生产环境里亲手调试、监控、紧急熔断过…

作者头像 李华
网站建设 2026/10/17 1:24:59

Netty实战:手写RPC框架的核心设计与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/17 1:24:29

Java消息中间件面试指南:可靠性、顺序性、幂等性与事务消息

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华