29 static ProcessingDataPlugin::Registrator<SpectralPeakArray>
dataRegistrator(
"lightcoral");
66 SetMinimizeResizes(1);
67 mIsIndexUpToDate=
false;
73 spectralPeak.AddMag();
74 else spectralPeak.RemoveMag();
76 spectralPeak.AddFreq();
77 else spectralPeak.RemoveFreq();
79 spectralPeak.AddPhase();
80 else spectralPeak.RemovePhase();
81 if (HasBinWidthBuffer())
82 spectralPeak.AddBinWidth();
83 else spectralPeak.RemoveBinWidth();
84 if (HasBinPosBuffer())
85 spectralPeak.AddBinPos();
86 else spectralPeak.RemoveBinPos();
88 spectralPeak.SetScale(GetScale());
93 if (spectralPeak.HasMag())
95 else if (HasMagBuffer())
97 if (spectralPeak.HasFreq())
99 else if (HasFreqBuffer())
101 if (spectralPeak.HasPhase())
103 else if (HasPhaseBuffer())
105 if (spectralPeak.HasBinWidth())
107 else if (HasBinWidthBuffer())
108 RemoveBinWidthBuffer();
109 if (spectralPeak.HasBinPos())
111 else if (HasBinPosBuffer())
112 RemoveBinPosBuffer();
119 if (HasMagBuffer()) spectralPeak.AddMag();
120 else spectralPeak.RemoveMag();
121 if (HasFreqBuffer()) spectralPeak.AddFreq();
122 else spectralPeak.RemoveFreq();
123 if (HasPhaseBuffer()) spectralPeak.AddPhase();
124 else spectralPeak.RemovePhase();
125 if (HasBinWidthBuffer()) spectralPeak.AddBinWidth();
126 else spectralPeak.RemoveBinWidth();
127 if (HasBinPosBuffer()) spectralPeak.AddBinPos();
128 else spectralPeak.RemoveBinPos();
135 if (HasMagBuffer()!=spectralPeak.HasMag())
137 if (HasFreqBuffer()!=spectralPeak.HasFreq())
139 if (HasPhaseBuffer()!=spectralPeak.HasPhase())
141 if (HasBinWidthBuffer()!=spectralPeak.HasBinWidth())
143 if (HasBinPosBuffer()!=spectralPeak.HasBinPos())
157 CLAM_ASSERT(pos<
GetnPeaks()&&pos>=0,
"SpectralPeakArray::GetSpectralPeak:Out of bounds in peak array");
160 tmpPeak.SetMag(
GetMag(pos));
163 if (HasPhaseBuffer())
165 if (HasBinWidthBuffer())
167 if (HasBinPosBuffer())
169 tmpPeak.SetScale(GetScale());
177 CLAM_ASSERT(spectralPeak.GetScale()==GetScale(),
"SpectralPeakArray::SetSpectralPeak:Incorrect scale in input SpectralPeak");
182 GetMagBuffer()[pos]=spectralPeak.GetMag();
184 GetFreqBuffer()[pos]=spectralPeak.GetFreq();
185 if (HasPhaseBuffer())
186 GetPhaseBuffer()[pos]=spectralPeak.GetPhase();
187 if (HasBinWidthBuffer())
188 GetBinWidthBuffer()[pos]=spectralPeak.GetBinWidth();
189 if (HasBinPosBuffer())
190 GetBinPosBuffer()[pos]=spectralPeak.GetBinPos();
192 GetIndexArray()[pos]=index;
197 CLAM_ASSERT(spectralPeak.GetScale()==GetScale(),
"SpectralPeakArray::InsertSpectralPeak:Incorrect scale in input SpectralPeak");
198 CLAM_ASSERT(pos<
GetnPeaks(),
"SpectralPeakArray::InsertSpectralPeak:Out of bounds in peak array");
201 GetMagBuffer().InsertElem(pos,spectralPeak.GetMag());
203 GetFreqBuffer().InsertElem(pos,spectralPeak.GetFreq());
204 if (HasPhaseBuffer())
205 GetPhaseBuffer().InsertElem(pos,spectralPeak.GetPhase());
206 if (HasBinWidthBuffer())
207 GetBinWidthBuffer().InsertElem(pos,spectralPeak.GetBinWidth());
208 if (HasBinPosBuffer())
209 GetBinPosBuffer().InsertElem(pos,spectralPeak.GetBinPos());
210 if(insertIndex&&HasIndexArray())
211 GetIndexArray().InsertElem(pos,index);
216 CLAM_ASSERT(spectralPeak.GetScale()==GetScale(),
"SpectralPeakArray::AddSpectralPeak:Incorrect scale in input SpectralPeak");
219 GetMagBuffer().AddElem(spectralPeak.GetMag());
221 GetFreqBuffer().AddElem(spectralPeak.GetFreq());
222 if (HasPhaseBuffer())
223 GetPhaseBuffer().AddElem(spectralPeak.GetPhase());
224 if (HasBinWidthBuffer())
225 GetBinWidthBuffer().AddElem(spectralPeak.GetBinWidth());
226 if (HasBinPosBuffer())
227 GetBinPosBuffer().AddElem(spectralPeak.GetBinPos());
228 if(addIndex&&HasIndexArray())
229 GetIndexArray().AddElem(index);
236 GetMagBuffer().DeleteElem(pos);
238 GetFreqBuffer().DeleteElem(pos);
239 if (HasPhaseBuffer())
240 GetPhaseBuffer().DeleteElem(pos);
241 if (HasBinWidthBuffer())
242 GetBinWidthBuffer().DeleteElem(pos);
243 if (HasBinPosBuffer())
244 GetBinPosBuffer().DeleteElem(pos);
245 if(deleteIndex&&HasIndexArray())
246 GetIndexArray().DeleteElem(pos);
254 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetPositionFromIndex: Index array is not instantiated");
255 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::GetPositionFromIndex: Index table is not up to date");
260 for(
int i=0;i<indexArray.
Size();i++)
262 if(indexArray[i]==index)
return i;
270 const DataArray & peakMagBuffer=GetMagBuffer();
272 double max = peakMagBuffer[0];
276 const double & mag = peakMagBuffer[i];
290 const DataArray & peakMagBuffer=GetMagBuffer();
293 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetMaxMagPosition: Index array is not instantiated");
294 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::GetMaxMagPosition: IndexTable is not up to date");
295 const IndexArray & indexArray = GetIndexArray();
297 double max = peakMagBuffer[indexArray[0]];
299 for (
TIndex i=1; i<indexArray.Size(); i++)
301 const double & mag = peakMagBuffer[indexArray[i]];
315 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::ResetIndices: Index array is not instantiated");
325 mIsIndexUpToDate=
true;
330 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::InitIndices: Index array is not instantiated");
335 indexArray.
Resize(nMaxPeaks);
337 for(i=0;i<nPeaks;i++)
341 mIsIndexUpToDate=
false;
346 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::SetIndicesTo: Index array is not instantiated");
350 for(i=0;i<nPeaks;i++)
354 mIsIndexUpToDate=
true;
360 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::DeleteIndex: Index array is not instantiated");
363 GetIndexArray().DeleteElem(pos);
368 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::AddIndex: Index array is not instantiated");
369 GetIndexArray().AddElem(index);
375 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetFirstNonValidIndexPosition: Index array is not instantiated");
376 CLAM_ASSERT(beginAt<indexArray.
Size()&&beginAt>=0,
"SpectralPeakArray::SetThruIndexFreq: Out of bounds in Index Array");
377 for(
int i=beginAt;i<indexArray.
Size();i++)
379 if(indexArray[i]==-1)
return i;
386 int i, nIndexedPeaks=0;
388 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetFirstNonValidIndexPosition: Index array is not instantiated");
389 for(i=0;i<indexArray.
Size();i++)
391 if(indexArray[i]!=-1) nIndexedPeaks++;
393 return nIndexedPeaks;
400 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetThruIndexFreq: Index array is not instantiated");
401 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::GetThruIndexFreq: IndexTable is not up to date");
402 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::GetThruIndexFreq: Out of bounds in Index Array");
403 return GetFreq(GetIndexArray()[pos]);
408 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetThruIndexMag: Index array is not instantiated");
409 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::GetThruIndexMag: IndexTable is not up to date");
410 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::GetThruIndexMag: Out of bounds in Index Array");
411 return GetMag(GetIndexArray()[pos]);
416 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetThruIndexPhase: Index array is not instantiated");
417 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::GetThruIndexPhase: IndexTable is not up to date");
418 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::GetThruIndexPhase: Out of bounds in Index Array");
419 return GetPhase(GetIndexArray()[pos]);
424 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetThruIndexBinPos: Index array is not instantiated");
425 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::GetThruIndexBinPos: IndexTable is not up to date");
426 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::GetThruIndexBinPos: Out of bounds in Index Array");
432 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::GetThruIndexBinWidth: Index array is not instantiated");
433 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::GetThruIndexBinWidth: IndexTable is not up to date");
434 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::GetThruIndexBinWidth: Out of bounds in Index Array");
441 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::SetThruIndexSpectralPeak: Index array is not instantiated");
442 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::SetThruIndexSpectralPeak: IndexTable is not up to date");
443 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::SetThruIndexSpectralPeak: Out of bounds in Index Array");
451 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::SetThruIndexFreq: Index array is not instantiated");
452 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::SetThruIndexFreq: IndexTable is not up to date");
453 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::SetThruIndexFreq: Out of bounds in Index Array");
454 SetFreq(GetIndexArray()[pos],freq);
459 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::SetThruIndexMag: Index array is not instantiated");
460 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::SetThruIndexMag: IndexTable is not up to date");
461 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::SetThruIndexMag: Out of bounds in Index Array");
462 SetMag(GetIndexArray()[pos],mag);
467 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::SetThruIndexPhase: Index array is not instantiated");
468 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::SetThruIndexPhase: IndexTable is not up to date");
469 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::SetThruIndexPhase: Out of bounds in Index Array");
470 SetPhase(GetIndexArray()[pos],phase);
475 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::SetThruIndexBinPos: Index array is not instantiated");
476 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::SetThruIndexBinPos: IndexTable is not up to date");
477 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::SetThruIndexBinPos: Out of bounds in Index Array");
483 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::SetThruIndexBinWidth: Index array is not instantiated");
484 CLAM_ASSERT(mIsIndexUpToDate,
"SpectralPeakArray::SetThruIndexBinWidth: IndexTable is not up to date");
485 CLAM_ASSERT(pos<GetIndexArray().Size()&&pos>=0,
"SpectralPeakArray::SetThruIndexBinWidth: Out of bounds in Index Array");
495 for (
int i=0; i<nPeaks; i++)
497 if(mag[i]==0) mag[i]=
TData(0.0001);
509 for (
int i=0; i<nPeaks; i++)
511 if(mag[i]==0.0001) mag[i]=0;
519 SetScale( sourceSpectralPeakArray.GetScale() );
520 SetMinimizeResizes( sourceSpectralPeakArray.GetMinimizeResizes() );
526 DataArray& srcFreqBuffer = sourceSpectralPeakArray.GetFreqBuffer();
527 DataArray& srcMagBuffer = sourceSpectralPeakArray.GetMagBuffer();
528 DataArray& srcPhaseBuffer = sourceSpectralPeakArray.GetPhaseBuffer();
529 DataArray& srcBinPosBuffer = sourceSpectralPeakArray.GetBinPosBuffer();
530 DataArray& srcBinWidthBuffer = sourceSpectralPeakArray.GetBinWidthBuffer();
531 IndexArray& srcIndexArray = sourceSpectralPeakArray.GetIndexArray();
533 DataArray& targetFreqBuffer = GetFreqBuffer();
534 DataArray& targetMagBuffer = GetMagBuffer();
535 DataArray& targetPhaseBuffer = GetPhaseBuffer();
536 DataArray& targetBinPosBuffer = GetBinPosBuffer();
537 DataArray& targetBinWidthBuffer = GetBinWidthBuffer();
538 IndexArray& targetIndexArray = GetIndexArray();
540 int numberOfPeaks = sourceSpectralPeakArray.
GetnPeaks();
541 for (
int r=0; r < numberOfPeaks;r++)
544 targetFreqBuffer[r] = srcFreqBuffer[r];
545 targetMagBuffer[r] = srcMagBuffer[r];
546 targetPhaseBuffer[r] = srcPhaseBuffer[r];
547 targetBinPosBuffer[r] = srcBinPosBuffer[r];
548 targetBinWidthBuffer[r] = srcBinWidthBuffer[r];
549 targetIndexArray[r] = srcIndexArray[r];
557 CLAM_ASSERT(in.HasMagBuffer(),
"SpectralPeakArray::operator+: second operand needs to have a Magnitude Buffer");
558 CLAM_ASSERT(in.HasFreqBuffer(),
"SpectralPeakArray::operator+: second operand needs to have a Frequency Buffer");
559 CLAM_ASSERT(in.HasPhaseBuffer(),
"SpectralPeakArray::operator+: second operand needs to have a Phase Buffer");
560 CLAM_ASSERT(in.HasIndexArray(),
"SpectralPeakArray::operator+: second operand needs to have an Index Array");
561 CLAM_ASSERT(HasMagBuffer(),
"SpectralPeakArray::operator+: first operand needs to have a Magnitude Buffer");
562 CLAM_ASSERT(HasFreqBuffer(),
"SpectralPeakArray::operator+: first operand needs to have a Frequency Buffer");
563 CLAM_ASSERT(HasPhaseBuffer(),
"SpectralPeakArray::operator+: first operand needs to have a Phase Buffer");
564 CLAM_ASSERT(HasIndexArray(),
"SpectralPeakArray::operator+: first operand needs to have an Index Array");
570 tmp.SetScale(in.GetScale());
575 int origIndex=0,inIndex=0;
576 DataArray& inPeakMagArray = in.GetMagBuffer();
577 DataArray& inPeakFreqArray = in.GetFreqBuffer();
578 DataArray& inPeakPhaseArray = in.GetPhaseBuffer();
579 IndexArray& inPeakIndexArray = in.GetIndexArray();
581 DataArray& origPeakMagArray = GetMagBuffer();
582 DataArray& origPeakFreqArray = GetFreqBuffer();
583 DataArray& origPeakPhaseArray = GetPhaseBuffer();
584 IndexArray& origPeakIndexArray = GetIndexArray();
586 DataArray& tmpPeakMagArray = tmp.GetMagBuffer();
587 DataArray& tmpPeakFreqArray = tmp.GetFreqBuffer();
588 DataArray& tmpPeakPhaseArray = tmp.GetPhaseBuffer();
589 IndexArray& tmpPeakIndexArray = tmp.GetIndexArray();
591 bool finished=
false,finishedOrig=
false, finishedIn=
false;
592 TSize origSize,inSize;
599 if(origIndex>=origSize-1) finishedOrig=
true;
600 if(inIndex>=inSize-1) finishedIn=
true;
607 tmpPeakMagArray[nAddedPeaks] = inPeakMagArray[inIndex];
608 tmpPeakFreqArray[nAddedPeaks] = inPeakFreqArray[inIndex];
609 tmpPeakPhaseArray[nAddedPeaks] = inPeakMagArray[inIndex];
610 tmpPeakIndexArray[nAddedPeaks] = inPeakIndexArray[inIndex]*2+1;
621 tmpPeakMagArray[nAddedPeaks] = origPeakMagArray[origIndex];
622 tmpPeakFreqArray[nAddedPeaks] = origPeakFreqArray[origIndex];
623 tmpPeakPhaseArray[nAddedPeaks] = origPeakMagArray[origIndex];
624 tmpPeakIndexArray[nAddedPeaks] = origPeakIndexArray[origIndex]*2;
633 if(origPeakFreqArray[origIndex]<inPeakFreqArray[inIndex])
635 tmpPeakMagArray[nAddedPeaks] = origPeakMagArray[origIndex];
636 tmpPeakFreqArray[nAddedPeaks] = origPeakFreqArray[origIndex];
637 tmpPeakPhaseArray[nAddedPeaks] = origPeakMagArray[origIndex];
638 tmpPeakIndexArray[nAddedPeaks] = origPeakIndexArray[origIndex]*2;
642 else if(origPeakFreqArray[origIndex]>inPeakFreqArray[inIndex])
644 tmpPeakMagArray[nAddedPeaks] = inPeakMagArray[inIndex];
645 tmpPeakFreqArray[nAddedPeaks] = inPeakFreqArray[inIndex];
646 tmpPeakPhaseArray[nAddedPeaks] = inPeakMagArray[inIndex];
647 tmpPeakIndexArray[nAddedPeaks] = inPeakIndexArray[inIndex]*2+1;
654 tmpPeakMagArray[nAddedPeaks] = origPeakMagArray[origIndex];
655 tmpPeakFreqArray[nAddedPeaks] = origPeakFreqArray[origIndex];
656 tmpPeakPhaseArray[nAddedPeaks] = origPeakMagArray[origIndex];
657 tmpPeakIndexArray[nAddedPeaks] = origPeakIndexArray[origIndex]*2;
661 tmpPeakMagArray[nAddedPeaks] = inPeakMagArray[inIndex];
662 tmpPeakFreqArray[nAddedPeaks] = inPeakFreqArray[inIndex];
663 tmpPeakPhaseArray[nAddedPeaks] = inPeakMagArray[inIndex];
664 tmpPeakIndexArray[nAddedPeaks] = inPeakIndexArray[inIndex]*2+1;