Commit ac7eebb012d5ccf637b218f5371ef7c305c2246d
1 parent
9d60b18e
Exists in
master
and in
37 other branches
Ignore zero point for frequency and period
Showing
3 changed files
with
28 additions
and
16 deletions
Show diff stats
src/ParamOutputImpl/Plot/InstantPlot/PlotFunction.cc
@@ -165,6 +165,7 @@ namespace plot | @@ -165,6 +165,7 @@ namespace plot | ||
165 | { | 165 | { |
166 | minValue = pow10(minValue); | 166 | minValue = pow10(minValue); |
167 | maxValue = pow10(maxValue); | 167 | maxValue = pow10(maxValue); |
168 | + lAxisRange._extend = false; | ||
168 | } | 169 | } |
169 | 170 | ||
170 | lAxisRange.setMin(minValue); | 171 | lAxisRange.setMin(minValue); |
@@ -179,6 +180,7 @@ namespace plot | @@ -179,6 +180,7 @@ namespace plot | ||
179 | { | 180 | { |
180 | minValue = pow10(minValue); | 181 | minValue = pow10(minValue); |
181 | maxValue = pow10(maxValue); | 182 | maxValue = pow10(maxValue); |
183 | + lAxisRange._extend = false; | ||
182 | } | 184 | } |
183 | lAxisRange.setMin(minValue); | 185 | lAxisRange.setMin(minValue); |
184 | lAxisRange.setMax(maxValue); | 186 | lAxisRange.setMax(maxValue); |
@@ -419,12 +421,16 @@ namespace plot | @@ -419,12 +421,16 @@ namespace plot | ||
419 | AMDA::Parameters::ParameterSPtr originalParam = _parameterManager.getParameter(paramOriginID); | 421 | AMDA::Parameters::ParameterSPtr originalParam = _parameterManager.getParameter(paramOriginID); |
420 | const double timeSampling = originalParam->getDataWriterTemplate()->getMinSampling(); | 422 | const double timeSampling = originalParam->getDataWriterTemplate()->getMinSampling(); |
421 | 423 | ||
424 | + LOG4CXX_DEBUG(gLogger, "Fourier:: Signal Size = " << yValues.size()); | ||
425 | + | ||
422 | DiscreteFourierTransform<double, double> DFT(yValues, timeSampling); | 426 | DiscreteFourierTransform<double, double> DFT(yValues, timeSampling); |
423 | const bool computeFFT = (function == PlotFunction::Function::FFT); | 427 | const bool computeFFT = (function == PlotFunction::Function::FFT); |
424 | DFT.compute(computeFFT); | 428 | DFT.compute(computeFFT); |
425 | 429 | ||
426 | std::vector<std::complex<double>> phasors = DFT.getPhasors(); | 430 | std::vector<std::complex<double>> phasors = DFT.getPhasors(); |
427 | yValues = DFT.computeDSP(phasors); | 431 | yValues = DFT.computeDSP(phasors); |
432 | + if (computeFFT) | ||
433 | + LOG4CXX_DEBUG(gLogger, "FFT Next Power of 2 = " << yValues.size() << " " << DFT.highestPowerof2(8211)); | ||
428 | 434 | ||
429 | if (abscisse.getType() == Abscisse::Abscisse_Type::FREQUENCY) | 435 | if (abscisse.getType() == Abscisse::Abscisse_Type::FREQUENCY) |
430 | xValues = DFT.getFreq(phasors, 1.0 / timeSampling); // DFT.getFrequences(); | 436 | xValues = DFT.getFreq(phasors, 1.0 / timeSampling); // DFT.getFrequences(); |
@@ -432,10 +438,7 @@ namespace plot | @@ -432,10 +438,7 @@ namespace plot | ||
432 | xValues = DFT.getPeriods(phasors, 1.0 / timeSampling); // DFT.getFrequences(); | 438 | xValues = DFT.getPeriods(phasors, 1.0 / timeSampling); // DFT.getFrequences(); |
433 | } | 439 | } |
434 | 440 | ||
435 | - if (ordonneeScale == Axis::Scale::LOGARITHMIC) | ||
436 | - PlotFunction::applyScale(yValues); | ||
437 | - if (abscisseScale == Axis::Scale::LOGARITHMIC) | ||
438 | - PlotFunction::applyScale(xValues); | 441 | + PlotFunction::applyScale(xValues, yValues); |
439 | 442 | ||
440 | std::string id = ""; | 443 | std::string id = ""; |
441 | if (pSerie != nullptr) | 444 | if (pSerie != nullptr) |
@@ -451,20 +454,31 @@ namespace plot | @@ -451,20 +454,31 @@ namespace plot | ||
451 | PlotFunction::yValuesMap[id] = yValues; | 454 | PlotFunction::yValuesMap[id] = yValues; |
452 | } | 455 | } |
453 | 456 | ||
454 | - void PlotFunction::applyScale(std::vector<double> &vect) | 457 | + void PlotFunction::applyScale(std::vector<double> &vectX, std::vector<double> &vectY) |
455 | { | 458 | { |
456 | - for (std::size_t i = 0; i < vect.size(); i++) | 459 | + std::vector<double> xtemp; |
460 | + std::vector<double> ytemp; | ||
461 | + for (std::size_t i = 0; i < vectX.size(); i++) | ||
457 | { | 462 | { |
458 | - if (vect[i] <= 0) | 463 | + if ((vectX[i] <= 0 && abscisseScale == Axis::Scale::LOGARITHMIC) || |
464 | + (vectY[i] <= 0 && ordonneeScale == Axis::Scale::LOGARITHMIC)) | ||
459 | { | 465 | { |
460 | - vect[i] = log10(10e-20); | ||
461 | LOG4CXX_WARN(gLogger, "Negative value found, no log calculated"); | 466 | LOG4CXX_WARN(gLogger, "Negative value found, no log calculated"); |
462 | } | 467 | } |
463 | else | 468 | else |
464 | { | 469 | { |
465 | - vect[i] = log10(vect[i]); | 470 | + if (abscisseScale == Axis::Scale::LOGARITHMIC) |
471 | + xtemp.push_back(log10(vectX[i])); | ||
472 | + else | ||
473 | + xtemp.push_back(vectX[i]); | ||
474 | + if (ordonneeScale == Axis::Scale::LOGARITHMIC) | ||
475 | + ytemp.push_back(log10(vectY[i])); | ||
476 | + else | ||
477 | + ytemp.push_back(vectY[i]); | ||
466 | } | 478 | } |
467 | } | 479 | } |
480 | + vectX = xtemp; | ||
481 | + vectY = ytemp; | ||
468 | } | 482 | } |
469 | 483 | ||
470 | void PlotFunction::drawStartDate(std::string _timeFormat, double startTime, double stopTime) | 484 | void PlotFunction::drawStartDate(std::string _timeFormat, double startTime, double stopTime) |
src/ParamOutputImpl/Plot/InstantPlot/PlotFunction.hh
@@ -190,7 +190,7 @@ namespace plot | @@ -190,7 +190,7 @@ namespace plot | ||
190 | * | 190 | * |
191 | * @param vect vector of data | 191 | * @param vect vector of data |
192 | */ | 192 | */ |
193 | - void applyScale(std::vector<double> &vect); | 193 | + void applyScale(std::vector<double> &vectX, std::vector<double> &vectY); |
194 | /** | 194 | /** |
195 | * @brief Get the Min Max de xValuesMap et yValuesMap | 195 | * @brief Get the Min Max de xValuesMap et yValuesMap |
196 | * | 196 | * |
src/Parameters/fonctions/fourier/DiscreteFourierTransform.cc
@@ -116,7 +116,7 @@ std::vector<E> DiscreteFourierTransform<T, E>::computeDSP(std::vector<std::compl | @@ -116,7 +116,7 @@ std::vector<E> DiscreteFourierTransform<T, E>::computeDSP(std::vector<std::compl | ||
116 | { | 116 | { |
117 | const int N = x.size(); | 117 | const int N = x.size(); |
118 | std::vector<E> out; | 118 | std::vector<E> out; |
119 | - for (int k = 0; k < N / 2; k++) | 119 | + for (int k = 1; k < N / 2; k++) |
120 | { | 120 | { |
121 | const E magnitude = (E)pow(abs(x[k]), 2); | 121 | const E magnitude = (E)pow(abs(x[k]), 2); |
122 | const E dsp = (E)(1.0 / N) * magnitude; | 122 | const E dsp = (E)(1.0 / N) * magnitude; |
@@ -131,7 +131,7 @@ std::vector<E> DiscreteFourierTransform<T, E>::getFreq(std::vector<std::complex< | @@ -131,7 +131,7 @@ std::vector<E> DiscreteFourierTransform<T, E>::getFreq(std::vector<std::complex< | ||
131 | { | 131 | { |
132 | const int N = x.size(); | 132 | const int N = x.size(); |
133 | std::vector<E> out; | 133 | std::vector<E> out; |
134 | - for (int k = 0; k < N / 2; k++) | 134 | + for (int k = 1; k < N / 2; k++) |
135 | { | 135 | { |
136 | const E freq = (E)k * frequency_ / N; | 136 | const E freq = (E)k * frequency_ / N; |
137 | out.push_back(freq); | 137 | out.push_back(freq); |
@@ -145,11 +145,9 @@ std::vector<E> DiscreteFourierTransform<T, E>::getPeriods(std::vector<std::compl | @@ -145,11 +145,9 @@ std::vector<E> DiscreteFourierTransform<T, E>::getPeriods(std::vector<std::compl | ||
145 | { | 145 | { |
146 | const int N = x.size(); | 146 | const int N = x.size(); |
147 | std::vector<E> out; | 147 | std::vector<E> out; |
148 | - for (int k = 0; k < N / 2; k++) | 148 | + for (int k = 1; k < N / 2; k++) |
149 | { | 149 | { |
150 | - E period = (E)INT_MAX; | ||
151 | - if (k != 0) | ||
152 | - period = N / ((E)k * frequency_); | 150 | + const E period = N / ((E)k * frequency_); |
153 | out.push_back(period); | 151 | out.push_back(period); |
154 | } | 152 | } |
155 | 153 |