Commit 23856f0d authored by MigAP's avatar MigAP

add model for slow contribution

parent a17d8f41
...@@ -134,9 +134,10 @@ les oscillations rapides observés précédément. ...@@ -134,9 +134,10 @@ les oscillations rapides observés précédément.
#+RESULTS: #+RESULTS:
[[file:zoomRawData.png]] [[file:zoomRawData.png]]
Sur cette figure on met plus en évidence les oscillations rapides sur Sur cette figure on met plus en évidence le phénomène périodique sur
le niveau de concentration de CO2. D'après la figure, dans un premier 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. temps supposer que les oscillations ont une période de un an et une
amplitude entre cinq et sept.
* Analyse fréquentielle de la variation de la concentration de CO2. * Analyse fréquentielle de la variation de la concentration de CO2.
#+begin_src python :results file :session :var matplot_lib_filename="dataFFT.png" :exports both #+begin_src python :results file :session :var matplot_lib_filename="dataFFT.png" :exports both
...@@ -225,7 +226,9 @@ précédemment. ...@@ -225,7 +226,9 @@ précédemment.
#+RESULTS: #+RESULTS:
[[file:smallOsillations.png]] [[file:smallOsillations.png]]
** Reconstruction du signal : petites oscillations ** Reconstruction du du phénomène périodique
L'objectif est de déterminer l'amplitude des oscillations en prenant
en compte toutes les mesures.
#+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTime.png" :exports both #+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTime.png" :exports both
smallFreqSignal = smallNorm*np.exp(1j*concentrationFFTAngle) smallFreqSignal = smallNorm*np.exp(1j*concentrationFFTAngle)
...@@ -244,7 +247,6 @@ précédemment. ...@@ -244,7 +247,6 @@ précédemment.
[[file:smallOsillationsTime.png]] [[file:smallOsillationsTime.png]]
#+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTimeZoom.png" :exports both #+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTimeZoom.png" :exports both
plt.figure(figsize=(10,5)) plt.figure(figsize=(10,5))
plt.plot(t,smallSignal) plt.plot(t,smallSignal)
...@@ -324,5 +326,58 @@ signal périodique avec \(t\) en semaine on a : ...@@ -324,5 +326,58 @@ signal périodique avec \(t\) en semaine on a :
s_p(t) = 5 \cos (0.02 t) s_p(t) = 5 \cos (0.02 t)
\end{equation} \end{equation}
** Contribution lente du signal
L'analyse fréquentielle nous a pas permis d'avoir plus d'information
quant à la contribution lente du signal. Cependant si l'on regarde
l'allure générale des données peut supposer dans un premier temps que
le concentration de CO2 varie de façon quadratique par rapport au
temps. Donc on va modéliser cette contribution lente par un polynôme
d'ordre deux \( y(t) = at^2 +bt +c \). On utilisera un outil de /curve
fitting/ pour caractériser ce polynôme.
Compte tenu de la modélisation du phénomène périodique, celui-ci
possède une valeur moyenne nulle. Or les outils de /curve fitting/
calculent la norme deux de l'erreur entre le modèle et les données,
donc il est inutile de filtrer les données brute pour tenter d'enlever
le phénomène périodique pour caractériser la contribution lente.
Dans un premier temps on définit une fonction de notre modèle pour la
contribution lente
#+begin_src python :results silent :session :exports both
def slowContributionModel(t,a,b,c):
return a*t*t + b*t + c
#+end_src
Puis l'on utilise le module =scipy= plus spécifiquement le module
=scipy.optimize= pour déterminer les paramètres de notre modèle.
#+begin_src python :results output :session :exports both
from scipy import optimize
params, params_covariance = optimize.curve_fit(slowContributionModel,t,co2, p0=[1, 1, 1])
print("Parameters :\t",params)
print("Parameters covariance :\t", params_covariance)
#+end_src
#+RESULTS:
: Parameters : [4.83379437e-06 1.54227807e-02 3.15061312e+02]
: Parameters covariance : [[ 2.85416803e-15 -9.05056674e-12 4.78171606e-09]
: [-9.05056674e-12 3.06138429e-08 -1.81982548e-05]
: [ 4.78171606e-09 -1.81982548e-05 1.44289419e-02]]
Finalement on compare le modèle obtenu avec les données des mesures :
#+begin_src python :results file :session :var matplot_lib_filename="modelBigOsillations.png" :exports both
co2Model = slowContributionModel(t,params[0], params[1], params[2])
plt.figure(figsize=(10,5))
plt.plot(t,co2,label="Measures")
plt.plot(t,co2Model,label="Model")
plt.legend()
plt.tight_layout()
plt.savefig(matplot_lib_filename)
matplot_lib_filename
#+end_src
#+RESULTS:
[[file:modelBigOsillations.png]]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment