00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _Spectrum_
00023 #define _Spectrum_
00024
00025 #include <typeinfo>
00026 #include "Array.hxx"
00027 #include "Complex.hxx"
00028 #include "Polar.hxx"
00029 #include "BPF.hxx"
00030 #include "ProcessingData.hxx"
00031
00032 namespace CLAM {
00033
00034 class SpectrumConfig;
00035
00036 struct SpecTypeFlags;
00037
00045 class Spectrum : public ProcessingData
00046 {
00047 public:
00048 DYNAMIC_TYPE_USING_INTERFACE (Spectrum, 10, ProcessingData);
00052 DYN_ATTRIBUTE (0, public, EScale, Scale);
00053 DYN_ATTRIBUTE (1, public, TData, SpectralRange);
00054
00055 private:
00056 DYN_ATTRIBUTE (2, private, int, prSize);
00057 DYN_ATTRIBUTE (3, private, int, prBPFSize);
00058 public:
00059 DYN_ATTRIBUTE (4, public, DataArray, MagBuffer);
00060 DYN_ATTRIBUTE (5, public, DataArray, PhaseBuffer);
00061 DYN_ATTRIBUTE (6, public, Array<Complex>, ComplexArray);
00062 DYN_ATTRIBUTE (7, public, Array<Polar>, PolarArray);
00063 DYN_ATTRIBUTE (8, public, BPF, MagBPF);
00064 DYN_ATTRIBUTE (9, public, BPF, PhaseBPF);
00065
00066 public:
00067 Spectrum(const SpectrumConfig &newConfig);
00068
00069 void Configure(const SpectrumConfig &newConfig);
00070
00078 void GetConfig(SpectrumConfig& c) const;
00079 protected:
00080 void DefaultInit();
00081
00082 public:
00086 TData GetMag(TIndex pos) const;
00090 TData GetMag(TData freq) const;
00094 TData GetPhase(TIndex pos) const;
00098 TData GetPhase(TData freq) const;
00102 void SetMag(TIndex pos,TData newMag);
00106 void SetMag(TData freq,TData newMag);
00110 void SetPhase(TIndex pos,TData newPhase);
00114 void SetPhase(TData freq,TData newPhase);
00116 void SynchronizeTo(const SpecTypeFlags& tmpFlags);
00118 void SynchronizeTo(const Spectrum& in);
00120 void SynchronizeTo(const SpecTypeFlags& tmpFlags,const Spectrum& in);
00121
00122
00123
00124
00125
00127 int GetSize() const;
00129 void SetSize(int s);
00130
00137 int GetBPFSize() const;
00144 void SetBPFSize(int s);
00145
00149 void GetType(SpecTypeFlags& f) const;
00150
00155 void SetType(const SpecTypeFlags& newFlags);
00156
00160 void SetTypeSynchronize(const SpecTypeFlags& newFlags);
00161
00165 void ToDB();
00166
00170 void ToLinear();
00171
00172 private:
00173
00177 void PRSetType(const SpecTypeFlags& tmpFlags,int size,int bpfsize);
00178
00179 public:
00181 inline TIndex IndexFromFreq(TData freq) const;
00182
00183
00184 public:
00185
00187 inline void Complex2Polar() ;
00189 inline void Polar2Complex() ;
00191 inline void Complex2MagPhase() ;
00193 inline void Polar2MagPhase() ;
00195 inline void MagPhase2Polar() ;
00197 inline void MagPhase2Complex() ;
00199 inline void MagPhase2BPF() ;
00201 inline void BPF2MagPhase();
00202
00203
00205 inline void Complex2Polar(const Spectrum& in) ;
00207 inline void Polar2Complex(const Spectrum& in) ;
00209 inline void Complex2MagPhase(const Spectrum& in) ;
00211 inline void Polar2MagPhase(const Spectrum& in) ;
00213 inline void MagPhase2Polar(const Spectrum& in) ;
00215 inline void MagPhase2Complex(const Spectrum& in) ;
00217 inline void MagPhase2BPF(const Spectrum& in) ;
00219 inline void BPF2MagPhase(const Spectrum& in);
00220 private:
00221
00222 inline void Polar2MagPhase(const Array<Polar>& polarArray,DataArray& magBuffer, DataArray& phaseBuffer);
00223 inline void Complex2MagPhase(const Array<Complex>& complexArray, DataArray& magBuffer, DataArray& phaseBuffer);
00224 inline void MagPhase2Polar(const DataArray& magBuffer,const DataArray& phaseBuffer,Array<Polar>& polarArray);
00225 inline void MagPhase2Complex(const DataArray& magBuffer,const DataArray& phaseBuffer,Array<Complex>& complexArray);
00226 inline void MagPhase2BPF(const DataArray& magBuffer, const DataArray& phaseBuffer, BPF& magBPF, BPF& phaseBPF);
00227 inline void BPF2MagPhase( const BPF& magBPF, const BPF& phaseBPF, DataArray& magBuffer, DataArray& phaseBuffer);
00228
00229 };
00230
00231 };
00232
00233 #endif
00234