Synchrosqueezed Wavelet Transform
transformSST.RdComputes the Morlet continuous wavelet transform of a sampled signal and reassigns its coefficients to frequency cells by the instantaneous frequency estimated from the transform.
Arguments
- signal
Numeric vector of at least four finite values without
dim, in the units of the quantity.- samplingInterval
Sampling interval \(\Delta t\) in seconds, a finite number greater than zero.
- voiceCount
Whole number \(\ge 1\) of voices per octave; default
16, the value of SynchWave.- morletCenter
Center \(\mu > 0\) of the Morlet wavelet in normalized frequency; default \(2\pi\), the value of SynchWave.
- threshold
Number greater than zero in the units of the signal: only coefficients with \(|W| >\)
thresholdare reassigned. No default; SynchWave usessqrt(.Machine$double.eps).
Details
The record is extended by symmetric padding to
\(T = 2^{1 + \mathrm{round}(\log_2 N)}\) samples, and the transform uses
the scales \(a_j = 2^{j / \mathrm{voiceCount}}\),
\(j = 1, \ldots, (\log_2 T - 1)\,\mathrm{voiceCount}\). For each
coefficient above the threshold, the frequency
$$\frac{\mathrm{Re}\,\Omega_f(a, b)}{2\pi} = \frac{1}{2\pi} \mathrm{Im}\frac{\partial_b W_f(a, b)}{W_f(a, b)}$$
in Hz goes to the nearest of \(J\) logarithmic cells from
\(1/((N - 1)\Delta t)\) to \(1/(2\Delta t)\), \(J\) the number of
scales, where the coefficient adds \(W a^{-1/2}\); the sums are divided by
voiceCount. Estimates that are not positive or fall outside the
cells are not accumulated, and a transform whose energy is below the
machine epsilon gives a zero result. The representation recovers the
signal only approximately. The threshold is in the units of the signal,
so decomposeTSL has no operation for this transform.
Value
A list with
- transform
Complex matrix, samples by frequency cells.
- frequency
Numeric vector of the cell frequencies in Hz.
References
Daubechies, I., Lu, J. and Wu, H.-T. (2009). Synchrosqueezed wavelet transforms: a tool for empirical mode decomposition. arXiv:0912.2437.
The wavelet transform, the Morlet wavelet and the reassignment are adapted
from SynchWave 1.1.2, revision 9ac80b2c3e60b417d0ee5567a66e8e64faa1a979
(MATLAB original by Eugene Brevdo; R port by Dongik Jang, Hee-Seok Oh and
Donghoh Kim; the Synchrosqueezing toolbox attribution also names Hau-Tieng
Wu), LGPL-2.0-or-later, which xemd distributes under GPL-3 as section 3 of
the GNU Library General Public License version 2 permits; see the NOTICE
file of the installed package.
Examples
SamplingInterval <- 1 / 1000
Time <- seq_len(1000) * SamplingInterval
Signal <- cos(2 * pi * 2 * Time) + 0.25 * cos(2 * pi * 24 * Time) +
0.0625 * cos(2 * pi * 288 * Time)
OUT <- transformSST(Signal, samplingInterval = SamplingInterval,
voiceCount = 16, morletCenter = 2 * pi,
threshold = sqrt(.Machine$double.eps))
dim(OUT$transform)
#> [1] 1000 160
range(OUT$frequency)
#> [1] 1.001001 500.000000