On importe les bibliotheques dont on va se servir

In [1]:
import numpy as np
from scipy.fftpack import dct,idct
import matplotlib.pyplot as plt

On commence par tracer un signal creneau $x$ de $N=1024$ points avec

$x[n]=1$ si $N/4\leq n\leq 3N/4$

$x[n]=0$ sinon.

In [2]:
N=1024
x=np.zeros(N)
x[N//4:3*N//4]=1

On trace le signal.

In [3]:
plt.figure(1)
plt.plot(x)
plt.show()

On calcule la transformee en cosinus du signal

In [4]:
xchap=dct(x,norm='ortho')

On regarde le resultat. La transformee est réelle !

In [5]:
plt.figure(2)
plt.plot(xchap)
plt.show()

Et parce qu'on est habitues, on regarde aussi le module

In [6]:
plt.figure(3)
plt.plot(np.abs(xchap))
plt.show()

Est ce conforme à ce qu'on attend ? Il faut donc calculer $\langle x,C_n\rangle $ avec la formule qui donne les $C_n$ (exercice 5 du TD 2) ! A vous de jouer !

On ne retient maintenant que les 10 premiers vecteurs $C_n$ et on calcule donc $x_K=\sum\limits_{n=0}^K \langle x,C_n\rangle C_n$

In [7]:
K=10
xKchap=np.zeros(xchap.size)
xKchap[0:K-1]=xchap[0:K-1]
xK=idct(xKchap,norm='ortho')

plt.figure(4)
plt.plot(xK)
plt.show()

On calcule $x_K$ pour $K$ de plus en plus grand. Qu'observe-t-on ?

In [8]:
K=50
xKchap=np.zeros(xchap.size)
xKchap[0:K-1]=xchap[0:K-1]
xK=idct(xKchap,norm='ortho')

plt.figure(5)
plt.plot(xK)
plt.show()
In [9]:
K=100
xKchap=np.zeros(xchap.size)
xKchap[0:K-1]=xchap[0:K-1]
xK=idct(xKchap,norm='ortho')

plt.figure(5)
plt.plot(xK)
plt.show()
In [10]:
K=250
xKchap=np.zeros(xchap.size)
xKchap[0:K-1]=xchap[0:K-1]
xK=idct(xKchap,norm='ortho')

plt.figure(5)
plt.plot(xK)
plt.show()

Un zoom autour de la discontinuité

In [11]:
plt.figure(7)
plt.plot(np.arange(N//4-100,N//4+100),xK[N//4-100:N//4+100])
plt.show()
In [12]:
K=700
xKchap=np.zeros(xchap.size)
xKchap[0:K-1]=xchap[0:K-1]
xK=idct(xKchap,norm='ortho')

plt.figure(5)
plt.plot(xK)
plt.show()

Encore un zoom autour de la discontinuité

In [13]:
plt.figure(5)
plt.plot(np.arange(N//4-100,N//4+100),xK[N//4-100:N//4+100])
plt.show()

Les oscillations parasites persistent au voisinage des discontinuités même si on a $K$ de plus en plus grand. C'est ce qu'on appelle le phénomène de Gibbs.