Transformée de Fourier rapide inverse MATLAB

Ammar Ali 18 aout 2022
Transformée de Fourier rapide inverse MATLAB

Ce tutoriel discutera de la recherche de la transformée de Fourier rapide inverse à l’aide de la fonction ifft() de MATLAB.

Transformée de Fourier rapide inverse MATLAB

Nous pouvons utiliser la fonction ifft() de Matlab pour trouver la transformée de Fourier rapide inverse d’un vecteur, d’une matrice ou d’un tableau multidimensionnel. La fonction ifft() a quatre syntaxes présentées ci-dessous.

Out = ifft(X)
Out = ifft(X,n)
Out = ifft(X,n,dim)
Out = ifft(___,symflag)

La première syntaxe renverra la transformée de Fourier rapide inverse de l’entrée X en utilisant l’algorithme de transformée de Fourier rapide. La fonction ifft() vérifie les vecteurs symétriques conjugués présents dans l’entrée X ; si les vecteurs sont symétriques conjugués, la sortie sera rapide et réelle.

Un vecteur est symétrique conjugué si le produit de sa matrice d’échange anti-diagonale et de son conjugué complexe est égal au vecteur d’origine. Dans le cas d’un signal dans le domaine temporel, sa transformée de Fourier rapide contient un demi-spectre de fréquences positives et un demi-spectre de fréquences négatives.

L’entrée X peut être un vecteur, une matrice ou un tableau multidimensionnel. La première syntaxe renverra un vecteur contenant la transformée de Fourier rapide inverse d’un vecteur dans le cas où l’entrée est un vecteur, et le vecteur de sortie aura la même longueur que le vecteur d’entrée.

Si l’entrée est une matrice, la syntaxe renverra une matrice contenant la transformée de Fourier rapide inverse des colonnes de la matrice, et la taille de la matrice de sortie sera la matrice d’entrée. Si l’entrée est un tableau multidimensionnel, la fonction renverra la transformée de Fourier rapide inverse des valeurs le long de la première dimension, en les traitant comme des vecteurs.

La seconde syntaxe permet d’ajouter des points sur lesquels on veut trouver la transformée de Fourier rapide inverse comme second argument n. Si nous n’ajoutons pas de points, la fonction utilisera les indices d’éléments comme points.

Si l’argument n est zéro, la sortie de la fonction sera une matrice vide. Si la longueur de l’argument n est inférieure à la longueur du vecteur ou de la matrice d’entrée, la fonction ifft() ignorera les valeurs restantes.

Si la longueur de l’argument n est supérieure à la longueur du vecteur ou de la matrice, la fonction ajoutera des zéros entre les valeurs d’entrée, améliorant ainsi les performances de la fonction. La longueur d’argument n est typiquement le produit de petits nombres premiers ou une puissance de 2.

La troisième syntaxe est utilisée pour définir la dimension comme troisième argument, dim, qui est utilisé pour trouver la transformée de Fourier rapide inverse dans le cas d’une matrice et d’un tableau multidimensionnel. Par exemple, dans le cas d’une entrée matricielle, la fonction trouvera la transformée de Fourier rapide inverse de chaque colonne, mais si nous ajoutons 2 comme troisième argument, la fonction renverra la transformée de Fourier rapide inverse de chaque ligne.

Le quatrième argument est utilisé pour définir la symétrie de l’entrée comme symétrique ou non symétrique. Si l’entrée n’est pas exactement symétrique, nous pouvons utiliser cet argument pour la définir sur symétrique afin que la fonction traite l’entrée comme symétrique.

Par exemple, créons un vecteur et trouvons sa transformée de Fourier rapide à l’aide de la fonction fft(), puis nous trouverons la transformée de Fourier rapide inverse à l’aide de la fonction ifft(). Voir le code ci-dessous.

clc
clear

n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier)

Production:

n =

     1     6     2


fourier =

   9.0000 + 0.0000i  -3.0000 - 3.4641i  -3.0000 + 3.4641i


inverse_fourier =

    1.0000    6.0000    2.0000

Dans le code ci-dessus, nous avons utilisé un vecteur de trois éléments pour trouver les transformées de Fourier et de Fourier inverse pour vérifier le résultat de la fonction ifft(). Nous pouvons voir dans la sortie que le vecteur d’entrée n et la sortie de la fonction ifft() sont identiques, ce qui signifie que la fonction fonctionne parfaitement.

Nous pouvons voir dans la sortie que la transformée de Fourier du vecteur d’entrée n contient l’amplitude et la phase, qui sont toutes deux utilisées pour reconstruire le signal d’origine. Si nous supprimons une partie de la transformée de Fourier, comme l’amplitude ou la phase, nous ne pourrons pas reconstruire le signal d’origine.

Nous devons nous assurer que le signal contient l’amplitude et la phase avant d’utiliser la fonction ifft() pour reconstruire le signal d’origine. Nous devons également nous assurer que le signal n’est pas décalé de sa position d’origine.

Par exemple, nous pouvons utiliser la fonction fftshift() pour trouver la transformée de Fourier et décaler la composante de fréquence nulle vers le centre du spectre. Nous ne pouvons pas reconstruire correctement le single d’origine si nous utilisons la fonction ifft() pour trouver sa transformée de Fourier inverse.

Dans ce cas, nous pouvons utiliser la fonction ifftshift() au lieu de la fonction ifft(), et la fonction ifftshift() trouvera la transformée de Fourier inverse et ramènera le signal à sa position d’origine.

La sortie changera également si nous définissons les points à l’aide de la deuxième syntaxe indiquée ci-dessus. Par exemple, dans le cas d’une longueur de points supérieure à la longueur du vecteur d’entrée, le signal reconstruit contiendra plus d’éléments que le vecteur ou les éléments de matrice d’origine.

Si nous modifions la dimension de la fonction ifft(), la sortie changera également, et il se peut qu’elle ne corresponde pas au vecteur ou à la matrice d’origine. Par exemple, répétons l’exemple ci-dessus et modifions le nombre de points utilisés pour prendre la transformée de Fourier inverse du vecteur d’entrée.

Voir le code ci-dessous.

clc
clear

n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier,4)

Production:

n =

     1     6     2


fourier =

   9.0000 + 0.0000i  -3.0000 - 3.4641i  -3.0000 + 3.4641i


inverse_fourier =

   0.7500 + 0.0000i   3.8660 - 1.6160i   2.2500 + 1.7321i   2.1340 - 0.1160i

Nous pouvons voir que la sortie de la fonction ifft() ne correspond pas au vecteur d’entrée n car nous avons changé le nombre de points à 4, qui était de 3 par défaut. Consultez ce lien pour plus de détails sur la fonction ifft().

Auteur: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook