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));;
196 vecInputFFT = rowData.cwiseProduct(tapers.first.row(j));
200 fft.fwd(vecResultFreq, vecInputFFT, iNfft);
201 matTapSpectrum.row(j) = vecResultFreq * tapers.second(j);
214 MatrixXd matDistTrial = MatrixXd::Zero(iNRows, iNRows);
215 RowVectorXcd vecResultXCor;
217 double denom = tapers.second.sum();
220 vecResultFreq = inputData.
vecTapSpectra.at(i).colwise().sum() / denom;
223 vecResultXCor = vecResultFreq.cwiseProduct(inputData.
vecTapSpectra.at(j).colwise().sum() / denom);
225 fft.inv(vecInputFFT, vecResultXCor, iNfft);
227 vecInputFFT.maxCoeff(&idx);
229 matDistTrial(i,j) = vecInputFFT(idx);
240 if(matDist.rows() != matDistTrial.rows() || matDist.cols() != matDistTrial.cols()) {
241 matDist.resize(matDistTrial.rows(), matDistTrial.cols());
245 matDist += matDistTrial;
static void compute(ConnectivitySettings::IntermediateTrialData &inputData, Eigen::MatrixXd &matDist, QMutex &mutex, int iNfft, const QPair< Eigen::MatrixXd, Eigen::VectorXd > &tapers)