mrs_realvec Delay::seconds2Samples (mrs_realvec seconds) { for (mrs_natural i = 0; i < seconds.getSize (); ++i) seconds(i) = seconds(i) * israte_; return seconds; }
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; }
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 }