Learn R Programming

RSEIS (version 4.2-4)

Spectrum: Calculate Different Spectrum Types in Physical Units

Description

Spectrum is a wrapper function for stats::fft and RSEIS::mtapspec. For a given method (multi-taper spectrum or fft spectrum) and spectrum type (power, energy, amplitude, or phase), it returns the spectrum in physical units (obeying Parseval's theorem) and the corresponding frequency axis.

Usage

Spectrum(x, dt, one_sided = TRUE, type = 1, method = 1)

Value

List with following elements.

f

frequency axis (Hz; cycles per second, not radians per second)

df

interval for frequency axis (Hz)

spectrum

spectral values corresponding to f

type

spectrum type: Power, Energy, Amplitude, or Phase

units

Units of spectrum (assuming that input units are volts and seconds)

Arguments

x

Time series for which a spectrum is to be calculated (assumed to be in volts)

dt

Sample interval for x (assumed to be in seconds)

one_sided

Logical: should the spectrum be a function of positive frequencies only (f < nyquist frequency) and spectral density doubled to be consistent with that (TRUE, default), or should the spectrum be provided for all frequencies, positive and negative?

type

Type of spectrum: 1 (default) is power spectrum; 2 is energy spectrum; 3 is amplitude spectrum; 4 is phase spectrum

method

Method used to calculate spectrum. 1 (default) is fft; 2 is multi-taper.

Author

Jake Anderson

Details

Phase spectrum is currently enabled only for method = 1 (fft). All possible energy and power spectra obey Parseval's relation (sum(s)*df ~= mean(x^2) for power; sum(s)*df ~= sum(x^2)*dt for energy). Parseval's relation may not be exact due to approximations used in making the spectrum one-sided or in the multi-taper method.

Input units are assumed to be volts and seconds; if other input units are used, adjust output units accordingly.

See Also

RSEIS::mtapspec stats::fft

Examples

Run this code
## example time series
x = rnorm(1000)
dt = 0.01

## power spectrum, multi-taper method, one-sided
S = Spectrum(x, dt, type = 1, method = 2, one_sided = TRUE)
sum(S$spectrum) * S$df ## frequency-domain power
mean(x^2) ## time-domain power

## energy spectrum, fft method, two-sided
S = Spectrum(x, dt, type = 2, method = 1, one_sided = FALSE)
sum(S$spectrum) * S$df ## frequency-domain energy
sum(x^2) * dt ## time-domain energy

Run the code above in your browser using DataLab