Beispiel #1
0
mrs_realvec Delay::seconds2Samples (mrs_realvec seconds)
{
	for (mrs_natural i = 0; i < seconds.getSize (); ++i)
		seconds(i)	= seconds(i) * israte_;

	return seconds;
}
Beispiel #2
0
mrs_realvec Delay::samples2Seconds (mrs_realvec samples)
{
	for (mrs_natural i = 0; i < samples.getSize (); ++i)
		samples(i)	= samples(i)/ israte_;

	return samples;
}
static void FreqSmear (mrs_realvec &spectrum)
{
  mrs_natural length = spectrum.getSize ();
  mrs_real buf[3]		= {0,0,0},
                      coeff[3]	= {.25, .5, .25};

  spectrum(0) = spectrum(length-1) = 0;

  for (mrs_natural i = 0; i < length-1; i++)
  {
    buf[(i+1)%3]	= spectrum(i+1);
    spectrum(i)		= coeff[0]*buf[(i-1+3)%3] + coeff[1]*buf[(i)%3] + coeff[2]*buf[(i+1)%3];
  }

  return;
}
Beispiel #4
0
void
PeakDistanceHorizontality::myProcess(realvec& in, realvec& out)
{
    mrs_natural i;
    const mrs_natural	numInputs	= getctrl ("mrs_natural/numInputs")->to<mrs_natural>();
    const mrs_realvec	isHoriz		= ctrl_horizvert_->to<mrs_realvec>();
    const mrs_real		range[2]	= {ctrl_rangeX_->to<mrs_real>(), ctrl_rangeY_->to<mrs_real>()};

    out = in;

    MRSASSERT(range[0] > 0 && range[1] > 0);
    if (isHoriz.getSize () != numInputs)
    {
        MRSWARN("PeakDistanceHorizontality: dimension mismatch");
        MRSASSERT(false);
        out.setval(0);
        return;
    }

    if (getctrl("mrs_bool/bypass")->to<mrs_bool>())
    {
        weights_.setval(1.);
        setctrl ("mrs_realvec/weights", weights_);
        return;
    }

    for (i = 0; i < inSamples_; i++)
    {
        for (mrs_natural j = i; j < inSamples_; j++)
        {
            mrs_natural k;
            mrs_real	horizontality	= ComputeHorizontality (	std::abs(in(1,i)-in(1,j))/range[0],
                                          std::abs(in(0,i)-in(0,j))/range[1]),
                                          norm			= 0;

            for (k = 0; k < numInputs; k++)
            {
                mrs_real weight = horizontality;

                if (abs(isHoriz(k) - 2) < kIdentityThresh)
                    weight	= .5;			// input is both horizontal and vertical
                else if (abs(isHoriz(k)) < kIdentityThresh)
                    weight	= 1.-weight;	// input is vertical

                norm							+= weight;
                weights_(k*inSamples_ + i, j)	= weight;
                weights_(k*inSamples_ + j, i)	= weight;	// symmetry
            }
            if (norm != 0)
                norm	= 1./norm;
            for (k = 0; k < numInputs; k++)
            {
                weights_(k*inSamples_ + i, j)	*= norm;
                if (i != j)
                    weights_(k*inSamples_ + j, i)	*= norm;	// symmetry
            }
        }
    }
    setctrl ("mrs_realvec/weights", weights_);
#ifdef MARSYAS_MATLAB
#ifdef MTLB_DBG_LOG
    MATLAB_PUT(weights_, "weights");
    MATLAB_EVAL("figure(1);imagesc(weights),colorbar;");
#endif
#endif
}