#include #include using namespace std; constexpr size_t default_width(3); // ====================================================================== void affiche_synchro(vector const& v, vector const& w) { size_t offset(0); cout << "# signal ; moyenne mobile" << endl; if (w.size() < v.size()) { offset = v.size() - w.size(); for (size_t i(0); i < offset; ++i) { cout << v[i] << endl; } } for (size_t i(offset); i < v.size(); ++i) { cout << v[i] << '\t' << w[i-offset] << endl; } } /* ====================================================================== * Calcule le signal filtré par moyenne mobile sur fenêtre de taille T_c. */ vector filtre_moyenne_mobile(vector const& X, size_t K = 3) { // juste pour s'assurer qu'on ne fait pas de bêtises if ((K == 0) or (K > X.size()) // s'assurer qu'on a assez de points return vector(); vector X_chapeau(X.size() - (K - 1)); for (size_t n(0); n < X_chapeau.size() ; ++n) { for (size_t m(n); m <= n + (K-1) ; ++m) { X_chapeau[n] += X[m]; // Notez que X_chapeau[n] a DEJA été initialisé à 0.0 } X_chapeau[n] /= K; } return X_chapeau; } // ====================================================================== int main() { vector temperatures( { 15.1, 14.8, 13.7, 12.6, 13.8, 14.1, 14.5, 14.8, 15.0, 15.1, 15.5 } ); affiche_synchro(temperatures, filtre_moyenne_mobile(temperatures) ); return 0; }