From 54a487bc04ad13bccb5f55aa0eef24110bb4e105 Mon Sep 17 00:00:00 2001 From: Jonas Stienen Date: Fri, 2 Jun 2017 08:32:03 +0200 Subject: [PATCH] Adding amplitude spectrum --- CMakeLists.txt | 2 ++ include/ITAAmplitudeSpectrum.h | 55 ++++++++++++++++++++++++++++++ src/ITAAmplitudeSpectrum.cpp | 62 ++++++++++++++++++++++++++++++++++ src/ITAMagnitudeSpectrum.cpp | 1 - 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 include/ITAAmplitudeSpectrum.h create mode 100644 src/ITAAmplitudeSpectrum.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4dbee10..ab3be06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,7 @@ include_directories( "include" ) # files set( ITABaseHeader "include/ITAASCIITable.h" + "include/ITAAmplitudeSpectrum.h" "include/ITABaseDefinitions.h" "include/ITABlockMath.h" "include/ITABufferedAudioFileWriter.h" @@ -87,6 +88,7 @@ set( ITABaseHeader ) set( ITABaseSources "src/ITAASCIITable.cpp" + "src/ITAAmplitudeSpectrum.cpp" "src/ITABlockMath.cpp" "src/ITABufferedAudioFileWriter.cpp" "src/ITAClock.cpp" diff --git a/include/ITAAmplitudeSpectrum.h b/include/ITAAmplitudeSpectrum.h new file mode 100644 index 0000000..846bb18 --- /dev/null +++ b/include/ITAAmplitudeSpectrum.h @@ -0,0 +1,55 @@ +/* + * ---------------------------------------------------------------- + * + * ITA core libs + * (c) Copyright Institute of Technical Acoustics (ITA) + * RWTH Aachen University, Germany, 2015-2017 + * + * ---------------------------------------------------------------- + * ____ __________ _______ + * // / //__ ___/ // _ | + * // / // / // /_| | + * // / // / // ___ | + * //__/ //__/ //__/ |__| + * + * ---------------------------------------------------------------- + * + */ + +#ifndef INCLUDE_WATCHER_ITA_AMPLITUDE_SPECTRUM +#define INCLUDE_WATCHER_ITA_AMPLITUDE_SPECTRUM + +#include +#include + + +//! Amplitude spectrum of arbitrary size and base frequencies +/** + * Class for amplitude spectra, that is intended to be used with linear values (gains). + * + * Will raise CITAException on errors. + * + * @sa CITAMAgnitudeSpectrum, CITAPhaseSpectrum, CITAHDFTSpectrum + * + */ +class ITA_BASE_API CITAAmplitudeSpectrum : public CITASpectrum +{ +public: + CITAAmplitudeSpectrum( const int nNumBands ); + virtual inline ~CITAAmplitudeSpectrum() {}; + + std::vector< float > GetAmplitudesCopy() const; + const std::vector< float >& GetAmplitudes() const; + + void SetAmplitudes( const std::vector< float >& vfAmplitudes ); + void SetAmplitude( const int iFrequencyBandIndex, const float fAmplitudeValue ); + + void SetIdentity(); + void SetZero(); + bool IsIdentity() const; + bool IsZero() const; + + bool CompareEqualValues( const CITAAmplitudeSpectrum& oOtherSpectrum, const float fThreshold = 10.0e-10 ) const; +}; + +#endif // INCLUDE_WATCHER_ITA_AMPLITUDE_SPECTRUM diff --git a/src/ITAAmplitudeSpectrum.cpp b/src/ITAAmplitudeSpectrum.cpp new file mode 100644 index 0000000..c91bf92 --- /dev/null +++ b/src/ITAAmplitudeSpectrum.cpp @@ -0,0 +1,62 @@ +#include +#include + +#include + +CITAAmplitudeSpectrum::CITAAmplitudeSpectrum( const int nNumBands ) + : CITASpectrum( nNumBands ) +{ + SetValueUnit( "factor" ); +} + +std::vector< float > CITAAmplitudeSpectrum::GetAmplitudesCopy() const +{ + return CITASpectrum::GetValuesCopy(); +} + +const std::vector< float >& CITAAmplitudeSpectrum::GetAmplitudes() const +{ + return CITASpectrum::GetValues(); +} + +void CITAAmplitudeSpectrum::SetAmplitudes( const std::vector< float >& vfAmplitudes ) +{ + CITASpectrum::SetValues( vfAmplitudes ); +} + +void CITAAmplitudeSpectrum::SetAmplitude( const int iFrequencyBandIndex, const float fAmplitudeValue ) +{ + CITASpectrum::SetValue( iFrequencyBandIndex, fAmplitudeValue ); +} + +void CITAAmplitudeSpectrum::SetIdentity() +{ + std::fill( m_vfValues.begin(), m_vfValues.end(), 1.0f ); +} + +void CITAAmplitudeSpectrum::SetZero() +{ + std::fill( m_vfValues.begin(), m_vfValues.end(), 0.0f ); +} + +bool CITAAmplitudeSpectrum::IsIdentity() const +{ + for( size_t n = 0; n < m_vfValues.size(); n++ ) + { + if( m_vfValues[ n ] != 1.0f ) + return false; + } + + return true; +} + +bool CITAAmplitudeSpectrum::IsZero() const +{ + for( size_t n = 0; n < m_vfValues.size(); n++ ) + { + if( m_vfValues[ n ] != 0.0f ) + return false; + } + + return true; +} diff --git a/src/ITAMagnitudeSpectrum.cpp b/src/ITAMagnitudeSpectrum.cpp index a837cc7..ce807c8 100644 --- a/src/ITAMagnitudeSpectrum.cpp +++ b/src/ITAMagnitudeSpectrum.cpp @@ -60,4 +60,3 @@ bool CITAMagnitudeSpectrum::IsZero() const return true; } - -- GitLab