67#ifdef EIGEN_FFTW_DEFAULT
68 fftw_make_planner_thread_safe();
73 if (connectivitySettings.
isEmpty()) {
74 qDebug() <<
"CrossCorrelation::calculate - Input data is empty";
85 int rows = connectivitySettings.
at(0).
matData.rows();
86 RowVectorXf rowVert = RowVectorXf::Zero(3);
88 for (
int i = 0; i < rows; ++i) {
89 rowVert = RowVectorXf::Zero(3);
101 int iSignalLength = connectivitySettings.
at(0).
matData.cols();
102 int iNfft = connectivitySettings.
getFFTSize();
123 QFuture<void> resultMat = QtConcurrent::map(connectivitySettings.
getTrialData(),
125 resultMat.waitForFinished();
127 matDist /= connectivitySettings.
size();
134 MatrixXd matWeight(1, 1);
135 QSharedPointer<NetworkEdge> pEdge;
138 for (
int i = 0; i < matDist.rows(); ++i) {
139 for (j = i; j < matDist.cols(); ++j) {
140 matWeight << matDist(i, j);
142 pEdge = QSharedPointer<NetworkEdge>(
new NetworkEdge(i, j, matWeight));
144 finalNetwork.
getNodeAt(i)->append(pEdge);
145 finalNetwork.
getNodeAt(j)->append(pEdge);
146 finalNetwork.
append(pEdge);
163 const QPair<MatrixXd, VectorXd>& tapers)
170 RowVectorXd vecInputFFT, rowData;
171 RowVectorXcd vecResultFreq;
174 fft.SetFlag(fft.HalfSpectrum);
177 int iNRows = inputData.
matData.rows();
182 int iNFreqs = int(floor(iNfft / 2.0)) + 1;
183 MatrixXcd matTapSpectrum(tapers.first.rows(), iNFreqs);
185 for (i = 0; i < iNRows; ++i) {
187 rowData.array() = inputData.
matData.row(i).array() - inputData.
matData.row(i).mean();
190 for (j = 0; j < tapers.first.rows(); j++) {
192 if (rowData.cols() < iNfft) {
193 vecInputFFT.setZero(iNfft);
194 vecInputFFT.block(0, 0, 1, rowData.cols()) = rowData.cwiseProduct(tapers.first.row(j));
197 vecInputFFT = rowData.cwiseProduct(tapers.first.row(j));
201 fft.fwd(vecResultFreq, vecInputFFT, iNfft);
202 matTapSpectrum.row(j) = vecResultFreq * tapers.second(j);
215 MatrixXd matDistTrial = MatrixXd::Zero(iNRows, iNRows);
216 RowVectorXcd vecResultXCor;
218 double denom = tapers.second.sum();
221 vecResultFreq = inputData.
vecTapSpectra.at(i).colwise().sum() / denom;
224 vecResultXCor = vecResultFreq.cwiseProduct(inputData.
vecTapSpectra.at(j).colwise().sum() / denom);
226 fft.inv(vecInputFFT, vecResultXCor, iNfft);
228 vecInputFFT.maxCoeff(&idx);
230 matDistTrial(i, j) = vecInputFFT(idx);
241 if (matDist.rows() != matDistTrial.rows() || matDist.cols() != matDistTrial.cols()) {
242 matDist.resize(matDistTrial.rows(), matDistTrial.cols());
246 matDist += matDistTrial;
static void compute(ConnectivitySettings::IntermediateTrialData &inputData, Eigen::MatrixXd &matDist, QMutex &mutex, int iNfft, const QPair< Eigen::MatrixXd, Eigen::VectorXd > &tapers)