Skip to contents

Estimates the frequency of the masking signal of 2005 from the instantaneous amplitude and frequency of the first sifted component of a signal.

Usage

estimateMaskFrequency(signal, samplingInterval, sifting)

Arguments

signal

Numeric vector of finite real values without dim, in the units of the quantity.

samplingInterval

Sampling interval in seconds, a finite number greater than zero, without default.

sifting

Named list of sifting controls, as in decomposeEMD; the rule "consecutive" is rejected.

Details

With \(A_1\) and \(\nu_1\) the instantaneous amplitude and frequency, computed by computeInstantaneousAttributes, of the first sifted component \(y_1 = E_1(x)\) without mask, the estimate is $$\bar\nu = \frac{\sum_n A_1[n] \, \nu_1[n]^2}{\sum_n A_1[n] \, \nu_1[n]},$$ with the sums over the samples where \(\nu_1\) is defined. The result is the frequency of the rule "pair" of decomposeMaskedEMD.

Value

A number, the mask frequency in Hz.

Conditions

A signal without a first extracted component stops with an error. When the weights \(A_1 \nu_1\) sum to zero the estimate is undefined, and the function stops with an error of class xemdZeroEnergy.

References

The selection of the reflected extrema and the spline interpolation of the envelope nodes are adapted from emd.m (G. Rilling, March 2007), distributed with CEEMDAN revision af9a0f83, copyright (c) 2020 Marcelo A. Colominas, MIT License; see the NOTICE file of the installed package.

Examples

Time <- seq(0, 9, length.out = 3000)
Signal <- sin(pi * Time) + sin(2 * pi * Time) + sin(6 * pi * Time) +
    0.5 * Time
Sifting <- list(stopRule = "doubleThreshold", thresholds = c(0.05, 0.5),
                fraction = 0.05, maxSift = 2000, boundary = "reflection",
                maxModes = 3)
# One sample per second, so the result is in cycles per sample.
estimateMaskFrequency(Signal, samplingInterval = 1, sifting = Sifting)
#> [1] 0.01017674
# The time step of the signal, 9 / 2999 s.
estimateMaskFrequency(Signal, samplingInterval = 9 / 2999, sifting = Sifting)
#> [1] 3.391114