Commit 94529c51c7ed9e82f6bb909c446d289c7f863aba

Authored by Hacene SI HADJ MOHAND
1 parent 3ccf1509
Exists in 9017

prep ticket

Showing 1 changed file with 51 additions and 31 deletions   Show diff stats
src/ExternLib/StatisticFunctions/SpectrumFunc.hh
... ... @@ -25,84 +25,104 @@ namespace AMDA {
25 25 namespace Parameters {
26 26 namespace StatisticFunctions {
27 27  
28   - template <typename InputElemType>
  28 + template <typename InputElemType>
29 29 std::vector<double> fft(int N, std::vector<InputElemType> &xn) {
30 30 /**
31 31 *
32 32 * @param N number of points in the dft
33 33 * @param xn date vector
34 34 */
35   -
  35 +
36 36 int len = xn.size();
37 37 std::vector<double> output;
38 38 output.resize(N);
39 39 output << NotANumber();
40   -
  40 +
41 41 double Xr;
42 42 double Xi;
43   - int counter;
44   -
  43 + int counter;
  44 +
45 45 int k, n = 0;
46 46 for (k = 0; k < N; k++) {
47 47 Xr = 0;
48 48 Xi = 0;
49 49 counter = 0;
50 50 for (n = 0; n < len; n++) {
51   - if(!isNAN(xn[n])){
52   - Xr = Xr + (double) xn[n]*cos(2*3.141592*k*n/N);
53   - Xi = Xi+ (double) xn[n] *sin(2*3.141592*k*n/N);
54   - counter += 1;
  51 + if (!isNAN(xn[n])) {
  52 + Xr = Xr + (double) xn[n] * cos(2 * 3.141592 * k * n / N);
  53 + Xi = Xi + (double) xn[n] * sin(2 * 3.141592 * k * n / N);
  54 + counter += 1;
55 55 }
56 56 }
57 57 if (counter == 0)
58   - break;
59   - output[k] = std::sqrt(Xr*Xr + Xi*Xi);
  58 + break;
  59 + output[k] = std::sqrt(Xr * Xr + Xi * Xi);
60 60 }
61   - return output;
  61 + return output;
62 62 }
63 63  
64 64 template <typename InputElemType>
65   - std::vector<double> computeFourierSpectrum(std::list<std::pair<double, InputElemType>>&mem) {
66   - int nFft = 16;
67   - std::vector<double> result;
68   - result.resize(nFft);
69   -
70   - if(mem.empty())
71   - return result;
72   -
73   - std::vector<InputElemType> vals_;
74   - for(auto val:mem){
75   - vals_.push_back(val.second);
  65 + std::vector<double> getUniformData(std::list<std::pair<double, InputElemType>>&mem, double sampling, double windowtime) {
  66 + bool constantSampling = true;
  67 + auto it_1 = mem.begin();
  68 + it_1++;
  69 + for (auto it = mem.begin(); it != mem.end(); it++) {
  70 + if (*it != mem.back()) {
  71 + InputElemType first = it->first;
  72 + InputElemType second = it_1->first;
  73 + it_1++;
  74 + if (second - first != sampling)
  75 + constantSampling = false;
  76 + }
76 77 }
77   -
78   - if(! vals_.empty())
79   - return fft(nFft,vals_);
  78 +
  79 + std::vector<double> vals_;
  80 + for (auto val : mem) {
  81 + vals_.push_back((double) val.second);
  82 + }
  83 + return vals_;
  84 + }
  85 +
  86 + template <typename InputElemType>
  87 + std::vector<double> computeFourierSpectrum(std::list<std::pair<double, InputElemType>>&mem, double sampling, double windowtime) {
  88 +
  89 + std::vector<double> result;
  90 +
  91 +
  92 + if (mem.empty())
  93 + return result;
80 94  
81 95 return result;
82 96 }
83 97  
84   -/**
  98 + /**
85 99 * @class SpectrumFunc
86 100 * @brief
87 101 * @details This class implements AbstractFunc.
88 102 */
89 103 template <typename InputElemType>
90   - class SpectrumFunc : public ClassicAbstractFunc<InputElemType, std::vector<double>> {
91   - public:
  104 + class SpectrumFunc : public ClassicAbstractFunc<InputElemType, std::vector<double>>
  105 + {
  106 + public:
92 107  
93 108 /**
94 109 * @brief Constructor.
95 110 */
96 111 SpectrumFunc(Process& pProcess, TimeIntervalListSPtr pTimeIntervalList, ParamDataSpec<InputElemType>& paramInput, double windowtime)
97   - : ClassicAbstractFunc<InputElemType, std::vector<double>>(pProcess, pTimeIntervalList, paramInput, windowtime) {
  112 + : ClassicAbstractFunc<InputElemType, std::vector<double>>(pProcess, pTimeIntervalList, paramInput, windowtime),
  113 + _min_sampling(paramInput.getMinSampling()),
  114 + _windowtime(windowtime) {
98 115 }
99 116  
100 117 virtual ~SpectrumFunc() {
101 118 }
102 119  
103 120 std::vector<double> compute() {
104   - return computeFourierSpectrum(ClassicAbstractFunc<InputElemType, std::vector<double>>::_mem);
  121 + return computeFourierSpectrum(ClassicAbstractFunc<InputElemType, std::vector<double>>::_mem, _min_sampling, _windowtime);
105 122 }
  123 + private:
  124 + double _min_sampling;
  125 + double _windowtime;
106 126 };
107 127  
108 128  
... ...