3BandFilter.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 "3BandFilter.hxx"
00023 #include "ProcessingFactory.hxx"
00024
00025 namespace CLAM
00026 {
00027 namespace Hidden
00028 {
00029 static const char * metadata[] = {
00030 "key", "ThreeBandFilter",
00031 "category", "Spectral Transformations",
00032 "description", "ThreeBandFilter",
00033 0
00034 };
00035 static FactoryRegistrator<ProcessingFactory, ThreeBandFilter> reg = metadata;
00036 }
00037
00038
00039 bool ThreeBandFilter::Do(const Spectrum& in, Spectrum& out)
00040 {
00041 if ( !mConfig.GetPreserveOuts() )
00042 {
00043 out = in;
00044 }
00045
00046 DataArray& oMag = out.GetMagBuffer();
00047
00048 int spectrumSize = in.GetSize();
00049
00050 TData spectralResolution = spectrumSize/in.GetSpectralRange();
00051
00052 int lowCutoff = Round(mLowCutoffFreqCtl.GetLastValue()* spectralResolution);
00053 int highCutoff = Round(mHighCutoffFreqCtl.GetLastValue()* spectralResolution);
00054
00055
00056 TData lowGain = log2lin(mLowGainCtl.GetLastValue());
00057 TData midGain = log2lin(mMidGainCtl.GetLastValue());
00058 TData highGain = log2lin(mHighGainCtl.GetLastValue());
00059
00060 TData currentGain = lowGain;
00061 for(int i = 0; i<spectrumSize; i++)
00062 {
00063 if(i>highCutoff)
00064 currentGain = highGain;
00065 else if(i==highCutoff)
00066 currentGain = (highGain+midGain)*0.5;
00067 else if(i>lowCutoff)
00068 currentGain = midGain;
00069 else if(i==lowCutoff)
00070 currentGain = (lowGain+midGain)*0.5;
00071 oMag[i] *= currentGain;
00072 }
00073 return true;
00074 }
00075
00076
00077 }
00078