Exercices sur machine#

Comme la séance précédente, ce TP est un rappel des notions de première année.

Ouvrez JupyterLab en tapant dans un terminal :

jupyter lab

puis créez un nouveau notebook dans lequel vous pourrez donner un titre (en définissant la cellule courante en markdown, et y tapant par exemple # TP 1). Tapez Shift + Entrée pour exécuter la cellule courante et en créer une nouvelle.

Représentation d’un signal#

Représentez entre 0 et 10 s la sinusoïde amortie

\[ x(t) = A e^{-at} \sin(2 \pi f t + \varphi). \]

\(A=2\), \(a=0,5\), \(\varphi=1\) et \(f = 2\) Hz. Vous pouvez vous inspirer de l’exemple donné en section Écrire un programme Python. Choisissez un pas de temps correct pour obtenir une jolie courbe.

Transformée de Fourier discrète#

On considère le signal créneau suivant de période \(N=100\) :

\[\begin{split} x[n] = \begin{cases} 1 \quad\text{ si } 0 \leq n < 10, \\ 0 \quad\text{ si } 10 \leq n < 100. \end{cases} \end{split}\]
  • Créez et affichez le signal \(x[n]\) sur 100 échantillons. Une porte discrète peut être générée avec la fonction numpy.where (voir sa syntaxe).

  • Tracez la transformée de Fourier discrète (TFD) \(X[k]\) de \(x[n]\) entre \(0\) et \(N-1\) (scipy.fft.fft).

  • Centrez la TFD pour la représenter entre \(-N/2\) et \(N/2-1\) (scipy.fft.fftshift).

  • Modifiez les abscisses pour représenter la TFD en fonction des fréquences (et non des échantillons). On suppose que \(T_e=2,5\) ms.

Analyse spectrale#

Le signal consommation.csv contient la consommation horaire en gaz (deuxième colonne, en MW) et en électricité (troisième colonne, en MW) en France métropolitaine (hors Corse) de 2012 à 2021.

  • Chargez (numpy.loadtxt) et affichez la consommation électrique en fonction des indices des échantillons (inutile de graduer en fonction du temps).

  • Affichez la TFD du signal.

  • Déterminez les valeurs des principales fréquences.

  • Identifiez quelles phénomènes correspondent aux principales fréquences.

Produit de convolution#

Représentez le produit de convolution \((x*y)[n]\) où :

\[\begin{split} x[n] = \begin{cases} +1 &\text{ pour } n=1, \\ -1 &\text{ pour } n=-1, \\ 0 &\text{ ailleurs}, \end{cases} \qquad\qquad y[n] = \begin{cases} 2 &\text{ pour } |n| \leq 1, \\ 0 &\text{ ailleurs}. \end{cases} \end{split}\]

Pour définir \(x[n]\), remarquez que le signal correspond à la somme de deux impulsions discrètes, et qu’une impulsion discrète n’est rien d’autre qu’une porte très étroite…