Transformée de Fourier


In [ ]:
%matplotlib inline

import matplotlib
matplotlib.rcParams['figure.figsize'] = (6, 6)

import math
import cmath          # math functions for complex numbers
import numpy as np
import matplotlib.pyplot as plt

import ipywidgets
from ipywidgets import interact

import sympy as sp

# See: http://docs.sympy.org/latest/tutorial/printing.html
sp.init_printing()

t = sp.symbols("t")

TODO:

The following notations come from the following book: Toutes les mathématiques et les bases de l'informatique, Horst Stöcker (Dunod, 2002)

Cas simple: fonction périodique de période $2\pi$

Définitions

Série de Fourier

$$ f(t) = \frac{a_0}{2} + \sum^{\infty}_{n=1} [a_n \cos(n t) + b_n \sin(n t)] $$

Calcul des coefficients de Fourier

\begin{eqnarray*} \forall n \in \mathbb{N}, ~~~~~ a_n & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \cos(n t) ~ dt \\ \forall n \in \mathbb{N}^*, ~~~~~ b_n & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \sin(n t) ~ dt \\ \end{eqnarray*}

Cf. section \ref{sec:exemples} pour des exemples de calculs de coefficients de Fourier.

Rappel: $\mathbb{N}^*$ est l'ensemble $\mathbb{N}$ privé de $0$.

Condition de Dirichlet

...

rem: si on avait que des cos (ou que des sin) dans la série de fourier, elle ne pourrait coder définir que des fonctions qui s'annulent tous les pi/2...

Questions / notes / remarques

  • Que représente le terme $\frac{a_0}{2}$ dans la définition de la série de Fourier ?

...

  • Que représente le facteur $\frac{1}{\pi}$ dans les coeffients de Fourier ?

...

Cas général: fonction périodique de période $T$

Définition

Série de Fourier

$$ f(t) = \frac{a_0}{2} + \sum^{\infty}_{n=1} [a_n \cos(\omega n t) + b_n \sin(\omega n t)] $$

Calcul des coefficients de Fourier

\begin{eqnarray*} \forall n \in \mathbb{N}, ~~~~~ a_n & = & \frac{2}{T} \int^{T/2}_{-T/2} f(t) \cos(\omega n t) ~ dt \\ \forall n \in \mathbb{N}^*, ~~~~~ b_n & = & \frac{2}{T} \int^{T/2}_{-T/2} f(t) \sin(\omega n t) ~ dt \\ \end{eqnarray*}

Représentation spectrale

TODO: rendre plus claire la définition suivante...

Série de Fourier

$$ f(t) = \frac{a_0}{2} + \sum^{\infty}_{n=1} [A_n \sin(\omega n t + \phi_n)] $$

avec $$A_n = \sqrt{a^2_n + b^2_n} \quad \text{ et } \quad \tan \phi_n = \frac{a_n}{b_n}$$

rem: ne fait qu'écrire autrement les coefs (passage d'une notation carthésienne à une notation polaire)...

  • $a_1$ et $b_1$ en $A_1$ et $\phi_1$,
  • $a_2$ et $b_2$ en $A_2$ et $\phi_2$,
  • ...

Pour chaque $n$, les coefs $a_n$ et $b_n$ peuvent être vus comme un point dans le plan.

Ces points peuvent aussi être définis avec une notation polaire (c'est ce qui est fait ici): $A_n$ et $\phi_n$.

Qu'est-ce que ça apporte d'un point de vue pratique ? Il serait intéressant de visualiser la différence entre ces deux espaces de coefficients... Le filtrage d'un signal est peut-être plus facile dans le 2e ?

Représentation complexe (notation exponentielle)

TODO: rendre plus claire la définition suivante...

Définitions pour une fonction $2\pi$ periodique

Série de Fourier

$$ f(t) = \sum^{\infty}_{n=\color{red}{-\infty}} c_n e^{i n t} $$

Calcul des coefficients de Fourier

$$ c_n = \frac{1}{2\pi} \int^{\pi}_{-\pi} f(t) e^{-i n t} dt $$

Définitions pour une fonction $T$ periodique

Série de Fourier

$$ f(t) = \sum^{\infty}_{n=\color{red}{-\infty}} c_n e^{i\omega n t} $$

Calcul des coefficients de Fourier

$$ c_n = \frac{1}{T} \int^{T/2}_{-T/2} f(t) e^{-i \omega n t} dt $$

Relation entre les coefficients $a_n$, $b_n$ et $c_n$

$$ c_n = \left\{ \begin{align} \frac{a_0}{2} & \quad n = 0 \\ \\ \frac{a_n - ib_n}{2} & \quad n > 0 \\ \\ \frac{a_{-n} - ib_{-n}}{2} & \quad n < 0 \end{align} \right. $$

ou $$ \left. \begin{align} a_n & = c_n + c_{-n} \\ b_n & = i(c_n - c_{-n}) \end{align} \right\} n > 0 $$

Les valeurs $\omega_n = \omega n$ sont appelées le spectre de $f(t)$.

rem: ne fait que regrouper les coefs

  • $a_1$ et $b_1$ dans un nombre complexe $z_1$,
  • $a_2$ et $b_2$ dans un nombre complexe $z_2$,
  • ...

Pour chaque $n$, les coefs $a_n$ et $b_n$ peuvent être vus comme un point dans le plan et donc comme un nombre complexe.

Du coup, ces points peuvent aussi être définis avec une notation exponentielle.

motivation: "ça simplifie les calculs et les notations"

Conclusion

TODO...

Synthèse

Définitions à connaitre:

  • Série de Fourier
  • Coefficients de Fourier
  • Condition de Dirichlet

Annexes

Rappels de maths

TODO: add plots...

\begin{eqnarray*} \forall c \in \mathbb{N}^*, \int^{\pi}_{-\pi} c ~ dt & = & c \times 2\pi \\ \forall c \in \mathbb{N}^*, \int^{\pi}_{-\pi} c \cos(t) ~ dt & = & 0 \\ \forall c \in \mathbb{N}^*, \int^{\pi}_{-\pi} c \sin(t) ~ dt & = & 0 \\ \end{eqnarray*}$$ \forall m \in \mathbb{N}^*, n \in \mathbb{N}^*, \int^{\pi}_{-\pi} \cos(n ~ t) \cos(m ~ t) ~ dt = \left\{ \begin{array}{l l} \pi & \quad \text{si $n = m$}\\ 0 & \quad \text{si $n \neq m$} \end{array} \right. $$

Par exemple: \begin{eqnarray*} \int^{\pi}_{-\pi} \cos(t) \cos(t) ~ dt & = & \pi \\ \int^{\pi}_{-\pi} \sin(t) \sin(t) ~ dt & = & \pi \\ \int^{\pi}_{-\pi} \cos(t) \sin(t) ~ dt & = & 0 \\ \int^{\pi}_{-\pi} \cos(t) \cos(2t) ~ dt & = & 0 \\ \int^{\pi}_{-\pi} \cos(t) \sin(2t) ~ dt & = & 0 \\ \int^{\pi}_{-\pi} \cos(2t) \cos(2t) ~ dt & = & \pi \\ \int^{\pi}_{-\pi} \sin(2t) \sin(2t) ~ dt & = & \pi \\ \end{eqnarray*}

Exemples détaillés

Calcule des coefficients de Fourier pour la fonction $f(t) = 3$

\begin{eqnarray*} a_0 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} 3 \cos(0) ~ dt \\ & = & \frac{1}{\pi} \int^{\pi}_{-\pi} 3 ~ dt \\ & = & \frac{1}{\pi} \times 3 \times 2 \pi \\ & = & 6 \\ \end{eqnarray*}\begin{eqnarray*} a_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} 3 \cos(t) ~ dt \\ & = & 0 \\ \end{eqnarray*}\begin{eqnarray*} b_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} 3 \sin(t) ~ dt \\ & = & 0 \\ \end{eqnarray*}

De même, les coefficients $a_3$, $b_3$, $a_4$, $b_4$, etc. sont tous nuls.

Vérification

On a bien: \begin{eqnarray*} f(t) & = & \frac{a_0}{2} + \sum^{\infty}_{n=1} (a_n \cos(n t) + b_n \sin(n t)) \\ & = & \frac{6}{2} + 0 \times \cos(t) + 0 \times \sin(t) + 0 \times \cos(2t) + 0 \times \sin(2t) + ... \\ & = & 3 \\ \end{eqnarray*}

Calcule des coefficients de Fourier pour la fonction $f(t) = \cos(t)$

TODO: add plots...

\begin{eqnarray*} a_0 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} \cos(t) \cos(0) ~ dt \\ & = & \frac{1}{\pi} \int^{\pi}_{-\pi} \cos(t) ~ dt \\ & = & 0 \\ \end{eqnarray*}\begin{eqnarray*} a_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} \cos(t) \cos(t) ~ dt \\ & = & \frac{1}{\pi} \times \pi \\ & = & 1 \\ \end{eqnarray*}\begin{eqnarray*} b_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} \cos(t) \sin(t) ~ dt \\ & = & \frac{1}{\pi} \times 0 \\ & = & 0 \\ \end{eqnarray*}\begin{eqnarray*} a_2 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} \cos(t) \cos(2t) ~ dt \\ & = & \frac{1}{\pi} \times 0 \\ & = & 0 \\ \end{eqnarray*}\begin{eqnarray*} b_2 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} \cos(t) \sin(2t) ~ dt \\ & = & \frac{1}{\pi} \times 0 \\ & = & 0 \\ \end{eqnarray*}

De même, les coefficients $a_3$, $b_3$, $a_4$, $b_4$, etc. sont tous nuls.

Vérification

On a bien: \begin{eqnarray*} f(t) & = & \frac{a_0}{2} + \sum^{\infty}_{n=1} (a_n \cos(n t) + b_n \sin(n t)) \\ & = & \frac{0}{2} + 1 \times \cos(t) + 0 \times \sin(t) + 0 \times \cos(2t) + 0 \times \sin(2t) + ... \\ & = & \cos(t) \\ \end{eqnarray*}

Calcule des coefficients de Fourier pour la fonction $f(t) = 3 \cos(t)$

\begin{eqnarray*} a_0 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \cos(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}\begin{eqnarray*} a_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \cos(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}\begin{eqnarray*} b_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \sin(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}

Calcule des coefficients de Fourier pour la fonction $f(t) = \cos(t) + 3$

\begin{eqnarray*} a_0 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \cos(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}\begin{eqnarray*} a_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \cos(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}\begin{eqnarray*} b_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \sin(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}

Calcule des coefficients de Fourier pour la fonction $f(t) = \cos(t + 3)$

TODO: ???

\begin{eqnarray*} a_0 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \cos(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}\begin{eqnarray*} a_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \cos(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}\begin{eqnarray*} b_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} f(t) \sin(n t) ~ dt \\ & = & ... \\ \end{eqnarray*}

Calcule des coefficients de Fourier pour la fonction $f(t) = \cos(t) + 2 \sin(t) - 3 \sin(2t) + 4$

TODO: add plots...


In [ ]:
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.cos(0), (t, -sp.pi, sp.pi))
sp.Eq(integ, integ.doit())
\begin{eqnarray*} a_0 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) \cos(0) ~ dt \\ & = & \frac{1}{\pi} \int^{\pi}_{-\pi} \cos(t) ~ dt \\ & = & \frac{1}{\pi} \times 8\pi\\ & = & 8\\ \end{eqnarray*}

In [ ]:
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.cos(t), (t, -sp.pi, sp.pi))
sp.Eq(integ, integ.doit())
\begin{eqnarray*} a_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) \cos(t) ~ dt \\ & = & \frac{1}{\pi} \times \pi \\ & = & 1 \\ \end{eqnarray*}

In [ ]:
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.sin(t), (t, -sp.pi, sp.pi))
sp.Eq(integ, integ.doit())
\begin{eqnarray*} b_1 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) \sin(t) ~ dt \\ & = & \frac{1}{\pi} \times 2\pi \\ & = & 2 \\ \end{eqnarray*}

In [ ]:
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.cos(2*t), (t, -sp.pi, sp.pi))
sp.Eq(integ, integ.doit())
\begin{eqnarray*} a_2 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) \cos(2t) ~ dt \\ & = & \frac{1}{\pi} \times 0 \\ & = & 0 \\ \end{eqnarray*}

In [ ]:
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.sin(2*t), (t, -sp.pi, sp.pi))
sp.Eq(integ, integ.doit())
\begin{eqnarray*} b_2 & = & \frac{1}{\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) \sin(2t) ~ dt \\ & = & \frac{1}{\pi} \times -3\pi \\ & = & -3 \\ \end{eqnarray*}

Les coefficients $a_3$, $b_3$, $a_4$, $b_4$, etc. sont tous nuls.

Vérification

On a bien: \begin{eqnarray*} f(t) & = & \frac{a_0}{2} + \sum^{\infty}_{n=1} (a_n \cos(n t) + b_n \sin(n t)) \\ & = & \frac{8}{2} + 1 \times \cos(t) + 2 \times \sin(t) + 0 \times \cos(2t) + (-3) \times \sin(2t) + \dots \\ & = & \cos(t) + 2 \sin(t) - 3 \sin(2t) + 4 \\ \end{eqnarray*}

Calcule des coefficients de Fourier pour la fonction $f(t) = \cos(t) + 2 \sin(t) - 3 \sin(2t) + 4$ en utilisant la notation exponentielle

TODO: add plots...

TODO

$$ c_n = \frac{1}{2\pi} \int^{\pi}_{-\pi} f(t) e^{-i n t} dt $$

In [ ]:
sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4

In [ ]:
n = 0
sp.plot(sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4, (t, -sp.pi, sp.pi));

In [ ]:
import mpmath

n = 2
mpmath.cplot(lambda t: mpmath.exp(-mpmath.j * n * t), points=100000)

In [ ]:
n = 0
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.exp(-sp.I * n * t), (t, -sp.pi, sp.pi))
integ_res = integ.doit()
sp.Eq(integ, integ_res)

In [ ]:
sp.simplify(integ_res / sp.pi)
\begin{eqnarray*} c_0 & = & \frac{1}{2\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) e^{0} ~ dt \\ & = & \frac{1}{\pi} \times 8\pi\\ & = & 8\\ \end{eqnarray*}

In [ ]:
n = 1
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.exp(-sp.I * n * t), (t, -sp.pi, sp.pi))
integ_res = integ.doit()
sp.Eq(integ, integ_res)

In [ ]:
sp.simplify(integ_res / sp.pi)
\begin{eqnarray*} c_1 & = & \frac{1}{2\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) e^{-it} ~ dt \\ & = & \frac{1}{\pi} \times \pi - 2i\pi\\ & = & 1 - 2i\\ \end{eqnarray*}

In [ ]:
n = -1
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.exp(-sp.I * n * t), (t, -sp.pi, sp.pi))
integ_res = integ.doit()
sp.Eq(integ, integ_res)

In [ ]:
sp.simplify(integ_res / sp.pi)
\begin{eqnarray*} c_{-1} & = & \frac{1}{2\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) e^{it} ~ dt \\ & = & \frac{1}{\pi} \times \pi + 2i\pi\\ & = & 1 + 2i\\ \end{eqnarray*}

In [ ]:
n = 2
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.exp(-sp.I * n * t), (t, -sp.pi, sp.pi))
integ_res = integ.doit()
sp.Eq(integ, integ_res)

In [ ]:
sp.simplify(integ_res / sp.pi)
\begin{eqnarray*} c_2 & = & \frac{1}{2\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) e^{-2it} ~ dt \\ & = & \frac{1}{\pi} \times 3i\pi\\ & = & 3i\\ \end{eqnarray*}

In [ ]:
n = -2
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.exp(-sp.I * n * t), (t, -sp.pi, sp.pi))
integ_res = integ.doit()
sp.Eq(integ, integ_res)

In [ ]:
sp.simplify(integ_res / sp.pi)
\begin{eqnarray*} c_{-2} & = & \frac{1}{2\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) e^{2it} ~ dt \\ & = & \frac{1}{\pi} \times -3i\pi\\ & = & -3i\\ \end{eqnarray*}

In [ ]:
n = 3
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.exp(-sp.I * n * t), (t, -sp.pi, sp.pi))
integ_res = integ.doit()
sp.Eq(integ, integ_res)

In [ ]:
sp.simplify(integ_res / sp.pi)
\begin{eqnarray*} c_3 & = & \frac{1}{2\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) e^{-3it} ~ dt \\ & = & \frac{1}{\pi} \times 0 \\ & = & 0\\ \end{eqnarray*}

In [ ]:
n = -3
integ = sp.Integral((sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4) * sp.exp(-sp.I * n * t), (t, -sp.pi, sp.pi))
integ_res = integ.doit()
sp.Eq(integ, integ_res)

In [ ]:
sp.simplify(integ_res / sp.pi)
\begin{eqnarray*} c_{-3} & = & \frac{1}{2\pi} \int^{\pi}_{-\pi} (\cos(t) + 2 \sin(t) - 3 \sin(2t) + 4) e^{3it} ~ dt \\ & = & \frac{1}{\pi} \times 0 \\ & = & 0 \\ \end{eqnarray*}

Les coefficients $c_4$, $b_-4$, $a_5$, $b_-5$, etc. sont tous nuls.

Vérification

On a bien: \begin{eqnarray*} f(t) & = & \sum^{\infty}_{n=-\infty} c_n e^{i n t} \\ & = & \underbrace{8 \times e^{0}} + \underbrace{1-2i \times e^{-it}} + \underbrace{1+2i \times e^{it}} + \underbrace{3i \times e^{-2it}} + \underbrace{-3i \times e^{2it}} + \dots \\ & = & TODO !!!!!!! \\ & = & \cos(t) + 2 \sin(t) - 3 \sin(2t) + 4 \\ \end{eqnarray*}


In [ ]:
eq1 = sp.simplify(8 * sp.exp(0) \
                  + 1 - 2 * sp.I * sp.exp(-sp.I * t) \
                  + 1 + 2 * sp.I * sp.exp( sp.I * t) \
                  + 3 * sp.I * sp.exp(-2* sp.I * t) \
                  - 3 * sp.I * sp.exp( 2* sp.I * t) )
eq1

In [ ]:
sp.simplify(eq1 - sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2 * t) + 4)

TODO

L'exemple précédent est foireux... Regarder plutôt les 3 exemples du site suivant pour s'entrainer avec la notation complexe: https://www.math24.net/complex-form-fourier-series/

Voir aussi https://www.youtube.com/watch?v=FIKPlRsADL0

Intérêt de la notation exponentielle: certains signaux tel que celui présenté dans http://www.thefouriertransform.com/series/complexcoefficients.php nécessiterait de calculer une infinité de coefficients avec la notation trigonométrique... Avec la notation exponentielle, deux formules suffisent à donner tous les coefficients $\neq$ 0 !

TODO:

  • step 1: calcul pour retrouver la série réelle ($\mathbb{R}$) à partir des coefs complexes -> prendre un de ces exemples, partir du résultat (les coefs. $c_n$) et calculer la série -> il y a un ex dans https://www.math24.net/complex-form-fourier-series/
  • step 2: calcul des coefs.

TODO: DFT (p.794) et FFT (p.797)