SpectralSpread.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 "SpectralSpread.hxx"
00023 #include "ProcessingFactory.hxx"
00024
00025 namespace CLAM
00026 {
00027 namespace Hidden
00028 {
00029 static const char * metadata[] = {
00030 "key", "SpectralSpread",
00031
00032
00033 0
00034 };
00035 static FactoryRegistrator<ProcessingFactory, SpectralSpread> reg = metadata;
00036 }
00037
00038 bool SpectralSpread::Do(const Spectrum&
00039 inSpec,Spectrum& outSpec)
00040 {
00041
00042 if (!mConfig.GetPreserveOuts())
00043 {
00044 outSpec = inSpec;
00045 }
00046
00047 int spectrumSize = inSpec.GetSize();
00048 TData spectralResolution = spectrumSize/inSpec.GetSpectralRange();
00049
00050 int centerPoint = Round (mCenterFreqCtl.GetLastValue()*spectralResolution);
00051 int amount= Round(mAmount.GetLastValue()*spectralResolution);
00052
00053 mBPFSpectrum.SetSize(spectrumSize);
00054
00055
00056
00057 Array<Point>& magBPF=mBPFSpectrum.GetMagBPF().GetPointArray();
00058
00059 Array<Point>& phaseBPF=mBPFSpectrum.GetPhaseBPF().GetPointArray();
00060
00061
00062 magBPF.SetSize(0);
00063 phaseBPF.SetSize(0);
00064
00065 DataArray& inMag = inSpec.GetMagBuffer();
00066 DataArray& inPhase = inSpec.GetPhaseBuffer();
00067
00068 TData binWidth = 1./spectralResolution;
00069 int i;
00070 TData freq = 0;
00071 TData mag;
00072 TData phase;
00073 int nPoints = 0;
00074 for (i=0; i<centerPoint-amount; i++)
00075 {
00076 mag = inMag[i+amount];
00077 phase = inPhase[i+amount];
00078 magBPF.AddElem(Point(freq,mag));
00079 phaseBPF.AddElem(Point(freq, phase));
00080 freq += binWidth;
00081 nPoints++;
00082 }
00083
00084 freq = centerPoint * binWidth;
00085 magBPF.AddElem(Point(freq, inMag[centerPoint]));
00086 phaseBPF.AddElem(Point(freq, inPhase[centerPoint]));
00087 nPoints++;
00088
00089 freq = (centerPoint+amount)*binWidth;
00090
00091 for (i=centerPoint+amount ; i<spectrumSize; i++)
00092 {
00093 mag = inMag[i-amount];
00094 phase = inPhase[i-amount];
00095 magBPF.AddElem(Point(freq,mag));
00096 phaseBPF.AddElem(Point(freq, phase));
00097 freq += binWidth;
00098 nPoints++;
00099 }
00100
00101 mBPFSpectrum.SetBPFSize(nPoints);
00102 mBPFSpectrum.SynchronizeTo(mFlag);
00103 outSpec.SetMagBuffer(mBPFSpectrum.GetMagBuffer());
00104 outSpec.SetPhaseBuffer(mBPFSpectrum.GetPhaseBuffer());
00105
00106 return true;
00107 }
00108
00109
00110 }
00111