I compared 3 implementations for Linear Convolution of 1D signals:
- Direct - Using MATLAB's
conv() function.
- Overlap and Save - Implemented in MATLAB with tuned loop to prevent allocation and optimal choice of the DFT window.
- Frequency Domain - Using MATLAB'
fft() and proper padding to implement Linear Convolution using Circular Convolution.
For various lengths of the input signal and the kernel I got this result:

I only compared cases the signal is not shorter than the kernel hence the upper triangle (Dark Blue) is invalid.
For the lower triangle I coded the fastest method as following:
- Bright Blue - Direct.
- Green - Overlap and Save.
- Yellow - Frequency Method.
So, there is nor practical reason to use Overlap and Save.
For kernels with length up to ~400 samples it is better to use Direct Method.
For longer kernels it is better to use Frequency Domain.
Now, the actual number of samples as the border between Frequency Domain and Direct will be different for different CPU's and Memory Bandwidth (One can run the script on his computer to see).
Yet as a guideline I'd say:
- If you can hold all the data in Memory - Don't use Overlap and Save.
- Unless your kernel is longer few hundreds of samples use direct.
- For kernels with more than few hundreds samples use Frequency Domain.
The full MATLAB code is available on my StackExchange Signal Processing Q52760 GitHub Repository (Look at the SignalProcessing\Q52760 folder).