52 for (i=0; i<sizea; i++)
54 for (i=sizea; i<sizeb; i++)
62 for (i=0; i<sizeb; i++)
64 for (i=sizeb; i<sizea; i++)
73 for (i=0; i<size; i++)
84 for (i=0; i<size; i++)
85 result[i]=factor*a[i];
96 for (i=0; i<size; i++)
104 "Spectral Descriptors require a linear magnitude Spectrum");
106 mpSpectrum=pSpectrum;
115 SetGeometricMean(initVal);
117 SetCentroid(initVal);
124 SetMagnitudeSkewness(initVal);
125 SetMagnitudeKurtosis(initVal);
126 SetFlatness(initVal);
127 SetHighFrequencyContent(initVal);
128 SetMaxMagFreq(initVal);
129 SetLowFreqEnergyRelation(initVal);
142 mpSpectrum=copied.mpSpectrum;
155 "Spectral Descriptors require a linear magnitude Spectrum");
156 mpSpectrum=pSpectrum;
161 mDeltaFreq=double(mpSpectrum->GetSpectralRange())/(mpSpectrum->GetSize()-1);
169 if (HasGeometricMean())
172 "The Geometric Mean, as implemented in CLAM, can only"
173 " be computed over Linear Spectral Power distirbutions");
192 if(HasMagnitudeSkewness())
194 if(HasMagnitudeKurtosis())
198 if(HasHighFrequencyContent())
202 if(HasLowFreqEnergyRelation())
222 const DataArray & mag = mpSpectrum->GetMagBuffer();
225 for (
int i=1;i<size;i++)
226 temp += mag[i]*mag[i]*i;
248 const unsigned size=mpSpectrum->
GetSize();
249 for(
unsigned i=0; i<size; i++)
257 return (
TData) index * mDeltaFreq;
266 const DataArray & magnitudeBuffer = mpSpectrum->GetMagBuffer();
271 if (totalEnergy < 10e-4) totalEnergy=10e-4;
273 TData result=(energyComputer(data)/totalEnergy );
279 DataArray& mags = mpSpectrum->GetMagBuffer();
284 for (
TIndex i=0; i<magsSize; i++)
286 cumEnergy += mags[i]*mags[i];
287 if (cumEnergy <= eThreshold)
continue;
288 return i * mDeltaFreq;
298 tmpD.SetMean(a.GetMean()*mult);
299 if(a.HasGeometricMean())
300 tmpD.SetGeometricMean(a.GetGeometricMean()*mult);
302 tmpD.SetEnergy(a.GetEnergy()*mult);
304 tmpD.SetCentroid(a.GetCentroid()*mult);
306 tmpD.SetMoment2(a.GetMoment2()*mult);
308 tmpD.SetMoment3(a.GetMoment3()*mult);
310 tmpD.SetMoment4(a.GetMoment4()*mult);
312 tmpD.SetMoment5(a.GetMoment5()*mult);
314 tmpD.SetMoment6(a.GetMoment6()*mult);
316 tmpD.SetFlatness(a.GetFlatness()*mult);
317 if(a.HasMagnitudeKurtosis())
318 tmpD.SetMagnitudeKurtosis(a.GetMagnitudeKurtosis()*mult);
319 if(a.HasMaxMagFreq())
320 tmpD.SetMaxMagFreq(a.GetMaxMagFreq()*mult);
321 if(a.HasLowFreqEnergyRelation())
322 tmpD.SetLowFreqEnergyRelation(a.GetLowFreqEnergyRelation()*mult);
324 tmpD.SetSpread(a.GetSpread()*mult);
325 if(a.HasMagnitudeSkewness())
326 tmpD.SetMagnitudeSkewness(a.GetMagnitudeSkewness()*mult);
328 tmpD.SetRolloff(a.GetRolloff()*mult);
330 tmpD.SetSlope(a.GetSlope()*mult);
331 if(a.HasHighFrequencyContent())
332 tmpD.SetHighFrequencyContent(a.GetHighFrequencyContent()*mult);
333 if(a.HasBandDescriptors())
335 tmpD.SetBandDescriptors(a.GetBandDescriptors());
338 tmpD.SetMFCC(a.GetMFCC());
340 tmpD.SetPCP(
Multiply(mult,a.GetPCP()));
348 if(a.HasMean() && b.HasMean() )
352 tmpD.SetMean(a.GetMean()*b.GetMean());
354 if(a.HasGeometricMean() && b.HasGeometricMean() )
356 tmpD.AddGeometricMean();
358 tmpD.SetGeometricMean(a.GetGeometricMean()*b.GetGeometricMean());
360 if(a.HasEnergy() && b.HasEnergy() )
364 tmpD.SetEnergy(a.GetEnergy()*b.GetEnergy());
366 if(a.HasCentroid() && b.HasCentroid() )
370 tmpD.SetCentroid(a.GetCentroid()*b.GetCentroid());
372 if(a.HasMoment2() && b.HasMoment2() )
376 tmpD.SetMoment2(a.GetMoment2()*b.GetMoment2());
378 if(a.HasMoment3() && b.HasMoment3() )
382 tmpD.SetMoment3(a.GetMoment3()*b.GetMoment3());
384 if(a.HasMoment4() && b.HasMoment4() )
388 tmpD.SetMoment4(a.GetMoment4()*b.HasMoment4());
390 if(a.HasMoment5() && b.HasMoment5())
394 tmpD.SetMoment5(a.GetMoment5()*b.GetMoment5());
396 if(a.HasMoment6() && b.HasMoment6() )
400 tmpD.SetMoment6(a.GetMoment6()*b.GetMoment6());
402 if(a.HasFlatness() && b.HasFlatness() )
406 tmpD.SetFlatness(a.GetFlatness()*b.GetFlatness());
408 if(a.HasMagnitudeKurtosis() && b.HasMagnitudeKurtosis() )
410 tmpD.AddMagnitudeKurtosis();
412 tmpD.SetMagnitudeKurtosis(a.GetMagnitudeKurtosis()*b.GetMagnitudeKurtosis());
414 if(a.HasMaxMagFreq() && b.HasMaxMagFreq() )
416 tmpD.AddMaxMagFreq();
418 tmpD.SetMaxMagFreq(a.GetMaxMagFreq()*b.GetMaxMagFreq());
420 if(a.HasLowFreqEnergyRelation() && b.HasLowFreqEnergyRelation() )
422 tmpD.AddLowFreqEnergyRelation();
424 tmpD.SetLowFreqEnergyRelation(a.GetLowFreqEnergyRelation()*b.GetLowFreqEnergyRelation());
426 if(a.HasSpread() && b.HasSpread() )
430 tmpD.SetSpread(a.GetSpread()*b.GetSpread());
432 if(a.HasMagnitudeSkewness() && b.HasMagnitudeSkewness() )
434 tmpD.AddMagnitudeSkewness();
436 tmpD.SetMagnitudeSkewness(a.GetMagnitudeSkewness()*b.GetMagnitudeSkewness());
438 if(a.HasRolloff() && b.HasRolloff() )
442 tmpD.SetRolloff(a.GetRolloff()*b.GetRolloff());
444 if(a.HasSlope() && b.HasSlope() )
448 tmpD.SetSlope(a.GetSlope()*b.GetSlope());
450 if(a.HasHighFrequencyContent() && b.HasHighFrequencyContent() )
452 tmpD.AddHighFrequencyContent();
454 tmpD.SetHighFrequencyContent(a.GetHighFrequencyContent()*b.GetHighFrequencyContent());
456 if(a.HasBandDescriptors() && b.HasBandDescriptors() )
458 tmpD.AddBandDescriptors();
461 tmpD.SetBandDescriptors(a.GetBandDescriptors() );
463 if(a.HasMFCC() && b.HasMFCC() )
468 tmpD.SetMFCC(a.GetMFCC() );
470 if(a.HasPCP() && b.HasPCP() )
474 tmpD.SetPCP(
Multiply(a.GetPCP(),b.GetPCP()));
488 if(a.HasMean() && b.HasMean() )
492 tmpD.SetMean(a.GetMean()+b.GetMean());
494 if(a.HasGeometricMean() && b.HasGeometricMean() )
496 tmpD.AddGeometricMean();
498 tmpD.SetGeometricMean(a.GetGeometricMean()+b.GetGeometricMean());
500 if(a.HasEnergy() && b.HasEnergy() )
504 tmpD.SetEnergy(a.GetEnergy()+b.GetEnergy());
506 if(a.HasCentroid() && b.HasCentroid() )
510 tmpD.SetCentroid(a.GetCentroid()+b.GetCentroid());
512 if(a.HasMoment2() && b.HasMoment2() )
516 tmpD.SetMoment2(a.GetMoment2()+b.GetMoment2());
518 if(a.HasMoment3() && b.HasMoment3() )
522 tmpD.SetMoment3(a.GetMoment3()+b.GetMoment3());
524 if(a.HasMoment4() && b.HasMoment4() )
528 tmpD.SetMoment4(a.GetMoment4()+b.HasMoment4());
530 if(a.HasMoment5() && b.HasMoment5())
534 tmpD.SetMoment5(a.GetMoment5()+b.GetMoment5());
536 if(a.HasMoment6() && b.HasMoment6() )
540 tmpD.SetMoment6(a.GetMoment6()+b.GetMoment6());
542 if(a.HasFlatness() && b.HasFlatness() )
546 tmpD.SetFlatness(a.GetFlatness()+b.GetFlatness());
548 if(a.HasMagnitudeKurtosis() && b.HasMagnitudeKurtosis() )
550 tmpD.AddMagnitudeKurtosis();
552 tmpD.SetMagnitudeKurtosis(a.GetMagnitudeKurtosis()+b.GetMagnitudeKurtosis());
554 if(a.HasMaxMagFreq() && b.HasMaxMagFreq() )
556 tmpD.AddMaxMagFreq();
558 tmpD.SetMaxMagFreq(a.GetMaxMagFreq()+b.GetMaxMagFreq());
560 if(a.HasLowFreqEnergyRelation() && b.HasLowFreqEnergyRelation() )
562 tmpD.AddLowFreqEnergyRelation();
564 tmpD.SetLowFreqEnergyRelation(a.GetLowFreqEnergyRelation()+b.GetLowFreqEnergyRelation());
566 if(a.HasSpread() && b.HasSpread() )
570 tmpD.SetSpread(a.GetSpread()+b.GetSpread());
572 if(a.HasMagnitudeSkewness() && b.HasMagnitudeSkewness() )
574 tmpD.AddMagnitudeSkewness();
576 tmpD.SetMagnitudeSkewness(a.GetMagnitudeSkewness()+b.GetMagnitudeSkewness());
578 if(a.HasRolloff() && b.HasRolloff() )
582 tmpD.SetRolloff(a.GetRolloff()+b.GetRolloff());
584 if(a.HasSlope() && b.HasSlope() )
588 tmpD.SetSlope(a.GetSlope()+b.GetSlope());
590 if(a.HasHighFrequencyContent() && b.HasHighFrequencyContent() )
592 tmpD.AddHighFrequencyContent();
594 tmpD.SetHighFrequencyContent(a.GetHighFrequencyContent()+b.GetHighFrequencyContent());
596 if(a.HasBandDescriptors() && b.HasBandDescriptors() )
598 tmpD.AddBandDescriptors();
601 tmpD.SetBandDescriptors(a.GetBandDescriptors() );
603 if(a.HasMFCC() && b.HasMFCC() )
608 tmpD.SetMFCC(a.GetMFCC() );
610 if(a.HasPCP() && b.HasPCP() )
614 tmpD.SetPCP(
Add(a.GetPCP(),b.GetPCP()));