// --------------------------------------------------------------------------- // timeOfPeakEnergy (static helper function) // --------------------------------------------------------------------------- // Return the time at which the given Partial attains its // maximum sinusoidal energy. // static double timeOfPeakEnergy( const Partial & p ) { Partial::const_iterator partialIter = p.begin(); double maxAmp = partialIter->amplitude() * std::sqrt( 1. - partialIter->bandwidth() ); double time = partialIter.time(); for ( ++partialIter; partialIter != p.end(); ++partialIter ) { double a = partialIter->amplitude() * std::sqrt( 1. - partialIter->bandwidth() ); if ( a > maxAmp ) { maxAmp = a; time = partialIter.time(); } } return time; }
// --------------------------------------------------------------------------- // peakAmplitude // --------------------------------------------------------------------------- //! Return the maximum amplitude achieved by a partial. //! //! \param p is the Partial to evaluate //! \return the maximum (absolute) amplitude achieved by //! the partial p // double peakAmplitude( const Partial & p ) { double peak = 0; for ( Partial::const_iterator it = p.begin(); it != p.end(); ++it ) { peak = std::max( peak, it->amplitude() ); } return peak; }
// --------------------------------------------------------------------------- // weightedAvgFrequency // --------------------------------------------------------------------------- //! Return the average frequency over all Breakpoints in this Partial, //! weighted by the Breakpoint amplitudes. //! Return zero if the Partial has no Breakpoints. //! //! \param p is the Partial to evaluate //! \return the average frequency (Hz) of Breakpoints in the Partial p // double weightedAvgFrequency( const Partial & p ) { double avg = 0; double ampsum = 0; for ( Partial::const_iterator it = p.begin(); it != p.end(); ++it ) { avg += it->amplitude() * it->frequency(); ampsum += it->amplitude(); } if ( avg != 0 && ampsum != 0 ) { avg /= ampsum; } else { avg = 0; } return avg; }
// --------------------------------------------------------------------------- // avgAmplitude // --------------------------------------------------------------------------- //! Return the average amplitude over all Breakpoints in this Partial. //! Return zero if the Partial has no Breakpoints. //! //! \param p is the Partial to evaluate //! \return the average amplitude of Breakpoints in the Partial p // double avgAmplitude( const Partial & p ) { double avg = 0; for ( Partial::const_iterator it = p.begin(); it != p.end(); ++it ) { avg += it->amplitude(); } if ( avg != 0 ) { avg /= p.numBreakpoints(); } return avg; }