Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mooc-rr
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
d682078cda52034c5c9de3f5af638a6f
mooc-rr
Commits
a17d8f41
Commit
a17d8f41
authored
Nov 28, 2020
by
MigAP
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
better filtering for periodic phenomena
parent
81a89683
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
62 additions
and
12 deletions
+62
-12
exercice_python_fr.org
module3/exo3/exercice_python_fr.org
+62
-12
No files found.
module3/exo3/exercice_python_fr.org
View file @
a17d8f41
...
...
@@ -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 =
1
50;
windowSize =
4
50;
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)
co2
NoMean
= co2 - np.mean(co2)
# Concentration FFT
concentrationFFT = np.fft.fft(co2)
concentrationFFT = np.fft.fft(co2
NoMean
)
# 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 =
14
00
smallAmplitude =
40
00
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 =
14
00
bigAmplitude =
40
00
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}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment