
深入理解傅里叶变换二与冲激响应做卷积到底是在算什么说实话我当年在学《通信原理》的时候最大的坎不是傅里叶变换本身而是“傅里叶变换学完了之后怎么突然冒出来一个卷积”。很多教材在讲完“信号可以分解为正弦波的叠加”之后下一章就默认你会用卷积了直接甩给你一个积分式子y(t)∫x(τ)h(t−τ)dτ。我当时盯着这个式子看了很久脑子里全是问号为什么要把 h 翻转为什么不直接相乘这跟我在第一讲里理解的“频谱”又有什么关系后来把卷积、冲激响应、频域这些概念串成一条线才意识到傅里叶变换只是给了你一副“频谱眼镜”而卷积才是你戴着这副眼镜去看“信号经过系统”这个动作的唯一方式。这篇文章是“通信原理入坑之路”系列的第二篇就专门把“与冲激响应做卷积”这件事讲透。如果你也被“卷积为什么长这样”“冲激响应到底有什么了不起”“时域卷积为什么等于频域乘积”这些问题卡住过那这篇文章就是给你写的。1. 从傅里叶变换到卷积这一步为什么会卡住这么多人1.1 你手上已有的“频谱视角”还差一块拼图第一讲里我们建立了一个核心认知任意一个能量信号都可以分解成无数个不同频率、不同幅度、不同相位的正弦或复指数信号的叠加。对应的系数就是傅里叶变换结果 F(jω)。这个视角非常强大——它让你把信号从“随时间变化的波形”变成了“随频率分布的谱”。但注意这套视角目前只解决了“描述信号”的问题。通信系统里真正要面对的是“信号进入一个系统之后会变成什么样”。比如信号经过一个低通滤波器、经过一段无线信道、经过一个放大器这都是“信号经过系统”的过程。在时域这个过程的数学描述并不是“相乘”而是一个看起来很吓人的积分表达式。很多教材在这一步直接跳到公式导致大量人在这里断裂——傅里叶变换好像学了个寂寞卷积又不知道在干嘛。1.2 卷积的定义为什么看起来“反人类”先写出卷积积分的标准形式y(t) ∫ x(τ) h(t - τ) dτ 积分上下限为 -∞ 到 ∞实信号默认如果你只看数学形式确实很奇怪两个函数相乘不直接乘非要把其中一个翻转再平移然后再做积分。但物理直觉其实不奇怪。把输入信号 x(t) 想象成很多个“瞬间触发的小脉冲”叠加在一起每个小脉冲都会让系统产生一个响应在某个时刻 t你看到的输出是所有发生在 t 之前以及理论上 t 之后的小脉冲响应叠加到场的结果。h(t−τ) 里那个减号本质上就是在回答一个问题我“现在”时刻 t 观察到的输出是由哪个“过去”时刻 τ 的输入造成的τ 越早也就是 t−τ 越大对应系统的“记忆”越深。所以卷积真正在做的事情是把系统的历史记忆按重量叠加起来。2. 冲激响应系统最诚实的一张“身份证”2.1 冲激函数不是普通函数它是思想实验工具在通信与信号系统里冲激函数 δ(t) 最常见的定义是三条性质无限窄、无限高、面积为 1。严格数学上它不是一个普通意义下的函数而是分布广义函数。但工程师不需要纠结这个问题你只需要把它理解成一杆“测量系统的探针”。为什么用冲激去测系统因为冲激函数的频谱是一条水平直线即它的傅里叶变换等于常数 1。意思是冲激所包含的“能量”在频率轴上哪都有、且密度完全相同。你把这样一个“全频段扫频信号”打到一个系统上系统的输出会包含它对每一个频率分量分别做了什么处理的信息——只不过这些信息在时域上是混在一起的原始记录也就是冲激响应 h(t)。2.2 任何信号都可以看成“冲激流的加权组合”这句话是理解卷积的钥匙。数学上的依据是冲激信号的筛选性质x(t) ∫ x(τ) δ(t - τ) dτ这个式子是在说信号 x 本身就是无穷多个发生在不同位置 τ、强度为“x(τ) 乘以微元 dτ”的冲激的叠加。它在形式上长得跟卷积一模一样只是这里另一个“系统”是 δ。如果这个信号随后通过一个线性时不变LTI系统而系统对冲激 δ(t−τ) 的响应是 h(t−τ)因为线性时不变响应只取决于时间差那么按照叠加原理输出就是y(t) ∫ x(τ) h(t - τ) dτ你看卷积不是凭空发明的运算它就是“信号分解成冲激 → 每个冲激通过系统 → 结果叠加”这整个物理过程的数学速记。2.3 LTI冲激响应能代表一切的前提条件为什么工程师如此依赖冲激响应因为只有在线性时不变系统中一个冲激响应才能完整描述系统行为。前提拆开是两条硬规矩线性若输入 a·x1 b·x2则输出 a·y1 b·y2。没有这一条信号分解成冲激之后就不能各自算完再叠加。时不变同样的输入今天送进去和明天送进去输出波形只差一个平移不改变形状。没有这一条不同时刻 τ 的 h(t−τ) 就不是同一种函数无法统一写出。现实世界几乎不存在绝对理想的线性时不变系统但在通信的工程带宽和功率范围内绝大多数信道、滤波器、放大器都可以被安全地建模为 LTI误差小到可以忽略。这也是为什么卷积在整个通信原理里无处不在。2.4 频响就是冲激响应的傅里叶变换把冲激响应的傅里叶变换定义为 H(jω)也就是系统的频率响应这是傅里叶变换与卷积真正握手的瞬间Y(jω) X(jω)·H(jω)这句话翻译过来就是“输入信号的频谱 X(jω) 和系统频响 H(jω) 做逐点乘法得到输出信号的频谱”。H(jω) 在某个频率 ω 上的取值复数告诉这个频率的分量经过系统后幅度被放大或衰减多少倍、相位被移动了多少弧度。所以测量一台滤波器的频率响应本质就是在测量它的冲激响应做卷积只是在另一个“坐标系”里重复同一件事。3. 卷积的图形直觉翻转、滑动、叠加怎样一次看明白3.1 四步走翻转、平移、相乘、积分很多人被卷积卡住是因为没有用“图形过程”去走一遍。标准四步骤是翻转把 h(τ) 翻转成 h(−τ)相当于把系统响应沿 τ 轴镜像。平移把 h(−τ) 向右移动 t得到 h(t−τ)。t 就是你当前要计算输出的那个时刻。相乘把 x(τ) 和 h(t−τ) 逐点相乘得到一个关于 τ 的新函数。积分把这个乘积函数在 τ 轴上的全部面积算出来就是 y(t)。为什么要翻转一个很朴素的理解是当 τ t 时t−τ 是正数对应“过去的输入触发的是那之后向未来延伸的响应”而 τ t 时t−τ 是负数对应“未来触发的是向过去延伸的响应”。对一个因果系统来说未来的输入不应该影响现在的输出所以翻转这个动作恰好把“因果性”嵌进了数学形式里。3.2 拿矩形脉冲过 RC 低通手算一遍就通了纸上谈兵没用举一个所有课本都会出现的例子输入 x(t) 是持续 1 秒、幅度为 1 的矩形脉冲系统是 RC 低通冲激响应为h(t) (1/RC)·e^(-t/RC)·u(t)假设 RC 1方便书写。输出卷积y(t) ∫ x(τ) h(t - τ) dτ分段来算。当 0 t 1 时只有 0 到 t 这一段的输入落在系统响应范围内所以y(t) ∫ [0, t] 1·e^-(t-τ) dτ 1 - e^-t当 t ≥ 1 时输入只有 0 到 1 段积分上限变成 1y(t) ∫ [0, 1] e^-(t-τ) dτ e^-(t-1) - e^-t这个过程你多走几遍就会发现卷积不是在算“瞬时乘积”而是在算“累积痕迹”。矩形脉冲进入 RC 之后输出从 0 开始爬升到接近 1再按指数衰减回 0——这就是你的眼睛看不见、但公式里写清楚了的东西。3.3 卷积定理凭什么成立一次交换积分次序时域卷积对应频域乘积只要花两步就能证明思路。对卷积两边同时做傅里叶变换F[y(t)] ∫ [∫ x(τ)h(t-τ)dτ] e^(-jωt) dt把积分次序交换先对 t 积分 ∫ x(τ) [∫ h(t-τ) e^(-jωt) dt] dτ令 u t−τ则 dt du指数部分变成 e^(-jω(uτ)) e^(-jωτ)·e^(-jωu)。于是括号内积分为 H(jω)剩余的指数 e^(-jωτ) 乘上 x(τ)再对 τ 积分得到 X(jω)Y(jω) H(jω) · X(jω)这个证明里最关键的一步就是交换积分次序——它本质上是在说你对“每个瞬间输入造成的响应”逐点做频谱分析等价于先分析完整输出再做频谱分析。交换次序之后系统对每个频率的处理就独立成了“逐点相乘”。3.4 为什么卷积定理能让工程师省掉一半运算时域卷积是 O(N²) 量级的操作两个长度 N 的序列而用 FFT 把两侧转到频域、逐点相乘、再逆变换复杂度降到 O(N log N)。做一次卷积可能不明显但 FIR 滤波、信道均衡这类问题天天在跑卷积省下来的算力非常可观。更重要的是工程概念上的简化设计一个时域滤波器你可以不用在时域里折腾“冲激响应长什么样”而是直接定频响指标通带、阻带、纹波、滚降再利用 IFFT 得到对应的冲激响应系数。卷积定理给了你“在两个世界之间来回翻译”的自由。4. 从“公式会算”到“工程会用”通信系统里的卷积都在干什么4.1 滤波器你以为你在“滤频”其实你在做卷积很多同学从《信号与系统》学到《通信原理》对“低通滤波器”的理解还停留在“把高频分量滤掉”这句话上。这句话结论没错但它掩盖了实际运算的真相。接收端拿到的信号做完下变频之后紧接着就是基带低通滤波。所谓“滤波”实现的数学动作就是 y[n] Σ x[n−k]·h[k]。你设计的那串 FIR 系数 h[k]恰恰就是滤波器冲激响应的离散采样。换个角度说一个 FIR 滤波器就是一台专门做卷积的机器只是它在频域上恰好表现出“让某些频率通过”的特征。4.2 匹配滤波、相关运算与卷积之间亲兄弟般的关系数字通信里最典型的“卷积应用场景”是匹配滤波。接收端为了在噪声背景下最大化某个符号的检测信噪比会让接收信号和“发送波形的翻转共轭”做相关运算r(τ) ∫ s(t)·s*(t - τ) dt相关和卷积就差一个翻转相关不翻转 h卷积要翻转。所以很多文章里说“匹配滤波器的冲激响应是发射波形的共轭翻转”翻译过来就是你实现的这个相关器本质上是一个卷积器。最佳接收机的很多推导核心都是这个等价关系。4.3 成形滤波和卷积码名字里都带着“卷积”二字稍微往前看一眼数字通信发送端在符号映射之后会把每个符号对应的脉冲“放”到一个冲激序列上然后用成形滤波器整形。这个“放上去再整形”的动作就是符号序列与成形滤波器冲激响应的卷积。升余弦滚降滤波器之所以能控制频谱旁瓣也是因为它的冲激响应形状决定了时域波形的“平滑度”从而决定了频域衰减速度。再比如差错控制里的卷积码译码器核心度量计算同样大量使用卷积运算。所以“卷积”在通信系统里不是第一章之后就被丢掉的玩具它贯穿了调制、滤波、检测、译码全链路。4.4 用一段最小可运行的仿真验证你理解的卷积与其背公式不如亲手跑一遍。下面是一段 Python 脚本演示“矩形脉冲通过一阶 RC 冲激响应系统”的离散卷积import numpy as np import matplotlib.pyplot as plt fs 1000 # 采样率 t np.arange(0, 3, 1/fs) # 输入幅度为1持续1秒的矩形脉冲 x np.where(t 1, 1.0, 0.0) # RC 1 的一阶系统冲激响应h(t)e^(-t) h np.exp(-t) h np.maximum(h, 0) # 保证因果部分只取 t0 # 离散卷积 y np.convolve(x, h)[:len(t)] / fs # 画图 plt.figure(figsize(8, 4)) plt.plot(t, x, labelinput x(t)) plt.plot(t, y, labeloutput y(t)) plt.grid(True) plt.legend() plt.show()跑完你会看到输出曲线先按 1−e^(−t) 爬升到 t1 后按 e^(−(t−1))−e^(−t) 衰减和我们手算结果完全一致。这里np.convolve默认不缩放所以记得除以采样率 fs否则幅度会差 fs 倍。我经常在给学生演示时忘掉这一点输出看起来像是“信号被放大了 1000 倍”第一反应竟然是去改系统参数而不是查代码——这种低级错误值得提前说出。5. 入坑路上的几个高频坑与排雷经验5.1 卷积的“翻转”是数学符号问题不是物理上的反向操作有同学问系统是物理的怎么算一个卷积还要把冲激响应翻转过来我的理解是翻转的对象其实是从“系统响应从输入时刻起往后延伸”的角度变成了“输出时刻往前回溯系统当时对 τ 时刻输入的应答”。物理世界没有真的把一个响应信号反向播放翻转只发生在积分表达式的坐标轴上。之所以这么写是因为卷积要用同一个变量 τ 把“输入时刻”和“观察时刻”对齐。换个说法h(t−τ) 中的翻转让“因果性”自动成立——只有 τ≤t 时 t−τ≥0冲激响应不为零因此过去的输入影响现在、未来不能影响现在。这个设计很优雅但你不需要给系统“倒带”。5.2 冲激响应和阶跃响应一个测不到一个能测到理想冲激在物理世界里很难真正制造出来。实际操作时常见思路是给系统加一个阶跃信号记录阶跃响应 s(t)然后利用 LTI 性质“冲激响应是阶跃响应的导数”来间接得到 h(t)h(t) ds(t)/dt这个关系在连续 LTI 系统中严格成立。我记得自己第一次用示波器量滤波器群延迟时就是先生成阶跃、测完求导、再做 FFT 得到的相位曲线比直接拿窄脉冲去测稳定很多。原因是窄脉冲能量小、信噪比差阶跃信号平均功率高实测曲线干净得多。5.3 连续卷积、离散卷积与圆周卷积三个容易混的东西连续卷积用积分离散卷积用求和y[n] Σ x[k] h[n-k]这是最常见的离散卷积。但如果你用 DFT/FFT 去算离散卷积需要特别注意一个坑线性卷积转成圆周卷积时序列长度不够就会发生混叠。一般做法是两个序列先分别补零到长度不小于 NM−1再做循环卷积结果才等于线性卷积。我见过不止一个同学在写“频域滤波”的仿真时直接把两组信号做 FFT、相乘、IFFT发现输出首尾“折回来”了一截还以为是滤波器设计错了。其实那就是圆周卷积在咬人。补零长度够了以后“滤波完成后再截断”这个动作才安全。5.4 一句话总结卷积物理意义给以后的自己看如果将来面试时有人问“卷积到底是干嘛的”你可以这么回答卷积是在算“同一时间点 t 上系统对过往所有输入的加权响应的累积总和”冲激响应就是这套加权规则频域乘积只是这个累积过程在频率坐标上的缩略写法。我个人在教学和写代码时还会把这个链条刻在脑子里“信号分解成冲激 → 每个冲激过系统 → 叠加响应”。这个链条通了后面学采样定理、匹配滤波、信道均衡都不再是孤立公式而是一套连续的画面。回头再看傅里叶变换和卷积的关系我觉得最值得记住的一点是变换没有改变物理事实它只是换了一副更便于计算的眼镜。那句“时域卷积等于频域乘积”之所以美丽是因为它同时回答了“信号如何被分解”“系统如何被描述”“输出如何被计算”三个问题。下次再看到 h(t) 和那个卷积积分你至少知道它不是一个需要死记的式子而是一台在时间轴上来回搬运记忆的机器。做仿真遇到卷积结果对不上时也别急着怀疑公式。先把补零长度做了把采样率缩放系数检查了把翻转方向想清楚了——这套排雷顺序能帮你省下很多个深夜。