每日精学 134|重叠相加快速卷积

2026-09-25

雷达 · 通信 · 电子战 / 基础精学 134

重叠相加将长序列拆成互不重叠的输入块,对每块进行零填充频域卷积,再相加重叠输出以恢复完整线性卷积。

01
模型与符号

FIR长度K,输入块长B,FFT长度 N≥ B+K−1;输入和系数块外均零延拓。

B:输入块长(sample)

K:FIR长度(tap)

N:FFT长度(point)

yq:第q块局部输出(幅度)

02
从模型到公式

输入分解

记块 xq[r]=x[qB+r],仅 0≤ r<B 非零,则

x[n]=\sum_qx_q[n-qB].

利用卷积线性与移位性质

y[n]=\sum_q(x_q*h)[n-qB].

避免循环折叠

每块线性卷积长度至多 B+K−1。当 N≥ B+K−1 时,零填充后的循环卷积与线性卷积一致:

y_q=\operatorname{IDFT}_N\{\operatorname{DFT}_N(x_q)\operatorname{DFT}_N(h)\}.

重叠区累加

相邻局部输出起点相隔B,局部长度 B+K−1,所以存在K-1点重叠。全输出为

y[qB+r]\mathrel{+}=y_q[r],\quad0\leq r<B+K-1.

重叠样本必须相加而非覆盖,最后一个不足B的输入块需补零但输出仅保留真实线性卷积长度。

完整卷积长度与末块管理

长度为 B 的输入块与长度 K 的滤波器线性卷积共有 B+K−1 项。若 FFT 长度小于这一长度,循环结果把超出部分折返到块首:

c_N[r]=\sum_{\ell\in\mathbb Z}c[r+\ell N].

重叠相加只能正确相加不同输入块的线性尾部,不能撤销单块内部已经发生的循环折叠。

因此必须先满足 N≥ B+K−1。长度 Nx 的完整输入最终应产生

N_y=N_x+K-1

个样本,最后不足一块的输入可补零参与运算,但补零产生的无关尾部需要按此长度裁剪。

最后一块输入结束后仍存在滤波器尾部;过早停止输出会使中间各块完全正确而整体卷积仍不完整。

03
物理含义

每个输入块都向其后的K-1个时刻贡献滤波尾部,输出重叠正是卷积记忆的体现。

04
固定参数算例

以257点输入、17抽头FIR、B=48及N=64验证完整重叠相加与直接卷积,另外令FFT长度不足,展示循环折叠误差。

固定参数数值验证结果
量数值
输入长度257
滤波器长度17
块长48
FFT 长度64
块数6
equivalence max error2.49800180541e-16
short fft max error0.127968090048
图 1:重叠相加快速卷积的理论关系与固定参数验证图 1:重叠相加快速卷积的理论关系与固定参数验证

图 1 重叠相加快速卷积的理论关系与固定参数验证

表中数值和图中曲线由 MATLAB 实际运行得到,随机种子为 20261053;运行版本与完整结果另存为独立文件。

05
数字实现的边界

RTL实现64位加宽的输出重叠加法 a+b,a为当前块样本、b为缓冲尾部样本;FFT及尾部地址控制由外部负责。测试覆盖正负极值,64位输出避免16位相加回绕。

RTL 采用同步有效信号和异步低有效复位;空拍保持状态且输出无效。除另有说明外,输入为16位有符号整数,结果为64位有符号整数,测试范围内不截断或饱和。

输出在采样时钟上升沿更新。自检覆盖连续样本、空拍和复位;未进行器件布局布线、时序收敛或功耗验证。

独立自检程序已在 Icarus Verilog 13.0 中实际运行并通过。该结果不包含器件综合、静态时序分析或板级测试。

06
适用范围

重叠相加适用于长FIR和离线大记录卷积。各输入块可独立执行FFT,之后按绝对输出索引累加尾部,因此便于块任务并行。实时处理时还需要给尾部缓存、块等待时间及FFT吞吐量分别分配预算。

07
工程上需要注意

错误FFT长度使局部循环卷积混叠。

最后一块的补零和输出截断必须明确。

块长影响延迟和运算效率,不能只追求大FFT。

重叠相加将长序列拆成互不重叠的输入块,对每块进行零填充频域卷积,再相加重叠输出以恢复完整线性卷积。

内容依据:每日精学第 134 课《重叠相加快速卷积》。图表沿用原课固定参数数值结果,属于数值验证,不代表设备实测。

阅读8
分享
写评论...