44static QVector<int> megChannelIndices(
const FiffInfo& info)
47 for (
int i = 0; i < info.
chs.size(); ++i) {
62 const QVector<double>& hpiFreqs,
65 if (hpiFreqs.isEmpty()) {
70 qWarning() <<
"filterChpi: Invalid sampling frequency" << sfreq <<
"Hz. Skipping.";
74 const double dNyquist = sfreq / 2.0;
77 QVector<double> validFreqs;
78 for (
const double freq : hpiFreqs) {
81 if (freq <= 0.0 || fHigh >= dNyquist) {
82 qWarning() <<
"filterChpi: Skipping invalid cHPI frequency" << freq
83 <<
"Hz (Nyquist =" << dNyquist <<
"Hz).";
87 qWarning() <<
"filterChpi: Skipping cHPI frequency" << freq
88 <<
"Hz (notch lower edge <= 0 Hz).";
91 validFreqs.append(freq);
94 if (validFreqs.isEmpty()) {
100 const QVector<int> megIdx = megChannelIndices(info);
101 if (megIdx.isEmpty()) {
102 qWarning() <<
"filterChpi: No MEG channels found in FiffInfo. Nothing to filter.";
107 MatrixXd megData(megIdx.size(), data.cols());
108 for (
int i = 0; i < megIdx.size(); ++i) {
109 megData.row(i) = data.row(megIdx[i]);
113 for (
const double freq : validFreqs) {
124 for (
int i = 0; i < megIdx.size(); ++i) {
125 data.row(megIdx[i]) = megData.row(i);
129 for (
const double freq : validFreqs) {
159 qWarning() <<
"filterChpi: Automatic cHPI frequency extraction from FiffInfo is not yet "
160 "implemented. Please provide frequencies explicitly via the hpiFreqs parameter.";
Symbolic FIFF tag, block, value, unit and channel-type constants shared across FIFFLIB.
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
Butterworth IIR filter design and application via numerically stable second-order sections.
Declaration of filterChpi — cHPI signal removal by notch filtering.
FIFF file I/O, in-memory data structures and high-level readers/writers.
Shared utilities (I/O helpers, spectral analysis, layout management, warp algorithms).
DSPSHARED_EXPORT void filterChpi(Eigen::MatrixXd &data, const FIFFLIB::FiffInfo &info, double sfreq, const QVector< double > &hpiFreqs, const FilterChpiParams ¶ms=FilterChpiParams())
Remove cHPI excitation signals from MEG data by notch filtering.
Parameters for cHPI notch filtering.
static QVector< IirBiquad > designButterworth(int iOrder, FilterType type, double dCutoffLow, double dCutoffHigh, double dSFreq)
static Eigen::MatrixXd applyZeroPhaseMatrix(const Eigen::MatrixXd &matData, const QVector< IirBiquad > &sos)
Full FIFF measurement info: per-channel descriptors, sampling and filter setup, projectors,...