73 , m_iMaxSamples(p_iMaxSamples)
74 , m_pFiffInfo(p_pFiffInfo)
77 qRegisterMetaType<FiffCov::SPtr>(
"FiffCov::SPtr");
96 if(!m_pRawMatrixBuffer)
99 m_pRawMatrixBuffer->
push(&p_DataSegment);
107 m_iNewMaxSamples = samples;
130 m_bIsRunning =
false;
134 m_pRawMatrixBuffer->
clear();
144 quint32 n_samples = 0;
151 if(m_pRawMatrixBuffer)
153 MatrixXd rawSegment = m_pRawMatrixBuffer->
pop();
157 mu = rawSegment.rowwise().sum();
158 cov->data = rawSegment * rawSegment.transpose();
162 mu.array() += rawSegment.rowwise().sum().array();
163 cov->data += rawSegment * rawSegment.transpose();
165 n_samples += rawSegment.cols();
167 if(n_samples > m_iMaxSamples)
169 mu /= (float)n_samples;
170 cov->data.array() -= n_samples * (mu * mu.transpose()).array();
171 cov->data.array() /= (n_samples - 1);
175 cov->dim = cov->data.rows();
178 cov->names = m_pFiffInfo->ch_names;
179 cov->projs = m_pFiffInfo->projs;
180 cov->bads = m_pFiffInfo->bads;
181 cov->nfree = n_samples;
184 *cov.data() = cov->regularize(*m_pFiffInfo, 0.05, 0.05, 0.1,
true);
#define FIFFV_MNE_NOISE_COV
RtCov(qint32 p_iMaxSamples, FiffInfo::SPtr p_pFiffInfo, QObject *parent=0)
QSharedPointer< FiffCov > SPtr
QSharedPointer< CircularMatrixBuffer > SPtr
QSharedPointer< FiffInfo > SPtr
void covCalculated(FIFFLIB::FiffCov::SPtr p_pCov)
void push(const Matrix< _Tp, Dynamic, Dynamic > *pMatrix)
void setSamples(qint32 samples)
Matrix< _Tp, Dynamic, Dynamic > pop()
void append(const MatrixXd &p_DataSegment)
FiffCov class declaration.