%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")

"""
Explanation: Transformée de Fourier
End of explanation
"""


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())

"""
Explanation: TODO:
* https://cdn.uclouvain.be/public/Exports%20reddot/fsa/documents/Travail_Complet.pdf <- semble très intéressant !
* Exemples en notation exponentielle
* Cas d'un signal 2D
* Discrete Fourier Transform + algo pour implémentation concrète (du calcul des coefs) en Python
* FFT
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...
End of explanation
"""


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())

"""
Explanation: \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}
End of explanation
"""


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())

"""
Explanation: \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}
End of explanation
"""


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())

"""
Explanation: \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}
End of explanation
"""


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())

"""
Explanation: \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}
End of explanation
"""


sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2*t) + 4

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

import mpmath

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

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)

sp.simplify(integ_res / sp.pi)

"""
Explanation: \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
$$
End of explanation
"""


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)

sp.simplify(integ_res / sp.pi)

"""
Explanation: \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}
End of explanation
"""


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)

sp.simplify(integ_res / sp.pi)

"""
Explanation: \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}
End of explanation
"""


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)

sp.simplify(integ_res / sp.pi)

"""
Explanation: \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}
End of explanation
"""


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)

sp.simplify(integ_res / sp.pi)

"""
Explanation: \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}
End of explanation
"""


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)

sp.simplify(integ_res / sp.pi)

"""
Explanation: \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}
End of explanation
"""


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)

sp.simplify(integ_res / sp.pi)

"""
Explanation: \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}
End of explanation
"""


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

sp.simplify(eq1 - sp.cos(t) + 2 * sp.sin(t) - 3 * sp.sin(2 * t) + 4)

"""
Explanation: \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}
End of explanation
"""


