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