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;
}
Beispiel #4
0
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;
      }
   }
}