3BandGate.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 "3BandGate.hxx"
00023 #include "ProcessingFactory.hxx"
00024
00025 namespace CLAM
00026 {
00027
00028 namespace Hidden
00029 {
00030 static const char * metadata[] = {
00031 "key", "ThreeBandGate",
00032
00033
00034 0
00035 };
00036 static FactoryRegistrator<ProcessingFactory, ThreeBandGate> reg = metadata;
00037 }
00038
00039
00040 bool ThreeBandGate::Do(const Spectrum& in, Spectrum& out)
00041 {
00042 out = in;
00043
00044 DataArray& oMag = out.GetMagBuffer();
00045 DataArray& iMag = in.GetMagBuffer();
00046
00047 int spectrumSize = in.GetSize();
00048
00049 TData spectralResolution = spectrumSize/in.GetSpectralRange();
00050
00051 int lowCutoff = Round(mLowCutoffFreqCtl.GetLastValue()* spectralResolution);
00052 int highCutoff = Round(mHighCutoffFreqCtl.GetLastValue()* spectralResolution);
00053
00054
00055 TData lowThreshold = log2lin(mLowThresholdCtl.GetLastValue());
00056 TData midThreshold = log2lin(mMidThresholdCtl.GetLastValue());
00057 TData highThreshold = log2lin(mHighThresholdCtl.GetLastValue());
00058
00059 int i;
00060 TData currentThreshold = lowThreshold;
00061 for( i = 0; i<lowCutoff; i++)
00062 {
00063 if(iMag[i]<lowThreshold)
00064 oMag[i] = 0;
00065 }
00066 for( i = lowCutoff; i<highCutoff; i++)
00067 {
00068 if(iMag[i]<midThreshold)
00069 oMag[i] = 0;
00070 }
00071 for( i = highCutoff; i<spectrumSize; i++)
00072 {
00073 if(iMag[i]<highThreshold)
00074 oMag[i] = 0;
00075 }
00076 return true;
00077 }
00078
00079
00080
00081 }
00082