| cpsd {gsignal} | R Documentation |
Cross power spectral density
Description
Estimates the cross power spectral density (CPSD) of discrete-time signals.
Usage
cpsd(
x,
window = nextpow2(sqrt(NROW(x))),
overlap = 0.5,
nfft = ifelse(isScalar(window), window, length(window)),
fs = 1,
detrend = c("long-mean", "short-mean", "long-linear", "short-linear", "none")
)
csd(
x,
window = nextpow2(sqrt(NROW(x))),
overlap = 0.5,
nfft = ifelse(isScalar(window), window, length(window)),
fs = 1,
detrend = c("long-mean", "short-mean", "long-linear", "short-linear", "none")
)
Arguments
x |
input data, specified as a numeric vector or matrix. In case of a vector it represents a single signal; in case of a matrix each column is a signal. |
window |
If |
overlap |
segment overlap, specified as a numeric value expressed as a multiple of window or segment length. 0 <= overlap < 1. Default: 0.5. |
nfft |
Length of FFT, specified as an integer scalar. The default is the
length of the |
fs |
sampling frequency (Hertz), specified as a positive scalar. Default: 1. |
detrend |
character string specifying detrending option; one of:
|
Details
cpsd estimates the cross power spectral density function using
Welch’s overlapped averaged periodogram method [1].
Value
A list containing the following elements:
freqvector of frequencies at which the spectral variables are estimated. If
xis numeric, power from negative frequencies is added to the positive side of the spectrum, but not at zero or Nyquist (fs/2) frequencies. This keeps power equal in time and spectral domains. Ifxis complex, then the whole frequency range is returned.crossNULL for univariate series. For multivariate series, a matrix containing the squared coherence between different series. Column
i + (j - 1) * (j - 2)/2ofcohcontains the cross-spectral estimates between columnsiandjofx, wherei < j.
Note
The function cpsd (and its deprecated alias csd)
is a wrapper for the function pwelch, which is more complete and
more flexible.
Author(s)
Peter V. Lanspeary, pvl@mecheng.adelaide.edu.au.
Conversion to R by Geert van Boxtel, G.J.M.vanBoxtel@gmail.com.
References
[1] Welch, P.D. (1967). The use of Fast Fourier Transform for
the estimation of power spectra: A method based on time averaging over
short, modified periodograms. IEEE Transactions on Audio and
Electroacoustics, AU-15 (2): 70–73.
Examples
fs <- 1000
f <- 250
t <- seq(0, 1 - 1/fs, 1/fs)
s1 <- sin(2 * pi * f * t) + runif(length(t))
s2 <- sin(2 * pi * f * t - pi / 3) + runif(length(t))
rv <- cpsd(cbind(s1, s2), fs = fs)
plot(rv$freq, 10 * log10(rv$cross), type="l", xlab = "Frequency",
ylab = "Cross Spectral Density (dB)")