38 , mIn1(
"Input 1",this)
39 , mIn2(
"Input 2",this)
42 , mInterpolationFactorCtl(
"InterpolationFactor",this)
61 "SpectrumInterpolator::Do(): Not in execution mode");
63 switch (mProtoState) {
66 InterpolateMagPhase(in1,in2,out);
69 InterpolateComplex(in1,in2,out);
72 InterpolatePolar(in1,in2,out);
75 InterpolateBPF(in1,in2,out);
78 InterpolateBPFMagPhase(in1,in2,out);
81 InterpolateBPFComplex(in1,in2,out);
84 InterpolateBPFPolar(in1,in2,out);
87 InterpolateMagPhaseBPF(in1,in2,out);
90 InterpolateComplexBPF(in1,in2,out);
93 InterpolatePolarBPF(in1,in2,out);
97 Interpolate(in1,in2,out);
100 CLAM_ASSERT(
false,
"Do(...) : internal inconsistency (invalid mProtoState)");
108 CLAM_ASSERT(
false,
"SpectrumInterpolator::Do(): Not implemented");
127 "SpectrumInterpolator: First spectrum has no content");
129 "SpectrumInterpolator: Second spectrum has no content");
131 "SpectrumInterpolator: Output spectrum has no content");
137 CLAM_ASSERT(mSize,
"SpectrumInterpolator::SetPrototypes: Zero size spectrum");
142 CLAM_ASSERT(mSize == in2.
GetSize(),
"SpectrumInterpolator::SetPrototypes:Size mismatch in spectrum interpolation");
146 CLAM_ASSERT(mSize,
"SpectrumInterpolator::SetPrototypes: Zero size spectrum");
152 CLAM_ASSERT(mSize == out.
GetSize(),
"SpectrumInterpolator::SetPrototypes:Size mismatch in spectrum interpolation");
156 CLAM_ASSERT(mSize,
"SpectrumInterpolator::SetPrototypes: Zero size spectrum");
164 CLAM_ASSERT(in1.GetSpectralRange() == in2.GetSpectralRange() &&
165 in1.GetSpectralRange() == out.GetSpectralRange() ,
"SpectrumInterpolator::SetPrototypes: Spectral range mismatch in spectrum interpolation");
185 bool i1BPF=
false, i2BPF=
false, oBPF=
false;
201 mProtoState=SBPFMagPhase;
205 mProtoState=SBPFComplex;
209 mProtoState=SBPFPolar;
214 mProtoState=SBPFMagPhase;
218 mProtoState=SBPFComplex;
222 mProtoState=SBPFPolar;
227 "SpectrumInterpolator::SetPrototypes: Data flags internal inconsistency");
232 mProtoState=SMagPhaseBPF;
236 mProtoState=SComplexBPF;
240 mProtoState=SPolarBPF;
245 mProtoState=SMagPhaseBPF;
249 mProtoState=SComplexBPF;
253 mProtoState=SPolarBPF;
258 "SpectrumInterpolator::SetPrototypes:"
259 " invalid data flags");
263 mProtoState=SMagPhase;
267 mProtoState=SComplex;
278 mProtoState=SMagPhase;
284 mProtoState=SComplex;
294 mProtoState=SMagPhase;
301 CLAM_ASSERT(
false,
"SpectrumInterpolator::SetPrototypes(): Not implemented");
315 PrototypeState state_copy = mProtoState;
316 ScaleState state2_copy = mScaleState;
321 mProtoState = state_copy;
322 mScaleState = state2_copy;
326 void SpectrumInterpolator::InterpolateMagPhase(Spectrum& in1, Spectrum& in2, Spectrum& out)
328 switch(mScaleState) {
330 InterpolateMagPhaseLin(in1,in2,out);
333 InterpolateMagPhaseLog(in1,in2,out);
336 InterpolateMagPhaseLinLog(in1,in2,out);
339 InterpolateMagPhaseLinLog(in2,in1,out);
344 void SpectrumInterpolator::InterpolateMagPhaseLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
346 bool remove1=
false,remove2=
false,remove3=
false;
358 in1.SetTypeSynchronize(f);
364 in2.SetTypeSynchronize(f);
373 TData *m1 = in1.GetMagBuffer().GetPtr();
374 TData *f1 = in1.GetPhaseBuffer().GetPtr();
375 TData *m2 = in2.GetMagBuffer().GetPtr();
376 TData *f2 = in2.GetPhaseBuffer().GetPtr();
377 TData *mo = out.GetMagBuffer().GetPtr();
378 TData *fo = out.GetPhaseBuffer().GetPtr();
383 if(intFactor>1) intFactor=1;
384 if(intFactor<0) intFactor=0;
385 TData invIntFactor=1-intFactor;
390 for (
int i=0;i<mSize;i++) {
391 Polar po=polInvIntFactor*
Polar(m1[i],f1[i])+polIntFactor*
Polar(m2[i],f2[i]);
396 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
398 out.SynchronizeTo(f);
401 in1.RemoveMagBuffer();
402 in1.RemovePhaseBuffer();
406 in2.RemoveMagBuffer();
407 in2.RemovePhaseBuffer();
411 out.RemoveMagBuffer();
412 out.RemovePhaseBuffer();
418 void SpectrumInterpolator::InterpolateComplex(Spectrum& in1, Spectrum& in2, Spectrum& out)
420 switch(mScaleState) {
422 InterpolateComplexLin(in1,in2,out);
425 InterpolateComplexLog(in1,in2,out);
428 InterpolateComplexLinLog(in1,in2,out);
431 InterpolateComplexLinLog(in2,in1,out);
436 void SpectrumInterpolator::InterpolateComplexLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
438 bool remove1=
false,remove2=
false,remove3=
false;
450 in1.SetTypeSynchronize(f);
456 in2.SetTypeSynchronize(f);
465 Complex *c1 = in1.GetComplexArray().GetPtr();
466 Complex *c2 = in2.GetComplexArray().GetPtr();
467 Complex *co = out.GetComplexArray().GetPtr();
471 if(intFactor>1) intFactor=1;
472 if(intFactor<0) intFactor=0;
473 TData invIntFactor=1-intFactor;
475 for (
int i=0;i<mSize;i++)
476 co[i]=c1[i]*invIntFactor+c2[i]*intFactor;
478 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
480 out.SynchronizeTo(f);
483 in1.RemoveComplexArray();
487 in2.RemoveComplexArray();
491 out.RemoveComplexArray();
497 void SpectrumInterpolator::InterpolatePolar(Spectrum& in1, Spectrum& in2, Spectrum& out)
499 switch(mScaleState) {
501 InterpolatePolarLin(in1,in2,out);
504 InterpolatePolarLog(in1,in2,out);
507 InterpolatePolarLinLog(in1,in2,out);
510 InterpolatePolarLinLog(in2,in1,out);
515 void SpectrumInterpolator::InterpolatePolarLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
517 bool remove1=
false,remove2=
false,remove3=
false;
529 in1.SetTypeSynchronize(f);
535 in2.SetTypeSynchronize(f);
544 Polar *p1 = in1.GetPolarArray().GetPtr();
545 Polar *p2 = in2.GetPolarArray().GetPtr();
546 Polar *po = out.GetPolarArray().GetPtr();
550 if(intFactor>1) intFactor=1;
551 if(intFactor<0) intFactor=0;
552 TData invIntFactor=1-intFactor;
557 for (
int i=0;i<mSize;i++)
558 po[i]=polInvIntFactor*p1[i]+polIntFactor*p2[i];
560 f.bComplex=f.bMagPhase=f.bMagPhaseBPF=
false;
562 out.SynchronizeTo(f);
565 in1.RemovePolarArray();
569 in2.RemovePolarArray();
573 out.RemovePolarArray();
579 void SpectrumInterpolator::InterpolateBPFMagPhase(Spectrum& in1, Spectrum& in2, Spectrum& out)
581 switch(mScaleState) {
583 InterpolateBPFMagPhaseLin(in1,in2,out);
586 InterpolateBPFMagPhaseLog(in1,in2,out);
589 CLAM_ASSERT(
false,
"InterpolateBPFMagPhaseLinLog: Not implemented");
592 InterpolateBPFMagPhaseLogLin(in1,in2,out);
597 void SpectrumInterpolator::InterpolateMagPhaseBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
599 switch(mScaleState) {
601 InterpolateBPFMagPhaseLin(in2,in1,out);
604 InterpolateBPFMagPhaseLog(in2,in1,out);
607 InterpolateBPFMagPhaseLogLin(in2,in1,out);
610 CLAM_ASSERT(
false,
"InterpolateBPFMagPhaseLinLog: Not implemented");
615 void SpectrumInterpolator::InterpolateBPFMagPhaseLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
617 bool remove2=
false,remove3=
false;
630 in2.SetTypeSynchronize(f);
640 TData delta = out.GetSpectralRange() /
642 BPF &m1 = in1.GetMagBPF();
643 BPF &f1 = in1.GetPhaseBPF();
644 TData *m2 = in2.GetMagBuffer().GetPtr();
645 TData *f2 = in2.GetPhaseBuffer().GetPtr();
646 TData *mo = out.GetMagBuffer().GetPtr();
647 TData *fo = out.GetPhaseBuffer().GetPtr();
651 if(intFactor>1) intFactor=1;
652 if(intFactor<0) intFactor=0;
653 TData invIntFactor=1-intFactor;
658 for (
int i=0;i<mSize;i++) {
659 Polar po = polInvIntFactor*
Polar(m1.GetValue(pos),f1.GetValue(pos)) +
660 polIntFactor*
Polar(m2[i],f2[i]);
666 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
668 out.SynchronizeTo(f);
671 in2.RemoveMagBuffer();
672 in2.RemovePhaseBuffer();
676 out.RemoveMagBuffer();
677 out.RemovePhaseBuffer();
682 void SpectrumInterpolator::InterpolateBPFMagPhaseLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
684 bool remove2=
false,remove3=
false;
697 in2.SetTypeSynchronize(f);
707 TData delta = out.GetSpectralRange() /
709 BPF &m1 = in1.GetMagBPF();
710 BPF &f1 = in1.GetPhaseBPF();
711 TData *m2 = in2.GetMagBuffer().GetPtr();
712 TData *f2 = in2.GetPhaseBuffer().GetPtr();
713 TData *mo = out.GetMagBuffer().GetPtr();
714 TData *fo = out.GetPhaseBuffer().GetPtr();
718 if(intFactor>1) intFactor=1;
719 if(intFactor<0) intFactor=0;
720 TData invIntFactor=1-intFactor;
724 for (
int i=0;i<mSize;i++) {
726 polIntFactor*
Polar(m2[i],f2[i]);
732 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
734 out.SynchronizeTo(f);
737 in2.RemoveMagBuffer();
738 in2.RemovePhaseBuffer();
742 out.RemoveMagBuffer();
743 out.RemovePhaseBuffer();
748 void SpectrumInterpolator::InterpolateBPFComplex(Spectrum& in1, Spectrum& in2, Spectrum& out)
750 switch(mScaleState) {
752 InterpolateBPFComplexLin(in1,in2,out);
755 InterpolateBPFComplexLog(in1,in2,out);
758 CLAM_ASSERT(
false,
"InterpolateBPFMagPhaseLinLog: Not implemented");
761 InterpolateBPFComplexLogLin(in1,in2,out);
766 void SpectrumInterpolator::InterpolateComplexBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
768 switch(mScaleState) {
770 InterpolateBPFComplexLin(in2,in1,out);
773 InterpolateBPFComplexLog(in2,in1,out);
776 InterpolateBPFComplexLogLin(in2,in1,out);
779 CLAM_ASSERT(
false,
"InterpolateBPFMagPhaseLinLog: Not implemented");
784 void SpectrumInterpolator::InterpolateBPFComplexLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
786 bool remove2=
false,remove3=
false;
799 in2.SetTypeSynchronize(f);
809 TData delta = out.GetSpectralRange() /
811 BPF &m1 = in1.GetMagBPF();
812 BPF &f1 = in1.GetPhaseBPF();
813 Complex *c2 = in2.GetComplexArray().GetPtr();
814 Complex *co = out.GetComplexArray().GetPtr();
818 if(intFactor>1) intFactor=1;
819 if(intFactor<0) intFactor=0;
820 TData invIntFactor=1-intFactor;
822 for (
int i=0;i<mSize;i++) {
823 TData BRe = fabs(m1.GetValue(pos)) *
CLAM_cos(f1.GetValue(pos));
824 TData BIm = fabs(m1.GetValue(pos)) *
CLAM_sin(f1.GetValue(pos));
825 co[i]=
Complex(BRe,BIm)*invIntFactor + c2[i]*intFactor;
829 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
831 out.SynchronizeTo(f);
834 in2.RemoveComplexArray();
838 out.RemoveComplexArray();
846 void SpectrumInterpolator::InterpolateBPFComplexLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
848 bool remove2=
false,remove3=
false;
861 in2.SetTypeSynchronize(f);
871 TData delta = out.GetSpectralRange() /
873 BPF &m1 = in1.GetMagBPF();
874 BPF &f1 = in1.GetPhaseBPF();
875 Complex *c2 = in2.GetComplexArray().GetPtr();
876 Complex *co = out.GetComplexArray().GetPtr();
880 if(intFactor>1) intFactor=1;
881 if(intFactor<0) intFactor=0;
882 TData invIntFactor=1-intFactor;
884 for (
int i=0;i<mSize;i++) {
887 co[i]=
Complex(BRe,BIm)*invIntFactor + c2[i]*intFactor;
891 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
893 out.SynchronizeTo(f);
897 in2.RemoveComplexArray();
901 out.RemoveComplexArray();
907 void SpectrumInterpolator::InterpolateBPFPolar(Spectrum& in1, Spectrum& in2, Spectrum& out)
909 switch(mScaleState) {
911 InterpolateBPFPolarLin(in1,in2,out);
914 InterpolateBPFPolarLog(in1,in2,out);
917 CLAM_ASSERT(
false,
"InterpolateBPFPolarLinLog: Not implemented");
920 InterpolateBPFPolarLogLin(in1,in2,out);
925 void SpectrumInterpolator::InterpolatePolarBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
927 switch(mScaleState) {
929 InterpolateBPFPolarLin(in2,in1,out);
932 InterpolateBPFPolarLog(in2,in1,out);
935 InterpolateBPFPolarLogLin(in2,in1,out);
938 CLAM_ASSERT(
false,
"InterpolateBPFPolarLinLog: Not implemented");
943 void SpectrumInterpolator::InterpolateBPFPolarLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
945 bool remove2=
false,remove3=
false;
958 in2.SetTypeSynchronize(f);
968 TData delta = out.GetSpectralRange() /
970 BPF &m1 = in1.GetMagBPF();
971 BPF &f1 = in1.GetPhaseBPF();
972 Polar *p2 = in2.GetPolarArray().GetPtr();
973 Polar *po = out.GetPolarArray().GetPtr();
977 if(intFactor>1) intFactor=1;
978 if(intFactor<0) intFactor=0;
979 TData invIntFactor=1-intFactor;
983 for (
int i=0;i<mSize;i++) {
984 po[i]=polInvIntFactor*
Polar(m1.GetValue(pos),f1.GetValue(pos))+polIntFactor*p2[i];
988 f.bMagPhase=f.bComplex=f.bMagPhaseBPF=
false;
990 out.SynchronizeTo(f);
993 in2.RemovePolarArray();
997 out.RemovePolarArray();
1002 void SpectrumInterpolator::InterpolateBPFPolarLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
1004 bool remove2=
false,remove3=
false;
1017 in2.SetTypeSynchronize(f);
1027 TData delta = out.GetSpectralRange() /
1029 BPF &m1 = in1.GetMagBPF();
1030 BPF &f1 = in1.GetPhaseBPF();
1031 Polar *p2 = in2.GetPolarArray().GetPtr();
1032 Polar *po = out.GetPolarArray().GetPtr();
1036 if(intFactor>1) intFactor=1;
1037 if(intFactor<0) intFactor=0;
1038 TData invIntFactor=1-intFactor;
1042 for (
int i=0;i<mSize;i++) {
1044 TData BPha = f1.GetValue(pos);
1045 po[i]=polInvIntFactor*
Polar(BMag,BPha)+polIntFactor*p2[i];
1049 f.bMagPhase=f.bComplex=f.bMagPhaseBPF=
false;
1051 out.SynchronizeTo(f);
1054 in2.RemovePolarArray();
1058 out.RemovePolarArray();
1063 void SpectrumInterpolator::InterpolateBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
1067 if(intFactor>1) intFactor=1;
1068 if(intFactor<0) intFactor=0;
1069 TData invIntFactor=1-intFactor;
1073 for (
int i=0;i<mSize;i++) {
1074 Point &pm1=in1.GetMagBPF().GetPointArray()[i];
1075 Point &pm2=in2.GetMagBPF().GetPointArray()[i];
1076 Point &pmo=out.GetMagBPF().GetPointArray()[i];
1077 Point &pf1=in1.GetPhaseBPF().GetPointArray()[i];
1078 Point &pf2=in2.GetPhaseBPF().GetPointArray()[i];
1079 Point &pfo=out.GetPhaseBPF().GetPointArray()[i];
1080 CLAM_ASSERT(pm1.GetX() == pm2.GetX(),
"InterpolateBPF: input BPF abcisas do not match "
1081 "(and BPF merging not yet iplemented)");
1082 CLAM_ASSERT(pm1.GetX() == pmo.GetX(),
"InterpolateBPF: ouput BPF abcisas do not match with imput "
1083 "(and BPF merging not yet iplemented)");
1086 pmo.SetY(invIntFactor*pm1.GetY()+intFactor*pm2.GetY());
1087 pfo.SetY(invIntFactor*pf1.GetY()+intFactor*pf2.GetY());
1093 void SpectrumInterpolator::InterpolateMagPhaseLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1095 CLAM_ASSERT(
false,
"InterpolateMagPhaseLog: Not implemented");
1097 void SpectrumInterpolator::InterpolateMagPhaseLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1099 CLAM_ASSERT(
false,
"InterpolateMagPhaseLinLog: Not implemented");
1101 void SpectrumInterpolator::InterpolateComplexLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1103 CLAM_ASSERT(
false,
"InterpolateComplexLog: Not implemented");
1105 void SpectrumInterpolator::InterpolateComplexLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1107 CLAM_ASSERT(
false,
"InterpolateComplexLinLog: Not implemented");
1109 void SpectrumInterpolator::InterpolatePolarLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1111 CLAM_ASSERT(
false,
"InterpolatePolarLog: Not implemented");
1113 void SpectrumInterpolator::InterpolatePolarLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1115 CLAM_ASSERT(
false,
"InterpolatePolarLinLog: Not implemented");
1117 void SpectrumInterpolator::InterpolateBPFComplexLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1119 CLAM_ASSERT(
false,
"InterpolateBPFComplexLog: Not implemented");
1121 void SpectrumInterpolator::InterpolateBPFComplexLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1123 CLAM_ASSERT(
false,
"InterpolateBPFComplexLinLog: Not implemented");
1125 void SpectrumInterpolator::InterpolateBPFPolarLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1127 CLAM_ASSERT(
false,
"InterpolateBPFPolarLog: Not implemented");
1129 void SpectrumInterpolator::InterpolateBPFPolarLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1131 CLAM_ASSERT(
false,
"InterpolateBPFPolarLinLog: Not implemented");
1133 void SpectrumInterpolator::InterpolateBPFMagPhaseLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1135 CLAM_ASSERT(
false,
"InterpolateBPFMagPhaseLog: Not implemented");
1137 void SpectrumInterpolator::InterpolateBPFMagPhaseLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1139 CLAM_ASSERT(
false,
"InterpolateBPFMagPhaseLinLog: Not implemented");