Csd
Namespace: UTILSLIB · Library: Utilities Library
#include <utils/csd.h>
class UTILSLIB::Csd
Cross-Spectral Density (CSD) estimator.
Provides three methods for computing the CSD matrix between channels: multitaper (DPSS tapers), Fourier (Welch-style segmented), and Morlet wavelet.
MatrixXd twoChannels(2, n);
twoChannels.row(0) = signal;
for (int t = 0; t < n; ++t) {
twoChannels(1, t) = std::cos(2.0 * kPi * 20.0 * t / kSFreq); // 20 Hz, 90 degrees ahead of channel 0
}
const CsdResult csd = Csd::computeMultitaper(twoChannels, kSFreq, 18.0, 22.0, 2.0);
const std::complex<double> cross = csd.matCsd(0, 1);
Static Methods
computeMultitaper(matData, sfreq, fmin, fmax, halfBandwidth, nTapers)
Compute CSD using multitaper (DPSS) spectral estimation.
Parameters:
-
matData : const Eigen::MatrixXd & Data matrix (n_channels × n_samples).
-
sfreq : double Sampling frequency in Hz.
-
fmin : double Minimum frequency of interest in Hz (default 0).
-
fmax : double Maximum frequency in Hz; -1 → Nyquist (default -1).
-
halfBandwidth : double Half-bandwidth parameter (NW) for DPSS tapers (default 4).
-
nTapers : int Number of tapers; -1 → as MNE-Python: those of the first floor(2*halfBandwidth) with concentration > 0.9 (default -1).
Returns:
computeFourier(matData, sfreq, fmin, fmax, nFft, overlap)
Compute CSD using Welch-style Fourier segmented estimation.
Each segment is treated like an epoch of mne.time_frequency.csd_array_fourier (demeaned, Hann window, same scaling); DC is never returned.
Parameters:
-
matData : const Eigen::MatrixXd & Data matrix (n_channels × n_samples).
-
sfreq : double Sampling frequency in Hz.
-
fmin : double Minimum frequency of interest in Hz (default 0).
-
fmax : double Maximum frequency in Hz; -1 → Nyquist (default -1).
-
nFft : int FFT / segment length in samples (default 256).
-
overlap : double Fractional overlap between adjacent segments, in [0, 1) (default 0.5).
Returns:
computeMorlet(matData, sfreq, frequencies, nCycles)
Compute CSD using Morlet wavelet convolution, scaled like mne.time_frequency.csd_array_morlet.
Parameters:
-
matData : const Eigen::MatrixXd & Data matrix (n_channels × n_samples).
-
sfreq : double Sampling frequency in Hz.
-
frequencies : const Eigen::RowVectorXd & Target frequencies in Hz.
-
nCycles : int Number of cycles in the Morlet wavelet (default 7).
Returns:
Example
- Full source:
src/examples/ex_dsp_spectral/main.cpp - Build target:
ex_dsp_spectral(runs under CTest)
Authors of this file
- Christoph Dinh <christoph.dinh@mne-cpp.org>