Filtrage Par Transformé de Fourier Discrete - PRIMA
Filtrage Par Transformé de Fourier Discrete - PRIMA
Filtrage Par Transformé de Fourier Discrete - PRIMA
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Traitement du Signal<br />
James L. Crowley<br />
Deuxième Année ENSIMAG première Bimestre 2002/2003<br />
Séance 10 : 7 décembre 2002<br />
<strong>Filtrage</strong> par Transformée <strong>de</strong> <strong>Fourier</strong> Discrète<br />
la Transformée <strong>de</strong> <strong>Fourier</strong> Discrète.........................................2<br />
Formule du Jour : .......................................................................2<br />
Utilisation <strong>de</strong> la TFD pour le convolution..............................3<br />
Convolution Apériodique .........................................................3<br />
<strong>Filtrage</strong> par Produit <strong>de</strong> Transformée <strong>de</strong> <strong>Fourier</strong> Discrète............4<br />
Convolution Circulaire (ou périodique) .....................................5<br />
Convolution par TFD...............................................................6<br />
Usage <strong>de</strong> la TFD pour l'analysis <strong>de</strong> spectre. .........................7<br />
La réponse fréquentielle d'une TFD .........................................7
<strong>Filtrage</strong> par Transformée <strong>de</strong> <strong>Fourier</strong> Discrète Séance 10<br />
la Transformée <strong>de</strong> <strong>Fourier</strong> Discrète<br />
Formule du Jour :<br />
Définition <strong>de</strong> la Transformée <strong>de</strong> <strong>Fourier</strong> Discrète<br />
(TFD ou DFT en Anglais)<br />
Définition : Soit une séquence <strong>de</strong> N échantillons x(n) pour n ∈ [0, N–1]<br />
TFD{x(n)} = X(k) =<br />
N–1<br />
∑ x(n) e<br />
–j2π nk<br />
n=0<br />
N = ∑<br />
n=0<br />
N–1<br />
x(n) WN<br />
nk<br />
La TFD comprend <strong>de</strong>s fréquence <strong>de</strong> k cycles sur N échantillons, k ∈ [– N 2 , N 2 –1]<br />
TFD Inverse :<br />
TFD –1 {X(k)} = x p (n) = 1 N<br />
N/2–1 ∑ X(k) e<br />
j2π nk<br />
k=–N/2<br />
N = 1 N<br />
∑<br />
k=–N/2<br />
N/2–1<br />
X(k) WN<br />
–nk<br />
Intérêt :<br />
Il existe un algorithme qui permettent <strong>de</strong> calculer la transformée d’une séquence <strong>de</strong><br />
N échantillons avec un coût <strong>de</strong> calcul N Log 2 N multiplications.<br />
Ceci permet un filtrage rapi<strong>de</strong> par multiplications dans le domaine <strong>Fourier</strong>.<br />
Si N est 2 p , on peut utiliser l’algorithme rapi<strong>de</strong> (FFT) <strong>de</strong> Cooley - Tukey.
<strong>Filtrage</strong> par Transformée <strong>de</strong> <strong>Fourier</strong> Discrète Séance 10<br />
Utilisation <strong>de</strong> la TFD pour le convolution<br />
Convolution Apériodique<br />
Soit <strong>de</strong>ux séquence échantillonnée numérique <strong>de</strong> durée finie,<br />
x(n) <strong>de</strong> durée N x y(n) <strong>de</strong> durée N y tel que et n ∈ [0, N x -1] et<br />
x(n) pour n ∈ [0, N x -1]<br />
y(n) pour n ∈ [0, N y -1].<br />
Les séquences apériodique sont nuls hors <strong>de</strong> leur intervalle <strong>de</strong> définition.<br />
La convolution apériodique <strong>de</strong> x(n) avec y(n) est une produit<br />
<strong>de</strong> x(n) et y(–n) pour chaque position entre 0 et N x +N y -2.<br />
y(n) = x(n) * y(n) =<br />
N x +N y -2<br />
∑ x(m).y(n–m) =<br />
m=0<br />
N x +N y -2<br />
∑ x(n–m).y(m)<br />
m=0<br />
La taille <strong>de</strong> la résultat est <strong>de</strong> N = N x + N y –1 échantillons.<br />
Le premier valeur non nul est cré pour<br />
n = 0 : x(m) non-nul pour 0 ≤ m ≤ N x -1,<br />
y(n-m) non-nul pour y(n) -N y +1≤ m ≤ 0<br />
n = N x + N y – 1 : x(n) non-nul pour 0 ≤ n ≤ N x -1,<br />
y(n-m) non-nul pour y(n) N x – 1 ≤ m ≤ N x + N y – 1<br />
ie. ( n-N y -1 < m < n)<br />
La convolution coût O( N x N y ) opérations.<br />
x(n)<br />
0 N x -1<br />
*<br />
y(n)<br />
0<br />
N y -1<br />
⇒<br />
z(n)<br />
0<br />
N x + N y –1<br />
Soit M = Min(N x , N y )<br />
Le premier et <strong>de</strong>rnier M echantillons <strong>de</strong> z(n) sont <strong>de</strong>s effets <strong>de</strong> bords.
<strong>Filtrage</strong> par Transformée <strong>de</strong> <strong>Fourier</strong> Discrète Séance 10<br />
<strong>Filtrage</strong> par Produit <strong>de</strong> Transformée <strong>de</strong> <strong>Fourier</strong> Discrète.<br />
Un <strong>de</strong>s intérêt principale <strong>de</strong> la TFD est qu'il permet <strong>de</strong> faire les convolutions <strong>de</strong><br />
<strong>de</strong>ux signaux <strong>de</strong> taille N échantillons avec un coût <strong>de</strong> calcul <strong>de</strong> l'ordre <strong>de</strong> 2N<br />
Log(N) en lieu <strong>de</strong> N 2 . Mais le TFD réalise une convolution périodique.<br />
Ceci peut poser un piège.<br />
Signal Périodique :<br />
Soit l'opérateur MODULO : "mod".<br />
(int rend le partie entier d'une réel).<br />
m mod N = m – N·int{m/N}<br />
exemples 18 mod 10 = 8, 3 mod 2 = 1<br />
Soit x(n) et y(n) non-null pour n ∈ [0,..., N-1]<br />
x p (n) = x(n mod N)<br />
y p (n) = y(n mod N).<br />
Soit x(n) et y(n) non-null pour n ∈ [0, N-1]<br />
z p (n) = ITFD { TFD{x(n)} . TFD {y(n)} }<br />
où z p (n) = z p (n + kN) pour k ∈ [–∞, ∞]<br />
on dit que<br />
TFD{x(n)} . TFD {y(n)} ⇔x ∗ y(n)<br />
∗ est convolution circulaire (où périodique)<br />
z p (n) = x ∗ y(n) = x p * y p(n)<br />
ou x p (n), y p (n), z p (n) sont <strong>de</strong>s signals périodiques en N<br />
Il est possible <strong>de</strong> calculer une convolution apériodique, x * y(n), par une produit <strong>de</strong><br />
TFD. Mais pour ce faire, il faut incruster x(n) et y(n) dans <strong>de</strong>s séquences<br />
périodiques en ajoutant les zéros.
<strong>Filtrage</strong> par Transformée <strong>de</strong> <strong>Fourier</strong> Discrète Séance 10<br />
Convolution Circulaire (ou périodique)<br />
x p (n), périodique avec périod N, x p (n) = x p (n + kN) pour k ∈ [–∞, ∞]<br />
Soit x(n) une pério<strong>de</strong> <strong>de</strong> x p (n)<br />
x(n) =<br />
⎪<br />
⎧ x p (n) pour n ∈ [0...N–1]<br />
⎨<br />
⎩<br />
⎪ 0 sinon<br />
Soit y p (n), périodique avec périod N, y p (n) = y p (n + kN) pour k ∈ [–∞, ∞]<br />
Soit y(n) une pério<strong>de</strong> <strong>de</strong> y p (n)<br />
y(n) =<br />
⎪<br />
⎧ y p (n) pour n ∈ [0...N–1]<br />
⎨<br />
⎩<br />
⎪ 0 sinon<br />
x ∗ y(n)<br />
N–1<br />
= x p ∗ y p (n) = ∑ xp (m).y p (n–m)<br />
m=0<br />
•••<br />
•••<br />
x(m)<br />
y(m)<br />
•••<br />
•••<br />
•••<br />
y(n–m)<br />
•••<br />
n<br />
Im<br />
Re<br />
On peut voir le convolution circulaire comme la rotation d'une séquence autour<br />
d'un autre.
<strong>Filtrage</strong> par Transformée <strong>de</strong> <strong>Fourier</strong> Discrète Séance 10<br />
Convolution par TFD<br />
Convolution Circulaire par TFD.<br />
TFD{x p (n) ∗ y p (n)} = TFD{x p (n)} . TFD {yp (n)} = X p (k). Y p (k).<br />
et par dualité<br />
TFD( x p (n) . y p (n) } = TFD{x p (n)} ∗ TFD {y p (n)} = X p (k) ∗ Y p (k)<br />
Un <strong>de</strong>s intérêt principale <strong>de</strong> la TFD est qu'il permet <strong>de</strong> faire les convolutions <strong>de</strong><br />
<strong>de</strong>ux signaux <strong>de</strong> taille N échantillons avec un coût <strong>de</strong> calcul <strong>de</strong> l'ordre <strong>de</strong> 2N<br />
Log(N) in lieu <strong>de</strong> N 2 . Mais le TFD réalise un convolution périodique.<br />
Ceci peut poser une piège.<br />
Soit x(n) <strong>de</strong> durée n ∈ [0, N x -1] et y(n) <strong>de</strong> durée n ∈ [0, N y -1].<br />
Il est possible <strong>de</strong> calculer un convolution aperiodique, x(n) * y(n), par une produit<br />
<strong>de</strong> TFD. Mais pour ce faire, il faut incruster x(n) et y(n) dans <strong>de</strong>s séquence<br />
périodique x p (n) et y p (n) <strong>de</strong> taille N = N x + N y –1.<br />
Les échantillons <strong>de</strong> x p (n) entre N x –1 et N x + N y –1 sont zéro.<br />
Les échantillons <strong>de</strong> y p (n) entre N y –1 et N x + N y –1 sont zéro.<br />
X p (k) = TFD {x p (n)} coût O(N ln N)<br />
Y p (k) = TFD {y p (n)} coût O(N ln N)<br />
Z p (k) = X p (k) . Y p (k) coût O(N)<br />
z p (n) = TFDI{ Z p (k)} coût O(N ln N)<br />
Cout total 3 O(N ln N) + O(N) = O(N ln N).<br />
Comparé à O(N x N y ) pour x(n) ∗ y(n)<br />
On est gagnant si (N x + N y ) ln (N x + N y ) < N x N y
<strong>Filtrage</strong> par Transformée <strong>de</strong> <strong>Fourier</strong> Discrète Séance 10<br />
Usage <strong>de</strong> la TFD pour l'analysis <strong>de</strong> spectre.<br />
On peut utiliser le TFD pour faire une "spectro-gram". s'un signal <strong>de</strong> durée<br />
illimité.<br />
Technique : On extrait <strong>de</strong> séequence <strong>de</strong> taille N echantillon avec une pas <strong>de</strong> N p<br />
échantillon. Le plus large N, le plus <strong>de</strong> précision dans le spectre, mais le plus <strong>de</strong><br />
calcul et le plus <strong>de</strong> rétard dans le resultat.<br />
Chaque séquence dur <strong>de</strong> n o = k N p à kN p + N-1.<br />
Pou chaque séquence on calcule DFT{s(n + k N p )}<br />
Typiquement on affiche le module || DFT{s(n + k N p )} ||<br />
Mail attention, les reponse pour les fréquences intermédiare n'est pas toujours beau.<br />
La réponse fréquentielle W N<br />
nk<br />
Chaque signal W N<br />
nk est un filtre qui passe certain fréquence d'une séquence x(n).<br />
Quelle sont les réponse <strong>de</strong> ces filtres?<br />
N–1<br />
X(z) = ∑ x(n) z –n et x(n) = 1 N/2–1<br />
n=0<br />
N<br />
∑ X(k) WN<br />
–nk<br />
k=–N/2<br />
donc :<br />
N–1 1<br />
X(z) = ∑ (<br />
N/2–1<br />
n=0<br />
N<br />
∑ X(k) WN<br />
–nk )<br />
k=–N/2<br />
z–n<br />
= 1 N/2–1<br />
N<br />
∑ X(k)<br />
k=–N/2<br />
N–1 ∑ (W<br />
–k<br />
N z<br />
–1 )–n<br />
n=0<br />
= 1 N/2–1 1–z<br />
N<br />
∑<br />
–N<br />
X(k)<br />
k=–N/2 1–W<br />
–k<br />
N z<br />
–1
<strong>Filtrage</strong> par Transformée <strong>de</strong> <strong>Fourier</strong> Discrète Séance 10<br />
= 1–z–N<br />
N<br />
N/2–1<br />
∑<br />
k=–N/2<br />
X(k)<br />
1–W N<br />
–k z<br />
–1<br />
= 1–z–N<br />
N<br />
ou F(ω) = 1 N<br />
N/2–1 2π<br />
∑ X(k) F(ω–<br />
k=–N/2<br />
N k)<br />
sin(ωN/2)<br />
sin(ω/2)<br />
on note que F(ω) = 0 pour k = 1, 2, 3,... N–1 et F(0) = 1.<br />
f<br />
Quand ∆f = 1 N<br />
les nulls <strong>de</strong> chaque W(f – k ∆f) s'aligne.<br />
f<br />
Σ W(f –k∆f)