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