void Sbs2SourceReconstrucionLoreta::doRecPow(DTU::DtuArray2D<double> *input_, DTU::DtuArray2D<double> *output_, int* sourceReconstrutionReady) { (*sourceReconstrutionReady) = 0; output = output_; if (!(input_->dim1() == channels)) return; if (!(input->dim2() == samples)) return; if (!(output->dim1() == Sbs2Common::samplingRate()/2)) //freq bins return; if (!(output->dim2() == vertices)) return; for (int row=0; row<input_->dim1(); ++row) { for (int column=0; column<input_->dim2(); ++column) { (*input)[row][column] = (*input_)[row][column]; } } (*output) = 0; preprocessData(); weight(); sourceSpectrogram(); collectDataForModelUpdate(); doModelUpdate(); (*sourceReconstrutionReady) = 1; }
void Sbs2SourceReconstrucionLoreta::doRec(DTU::DtuArray2D<double> *input_, DTU::DtuArray2D<double> *output_, int* sourceReconstrutionReady) { qDebug() << Q_FUNC_INFO; (*sourceReconstrutionReady) = 0; output = output_; if (!(input_->dim1() == channels)) return; if (!(input->dim2() == samples)) return; if (!(output->dim1()) == 1) return; if (!(output->dim2()) == vertices) return; for (int row=0; row<input_->dim1(); ++row) { for (int column=0; column<input_->dim2(); ++column) { (*input)[row][column] = (*input_)[row][column]; } } (*output) = 0; preprocessData(); weight(); collectDataForModelUpdate(); doModelUpdate(); //Sbs2Timer::tic("reconstruct()"); reconstruct(); //Sbs2Timer::toc(); output->print(); (*sourceReconstrutionReady) = 1; }
void Sbs2SourceReconstructionSparse::doRecPow(DTU::DtuArray2D<double> *Y_input, DTU::DtuArray2D<double> *S_output, int *isSourceReconstructionReady) { (*isSourceReconstructionReady) = 0; S = S_output; for (int row=0; row<Y_input->dim1(); ++row) { for (int column=0; column<Y_input->dim2(); ++column) { (*Y)[row][column] = (*Y_input)[row][column]; } } preprocessData(); cross_validation_k_channel(Y,S_temp); calculatePower(S_temp, S_output); (*isSourceReconstructionReady) = 1; }
Dataslc::Dataslc(Data::DataType t, int ndata, int nverts, int ncells, double *_verts, u_int *_cells, int *_celladj, u_char *data) : Data(t, ndata, data) { int i; float grad[3]; float len; Dataslc::nverts = nverts; // initializations Dataslc::ncells = ncells; verts = (double (*)[2])_verts; cells = (u_int (*)[3])_cells; celladj = (int (*)[3])_celladj; printf("computing extent\n"); // compute data extents minext[0] = minext[1] = maxext[0] = maxext[1] = minext[2] = maxext[2] = 0.0; for (i = 0; i < nverts; i++) { if (verts[i][0] < minext[0]) minext[0] = verts[i][0]; if (verts[i][0] > maxext[0]) maxext[0] = verts[i][0]; if (verts[i][1] < minext[1]) minext[1] = verts[i][1]; if (verts[i][1] > maxext[1]) maxext[1] = verts[i][1]; } //fread(minext, sizeof(float[3]), 1, fp); //fread(maxext, sizeof(float[3]), 1, fp); printf(" min = %f %f %f max = %f %f %f\n", minext[0], minext[1], minext[2], maxext[0], maxext[1], maxext[2]); //fread(&nverts, sizeof(int), 1, fp); //fread(&ncells, sizeof(int), 1, fp); printf("%d verts, %d cells\n", Dataslc::nverts, Dataslc::ncells); // compute gradients vgrad = (float (*)[3])malloc(sizeof(float[3])*getNVerts()); printf("processing cells\n"); for (i=0; i<getNCells(); i++) { for (int j=0; j<getNCellFaces(); j++) { int adj = celladj[i][j]; int same = 0; if (adj != -1) { for (int k=0; k<3; k++) for (int l=0; l<3; l++) if (cells[i][k] == cells[adj][l]) same++; if (same != 2) printf("cell %d (%d %d %d) not adj to %d (%d %d %d)\n", i, cells[i][0], cells[i][1], cells[i][2], adj, cells[adj][0], cells[adj][1], cells[adj][2]); } } } preprocessData(data); for (i=0; i<getNCells(); i++) { getCellGrad(i, grad); vgrad[getCellVert(i,0)][0] += grad[0]; vgrad[getCellVert(i,0)][1] += grad[1]; vgrad[getCellVert(i,0)][2] += grad[2]; vgrad[getCellVert(i,1)][0] += grad[0]; vgrad[getCellVert(i,1)][1] += grad[1]; vgrad[getCellVert(i,1)][2] += grad[2]; vgrad[getCellVert(i,2)][0] += grad[0]; vgrad[getCellVert(i,2)][1] += grad[1]; vgrad[getCellVert(i,2)][2] += grad[2]; } for (i=0; i<getNVerts(); i++) { //printf("scaling vgrad %d\n", i); len = sqrt(vgrad[i][0]*vgrad[i][0] + vgrad[i][1]*vgrad[i][1] + vgrad[i][2]*vgrad[i][2]); if (len != 0.0) { vgrad[i][0] /= len; vgrad[i][1] /= len; vgrad[i][2] /= len; } } }