Transformation de Fourier Guy Gauthier École de technologie supérieure 2 juin 2014
Outline 1 Transformée de Fourier 2 Transformée de Fourier discrète 3 Transformée de Fourier rapide
Signal périodique Un signal périodique est un signal possédant la propriété suivante : x P (t + T P ) = x P (t) (1) La variable T P identifie la période du signal. Cette période est : T P = 1 f o = 2π ω o (2) La variable f o = 1/T P est la fréquence du signal en Hertz. La variable ω o = 2πf o est la pulsation du signal en radians par seconde.
Signal périodique Fourier a établit qu un signal périodique peut s exprimer par la somme de fonctions sinusoïdales et cosinusoïdales. Exemple : x P = 5sin(20πt) 4cos(10πt) + 3
Transformée de Fourier La transformée de Fourier permet de représenter un signal périodique de façon compacte. Cette transformée existe en trois "saveurs" : La forme exponentielle ; La bien connue forme trigonométrique ; La forme trigonométrique combinée. Nous allons présenter ces trois formes.
Transformée de Fourier La forme exponentielle de la série de Fourier est représentée par : x P (t) = C k e jkωot (3) k= Dans cette équation, le coefficient C k est : C k = 1 x P (t)e jkωot dt (4) T P T P...et la période T P du signal x P (t) est : T P = 1 f o = 2π ω o (5)
Exemple Soit le signal périodique suivant : x P (t) = 5 sin(20πt) avec ω o = 20π ce qui donne une période T P de 0.1 seconde. Dans cette équation, les coefficients C k sont : C k = 1 x P (t)e jkωot dt T P T P = 1 0.05 5 sin(20πt)e jk20πt dt 0.1 0.05 C k = 0 pour tous les k, excepté k = ±1 : C 1 = j2.5 et C 1 = j2.5
Transformée de Fourier La forme trigonométrique de la série de Fourier est représentée par : Avec : x P (t) = A 0 + (A k cos(kω o t) + B k sin(kω o t)) (6) k=1 A 0 = 1 x P (t)dt (7) T P T P qui donne la moyenne du signal (niveau DC).
Transformée de Fourier Puis :...et : A k = 2 x P (t) cos(kω o t)dt (8) T P T P B k = 2 x P (t) sin(kω o t)dt (9) T P T P
Transformée de Fourier La forme trigonométrique combinée de la série de Fourier est représentée par : x P (t) = C 0 + 2 C k cos(kω o t + θ k ) (10) k=1 Cette équation provient de la forme exponentielle. On note que C k = C k et e jβ + e jβ = 2 cos(β). L angle de déphasage θ k est : θ k = arctan ( ) Im(Ck ) Re(C k ) (11)
Que faire si le signal est non-périodique? Si le signal est non-périodique, on peut le considérer périodique si on assume que la période T P est infinie. Puisque l on assume que T P, alors : ω o = 2π T P 0 (12) Autrement dit, ω o devient très petit. On le pose donc égal à dω. En conséquence, on définit : kω 0 ω et C k C(ω).
Que faire si le signal est non-périodique? Les sommes impliquant C k deviennent des intégrales : C(ω) = dω x(t)e jωt dt (13) 2π Pour rendre l utilisation de l équation précédente plus facile, on la modifie pour obtenir cette définition de la transformée de Fourier X(ω) de x(t) : X(ω) = C(ω) 2π dω = La transformée inverse de Fourier est : x(t) = 1 2π x(t)e jωt dt (14) X(ω)e jωt dω (15)
Exemple Soit la fonction suivante : pour t >= 0 et 0 ailleurs. x(t) = e 5t La transformée de Fourier de ce signal est : X(ω) = x(t)e jωt dt = 0 = j ω j5 e 5t e jωt dt
Problème Les équations données concernent des fonctions dans le domaine continu. Un microcontrôleur nécessite des signaux discrets pour pouvoir fonctionner. Les signaux sont échantillonnés à une cadence T S. Il faut donc introduire une discrétisation dans ces fonctions.
Outline 1 Transformée de Fourier 2 Transformée de Fourier discrète 3 Transformée de Fourier rapide
Discrétiser la transformée de Fourier En discrétisant le signal x(t) avec une certaine période d échantillonnage T S, on transforme : en : X(ω) = X(Ω) = n= x(t)e jωt dt x[n]e jnω (16) Avec : t nt S, x(t) x[n] = x(nt S ), Ω = ωt S et l intégrale devient une somme. Bien que le signal x(t) a été discrétisé pour obtenir x[n], la fonction X(Ω) (le spectre en fréquence) reste une fonction continue...
Discrétiser la transformée inverse de Fourier De la même façon que précédemment, on transforme : en : x(t) = 1 X(ω)e jωt dω 2π x[n] = 1 π X(Ω)e jωt Ω (17) 2π π Le spectre en fréquence X(Ω) se répétant à tous les 2π, cela fait en sorte que les bornes de l intégrale sont changées en introduisant X(Ω). Puisque X(Ω) est continu, on conserve l intégrale.
Transformée discrète en temps de Fourier On peut voir surgir deux problèmes. Le premier, c est qu il faut un nombre infini d échantillons x[n], car les bornes de la somme sont et. Le second, c est que la transformée de Fourier X(Ω) est une fonction continue. Il devrait donc y avoir une discrétisation du coté fréquentiel aussi.
Transformée discrète en temps de Fourier Solutions à appliquer : Le premier problème est solutionné en limitant le nombre d échantillons. Nous représenterons ce nombre avec la variable N. Le second, c est d échantillonner le spectre en fréquence avec N points. Pour couvrir l espace fréquentiel entre π et π, l intervalle entre deux points du spectre en fréquence sera Ω = 2π/N. Note : la valeur de N est fixée à une valeur qui est une puissance de 2 : 2, 4, 8, 16, 32, 64, 128,...
Transformée de Fourier discrète Avec ces solutions, nous en arrivons à définir la transformée de Fourier discrète comme suit : X N [k] = N 1 n=0 x[n]w kn N (18)... et la transformée inverse de Fourier discrète est : x[n] = 1 N Le "Twiddle factor" W N est : N 1 k=0 X N [k]w kn N (19) W N = e j2π/n (20)
Le "Twiddle factor" W N Propriétés intéressantes de W N : Symétrie : W k+n/2 N = W k N (21) W k+n N = W k N (22) W 2k N = W k N/2 (23)
DFT à 2 points (N = 2) Soit un signal échantillonné en deux points (x[0] = x 0 et x[1] = x 1 ). La transformée de Fourier discrète est : 2 1 X 2 [k] = n=0 x[n]w kn 2 avec W 2 : W 2 = e j2π/2 = e jπ Donc : 1 X 2 [k] = x[n]e jπkn = x 0 e j0 + x 1 e jkπ n=0
DFT à 2 points (N = 2)... que l on simplifie à : X 2 [k] = x 0 + x 1 ( 1) k La composante "DC" (k = 0) est : X 2 [0] = x 0 + x 1 ( 1) 0 = x 0 + x 1 ; La composante fréquentielle du spectre (k = 1) est : X 2 [1] = x 0 + x 1 ( 1) 1 = x 0 x 1 ;
DFT à 2 points (N = 2) Supposons que x 0 = 5 et x 1 = 3, alors : et : X 2 [0] = x 0 + x 1 = 5 3 = 2 X 2 [1] = x 0 x 1 = 5 ( 3) = 8 Du point de vue de cette DFT à 2 points, le signal x[n] est : 5, -3, 5, -3, 5, -3, 5,... Donc un cosinusoïde de 8 unités pointe à pointe et décalé d une unité vers le haut.
DFT à 2 points Un papillon! Voici une représentation schématique de la DFT à 2 points : Qui ressemble à :
DFT à 2 points Effort de calcul requis Nombre de calculs requis : 2 additions réelles.
DFT à 4 points (N = 4) Soit un signal échantillonné en deux points (x[0] = x 0, x[1] = x 1, x[2] = x 2 et x[3] = x 3 ). La transformée de Fourier discrète est : avec W 4 : Donc : 4 1 X 4 [k] = n=0 x[n]w kn 4 W 4 = e j2π/4 = e jπ/2 3 X 4 [k] = x[n]e jπkn/2 n=0
DFT à 4 points (N = 4) En développant la somme : X 4 [k] = x 0 e j0 + x 1 e jπk/2 + x 2 e jπk + x 3 e j3πk/2 Et en développant les valeurs des exponentielles : X 4 [k] = x 0 + x 1 ( j) k + x 2 ( 1) k + x 3 j k
DFT à 4 points (N = 4) Soit x 0 = 0, x 1 = 1, x 2 = 0 et x 3 = 1. Alors : X 4 [0] = 0 + 1 ( j) 0 + 0 ( 1) 0 + 1 j 0 = 0 X 4 [1] = 0 + 1 ( j) 1 + 0( 1) 1 + 1 j 1 = 2j X 4 [2] = 0 + 1 ( j) 2 + 0( 1) 2 + 1 j 2 = 0 1 + 0 + 1 = 0 X 4 [3] = 0 + 1 ( j) 3 + 0( 1) 3 + 1 j 3 = 2j
DFT à 4 points Effort de calcul requis Nombre de calculs requis : 4 fois 3 (=12) additions complexes et 4 fois 4 (=16) multiplications complexes.
DFT à N points Effort de calcul requis Nombre de calculs requis : N fois N 1 (N(N 1)) additions complexes et N fois N (= N 2 ) multiplications complexes. Donc pour une DFT à 1024 points, il faut faire 1047552 additions et 1048576 multiplications complexes. Le temps de calcul de la DFT peut devenir relativement long pour N élevé. Solution : La FFT ou transformée de Fourier rapide.
Outline 1 Transformée de Fourier 2 Transformée de Fourier discrète 3 Transformée de Fourier rapide
Introduction Pour passer de la DFT à la FFT, on regroupe les données dans les sommes pour essayer de voir si on peut réussir à augmenter la vitesse de calcul en réduisant le nombre d opérations. On peut passer par la "decimation in frequency" (décimation en fréquence) ou la "decimation in time" (décimation en temps).
Decimation in frequency Commençons avec une DFT à 4 points. Ainsi : N 1 3 X[k] = x[n]wn kn = n=0 n=0 Que l on peut aussi écrire au complet : x[n]w kn 4 (24) X[k] = x[0] + x[1]w k 4 + x[2]w 2k 4 + x[3]w 3k 4 (25) Si on coupe la somme en deux : X[k] = x[0]+x[4/2 1]W k(4/2 1) 4 +x[4/2]w k(4/2) 4 +x[4 1]W k(4 1) 4 (26) Que l on ramène sous forme de sommes : X[k] = 4/2 1 n=0 x[n]w kn 4 + 4 1 n=4/2 x[n]w kn 4 (27)
Decimation in frequency Modifions le second terme de la somme : X[k] = Or : Ainsi : Puis : X[k] = 4/2 1 n=0 4/2 1 x[n]w4 kn + W k(4/2) 4 n=0 x[n + 4/2]W kn 4 (28) W N/2 N = e j2π(n/2)/n = e jπ = 1 (29) 4/2 1 n=0 X[k] = 4/2 1 x[n]w4 kn + ( 1) k 4/2 1 n=0 n=0 x[n + 4/2]W kn 4 (30) ( x[n] + ( 1) k x[n + 4/2] ) W kn 4 (31)
Decimation in frequency Les termes pairs sont définis avec k = 2m : X[2m] = 4/2 1 n=0 (x[n] + x[n + 4/2]) W 2mn 4 (32) Les termes impairs sont définis avec k = 2m + 1 : X[2m + 1] = en définissant : 4/2 1 n=0 (x[n] x[n + 4/2]) W 2mn 4 W n 4 (33) a[n] = x[n] + x[n + 4/2] (34) b[n] = x[n] x[n + 4/2] (35)
Decimation in frequency Ce qui nous permet d écrire : et : Pour N = 4 : a[0] = x[0] + x[2], a[1] = x[1] + x[3], b[0] = x[0] x[2] et b[1] = x[1] x[3]. X[2m] = X[2m + 1] = 4/2 1 n=0 4/2 1 n=0 a[n]w mn 4/2 (36) b[n]w mn 4/2 W n 4 (37)
Decimation in frequency Ainsi : X[0] = a[0] + a[1], X[2] = a[0] a[1]. X[1] = b[0]w4 0 + b[1]w 4 1 X[3] = b[0]w4 0 b[1]w 4 1 = b[0] jb[1], = b[0] + jb[1].
Decimation in frequency Généralisons. Ainsi : X[k] = N 1 n=0 Si on coupe la somme en deux à N/2 : X[k] = N/2 1 n=0 x[n]w kn N + x[n]w kn N (38) N 1 n=n/2 x[n]w kn N (39) Avec un changement de variable dans la seconde somme : X[k] = N/2 1 n=0 N/2 1 x[n]wn kn + n=0 x[n + N/2]W k(n+n/2) N (40)
Decimation in frequency Que l on réécrit comme suit : X[k] = N/2 1 n=0 X[k] = x[n]w kn N N/2 1 n=0 + ( 1) k N/2 1 n=0 x[n + N/2]W kn N (41) ( x[n] + ( 1) k x[n + N/2] ) W kn N (42)
Decimation in frequency En posant k = 2m : X[2m] = N/2 1 n=0 En posant k = 2m + 1 : X[2m + 1] = N/2 1 n=0 (x[n] + x[n + N/2]) W 2mn N (43) (x[n] x[n + N/2]) W 2mn N W n N (44)
Decimation in frequency Généralisant a[n] et b[n] : Pour les valeurs paires : a[n] = x[n] + x[n + N/2] (45) b[n] = x[n] x[n + N/2] (46) X[2m] = Pour les valeurs impaires : X[2m + 1] = N/2 1 n=0 N/2 1 n=0 a[n]w 2mn N (47) b[n]w 2mn N W n N (48)
Tuons une mouche avec une masse! Cas N = 2 : et X[2m] = a[0]w 2m 0 2 = a[0] (49) X[2m + 1] = b[0]w 2m 0 2 W 0 2 = b[0] (50) Avec a[0] = x[0] + x[1] et b[0] = x[0] x[1]. On obtient donc (m = 0) : X(0) = a(0) X(1) = b(0)
Tuons une plus grosse mouche avec une masse! Cas N = 4 : et X[2m] =a[0]w4 2m 0 + a[1]w4 2m =a[0] + a[1]w4 2m X[2m + 1] =b[0]w 2m 0 4 W 0 4 + b[1]w 2m 4 W 1 4 =b[0]w 0 4 + b[1]w 2m 4 W 1 4 Avec a[0] = x[0] + x[2], a[1] = x[1] + x[3], b[0] = x[0] x[2] et b[1] = x[1] x[3].
Tuons une plus grosse mouche avec une masse! Chaque somme peut être vue comme un DFT ayant 2 points. La première est : et la seconde est : X[2m] = a[0] + a[1]w m 2 X[2m + 1] = b[0]w 0 4 + b[1]w m 2 W 1 4 Donc : et : X[0] = a[0] + a[1] X[2] = a[0] a[1] X[1] = b[0]w 0 4 + b[1]w 1 4 X[3] = b[0]w 0 4 b[1]w 1 4
Tuons une plus grosse mouche avec une masse! Le schéma ressemble à : Cette FFT implique 4 multiplications et 8 additions de nombres complexes. Avec la DFT, cela aurait exigé 16 multiplications et 12 additions de nombres complexes.
Grossissons la mouche! Cas N = 8 : X[2m] =a[0]w8 2m 0 + a[1]w8 2m + a[2]w8 2m 2 + a[3]w8 2m 3 =a[0] + a[1]w8 2m + a[2]w8 4m + a[3]w8 6m et X[2m + 1] =b[0]w8 2m 0 W8 0 + b[1]w8 2m W8 1 + b[2]w8 2m 2 W8 2 + b[3] =b[0]w8 0 + b[1]w8 2m W8 1 + b[2]w8 4m W8 2 + b[3]w8 6m W8 3 Avec a[0] = x[0] + x[4], a[1] = x[1] + x[5], a[2] = x[2] + x[6], a[3] = x[3] + x[7], b[0] = x[0] x[4], b[1] = x[1] x[5], b[2] = x[2] x[6] et b[3] = x[3] x[7].
Grossissons la mouche! Cas N = 8 : X[2m] = a[0] + a[1]w m 4 + a[2]w4 2m + a[3]w4 3m et X[2m + 1] = b[0] + b[1]w m 4 W 1 8 + b[2]w 2m 4 W 2 8 + b[3]w 3m 4 W 3 8 Suite : X[0] = a[0] + a[1] + a[2] + a[3] X[2] = a[0] ja[1] a[2] + ja[3] =(a[0] a[2]) j(a[1] a[3])
Grossissons la mouche! Suite : X[0] = (a[0] + a[2]) + (a[1] + a[3]) X[2] = (a[0] a[2]) j(a[1] a[3]) X[4] = (a[0] + a[2]) (a[1] + a[3]) X[6] = (a[0] a[2]) + j(a[1] a[3]) X[1] = (b[0]w8 0 + b[2]w8 2 ) + (b[1]w8 1 + b[3]w8 3 ) X[3] = (b[0]w8 0 b[2]w8 2 ) j(b[1]w8 1 b[3]w8 3 ) X[5] = (b[0]w8 0 + b[2]w8 2 ) (b[1]w8 1 + b[3]w8 3 ) X[7] = (b[0]w8 0 b[2]w8 2 ) + j(b[1]w8 1 b[3]w8 3 )
Grossissons la mouche! Suite : X[0] = (a[0] + a[2]) + (a[1] + a[3]) X[2] = (a[0] a[2])w 0 8 + (a[1] a[3])w 2 8 X[4] = (a[0] + a[2]) (a[1] + a[3]) X[6] = (a[0] a[2])w 0 8 (a[1] a[3])w 2 8 X[1] = (b[0]w 0 8 + b[2]w 2 8 ) + (b[1]w 1 8 + b[3]w 3 8 ) X[3] = (b[0]w 0 8 b[2]w 2 8 )W 0 8 + (b[1]w 1 8 b[3]w 3 8 )W 2 8 X[5] = (b[0]w 0 8 + b[2]w 2 8 ) (b[1]w 1 8 + b[3]w 3 8 ) X[7] = (b[0]w 0 8 b[2]w 2 8 )W 0 8 (b[1]w 1 8 b[3]w 3 8 )W 2 8
Le schéma Remarquez l ordre des composantes fréquentielles.
Effort de calcul En termes de multiplications complexes, on en a que 8 au lieu de 64. Une DFT à N points exige N 2 multiplications complexes. Une FFT à N points exige N 2 log 2(N) multiplications complexes. Ainsi, une DFT à 1024 points exige 1048576 multiplications complexes. La FFT correspondante en requiert que 5120, donc 204.8 fois moins que la DFT!
Decimation in time Repartons de la somme : X[k] = N 1 n=0 x[n]w kn N Si on coupe la somme en deux, on considérant d une part les données paires x[2m] et d autre part les données impaires x[2m + 1] : X[k] = N/2 1 m=0 En simplifiant : X[k] = N/2 1 m=0 N/2 1 x[2m]wn 2km + m=0 N/2 1 x[2m]wn/2 km + W N k x[2m + 1]W k(2m+1) N (51) m=0 x[2m + 1]W km N/2 (52)
Decimation in time Donc on peut écrire que : Avec : et : X[k] = X pair [k] + W k NX impair [k] X pair [k] = X impair [k] = N/2 1 m=0 N/2 1 m=0 x[2m]w km N/2 (53) x[2m + 1]W km N/2 (54) On remarquera que X pair [k] et X impair [k] sont des DFT avec N/2 points. On peut passer ces DFT dans le même processus pour les diviser à nouveau en 2.
Retour sur la "grosse mouche"... que l on écrasera avec une masse différente. DFT 4 points : X[k] = X pair [k] + W k 4 X impair [k] La partie avec les données paires donne : Ce qui mène à : X pair [k] = 1 m=0 x[2m]w km 2 X pair [0] = x[0] + x[2] X pair [1] = x[0] + x[2]w 1 2 = x[0] x[2]
Retour sur la "grosse mouche" De plus : X pair [2] = x[0] + x[2]w 2 2 = x[0] + x[2] et est identique à X pair [0]. X pair [3] = x[0] + x[2]w 3 2 = x[0] x[2] et est identique à X pair [1]. En raison des propriétés du "Twiddle factor", X pair [k] = X pair [k + N/2]. X pair [0] et X pair [1] résultent d une DFT à 2 points.
Retour sur la "grosse mouche" La partie avec les données impaires donne : Ce qui mène à : X impair [k] = et c est égal à X impair [2]. 1 m=0 x[2m + 1]W km 2 X impair [0] = x[1] + x[3] X impair [1] = x[1] + x[3]w 1 2 = x[1] x[3] et c est égal à X impair [3]. C est une seconde DFT à 2 points.
Fin de la FFT à 4 points Finalement : X[0] =X pair [0] + X impair [0]W 0 4 =(x[0] + x[2]) + (x[1] + x[3])w 0 4 X[1] =X pair [1] + X impair [1]W 1 4 =(x[0] x[2]) + (x[1] x[3])w 1 4 X[2] =X pair [2] + X impair [2]W 2 4 =(x[0] + x[2]) (x[1] + x[3])w 0 4 X[3] =X pair [3] + X impair [3]W 3 4 =(x[0] x[2]) (x[1] x[3])w 1 4
Schéma FFT à 4 points avec Decimation in time
FFT à 8 points avec Decimation in time On débute avec cette équation : X[k] = X pair [k] + W k 8 X impair [k] La partie avec les données paires donne : Ce qui mène à : X pair [k] = 3 m=0 x[2m]w km 4 X pair [0] =x[0] + x[2] + x[4] + x[6] =(x[0] + x[4]) + (x[2] + x[6]) X pair [1] =x[0] + x[2]w 1 4 + x[4]w 2 4 + x[6]w 3 4 =(x[0] x[4]) + (x[2] x[6])w 1 4
FFT à 8 points avec Decimation in time...ainsi que : X pair [2] =x[0] + x[2]w 2 4 + x[4]w 4 4 + x[6]w 6 4 =(x[0] + x[4]) (x[2] + x[6]) X pair [3] =x[0] + x[2]w 3 4 + x[4]w 6 4 + x[6]w 9 4 =(x[0] x[4]) + (x[2] x[6])w 1 4
FFT à 8 points avec Decimation in time La partie avec les données impaires donne : Ce qui mène à : X impair [k] = 3 m=0 x[2m + 1]W km 4 X impair [0] =x[1] + x[3] + x[5] + x[7] =(x[1] + x[5]) + (x[3] + x[7]) X impair [1] =x[1] + x[3]w 1 4 + x[5]w 2 4 + x[7]w 3 4 =(x[1] x[5]) + (x[3] x[7])w 1 4
FFT à 8 points avec Decimation in time...ainsi que : X impair [2] =x[1] + x[3]w 2 4 + x[5]w 4 4 + x[7]w 6 4 =(x[1] + x[5]) (x[3] + x[7]) X impair [3] =x[1] + x[3]w 3 4 + x[5]w 6 4 + x[7]w 9 4 =(x[1] x[5]) + (x[3] x[7])w 1 4
Schéma FFT à 8 points avec Decimation in time
Adressage en bits inversé En pratique, on incrémente dans le sens binaire normal : Binaire normal Binaire inversé 000 000 001 100 010 010 011 110 100 001 101 101 110 011 111 111 En adressage à bit inversé, on inverse l ordre des bits (voir colonne en rouge). Cette représentation correspond à l ordre d apparition des données temporelle de la figure précédente.
Sur MATLAB Sur MATLAB, on utilise la fonction "fft". Exemple : t = (0:1/16:15/16); x = [0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1]; X = fft(x); dwn = 2*pi/16; % Incrément pulsation rad/s Wn = (0:dWn:15*dWn); % Pulsation normalisée rad/s plot(wn,x)