Whether it's "real-time" depends on sampling rate. What's true is that most implementations fall short for realistic $f_s$.
I am currently working on CWT that will be faster than any other I know of, best case by several times. Though, it may be a while until it's open-sourced.
An often overlooked point is, CWT has hop_size
just like STFT. Especially if using a scalogram (modulus), there's very little to lose from hop_size=2
or 4
, and sometimes we can do 100+
. This is implemented easily with Fourier-domain subsampling:
ifft(a * b)[::2] == ifft((a * b).reshape(2, -1).mean(axis=0))
which reduces FFT size by hop_size
. The relevant question is, what hop_size
is safe? This can be measured directly, as discussed in this answer. Note, perfect inversion is possible for some CWT with complex-valued outputs and hop_size>1
, but max permissible hop_size
is fairly small and the inversion algorithm not straightforward. However, we don't need complex for inversion; inversion is still possible within a global phase-shift.
Another major slowdown is in low-support wavelets, which are better off with overlap-add/overlap-save.
Putting all these together elevates max supported $f_s$ significantly.