Refactoring ITA HDFT spectrum and spectra, now uses std::vector instead of...

Refactoring ITA HDFT spectrum and spectra, now uses std::vector instead of malloc/free. And ITA-style BigCaps methods.
parent 6a571ffb
......@@ -42,7 +42,7 @@ class ITA_BASE_API ITAHDFTSpectra
public:
//! Constructor that initializes the
ITAHDFTSpectra( const double dSampleRate, const int iNumChannels, const int iDFTSize, const bool bZeroInit=true );
ITAHDFTSpectra( const float fSampleRate, const int iNumChannels, const int iDFTSize, const bool bZeroInit=true );
//! Constructor that uses a non-empty HDFTSpectrum vector
ITAHDFTSpectra( const std::vector< ITAHDFTSpectrum* >& vpSpectrumVec );
......
......@@ -22,16 +22,17 @@
#include <ITABaseDefinitions.h>
#include <string>
#include <vector>
/**
* Diese Klasse realisiert half-size DFT-Spektren. Dies sind die DFT-Spektren
* rein reellwertiger Signale, wie sie in der Akustik/Audiosignalverarbeitung
* blich sind. Das DFT-Spektrum solcher Signale erfllt die Hermitische Symetrie.
* Daher mssen von n komplexwertigen diskreten Fourierkoeffizienten eines
* vollstndigen DFT-Spektrums nur n/2+1 komplexwertigen Koeffizienten
* vollstndigen DFT-Spektrums nur n/2+1 komplexwertigen Koeffizienten
* gespeichert werden.
*
* Grundstzlich werden die komplexwertigen Fourierkoeffizienten im
* Grundstzlich werden die komplexwertigen Fourierkoeffizienten im
* interleaved Speicherlayout abgelegt, d.h. Re(0), Im(0), Re(1), Im(1), ...
*
* Die Klasse stellt Methoden fr die Arbeit mit solchen Spektren bereit.
......@@ -43,46 +44,37 @@ class ITA_BASE_API ITAHDFTSpectrum
public:
//! Standard-Konstruktor
ITAHDFTSpectrum();
//! Konstruktor
/**
* Erzeugt ein Spektrum mit vorgegebener Gre und optional zu Null gesetztem Puffer
*
* \param iDFTSize DFT-Spektrum-Gre
* \param bZeroinit Setzt den Speicher bei wahr auf Null
*/
explicit ITAHDFTSpectrum(int iDFTSize, bool bZeroinit=true);
//! Constructor
/**
* Erzeugt ein Spektrum mit vorgegebener Gre und optional zu Null gesetztem Puffer
*
* \param dSampleRate Sampling rate
*
* \param fSampleRate Sampling rate
* \param iDFTSize DFT-Spektrum-Gre
* \param bZeroInit Setzt den Speicher bei wahr auf Null
*/
explicit ITAHDFTSpectrum(double dSampleRate, int iDFTSize, bool bZeroInit);
explicit ITAHDFTSpectrum( const float fSampleRate, const int iDFTSize, const bool bZeroInit );
//! Kopierkonstruktor (Zeiger)
/**
* Erzeugt einen unabhngiges Spektrum als Kopie des gegebenen Spektrums.
* Erzeugt einen unabhngiges Spektrum als Kopie des gegebenen Spektrums.
* Das neue Spektrum hat die selbe Lnge und enthlt die gleichen Werte
* wie das Quellspektrum.
*
* \param pSource Zeiger auf das Quellspektrum
*/
explicit ITAHDFTSpectrum(const ITAHDFTSpectrum* pSource);
explicit ITAHDFTSpectrum( const ITAHDFTSpectrum* pSource );
//! Kopierkonstruktor (Referenz)
/**
* Erzeugt einen unabhngiges Spektrum als Kopie des gegebenen Spektrums.
* Erzeugt einen unabhngiges Spektrum als Kopie des gegebenen Spektrums.
* Das neue Spektrum hat die selbe Lnge und enthlt die gleichen Werte
* wie das Quellspektrum.
*
* \param oSource Zeiger auf das Quellspektrum
*/
explicit ITAHDFTSpectrum(const ITAHDFTSpectrum& oSource);
explicit ITAHDFTSpectrum( const ITAHDFTSpectrum& oSource );
//! Destruktor
virtual ~ITAHDFTSpectrum();
......@@ -91,54 +83,54 @@ public:
* init(0) gibt belegten Speicher frei
* vorherige Werte werden grundstzlich verworfen!
*/
ITAHDFTSpectrum& init(int iDFTSize, bool bZeroinit=true);
void Init( const int iDFTSize, const bool bZeroinit = true );
// Gre des Spektrums (Anzahl Koeffizienten insgesamt) zurckgeben
// Hinweis: Symmetrische Koeffizienten werden hier nicht mitgezhlt.
int getSize() const;
int GetSize() const;
// Lnge des korrespondieren Zeitsignals zurckgeben (Gre der DFT)
int getDFTSize() const;
int GetDFTSize() const;
// Abtastrate des korrespondieren Zeitsignals zurckgeben
double getSamplerate() const;
float GetSampleRate() const;
// Abtastrate des korrespondieren Zeitsignals setzen
void setSamplerate(double dSamplerate);
void SetSampleRate( const float fSampleRate );
// Frequenzauflsung des Spektrums [Hz] zurckgeben
double getFrequencyResolution() const;
float GetFrequencyResolution() const;
// Datenzeiger abrufen
float* data() const;
float* GetData() const;
// DFT Koeffizient(en) setzen (Real-/Imaginrteil bzw. Betrag/Phase)
void setCoeffRI(int iIndex, float fReal, float fImag=0);
void setCoeffsRI(float fReal, float fImag=0);
void setCoeffsRI(int iOffset, int iCount, float fReal, float fImag=0);
void setCoeffRI( int iIndex, float fReal, float fImag = 0 );
void setCoeffsRI( float fReal, float fImag = 0 );
void setCoeffsRI( int iOffset, int iCount, float fReal, float fImag = 0 );
void setCoeffMP(int iIndex, float fMagnitude, float fPhase);
void setCoeffsMP(float fMagnitude, float fPhase);
void setCoeffsMP(int iOffset, int iCount, float fMagnitude, float fPhase);
void setCoeffMP( int iIndex, float fMagnitude, float fPhase );
void setCoeffsMP( float fMagnitude, float fPhase );
void setCoeffsMP( int iOffset, int iCount, float fMagnitude, float fPhase );
//! Betragswert setzen, vorhandene Phasen erhalten
void setMagnitudePreservePhase( int iIndex, float fMagnitude );
void setMagnitudesPreservePhases(float fMagnitude);
void setMagnitudesPreservePhases(int iOffset, int iCount, float fMagnitude);
void setMagnitudesPreservePhases( float fMagnitude );
void setMagnitudesPreservePhases( int iOffset, int iCount, float fMagnitude );
//! Phase setzen, vorhandene Betrge erhalten
void setPhasePreserveMagnitude(int iIndex, float fPhase);
void setPhasesPreserveMagnitudes(float fPhase);
void setPhasesPreserveMagnitudes(int iOffset, int iCount, float fPhase);
void setPhasePreserveMagnitude( int iIndex, float fPhase );
void setPhasesPreserveMagnitudes( float fPhase );
void setPhasesPreserveMagnitudes( int iOffset, int iCount, float fPhase );
// Konstante addieren
void add(float fReal, float fImag=0);
void sub(float fReal, float fImag=0);
void add( float fReal, float fImag = 0 );
void sub( float fReal, float fImag = 0 );
// Spektrum addieren
void add(const ITAHDFTSpectrum& s);
void add( const ITAHDFTSpectrum& s );
void add( const ITAHDFTSpectrum* );
void sub(const ITAHDFTSpectrum& s);
void sub( const ITAHDFTSpectrum& s );
void sub( const ITAHDFTSpectrum* );
void mul( const ITAHDFTSpectrum& s );
void mul( const float fFactor );
......@@ -154,17 +146,17 @@ public:
//! Betragsspektrum berechnen und in gegebenes Array speichern
// Zeiger drfen Null sein
void calcMagnitudes( float* pfMagnitudes ) const;
//! Calculates magnitude from real and imaginary part for a given frequency bin
float calcMagnitude( int iIndex ) const;
//! Phasenspektrum berechnen und in gegebenes Array speichern
// Zeiger drfen Null sein
void calcPhases(float* pfPhasess);
void calcPhases( float* pfPhasess );
//! Betragsgrten Koeffizienten ermitteln
float findMax() const;
float findMax(int& iMaxIndex) const;
float findMax( int& iMaxIndex ) const;
//! Negieren (Multiplikation mit -1 bzw. Phasendrehungum 180)
void negate();
......@@ -177,27 +169,27 @@ public:
//! Set unity DFT coeffs (re == 1, im == 0)
void SetZero();
//! Komplexen bzw. rellen natrlichen Logarithmus berechnen
/**
/**
* Reller log entspricht dem Betrag des komplexen log.
* Intern wird std::logf verwendet, so dass Betrag 0 den Wert -HUGE_VAL und der relle
* Logarithmus fr negative Werte den Wert NAN zurckgibt
*/
void log(bool bComplex=true);
void log( bool bComplex = true );
//! Komplexe bzw. reelle Exponentialfunktion berechnen
/**
/**
* Intern wird std::exp verwendet, so dass groe Betrge +-HUGE_VAL zurckgeben
*/
void exp(bool bComplex=true);
void exp( bool bComplex = true );
//! Alle Filterkoeffizienten eines anderen Spektrums in dieses kopieren
void copyFrom(const ITAHDFTSpectrum& s);
void copyFrom( const ITAHDFTSpectrum& s );
void copy( const ITAHDFTSpectrum* );
//! Einen Teil der Filterkoeffizienten eines anderen Spektrums in dieses kopieren
void copyFrom(const ITAHDFTSpectrum& s, int iOffset, int iCount);
void copyFrom( const ITAHDFTSpectrum& s, int iOffset, int iCount );
//! Zuweisungsoperator
/**
......@@ -205,7 +197,7 @@ public:
* Hierzu wird zunchst die Gre des Spektrums angepasst.
* Anschlieend werden alle Koeffizienten kopiert.
*/
ITAHDFTSpectrum& operator=(const ITAHDFTSpectrum& rhs);
ITAHDFTSpectrum& operator=( const ITAHDFTSpectrum& rhs );
//! Zeichenkette mit den Werten zurckgeben
std::string toString();
......@@ -219,10 +211,10 @@ public:
private:
int m_iSize;
int m_iDFTSize;
double m_dSamplerate;
int m_iDFTSize;
float m_fSampleRate;
float* m_pfData;
mutable std::vector< float > m_vfData;
};
#endif // __ITA_HDFT_SPECTRUM_H__
......@@ -7,7 +7,7 @@
#include <ITASampleFrame.h>
#include <ITAStringUtils.h>
ITAHDFTSpectra::ITAHDFTSpectra( const double dSampleRate, const int iNumChannels, const int iDFTSize, const bool bZeroInit/*=true*/ )
ITAHDFTSpectra::ITAHDFTSpectra( const float fSampleRate, const int iNumChannels, const int iDFTSize, const bool bZeroInit/*=true*/ )
{
if( iNumChannels < 1 )
ITA_EXCEPT1( INVALID_PARAMETER, "At least one DFT channel must be used" );
......@@ -15,7 +15,7 @@ ITAHDFTSpectra::ITAHDFTSpectra( const double dSampleRate, const int iNumChannels
ITA_EXCEPT1( INVALID_PARAMETER, "Invalid DFT size" );
for( int i = 0; i < iNumChannels; i++ )
m_vpSpectra.push_back( new ITAHDFTSpectrum( dSampleRate, iDFTSize, bZeroInit ) );
m_vpSpectra.push_back( new ITAHDFTSpectrum( fSampleRate, iDFTSize, bZeroInit ) );
}
ITAHDFTSpectra::ITAHDFTSpectra( const std::vector< ITAHDFTSpectrum* >& vpSpectrumVec )
......@@ -26,10 +26,10 @@ ITAHDFTSpectra::ITAHDFTSpectra( const std::vector< ITAHDFTSpectrum* >& vpSpectru
for( size_t i = 0; i < vpSpectrumVec.size(); i++ )
{
const ITAHDFTSpectrum* pSpectrum( vpSpectrumVec[ i ] );
if( pSpectrum->getDFTSize() <= 0 )
if( pSpectrum->GetDFTSize() <= 0 )
ITA_EXCEPT1( INVALID_PARAMETER, "Invalid DFT size in spectrum number " + IntToString( int( i ) ) );
if( pSpectrum->getSamplerate() <= 0 )
if( pSpectrum->GetSampleRate() <= 0 )
ITA_EXCEPT1( INVALID_PARAMETER, "Invalid sampling rate in spectrum number " + IntToString( int( i ) ) );
m_vpSpectra.push_back( new ITAHDFTSpectrum( pSpectrum ) ); // copy
......@@ -99,12 +99,12 @@ int ITAHDFTSpectra::GetNumChannels() const
int ITAHDFTSpectra::GetDFTSize() const
{
return m_vpSpectra[ 0 ]->getDFTSize();
return m_vpSpectra[ 0 ]->GetDFTSize();
}
double ITAHDFTSpectra::GetSampleRate() const
{
return m_vpSpectra[ 0 ]->getSamplerate();
return m_vpSpectra[ 0 ]->GetSampleRate();
}
void ITAHDFTSpectra::add( const ITAHDFTSpectra* pSource )
......
......@@ -13,97 +13,91 @@
ITAHDFTSpectrum::ITAHDFTSpectrum()
: m_iSize( 0 )
, m_iDFTSize( 0 )
, m_dSamplerate( 0 )
, m_pfData( NULL )
, m_fSampleRate( 0 )
{
}
ITAHDFTSpectrum::ITAHDFTSpectrum( int iDFTSize, bool bZeroinit )
: m_iSize( 0 )
, m_iDFTSize( 0 )
, m_dSamplerate( 0 )
, m_pfData( NULL )
{
init( iDFTSize, bZeroinit );
}
ITAHDFTSpectrum::ITAHDFTSpectrum( double dSampleRate, int iDFTSize, bool bZeroInit )
ITAHDFTSpectrum::ITAHDFTSpectrum( const float fSampleRate, const int iDFTSize, const bool bZeroInit )
: m_iSize( -1 )
, m_iDFTSize( iDFTSize )
, m_dSamplerate( dSampleRate )
, m_pfData( NULL )
, m_fSampleRate( fSampleRate )
, m_vfData( NULL )
{
setSamplerate( dSampleRate );
init( iDFTSize, bZeroInit ); // sets size and resolution
SetSampleRate( fSampleRate );
Init( iDFTSize, bZeroInit ); // sets size and resolution
}
ITAHDFTSpectrum::ITAHDFTSpectrum( const ITAHDFTSpectrum* pSource )
ITAHDFTSpectrum::ITAHDFTSpectrum( const ITAHDFTSpectrum* pSource )
: m_iSize( 0 )
, m_iDFTSize( 0 )
, m_dSamplerate( 0 )
, m_pfData( NULL )
, m_fSampleRate( 0 )
, m_vfData( NULL )
{
init( pSource->getDFTSize() );
setSamplerate( pSource->getSamplerate() );
Init( pSource->GetDFTSize() );
SetSampleRate( pSource->GetSampleRate() );
copyFrom( *pSource );
}
ITAHDFTSpectrum::ITAHDFTSpectrum( const ITAHDFTSpectrum& oSource )
ITAHDFTSpectrum::ITAHDFTSpectrum( const ITAHDFTSpectrum& oSource )
: m_iSize( 0 )
, m_iDFTSize( 0 )
, m_dSamplerate( 0 )
, m_pfData( NULL )
, m_fSampleRate( 0 )
, m_vfData( NULL )
{
init( oSource.getDFTSize() );
setSamplerate( oSource.getSamplerate() );
Init( oSource.GetDFTSize() );
SetSampleRate( oSource.GetSampleRate() );
copyFrom( oSource );
}
ITAHDFTSpectrum::~ITAHDFTSpectrum()
{
fm_free( m_pfData );
}
ITAHDFTSpectrum& ITAHDFTSpectrum::init( int iDFTSize, bool bZeroinit )
void ITAHDFTSpectrum::Init( const int iDFTSize, const bool bZeroinit )
{
// Bereits allozierten Speicher freigeben
if( m_pfData ) {
fm_free( m_pfData );
m_pfData = NULL;
}
m_iDFTSize = iDFTSize;
m_iSize = ( int ) floor( ( float ) m_iDFTSize / 2.0 ) + 1;
// +2 wegen 4-Byte Ausrichtung
if( m_iSize > 0 ) m_pfData = fm_falloc( m_iSize * 2 + 2, bZeroinit );
if( m_iSize > 0 )
m_vfData.resize( m_iSize * 2 + 2 );
return *this;
if( bZeroinit )
for( size_t i = 0; i < m_vfData.size(); i++ )
m_vfData[ i ] = 0.0f;
}
int ITAHDFTSpectrum::getSize() const {
int ITAHDFTSpectrum::GetSize() const
{
return m_iSize;
}
int ITAHDFTSpectrum::getDFTSize() const {
int ITAHDFTSpectrum::GetDFTSize() const
{
return m_iDFTSize;
}
double ITAHDFTSpectrum::getSamplerate() const {
return m_dSamplerate;
float ITAHDFTSpectrum::GetSampleRate() const
{
return m_fSampleRate;
}
void ITAHDFTSpectrum::setSamplerate( double dSamplerate ) {
m_dSamplerate = dSamplerate;
void ITAHDFTSpectrum::SetSampleRate( const float fSampleRate )
{
m_fSampleRate = fSampleRate;
}
double ITAHDFTSpectrum::getFrequencyResolution() const {
return ( m_iDFTSize == 0 ? 0 : ( m_dSamplerate / ( double ) m_iDFTSize ) );
float ITAHDFTSpectrum::GetFrequencyResolution() const
{
if( m_iDFTSize == 0 || m_fSampleRate <= 0.0f )
ITA_EXCEPT_INVALID_PARAMETER( "DFT size or sampling rate invalid" );
return ( m_iDFTSize == 0 ? 0 : ( m_fSampleRate / ( float ) m_iDFTSize ) );
}
float* ITAHDFTSpectrum::data() const {
return m_pfData;
float* ITAHDFTSpectrum::GetData() const
{
return &m_vfData[ 0 ];
}
void ITAHDFTSpectrum::SetUnity()
......@@ -112,8 +106,8 @@ void ITAHDFTSpectrum::SetUnity()
{
int iRe = 2 * i;
int iIm = iRe + 1;
m_pfData[ iRe ] = 1.0f;
m_pfData[ iIm ] = 0.0f;
m_vfData[ iRe ] = 1.0f;
m_vfData[ iIm ] = 0.0f;
}
return;
......@@ -125,8 +119,8 @@ void ITAHDFTSpectrum::SetZero()
{
int iRe = 2 * i;
int iIm = iRe + 1;
m_pfData[ iRe ] = 0.0f;
m_pfData[ iIm ] = 0.0f;
m_vfData[ iRe ] = 0.0f;
m_vfData[ iIm ] = 0.0f;
}
return;
......@@ -134,8 +128,8 @@ void ITAHDFTSpectrum::SetZero()
void ITAHDFTSpectrum::add( float fReal, float fImag ) {
for( int i = 0; i < 2 * m_iSize; i += 2 ) {
m_pfData[ i ] += fReal;
m_pfData[ i + 1 ] += fImag;
m_vfData[ i ] += fReal;
m_vfData[ i + 1 ] += fImag;
}
}
......@@ -152,8 +146,8 @@ void ITAHDFTSpectrum::setCoeffsRI( int iOffset, int iCount, float fReal, float f
ITA_EXCEPT1( INVALID_PARAMETER, "Index/count out of bounds" );
for( int i = iOffset; i < iOffset + iCount; i++ ) {
m_pfData[ 2 * i ] = fReal;
m_pfData[ 2 * i + 1 ] = fImag;
m_vfData[ 2 * i ] = fReal;
m_vfData[ 2 * i + 1 ] = fImag;
}
}
......@@ -185,7 +179,7 @@ void ITAHDFTSpectrum::setMagnitudesPreservePhases( int iOffset, int iCount, floa
ITA_EXCEPT1( INVALID_PARAMETER, "Index/count out of bounds" );
for( int i = iOffset; i < iOffset + iCount; i++ )
csabsparg( m_pfData[ 2 * i ], m_pfData[ 2 * i + 1 ], fMagnitude, m_pfData[ 2 * i ], m_pfData[ 2 * i + 1 ] );
csabsparg( m_vfData[ 2 * i ], m_vfData[ 2 * i + 1 ], fMagnitude, m_vfData[ 2 * i ], m_vfData[ 2 * i + 1 ] );
}
void ITAHDFTSpectrum::setPhasePreserveMagnitude( int iIndex, float fPhase ) {
......@@ -201,67 +195,67 @@ void ITAHDFTSpectrum::setPhasesPreserveMagnitudes( int iOffset, int iCount, floa
ITA_EXCEPT1( INVALID_PARAMETER, "Index/count out of bounds" );
for( int i = iOffset; i < iOffset + iCount; i++ )
csargpabs( m_pfData[ 2 * i ], m_pfData[ 2 * i + 1 ], fPhase, m_pfData[ 2 * i ], m_pfData[ 2 * i + 1 ] );
csargpabs( m_vfData[ 2 * i ], m_vfData[ 2 * i + 1 ], fPhase, m_vfData[ 2 * i ], m_vfData[ 2 * i + 1 ] );
}
void ITAHDFTSpectrum::sub( float fReal, float fImag ) {
for( int i = 0; i < 2 * m_iSize; i += 2 ) {
m_pfData[ i ] -= fReal;
m_pfData[ i + 1 ] -= fImag;
m_vfData[ i ] -= fReal;
m_vfData[ i + 1 ] -= fImag;
}
}
void ITAHDFTSpectrum::add( const ITAHDFTSpectrum& s ) {
if( s.getSize() != m_iSize )
if( s.GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Spectra must have the same size" );
fm_add( m_pfData, s.data(), 2 * m_iSize );
fm_add( GetData(), s.GetData(), 2 * m_iSize );
}
void ITAHDFTSpectrum::add( const ITAHDFTSpectrum* pSource )
{
if( pSource->getSize() != m_iSize )
if( pSource->GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Source spectrum must be of same size" );
fm_add( m_pfData, pSource->data(), 2 * m_iSize );
fm_add( GetData(), pSource->GetData(), 2 * m_iSize );
return;
}
void ITAHDFTSpectrum::sub( const ITAHDFTSpectrum& s ) {
if( s.getSize() != m_iSize )
if( s.GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Spectra must have the same size" );
fm_sub( m_pfData, s.data(), 2 * m_iSize );
fm_sub( GetData(), s.GetData(), 2 * m_iSize );
}
void ITAHDFTSpectrum::sub( const ITAHDFTSpectrum* pSource )
{
if( pSource->getSize() != m_iSize )
if( pSource->GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Source spectrum must be of same size" );
fm_sub( m_pfData, pSource->data(), 2 * m_iSize );
fm_sub( GetData(), pSource->GetData(), 2 * m_iSize );
return;
}
void ITAHDFTSpectrum::mul( const ITAHDFTSpectrum& s )
{
if( s.getSize() != m_iSize )
if( s.GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Spectra must have the same size" );
fm_cmul( m_pfData, s.data(), m_iSize );
fm_cmul( GetData(), s.GetData(), m_iSize );
return;
}
void ITAHDFTSpectrum::mul( const ITAHDFTSpectrum* pSource )
{
if( pSource->getSize() != m_iSize )
if( pSource->GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Spectra must have the same size" );
const float* fS( pSource->data() );
float* fD( m_pfData );
const float* fS( pSource->GetData() );
float* fD( GetData() );
float fR1, fR2, fI1, fI2;
for( int i = 0; i < m_iSize; i++ )
......@@ -285,11 +279,11 @@ void ITAHDFTSpectrum::mul( const ITAHDFTSpectrum* pSource )
void ITAHDFTSpectrum::mul_conj( const ITAHDFTSpectrum* pSource )
{
if( pSource->getSize() != m_iSize )
if( pSource->GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Source spectrum must be of same size" );
const float* fS( pSource->data() );
float* fD( m_pfData );
const float* fS( pSource->GetData() );
float* fD( GetData() );
float fR1, fR2, fI1, fI2;
for( int i = 0; i < m_iSize; i++ )
......@@ -313,26 +307,26 @@ void ITAHDFTSpectrum::mul_conj( const ITAHDFTSpectrum* pSource )
void ITAHDFTSpectrum::mul( const float fFactor )
{
fm_mul( m_pfData, fFactor, m_iSize * 2 );
fm_mul( GetData(), fFactor, m_iSize * 2 );
return;
}
void ITAHDFTSpectrum::div( const ITAHDFTSpectrum& s )
{
if( s.getSize() != m_iSize )
if( s.GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Spectra must have the same size" );
fm_cdiv( m_pfData, s.data(), m_iSize );
fm_cdiv( GetData(), s.GetData(), m_iSize );
return;
}
void ITAHDFTSpectrum::div( const ITAHDFTSpectrum* pSource )
{
if( pSource->getSize() != m_iSize )
if( pSource->GetSize() != m_iSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Source spectrum must be of same size" );
fm_cdiv( m_pfData, pSource->data(), m_iSize );
fm_cdiv( GetData(), pSource->GetData(), m_iSize );
return;
}
......@@ -342,7 +336,7 @@ float ITAHDFTSpectrum::calcMagnitude( int iIndex ) const
if( iIndex >= m_iDFTSize )
ITA_EXCEPT1( INVALID_PARAMETER, "Index out of range" );
return cabsf( m_pfData[ 2 * iIndex ], m_pfData[ 2 * iIndex + 1 ] );
return cabsf( m_vfData[ 2 * iIndex ], m_vfData[ 2 * iIndex + 1 ] );
}
void ITAHDFTSpectrum::calcMagnitudes( float* pfMagnitudes ) const
......@@ -355,7 +349,7 @@ void ITAHDFTSpectrum::calcMagnitudes( float* pfMagnitudes ) const
void ITAHDFTSpectrum::calcPhases( float* pfPhases ) {
if( pfPhases )
for( int i = 0; i < m_iSize; i++ )
pfPhases[ i ] = canglef( m_pfData[ 2 * i ], m_pfData[ 2 * i + 1 ] );
pfPhases[ i ] = canglef( m_vfData[ 2 * i ], m_vfData[ 2 * i + 1 ] );
}
void ITAHDFTSpectrum::log( bool bComplex ) {
......@@ -363,13 +357,13 @@ void ITAHDFTSpectrum::log( bool bComplex ) {
// TODO: Check for (magnitude < eps, -HUGE_VAL), negative value on real log
if( bComplex ) {
// z = x+i*y returns log(z) = log(abs(z)) + i*atan2(y,x); cp. http://www.mathworks.de/help/techdoc/ref/log.html
float x = m_pfData[ 2 * i ];