TL;DR:
- CWT's $\partial_t$ is taken with respect to wavelet timeshifts, STFT's with respect to window time samples, with CWT's FT taken along rows, and STFT's along columns.
- The $2\pi$ is per assuming a different 'oscillatory factor' of Fourier Transform's kernel, i.e. $e^{-j2\pi f}$ vs. $e^{-j\omega}$. Numeric implementations can work with either.
- "Why modified STFT" is a separate question, addressed in second answer.
Motivating phase transform
To derive CWT's phase transform, original paper uses $f(t) = A \cos(\Omega t)$ as a motivating example, or for our purposes equivalently $A e^{j\Omega t}$, then works backwards from the result of $\partial_t W_f / W_f$ to define $w$ such that $\Omega$ is extracted. The idea is, this $f(t)$ is the basis function (building block, atomic unit) of the Fourier Transform, so results here will transfer to any other $h(t)$ the more $h(t)$'s (D)FT is "well-behaved" (more specifically, $h(t)$'s "components" obey synchrosqueezing assumptions detailed in followup paper), which spans a large variety of real-world signals.
Deriving phase transform
The SSQ STFT paper considers $e^{j\omega t}$ directly, but omits a derivation; I will derive it here for both the 'standard' and 'modified' STFT, along their derivatives, from which the phase transform will arise naturally.
Let $f(t) = e^{j\xi_0 t}$, and assume a real, even-symmetric ($g=g^*,\ \hat{g} = \hat{g^*}$), window $g(t)$. We have:
$$
\begin{align}
S_gf(u, \xi)
& = \int_{-\infty}^{\infty} x(t) g(t-u) e^{-j\xi t} dt \\
& = \int_{-\infty}^{\infty} e^{j\xi_0t} g(t-u) e^{-j\xi t} dt \\
& = \frac{1}{2\pi}\int_{-\infty}^{\infty} 2\pi \delta(\omega -(\xi - \xi_0)) \hat{g}(\omega) e^{-ju\omega} d\omega \\
& = \hat{g}(\xi - \xi_0) e^{-ju(\xi - \xi_0)} \\
\end{align}
$$
where Plancherel-Parseval's Theorem was applied, and similarly
$$
\begin{align}
S^{\text{mod}}_g f(u, \xi)
& = \int_{-\infty}^{\infty} x(t) g(t-u) e^{-j\xi (t-u)} dt \\
& = \int_{-\infty}^{\infty} e^{j\xi_0t} g(t-u) e^{-j\xi (t-u)} dt \\
& = \frac{1}{2\pi}\int_{-\infty}^{\infty} 2\pi \delta(\omega -(\xi - \xi_0)) \hat{g}(\omega) e^{-ju(\omega - \xi)}d\omega \\
& = \hat{g}(\xi - \xi_0) e^{ju\xi_0} \\
\end{align}
$$
The derivatives are:
$$
\begin{align}
S_{g'} f(u, \xi)
& = \int_{-\infty}^{\infty} x(t) g'(t-u) e^{-j\xi t} dt \\
& = \frac{1}{2\pi}\int_{-\infty}^{\infty} 2\pi \delta(\omega -(\xi - \xi_0)) j\omega\hat{g}(\omega) e^{-ju\omega} d\omega \\
& = j(\xi - \xi_0)\hat{g}(\xi - \xi_0) e^{-ju(\xi - \xi_0)} \\
\end{align}
$$
$$
\begin{align}
S_{g'}^{\text{mod}} f(u, \xi)
& = \int_{-\infty}^{\infty} x(t) g'(t-u) e^{-j\xi (t-u)} dt \\
& = \frac{1}{2\pi}\int_{-\infty}^{\infty} 2\pi \delta(\omega -(\xi - \xi_0)) j\omega\hat{g}(\omega) e^{-ju(\omega - \xi)}d\omega \\
& = j(\xi - \xi_0)\hat{g}(\xi - \xi_0) e^{ju\xi_0} \\
\end{align}
$$
Then, for both cases, to retrieve $\xi_0$, we consider the ratio
$$
\begin{align}
\frac{\partial/\partial t( S_{g}f(u, \xi) )}{S_gf(u, \xi)} = \frac{S_{g'}f(u, \xi)}{S_gf(u, \xi)} = j(\xi - \xi_0)
\end{align}
$$
which leads us to define
$$
\begin{align}
& \boxed{ w(u, \xi) = \xi - \frac{S_{g'}f(u, \xi)}{jS_gf(u, \xi)} } \\
&= \xi - \frac{j(\xi - \xi_0)}{j} = \xi_0 \\
\end{align}
$$
Note the phase transform being same for both is one consequence of the division "reducing influence of windowing".
Verifying derivation
$S_g f(u, \xi)$ expression can be verified with an example, comparing against Wolfram's output (set normalization=1, oscillatory factor=-1):
$$
\text{Let}\ f(t) = e^{jt},\ g(t) = e^{-\pi t^2}, \text{ and thus}\ \hat{g}(\xi) = e^{-\xi^2 / (4\pi)}.\ \text{Then}, \\
$$
$$
\begin{align}
S_gf(u, \xi)
&= \hat{g}(\xi - 1) e^{-ju(\xi - 1)} \\
&= \exp{\left( -\frac{1}{4\pi}(\xi - 1)^2 - ju(\xi - 1) \right)} \\
&= \exp{\left(\frac{1}{4\pi}( (\xi - 1)(-j4\pi u - \xi + 1 )\right)} \\
\end{align}
$$
More completely, ssqueezepy's ssq_stft
on a variety of signals yields expected behavior.
Why the $2\pi$?
The TL;DR pretty much says it, which can be verified in the original MATLAB Toolbox's paper. In code, with frequency-domain differentiation, the $2\pi$ makes it so we define $j \omega$ to span $[0, ..., \pi]$ and $(-\pi, ..., 0)$, and without uses $0.5$ instead of $\pi$, reinterpreting the derivative's dimensionality as linear cyclic fraction of sampling frequency, rather than radian. See code.
Why the $\xi\ -$?
CWT's $\partial W_f$ takes $\partial / \partial b (\psi((t-b)/a))$, where $b = $ timeshift, whereas STFT's takes $\partial / \partial t (g(t))$. This is per how each is computed:
- CWT takes DFT along rows; for every scale (row), we use frequency-domain convolution to correlate the wavelet with the signal at every timeshift $b$ (column).
- STFT takes DFT along columns; for every timeshift (column), we apply DFT to correlate the windowed signal with cisoid bases at every frequency (row).
Following the derivations from motivating examples reveals the $\xi \ -$ stemming from this difference.
The definitions can be interchanged or made the same for both; why exactly they differ I'm unsure. My bet is, CWT is best computed for every timeshift (hop_length = 1
), and the scales are already sparse, whereas in STFT we often apply large hop_length
(small overlap), so convolution theorem is very compute-wasteful.