
_START_ARTICLE_
重疊-相加之摺積法
_START_SECTION_
伪代码
_START_PARAGRAPH_
Algorithm (OA for linear convolution)_NEWLINE_   Evaluate the best value of N and L_NEWLINE_   H = FFT(h,N)       (zero-padded FFT)_NEWLINE_   i = 1_NEWLINE_   while i <= Nx_NEWLINE_       il = min(i+L-1,Nx)_NEWLINE_       yt = IFFT( FFT(x(i:il),N) * H, N)_NEWLINE_       k  = min(i+N-1,Nx)_NEWLINE_       y(i:k) = y(i:k) + yt    (add the overlapped output blocks)_NEWLINE_       i = i+L_NEWLINE_   end
_START_SECTION_
区块长度的选择
_START_PARAGRAPH_
当 x[n] 的长度N' 和 h[n] 的长度M 相差太大时（例如 M < log₂N' ），直接卷积（不通过循环卷积和 FFT ）反而最快。而当N' 和 M 差不多在同一个数量级时，不用分区，也就是只有一块长度L = N' 的区块去做FFT 即可。而当N' 比 M 大了不少，却没大太多时，区块长度L 就需要选择。除了与N' 和 M 相关以外，也要考虑当两者相除有余数时，剩下一小段的输入可能会造成浪费。