void SpectralReassignment::setup(){ LOUDIA_DEBUG("SPECTRALREASSIGNMENT: Setting up..."); // Setup the window so it gets calculated and can be reused _windowAlgo.setup(); // Create the time vector LOUDIA_DEBUG("SPECTRALREASSIGNMENT: Creating time vector..."); Real timestep = 1.0 / _sampleRate; // The unit of the vectors is Time Sample fractions // So the difference between one coeff and the next is 1 // and the center of the window must be 0, so even sized windows // will have the two center coeffs to -0.5 and 0.5 // This should be a line going from [-(window_size - 1)/2 ... (window_size - 1)/2] _time.resize(_frameSize, 1); for(int i = 0; i < _time.rows(); i++){ _time(i, 0) = (i - Real(_time.rows() - 1)/2.0); } // Create the freq vector LOUDIA_DEBUG("SPECTRALREASSIGNMENT: Creating freq vector..."); // The unit of the vectors is Frequency Bin fractions // TODO: Must rethink how the frequency vector is initialized // as we did for the time vector _freq.resize(1, _fftSize); range(0, _fftSize, _fftSize, &_freq); // Calculate and set the time weighted window LOUDIA_DEBUG("SPECTRALREASSIGNMENT: Calculate time weighted window..."); MatrixXR windowInteg = _windowAlgo.window(); windowInteg = windowInteg.cwise() * _time.transpose(); _windowIntegAlgo.setWindow(windowInteg); // Calculate and set the time derivated window LOUDIA_DEBUG("SPECTRALREASSIGNMENT: Calculate time derivative window..."); MatrixXR windowDeriv = _windowAlgo.window(); for(int i = windowDeriv.cols() - 1; i > 0; i--){ windowDeriv(0, i) = (windowDeriv(0, i) - windowDeriv(0, i - 1)) / timestep; } // TODO: Check what is the initial condition for the window // Should this be 0 or just the value it was originally * dt //windowDeriv(0, 0) = 0.0; _windowDerivAlgo.setWindow(windowDeriv); // Create the necessary buffers for the windowing _window.resize(1, _frameSize); _windowInteg.resize(1, _frameSize); _windowDeriv.resize(1, _frameSize); // Create the necessary buffers for the FFT _fftAbs2.resize(1, _fftSize); _fftInteg.resize(1, _fftSize); _fftDeriv.resize(1, _fftSize); // Setup the algos _windowIntegAlgo.setup(); _windowDerivAlgo.setup(); _fftAlgo.setup(); LOUDIA_DEBUG("SPECTRALREASSIGNMENT: Finished set up..."); }