tomwalters@397: /*! tomwalters@397: * \file tomwalters@397: * \brief Log frequency scale for generating filter banks and their frequencies. Based on the scaling of the ERB scale tomwalters@397: * tomwalters@397: * \author Tom Walters tomwalters@397: * \date created 2006/09/26 tomwalters@397: * \version \$Id: ScaleLogScaled.h 459 2007-11-08 11:50:04Z tom $ tomwalters@397: */ tomwalters@397: /* (c) 2006, University of Cambridge, Medical Research Council tomwalters@397: * http://www.pdn.cam.ac.uk/groups/cnbh/aimmanual tomwalters@397: */ tomwalters@397: #ifndef __MODULE_SCALE_LOGSCALED_H__ tomwalters@397: #define __MODULE_SCALE_LOGSCALED_H__ tomwalters@397: tomwalters@397: #include tomwalters@397: tom@400: #include "Modules/Output/Graphics/Scale/Scale.h" tom@400: tom@400: namespace aimc { tomwalters@397: tomwalters@397: /*! tomwalters@397: * \class ScaleERB "Modules/Scale/ScaleERB.h" tomwalters@397: * \brief ERB frequency scale for generating filter banks and their frequencies tomwalters@397: * tomwalters@397: * It is very advisable to use Scale::Create() to an instance of this scale. tomwalters@397: * tomwalters@397: * References: tomwalters@397: * - J. Smith and J. Abel (1999), "Bark and ERB bilinear transforms" tomwalters@397: * http://www-ccrma.stanford.edu/~jos/bbt/ tomwalters@397: */ tomwalters@397: class ScaleLogScaled : public Scale { tomwalters@397: public: tomwalters@398: ScaleLogScaled(unsigned int min, unsigned int max, float density) tomwalters@398: : Scale(min, max, density) { m_iType = SCALE_ERB; m_sName = "logscaled"; }; tomwalters@397: tomwalters@398: float FromLinear(float fFreq) { tomwalters@398: return 21.4f*log10(0.00437f*fFreq); tomwalters@398: }; tomwalters@397: tomwalters@398: float ToLinear(float fFreq) { tomwalters@398: return (pow(10, fFreq/21.4f))/0.00437f; tomwalters@398: }; tomwalters@397: }; tom@400: } // namespace aimc tomwalters@397: #endif /* __MODULE_SCALE_ERB_H__ */