diff --git a/module3/exo3/exercice_python_fr.org b/module3/exo3/exercice_python_fr.org index 9847c91f290ab555e89af23c8d8167b4a2d4ff42..4c09a1a1b07863a8e4554945a348aa6da4c7ae63 100644 --- a/module3/exo3/exercice_python_fr.org +++ b/module3/exo3/exercice_python_fr.org @@ -120,7 +120,7 @@ les oscillations rapides observés précédément. #+begin_src python :results file :session :var matplot_lib_filename="zoomRawData.png" :exports both # Window's size where we want to zoom. - windowSize = 150; + windowSize = 450; plotDatesZoom = pltDates.date2num(dates[:windowSize]) plt.figure(figsize=(10,5)) @@ -138,7 +138,6 @@ Sur cette figure on met plus en évidence les oscillations rapides sur le niveau de concentration de CO2. D'après la figure, dans un premier temps supposer que les oscillations ont une période de un ans. * Analyse fréquentielle de la variation de la concentration de CO2. -On possède des données toutes les semaines. #+begin_src python :results file :session :var matplot_lib_filename="dataFFT.png" :exports both import numpy as np @@ -147,9 +146,9 @@ On possède des données toutes les semaines. co2 = np.array(concentration) #Remove mean value - co2 = co2 - np.mean(co2) + co2NoMean = co2 - np.mean(co2) # Concentration FFT - concentrationFFT = np.fft.fft(co2) + concentrationFFT = np.fft.fft(co2NoMean) # We take the norm of the FFT concentrationFFTNorm = np.absolute(concentrationFFT) concentrationFFTAngle = np.angle(concentrationFFT) @@ -194,16 +193,23 @@ caractériser les différérentes fréquences d'oscillations du signal. #+RESULTS: [[file:fftZoom.png]] -On remarque que les "petites" oscillations ont une amplitude -d'environ 1400. On tentera de filtrer donc le signal au dessus de ce -seuil. -** Filtrage des grandes oscillations +On remarque sur le spectre du signal que le phénomène périodique +possède deux pics d'amplitudes d'environ 1400 et 4000. On suppose que +le premier pic avec une plus grande amlitude correspond au phénomène +périodique que l'on a mis en évidence dans le graphique temporel des +données. En effet on a supposé précédemment que les oscillations +avaient une période de un an, notre unité de temps étant une semaine, +on peut déduire la fréquence des oscillation en supposant que une +année a 52 semaine : \( f = \frac{1}{52} \approx 0.019 \) ce qui reste +cohérent avec notre analyse fréquentielle. +** Filtrage de la contribution lente -On élimine toutes les valeurs au dessus du seuil établit précédemment. +On élimine toutes les valeurs au dessus des seuis établis +précédemment. #+begin_src python :results file :session :var matplot_lib_filename="smallOsillations.png" :exports both # Extraction of the small oscillations - smallAmplitude = 1400 + smallAmplitude = 4000 smallNorm = np.copy(concentrationFFTNorm) smallNorm[smallNorm > smallAmplitude] = 0 @@ -237,13 +243,29 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment. #+RESULTS: [[file:smallOsillationsTime.png]] -** Filtrage des petites oscillations + + +#+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTimeZoom.png" :exports both + plt.figure(figsize=(10,5)) + plt.plot(t,smallSignal) + plt.ylim(-10,10) + plt.tight_layout() + + plt.savefig(matplot_lib_filename) + matplot_lib_filename +#+end_src + +#+RESULTS: +[[file:smallOsillationsTimeZoom.png]] + +On peut déduire que le phénomère périodique a une amplitude de cinq d'après le graphique. +** Filtrage du phénomène périodique On élimine toutes les valeurs au dessus du seuil établit précédemment. #+begin_src python :results file :session :var matplot_lib_filename="bigOsillations.png" :exports both # Extraction of the big oscillations - bigAmplitude = 1400 + bigAmplitude = 4000 bigNorm = np.copy(concentrationFFTNorm) bigNorm[bigNorm < bigAmplitude] = 0 @@ -276,3 +298,31 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment. #+RESULTS: [[file:bigOsillationsTime.png]] +** Comparaison des signaux bruts et filtrés + +#+begin_src python :results file :session :var matplot_lib_filename="bigOsillationsComparisons.png" :exports both + plt.figure(figsize=(10,5)) + plt.plot(t,co2,label="measures") + plt.plot(t,bigSignal+np.mean(co2),label="filtered") + plt.legend() + plt.tight_layout() + + plt.savefig(matplot_lib_filename) + matplot_lib_filename +#+end_src + +#+RESULTS: +[[file:bigOsillationsComparisons.png]] +* Modélisation des phénomènes et extrapolations +** Oscillations périodiques +L'analyse fréquentielle nous a permis caractériser le phénomène +périodique par un signal de fréquence \( f = 0.02 \) par unité de +temps (par semaine), et avec une amplitude de 5. Ainsi, soit \(s_p(t)\) le +signal périodique avec \(t\) en semaine on a : + +\begin{equation} +s_p(t) = 5 \cos (0.02 t) +\end{equation} + + +