HumRemover.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 "HumRemover.hxx"
00023 #include "ProcessingFactory.hxx"
00024
00025 namespace CLAM
00026 {
00027
00028 namespace Hidden
00029 {
00030 static const char * metadata[] = {
00031 "key", "HumRemover",
00032
00033
00034 0
00035 };
00036 static FactoryRegistrator<ProcessingFactory, HumRemover> reg = metadata;
00037 }
00038
00039 bool HumRemover::Do(const Spectrum& in, Spectrum& out)
00040 {
00041 out = in;
00042
00043 DataArray& outMag = out.GetMagBuffer();
00044
00045 int spectrumSize = in.GetSize();
00046
00047 TData spectralResolution = spectrumSize/in.GetSpectralRange();
00048 int humFundamental= Round(mAmount.GetLastValue()*spectralResolution);
00049 int band = Round(mBandwidthCtl.GetLastValue()*spectralResolution);
00050 int nHarmonics = Round(mHarmonicsCtl.GetLastValue());
00051 int i, n;
00052 int harmonic = 1;
00053 for(i = 0; i<spectrumSize; i++)
00054 {
00055 if(i == humFundamental*harmonic)
00056 {
00057 int leftLimit = i-band;
00058 if(leftLimit<0) leftLimit = 0;
00059 int rightLimit = i+band+1;
00060 if(rightLimit>spectrumSize) rightLimit=spectrumSize;
00061 for (n=leftLimit; n<rightLimit;n++)
00062 {
00063 outMag[n] = 0;
00064 }
00065 harmonic++;
00066 }
00067 if (harmonic == nHarmonics) break;
00068 }
00069 return true;
00070 }
00071
00072
00073
00074 }
00075