Circular Convolution
Definition and Modulo Indexing
Section titled “Definition and Modulo Indexing”For two -point sequences and , their -point circular convolution is
where denotes the residue of modulo . For example, with , an index of is read as and an index of is read as .
Modulo indexing makes every sample that would lie beyond wrap around and add at the beginning of the result. Circular convolution is therefore ordinary convolution of the periodic extensions of the two finite -sample sequences, observed over one period.
Four-point circular convolution. One sequence is fixed on a circle; the other is folded and rotated modulo four. Multiplying aligned samples and summing gives one output sample .
The graphical procedure mirrors linear convolution: hold fixed, fold to obtain , rotate it circularly by , multiply aligned samples, and sum. The essential difference is that all indices remain on an -point circle.
Direct, Tabular, and Matrix Methods
Section titled “Direct, Tabular, and Matrix Methods”For hand calculation, construct the folded row
for , take its dot product with , and circularly shift the row one place to the right for each new output index. This is the tabular fold–rotate method in algebraic form.
Equivalently, let . Circular convolution is multiplication by a circulant matrix:
The entry in row , column is . Every row is a one-place circular shift of the preceding row, which makes the modulo indexing visible and provides a reliable check on a hand-built table.
DFT Convolution Property
Section titled “DFT Convolution Property”If
are -point DFT pairs, then
Thus pointwise multiplication of two -point DFTs followed by an -point IDFT produces an -point circular convolution.
To prove the theorem, insert the circular-convolution sum into the DFT and put :
The substitution is valid because, for fixed , modulo- addition merely permutes the values of . The dual property is
Relationship to Linear Convolution
Section titled “Relationship to Linear Convolution”Let be ordinary linear convolution and let be their -point circular convolution after both inputs have been represented with length . Their exact wrap relation is
Shifted copies of the linear-convolution result overlap and add every samples. This wraparound is called time-domain aliasing.
Suppose the nonzero input lengths are and . The linear convolution has length at most . Choosing
prevents overlap because the complete result fits within one -sample period. Linear convolution can therefore be computed using a DFT as follows:
-
Choose a DFT length .
-
Zero-pad both sequences to length .
-
Compute the -point DFTs and .
-
Multiply bin by bin: .
-
Take the -point IDFT of to obtain the linear convolution.
Without sufficient zero-padding, the IDFT instead returns aliased circular convolution.
Long-Sequence Fast Convolution
Section titled “Long-Sequence Fast Convolution”Transforming an indefinitely long input in one FFT is impractical. For an FIR impulse response of length , choose an FFT length and let
be the usual number of new input samples processed per block. Two standard block methods use -point circular convolutions while reproducing the exact linear convolution.
Overlap-Add Method
Section titled “Overlap-Add Method”-
Divide the input into nonoverlapping blocks of samples.
-
Zero-pad each block and the -sample impulse response to length .
-
Compute an -point FFT, multiply by the precomputed , and take the IFFT. Each block result is a length- linear convolution.
-
Place successive results samples apart and add their overlapping output samples.
Zeros prevent aliasing within each block; the final addition reconstructs the tails that neighbouring input blocks contribute to the same output samples.
Overlap-Save Method
Section titled “Overlap-Save Method”-
Form each -sample input block from the previous samples and new samples. Adjacent input blocks overlap by .
-
Compute the -point circular convolution by FFT multiplication.
-
Discard the first output samples, which contain wraparound aliasing, and save the remaining valid samples.
Overlap-save uses no output addition and normally needs no input-block zero padding after the initial boundary block. Overlap-add pads blocks and adds output tails; overlap-save overlaps inputs and discards corrupted output heads. Both are exact when the stated lengths are respected.