empiricalSpectrum {bspec} | R Documentation |
Compute the "empirical" spectrum of a time series.
Description
Computes the "empirical power" of a time series via a discrete Fourier transform.
Usage
empiricalSpectrum(x, two.sided=FALSE)
Arguments
x |
a time series ( |
two.sided |
a |
Details
Performs a Fourier transform, and then derives (based on the
additional information on sampling rate etc. provided via the time
series' attributes) the spectral power as a function of frequency.
The result is simpler (in a way) than the spectrum()
function's output, see also the example below. What is returned is the
real-valued frequency series
\kappa_j\frac{\Delta_t}{N}\bigl|\tilde{x}(f_j)\bigr|^2
where j=0,...,N/2+1
,
and f_j=\frac{j}{N \Delta_t}
are the
Fourier frequencies. \Delta_t
is the time series'
sampling interval and N
is its
length. \kappa_j
is =1 for zero and Nyquist
frequencies, and =2 otherwise, and denotes the number of (by
definition) non-zero Fourier coefficients. In case
two.sided=TRUE
, the \kappa_j
prefactor is
omitted.
For actual spectral estimation purposes, the use of a windowing
function (see e.g. the tukeywindow()
function) is highly
recommended.
Value
A list containing the following elements:
frequency |
the Fourier frequencies. |
power |
the spectral power. |
kappa |
the number of (by definition) non-zero imaginary components of the Fourier series. |
two.sided |
a |
Author(s)
Christian Roever, christian.roever@med.uni-goettingen.de
References
Roever, C., Meyer, R., Christensen, N. Modelling coloured residual noise in gravitational-wave signal processing. Classical and Quantum Gravity, 28(1):015010, 2011. doi: 10.1088/0264-9381/28/1/015010. See also arXiv preprint 0804.3853.
See Also
fft
,
spectrum
,
tukeywindow
,
welchPSD
Examples
# load example data:
data(lh)
# compute spectrum:
spec1 <- empiricalSpectrum(lh)
plot(spec1$frequency, spec1$power, log="y", type="b")
# plot "spectrum()" function's result in comparison:
spec2 <- spectrum(lh, plot=FALSE)
lines(spec2$freq, spec2$spec, col="red")
# make both spectra match:
spec3 <- empiricalSpectrum(lh, two.sided=TRUE)
spec4 <- spectrum(lh, plot=FALSE, taper=0, fast=FALSE, detrend=FALSE)
plot(spec3$frequency, spec3$power, log="y", type="b")
lines(spec4$freq, spec4$spec, col="green")