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)
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$.
...
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...
TODO: rendre plus claire la définition suivante...
rem: ne fait qu'écrire autrement les coefs (passage d'une notation carthésienne à une notation polaire)...
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 ?
TODO: rendre plus claire la définition suivante...
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
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"
TODO...
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*}
De même, les coefficients $a_3$, $b_3$, $a_4$, $b_4$, etc. sont tous nuls.
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*}
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.
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*}
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*}
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())
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())
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())
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())
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())
Les coefficients $a_3$, $b_3$, $a_4$, $b_4$, etc. sont tous nuls.
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)
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)
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)
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)
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)
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)
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)
Les coefficients $c_4$, $b_-4$, $a_5$, $b_-5$, etc. sont tous nuls.
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:
TODO: DFT (p.794) et FFT (p.797)