Tp traitement du signal fft matlab -Traitement de signal -

Tp traitement du signal fft matlab -Traitement de signal  -

Tp traitement du signal fft matlab -Traitement de signal -

Télécharger PDF

Traitement du Signal : La FFT dans Matlab

Le traitement du signal est un domaine fondamental en ingénierie. Lors d'un Travaux Pratiques (TP) sur le filtrage analogique, des résultats inattendus ont semé la confusion : comment le filtrage d'un signal réel, x(t), par un filtre réel, h(t), a-t-il pu produire un signal de sortie complexe, y(t) = h(t) ∗ x(t) ? Ce phénomène est en contradiction avec le principe de la convolution réelle, qui stipule qu'un signal réel filtré par un filtre réel doit rester réel.

Selon le théorème de Plancherel, qui établit une dualité entre la convolution temporelle et la multiplication fréquentielle, le signal de sortie y(t) devait être réel. Par exemple, un filtre passe-bas réel appliqué à une somme de sinus réels devrait parfaitement restituer les sinus réels de basses fréquences. Pourtant, les observations du TP montraient un y(t) complexe.

Bien que la visualisation du module de y(t) puisse parfois masquer ce problème en montrant l'atténuation effective des hautes fréquences, la persistance d'une partie imaginaire reste un mystère. La cause de cette incohérence réside souvent dans une mauvaise utilisation de la fonction `fftshift` de Matlab.

L’estimation du spectre avec l’algorithme de la Transformée de Fourier Rapide (FFT)

Le mystère de fftshift

Imaginons un signal x(t) échantillonné sur un intervalle de temps t = [−10s, 10s] avec un pas d’échantillonnage Te = 0.01s, ce qui correspond à n échantillons. L'objectif est d'estimer son spectre X(f).

L'algorithme de la FFT (Fast Fourier Transform) de Matlab appliqué à x(t) fournit directement un échantillonnage du spectre X(f) avec un pas de fréquence Fen = 1 / (Te * n). Les n puissances spectrales estimées par la FFT correspondent aux fréquences f = [0, Fe], où Fe est la fréquence d'échantillonnage (Fe = 1/Te).

Cette estimation de puissance spectrale par FFT est calculée par périodisation du signal x(t), ce qui entraîne un spectre également périodique. Cela signifie que les puissances spectrales estimées entre Fe/2 et Fe sont équivalentes aux fréquences négatives entre −Fe/2 et 0 Hz. La représentation du spectre X(f) sur l’intervalle de fréquence f = [0, Fe] est mathématiquement correcte, mais sa lecture sur un graphique est souvent peu intuitive.

Matlab et la fonction fftshift

Pour faciliter l'interprétation visuelle du spectre, Matlab a créé la fonction `fftshift`. Cette fonction réorganise le vecteur des puissances spectrales pour les afficher sur un échantillonnage plus symétrique et lisible, tel que [−Fe/2 + Fen, Fe/2]. Il est crucial de comprendre que `fftshift` est principalement un outil de visualisation qui n'altère pas les propriétés fondamentales du spectre, mais le réarrange pour une meilleure compréhension graphique.

Application d’un filtre dans l’espace des fréquences

Il est possible de travailler dans l'espace des fréquences [−Fe/2 + Fen, Fe/2] pour créer des filtres H(f) dont la définition est purement fréquentielle. Cependant, la définition d'un filtre passe-bas n'est pas identique selon que l'on travaille sur [0, Fe] ou sur [−Fe/2 + Fen, Fe/2].

  • Si l'on choisit de travailler sur l'intervalle [−Fe/2 + Fen, Fe/2], on peut créer un filtre passe-bas idéal autour de la fréquence nulle : H(f) = 1 si f ∈ [−Fc/2, Fc/2], et 0 sinon. Ici, Fc représente la fréquence de coupure du filtre.

  • Si l'on opte pour l'intervalle [0, Fe], le filtre est strictement non nul pour les fréquences inférieures à Fc/2 et pour les fréquences supérieures à Fe − Fc/2. Cette particularité est due à la périodicité du spectre.

Quelle que soit la représentation fréquentielle, le filtrage idéal pour couper les hautes fréquences s'applique toujours comme Y(f) = H(f) × X(f). Selon le théorème de Plancherel, nous obtenons ainsi une estimation du spectre Y(f) du signal y(t) en sortie du filtre h(t). L'étape suivante consiste à repasser du domaine fréquentiel au domaine temporel pour visualiser y(t).

Retour dans le domaine temporel

Jusqu'à présent, toutes les opérations semblent logiques, et les spectres filtrés se conforment à nos attentes. Cependant, le passage du domaine fréquentiel au domaine temporel demande une vigilance particulière, car la méthode diffère selon la représentation fréquentielle choisie ([−Fe/2 + Fen, Fe/2] ou [0, Fe]).

  • Si la représentation [0, Fe] a été choisie, la fonction `iFFT` (Inverse Fast Fourier Transform) interprète directement les puissances spectrales de Y(f) et fournit une estimation correcte de y(t).

  • Si, en revanche, la représentation symétrique [−Fe/2 + Fen, Fe/2] a été adoptée, les puissances spectrales de Y(f) sont "décalées". Il est alors impératif d'utiliser la fonction `ifftshift` pour replacer correctement les éléments de Y(f) dans l'ordre attendu par `iFFT`, correspondant à l'intervalle de fréquences [0, Fe]. Il est essentiel de noter que `ifftshift` et `fftshift` ne sont pas équivalentes ; elles sont complémentaires, tout comme `FFT` et `iFFT`. L'inversion des éléments d'un vecteur de puissances spectrales ne se fera pas de la même façon selon que le nombre d'échantillons n est pair ou impair, ce qui souligne l'importance de `ifftshift` pour inverser précisément l'opération de `fftshift`.

Dans le cas où la représentation [−Fe/2 + Fen, Fe/2] a été choisie, voici la séquence de commandes Matlab pour obtenir un signal y(t) correct :

X = fftshift(fft(x));

n = length(x);

Te = 0.01; % Exemple de pas d'échantillonnage

Fe = 1/Te; % Fréquence d'échantillonnage

Fen = Fe/n; % Résolution fréquentielle

f = (-n/2 : n/2-1) * Fen; % Vecteur de fréquences centré pour X

Fc = 20; % Exemple de fréquence de coupure du filtre

H = abs(f) < Fc/2;

Y = H.*X;

y = ifft(ifftshift(Y));

Si ces commandes Matlab sont exécutées correctement, le signal y(t) obtenu aura une partie réelle qui reproduit fidèlement la composante basse fréquence de x(t) (la puissance du sinus de basse fréquence est conservée), et une partie imaginaire négligeable (généralement inférieure à ±10-15). Il n'est alors plus nécessaire d'observer le module de y(t) pour constater la composante de basse fréquence.

Que s’est-il passé pendant le TP ?

L'erreur la plus fréquente survenue pendant le TP fut de confondre les deux types de représentations fréquentielles ([0, Fe] et [−Fe/2 + Fen, Fe/2]). En conséquence, la fonction `ifftshift` a été omise lors du retour de Y(f) à y(t). Sans cette étape cruciale, `iFFT` a mal interprété les fréquences comprises dans Y(f), générant ainsi un signal temporel y(t) incohérent, souvent caractérisé par deux pics de fréquences moyennes erronés (aux environs de Fe/2 − Fc/2 et Fe/2 + Fc/2), rendant le résultat complexe et non conforme aux attentes d'un filtre réel.

Questions Fréquentes (FAQ)

Pourquoi un filtrage d'un signal réel peut-il donner un signal complexe en sortie ?

Bien que le filtrage d'un signal réel par un filtre réel doive logiquement produire un signal de sortie réel, une mauvaise gestion de la représentation spectrale, notamment l'oubli d'utiliser `ifftshift` après avoir utilisé `fftshift` pour la visualisation du spectre, peut conduire l'algorithme `iFFT` à interpréter les fréquences de manière incorrecte, résultant en un signal de sortie complexe.

Quel est le rôle de la fonction `fftshift` dans Matlab ?

`fftshift` est une fonction Matlab qui réorganise un vecteur de fréquences ou de puissances spectrales. La FFT calcule le spectre sur l'intervalle [0, Fe]. `fftshift` déplace les composantes de fréquence de sorte que la fréquence nulle (DC) soit au centre de l'intervalle, créant une représentation plus intuitive sur [−Fe/2 + Fen, Fe/2]. Elle est principalement utilisée pour la visualisation et l'analyse plus aisée des spectres.

Pourquoi est-il crucial d'utiliser `ifftshift` après `fftshift` lors du retour au domaine temporel ?

L'utilisation de `fftshift` modifie l'ordre des échantillons dans le domaine fréquentiel pour la visualisation. Pour que l'`iFFT` (Transformée de Fourier Inverse) puisse reconstruire correctement le signal temporel original, les échantillons du spectre doivent être remis dans leur ordre initial, tel que produit par une FFT standard (c'est-à-dire avec la fréquence nulle au début). `ifftshift` est la fonction complémentaire de `fftshift` qui réalise cette inversion d'ordre, garantissant que l'`iFFT` interprète correctement le spectre et produit un signal temporel réel et cohérent.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne