3BandCompressor.cxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "3BandCompressor.hxx"
00023 #include "ProcessingFactory.hxx"
00024
00025 namespace CLAM
00026 {
00027
00028 namespace Hidden
00029 {
00030 static const char * metadata[] = {
00031 "key", "ThreeBandCompressor",
00032 "category", "Spectral Transformations",
00033 "description", "ThreeBandCompressor",
00034 0
00035 };
00036 static FactoryRegistrator<ProcessingFactory, ThreeBandCompressor> reg = metadata;
00037 }
00038
00039 bool ThreeBandCompressor::Do(const Spectrum& in, Spectrum& out)
00040 {
00041 out = in;
00042
00043 DataArray& oMag = out.GetMagBuffer();
00044 const DataArray& iMag = in.GetMagBuffer();
00045
00046 int spectrumSize = in.GetSize();
00047
00048 TData spectralResolution = spectrumSize/in.GetSpectralRange();
00049
00050 int lowCutoff = Round(mLowCutoffFreqCtl.GetLastValue()* spectralResolution);
00051 int highCutoff = Round(mHighCutoffFreqCtl.GetLastValue()* spectralResolution);
00052
00053
00054 TData lowThreshold = log2lin(mLowThresholdCtl.GetLastValue());
00055 TData midThreshold = log2lin(mMidThresholdCtl.GetLastValue());
00056 TData highThreshold = log2lin(mHighThresholdCtl.GetLastValue());
00057
00058 TData currentThreshold = lowThreshold;
00059 for(int i = 0; i<lowCutoff; i++)
00060 {
00061 if(iMag[i]>lowThreshold)
00062 oMag[i] = lowThreshold;
00063 }
00064 for(int i = lowCutoff; i<highCutoff; i++)
00065 {
00066 if(iMag[i]>midThreshold)
00067 oMag[i] = midThreshold;
00068 }
00069 for(int i = highCutoff; i<spectrumSize; i++)
00070 {
00071 if(iMag[i]>highThreshold)
00072 oMag[i] = highThreshold;
00073 }
00074 return true;
00075 }
00076
00077
00078 }
00079