This paper introduced a fast method for computing the real CWT and achieved $O(N)$ complexity per scale.

However, in the context of this article, I'm not sure what the definition of oblique projection is. This paper (Section II) said that there are two subspaces, i.e. (1) a space $V(\phi_2)$ defined by the integer shift of the scaling function $\phi_2(t)$, and (2) a space $V(\phi_1)$ defined by the integer shift of the analysis function $\phi_1(t)$. Specifically, the related source text is shown below

Our goal is to efficiently compute the CWT at $P$ scales per octave. This will be achieved by constructing a set of $P$ auxiliary wavelets $\{\psi_i(t)\approx\alpha_i^{-1/2}\psi(t/\alpha_i)\}_{i=0,\ldots,P-1}$, which are the oblique projections of the wavelets $\{\alpha_i^{-1/2}\psi(t/\alpha_i)\}_{i=0,\ldots,P-1}$ into a space defined by the scaling function $\phi_2(t)$ orthogonal to the space defined by the analysis function $\psi_1(t)$.

For a pair of analysis functions $\phi_1$ and $\phi_2$, the oblique projection of the wavelet $\psi_{\alpha_i}(t)=\psi(t/\alpha_i)$ into $V(\phi_2)$ orthogonal to $V(\phi_1)$ can be expressed in terms of the basis generated by $\psi_2$ and a set of coefficients $p_{\alpha_i}(k)$, where $$ \psi_i(t)=\sum_{k\in \mathbb{Z}}p_{\alpha_i}(k)\psi_2(t-k) $$ The original wavelet is measured in terms of the analysis function $\phi_1$ providing the values $$ q_{\alpha_i}(k) = \langle \psi_{\alpha_i}(t),\phi_1(t-k) \rangle $$

My questions are

  1. Does the fact that $V(\phi_1)$ and $V(\phi_2)$ are orthogonal to each other imply that $\phi_1$ and $\phi_2$ are orthogonal?
  2. Does the oblique projection mean that $\phi_2(t-k)$ and $\phi_2(t-l)$ are not orthogonal to each other, where $l$ and $k$ are integers?
  3. Are the analysis functions $\phi_1(t-k)$ and $\phi_1(t-l)$ are orthogonal to each other?

2 Answers 2


My understanding of what's going on: they seek some function, $h(\omega)$, such adding up its scaled time-shifts produces wavelets, $\psi(\omega)$. Note, $h(\omega)$ must tile all of $\omega$, or at least $\omega > 0$ for real-valued $x(t)$ input. I can see this as possible; right is a few unweighted translations of left added to itself:

enter image description here

Certainly doesn't look like a wavelet, but we can see how a properly chosen $h(\omega)$, and weights, would work. For a shift by $+k$ in time, we're adding $h(\omega)e^{-j\omega k}$ in frequency, and we need to add $+k$ and $-k$ to keep $h(\omega)$ real-valued if it started as real-valued. It's also why $h(\omega)$ must hit every $\omega$, since $\cdot e^{-j\omega k}$ can't fix zeros.

To your questions, I'm not familiar with functional spaces, but brief reading suggests they're basically analogues of vector spaces, so I'll treat $\varphi$ as a vector where relevant.

  1. Usually yes, "$V$" is defined by $\varphi$ (i.e. produced by scaled sums of its elements). However here it's defined differently

$$ V(\varphi) = \left\{ h(t) = \sum_{k \in \mathrm{Z}} c(k) \varphi(t - k)\right\} $$

so instead, we can say that $h_1(t)$ and $h_2(t)$ are orthogonal.

  1. Maybe. In general, such shifts may be orthogonal - but considering "orthogonal" = inner product is zero = $(\hat\varphi_2(\omega)e^{j\omega k} * \hat\varphi_2(\omega)e^{j\omega l})[0] = 0$, and $\varphi_2$ is the $h$, this seems unlikely, and the paper doesn't appear to make use of such orthogonality anywhere. Instead, $\varphi_2$ is referred to as a scaling function and splines, whose integer shifts generally aren't orthogonal.
  2. Partly answered in 2.

To comment on performance aspect, I'm not convinced: this neat trick isn't as fast relative to FFT as one might expect. As we need an even number of scaled additions, and I can't imagine an $h(\omega)$ where only two additions suffice, it's safe to say we require at least four additions. For real-valued convolutions and $N=131,072$, this makes the method only twice as fast, and for complex (in time) wavelets, only x1.15 faster, per my benchmarks.

I've not found their code anywhere, and it's possible that they include the time to sample the wavelet in benchmarks (as other "fast CWT" papers I've seen have done), which is pointless for most purposes and would explain the real reason for performance gain.


A first step-back answer to re-frame (pun intended) the context. The CWT framework generally deals with frames: a fram, redundant sets of vectors onto which you can faithfully decompose a signal with good-enough stability properties. The discrete wavelet transform (DWT) aims at doing the same with a non-redundant (or critical, or sufficient) set of vectors: bases with as many projections as the signal's dimension, no more!

While discrete wavelets bases like Haar's and Franklin's are known for a century, their construction from scratch, from a given putative wavelet, was cumbersome. Among a lot of works, Ingrid Daubechies set bounds of what could be obtained with a given putative wavelet shape. And Yves Meyer provided an example for a non trivial orthogonal DWT.

To me, oblique either deals with non-redundant DWT bases that are not orthogonal (like biorthogonal ones from the JPEG 2000 standard). And with discrete frames: since they are redundant, they can form an orthogonal system. Check for instance the MB (Mercedes-Benz) frame of three vectors in a 2D space: MB frame


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.