Beispiel #1
0
void Peaker::compLpThresh (const mrs_realvec input, mrs_realvec &output)
{
  mrs_natural i,
              len = input.getCols ();
  mrs_real	buf = input(0);
  for (i = 0; i < len; ++i)
  {
    buf			= input(i) + lpCoeff_ * (buf - input(i));
    output(i)	= buf;
  }
  // do reverse filtering to ensure zero group delay
  for (i = len-1; i >= 0; i--)
  {
    buf			= output(i) + lpCoeff_ * (buf - output(i));
    output(i)	= buf;
  }
}
void TimeFreqPeakConnectivity::InitMatrix (mrs_realvec &Matrix, unsigned char **traceback, mrs_natural rowIdx, mrs_natural colIdx)
{
	mrs_natural i,j,				
				numRows = Matrix.getRows (),
				numCols = Matrix.getCols ();
	mrs_natural iCol;

	Matrix.setval(0);
	
	traceback[rowIdx][colIdx]	= kFromLeft;

	// left of point of interest
	for (i = 0; i < numRows; i++)
	{
		for (j = 0; j < colIdx; j++)
		{
			Matrix(i,j)		= costInit;
			traceback[i][j]	= kFromLeft;
		}
	}
	//cout << Matrix << endl;
	//upper left corner
	for (i = 0; i < rowIdx; i++)
	{
		iCol	= MyMin (rowIdx - i + colIdx, numCols);
		for (j = colIdx; j < iCol; j++)
		{
			Matrix(i,j)		= costInit;
			traceback[i][j]	= kFromLeft;
		}
	}
	//cout << Matrix << endl;
	// lower left corner
	for (i = rowIdx + 1; i < numRows; i++)
	{
		iCol	= MyMin (i - rowIdx + colIdx, numCols);
		for (j = colIdx; j < iCol; j++)
		{
			Matrix(i,j)		= costInit;
			traceback[i][j]	= kFromLeft;
		}
	}
	//cout << Matrix << endl;
}
void PeakConvert2::ComputePeaker (mrs_realvec in, realvec& out)
{
#ifdef ORIGINAL_VERSION
  peaker_->updControl("mrs_real/peakStrength", 0.2);// to be set as a control [!]
#else
  peaker_->updControl("mrs_real/peakStrength",1e-1);
  peaker_->updControl("mrs_real/peakStrengthRelMax" ,1e-2);
  peaker_->updControl("mrs_real/peakStrengthAbs",1e-10 );
  peaker_->updControl("mrs_real/peakStrengthTreshLpParam" ,0.95);
  peaker_->updControl("mrs_real/peakStrengthRelThresh" , 1.);
#endif

  peaker_->updControl("mrs_real/peakSpacing", 2e-3);   // 0
  peaker_->updControl("mrs_natural/peakStart", downFrequency_);   // 0
  peaker_->updControl("mrs_natural/peakEnd", upFrequency_);  // size_
  peaker_->updControl("mrs_natural/inSamples", in.getCols());
  peaker_->updControl("mrs_natural/inObservations", in.getRows());
  peaker_->updControl("mrs_natural/onSamples", out.getCols());
  peaker_->updControl("mrs_natural/onObservations", out.getRows());

  peaker_->process(in, out);
}
void TimeFreqPeakConnectivity::CalcDp (mrs_realvec &Matrix, mrs_natural startr, mrs_natural startc, mrs_natural stopr, mrs_natural stopc)
{
	mrs_natural i,j,
		numRows = Matrix.getRows (),
		numCols = Matrix.getCols ();
	mrs_real prevCost[kNumDirections]	= {0,0,0};

	costMatrix_.stretch ( numRows, numCols);

	// initialize cost and traceback matrix
	// upper and lower left corner
	InitMatrix (costMatrix_, tracebackIdx_, startr, startc);
	costMatrix_(startr, startc)	= Matrix(startr, startc);

	// compute cost matrix
	for (j = startc+1; j <= stopc; j++)
	{
		mrs_natural rowLoopStart	= MyMax (0, startr - (j - startc)),
					rowLoopStop		= MyMin (numRows, startr + (j-startc) + 1);
		for (i = rowLoopStart; i < rowLoopStop; i++)
		{
			prevCost[kFromLeft]	= costMatrix_(i,j-1);
			prevCost[kFromUp]	= (i >= numRows-1) ? costInit : costMatrix_(i+1, j-1);			// the if isn't very nice here....
			prevCost[kFromDown]	= (i <= 0) ? costInit : costMatrix_(i-1, j-1);
			// assign cost
			costMatrix_(i,j)	= Matrix(i,j) + dtwFindMin (prevCost, tracebackIdx_[i][j]);
		}
	}

	// compute path
	i = stopr;
	for (j = stopc; j >= startc; j--)
	{
		path_[j-startc]	= i;
		i				-= (kFromLeft - tracebackIdx_[i][j]); // note: does work only for kFromUp, kFromLeft, kFromDown
	}
}