Skip to contents

Computes the Morlet continuous wavelet transform of a sampled signal and reassigns its coefficients to frequency cells by the instantaneous frequency estimated from the transform.

Usage

transformSST(signal, samplingInterval, voiceCount = 16,
             morletCenter = 2 * pi, threshold)

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| >\) threshold are reassigned. No default; SynchWave uses sqrt(.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