Existe-t-il une application pratique pour effectuer une double transformée de Fourier? … Ou une transformée de Fourier inverse sur une entrée du domaine temporel?

11

En mathématiques, vous pouvez prendre la dérivée double ou la double intégrale d'une fonction. Il existe de nombreux cas où effectuer une dérivée double modélise une situation pratique du monde réel, comme trouver l'accélération d'un objet.

Étant donné que la transformée de Fourier prend un signal réel ou complexe en entrée et produit un signal complexe en sortie, rien ne vous empêche de prendre cette sortie et d'appliquer la transformée de Fourier une deuxième fois ... Y a-t-il des utilisations pratiques pour faire cette? Cela aide-t-il à modéliser certaines situations complexes du monde réel?

Avec la même logique, rien ne vous empêcherait de prendre la transformée de Fourier inverse de votre signal d'entrée d'origine dans le domaine temporel ... cela serait-il jamais utile? Pourquoi ou pourquoi pas?

tjwrona1992
la source

Réponses:

9

"Y a-t-il une application pratique?" Certainement oui, au moins pour vérifier le code et les erreurs liées.

"En théorie, la théorie et la pratique correspondent. En pratique, ce n'est pas le cas." Donc, mathématiquement, non, comme l'a répondu Matt. Parce que (comme déjà répondu), (jusqu'à un facteur d'échelle potentiel). Cependant, elle peut être utile sur le plan informatique, car l'équation ci-dessus est généralement implémentée via la transformée de Fourier discrète et son avatar rapide, la FFT.F(F(x(t)))=x(t)

Une première raison vient de la volonté de vérifier que l'implémentation de Fourier, qu'elle soit codée par vous, par quelqu'un d'autre ou à partir d'une bibliothèque, fait ce qu'elle doit faire sur vos données. L'ordre des échantillons, les facteurs d'échelle, les limites sur le type d'entrée (réalité, profondeur de bits) ou la longueur sont des sources d'erreurs ultérieures potentielles pour les implémentations de Fourier comme la FFT. Donc, pour vérifier la validité, il est toujours bon de vérifier que les versions implémentées héritent, au moins approximativement, des propriétés théoriques. Comme vous le verrez, comme le montre Machupicchu, vous ne récupérez pas exactement une entrée réelle inversée: souvent, la partie imaginaire n'est pas exactement zéro, et la partie réelle est ce qui était attendu, mais dans une petite erreur relative, en raison de calculs informatiques imparfaits (virgule flottante) dans une tolérance dépendante de la machine. Ceci est rendu visible sur l'image suivante. La FFT est appliquée deux fois sur un signal aléatoire de 32 échantillons et inversée. Comme vous pouvez le voir, l'erreur est faible, en utilisant des flotteurs à double précision.

données, sa FFT à double retournement et erreur

Si l'erreur n'est pas relativement faible, il peut y avoir des erreurs dans le code que vous utilisez.

Une seconde concerne d'énormes volumes de données ou de grandes quantités de calculs FFT itérés, comme avec la tomographie. Là, les petites erreurs relatives précédentes peuvent s'accumuler et se propager, et même induire des divergences de calcul ou des erreurs certains détails ici . Ceci est rendu visible sur l'image suivante. Pour un signal pas si long ( échantillons ), nous effectuons les itérations suivantes: où désigne la FFT. Le chiffre affiché est sous-échantillonné. Et nous calculons l'erreur maximaleà chaque itération.x01e6

xk+1=Re(f(f(f(f(xk)))))
fmax|xkx0|

données, sa FFT quadruple et le maximum d'erreurs sur les itérations

Comme vous pouvez le voir, l'ordre de grandeur de l'erreur a changé, en raison de la taille du signal. De plus, l'erreur maximale augmente régulièrement. Après itérations, il reste suffisamment petit. Mais vous pouvez deviner qu'avec un cube -voxel et des millions d'itérations, cette erreur peut devenir non négligeable.10001000×1000×1000

Limiter l'erreur et évaluer son comportement sur des itérations peut aider à détecter de tels comportements, puis à les réduire par un seuillage ou un arrondi approprié.

Information additionnelle:

Laurent Duval
la source
1
J'adore vraiment cette réponse et je l'aurais marquée comme la réponse acceptée, mais je pense que ce que la plupart des gens qui viendront à cette question chercheront, ce sont les informations théoriques que Matt a fournies dans le lien. +1 cependant pour une excellente réponse.
tjwrona1992
1
J'apprécie vraiment votre commentaire. J'ai cependant mis à jour la réponse avec les chiffres appropriés, pour montrer que les erreurs dans les implémentations discrètes de Fourier sont importantes.
Laurent Duval
17

Non, prendre la transformée de Fourier deux fois équivaut à une inversion temporelle (ou une inversion de la dimension dans laquelle vous vous trouvez). Vous obtenez simplement fois une constante qui dépend du type de mise à l'échelle que vous utilisez pour la transformée de Fourier.x(t)

La transformée de Fourier inverse appliquée à un signal du domaine temporel donne simplement le spectre avec inversion de fréquence. Jetez un œil à cette réponse pour plus de détails.

Matt L.
la source
4
Vous venez de me récurser l'esprit.
tjwrona1992
Dois-je illustrer ce que Matt. L a dit mais en 2D avec mon code? c'est-à-dire que nous obtenons f (-x, -y).
Machupicchu
@Machupicchu, oui ça a l'air bien.
tjwrona1992
haha alors vous pouvez sélectionner ma réponse et celle du haut ^^ (il a 53K rep donc il ne fait aucun diff pour lui haha)
Machupicchu
Juste après avoir dit que je me suis rendu compte qu'il y avait probablement des moyens plus simples qu'une double transformée de Fourier pour inverser dans le temps un signal haha
tjwrona1992
16

Alors que prendre la transformée de Fourier directement deux fois de suite vous donne juste une inversion temporelle triviale qui serait beaucoup moins chère à mettre en œuvre sans FT, il y a des choses utiles qui peuvent être faites en prenant une transformée de Fourier, en appliquant une autre opération, puis à nouveau Fourier transformant le résultat de cela. L'exemple le plus connu est l' autocorrélation , qui est une sorte de convolution d'un signal avec lui-même. Et les convolutions sont O ( n 2 ) si elles sont mises en œuvre naïvement, mais seulement O ( n · log n) lors d'un détour par transformée de Fourier. Ainsi, l'autocorrélation est généralement effectuée en effectuant un signal FT, en prenant le carré absolu et en le réintégrant dans le domaine temporel.

à gauche
la source
2
Il y a aussi le cepstre , la transformée de Fourier inverse du logarithme de la transformée de Fourier. Il peut être utilisé pour détecter des signaux périodiques.
Olli Niemitalo
12

La transformée de Fourier 2D (2D DFT) est utilisée dans le traitement d'image car une image peut être vue comme un signal 2D. Par exemple, pour une image en niveaux de gris , , cela signifie qu'aux coordonnées et l'image a une valeur d'intensité z. Regardez ceci par exemple:II(x,y)=zxy

https://ch.mathworks.com/help/matlab/ref/fft2.html

Essaye ça:

x=imread('cameraman.tif');
X=fft2(fft2(x));
imagesc(abs(X));

et comparer à:

x=imread('cameraman.tif');
X= ifft2(fft2(x));
imagesc(abs(X));

plutôt comme ça. J'ai appliqué fft2 à fois, pas ifft2 la deuxième fois. Je pense que cela illustre ce que @Matt L. a dit:

"prendre la transformée de Fourier deux fois équivaut à une inversion temporelle",

vous pouvez voir que l'image est inversée à cause du négatif imaginaire -i au lieu du positif dans ifft ().

entrez la description de l'image ici

Je l'ai également fait pour un signal 1D (par exemple temporel):

entrez la description de l'image ici

Machu Picchu
la source
Je suis conscient qu'il existe une transformation de Fourier 2D, mais ce n'est pas la même chose que de prendre un signal d'entrée et de le parcourir à travers l'algorithme, puis de prendre la sortie de cette course et de la réexécuter.
tjwrona1992
1
La transformée de Fourier est séparable.
Machupicchu
Ma question s'appliquerait également à une transformée de Fourier 2D. Vous pourriez en théorie prendre un signal d'entrée 2D, appliquer la transformée de Fourier 2D, puis prendre le signal de sortie 2D et l'utiliser comme entrée et appliquer à nouveau la transformée de Fourier 2D.
tjwrona1992
regardez dans Matlab ce qui se passe si vous faites ce qui suit: cf. J'ai mis à jour ma réponse
Machupicchu
1
Je vous suggère d'utiliser la partie réelle au lieu de la valeur absolue
Laurent Duval
6

Pour répondre à la deuxième question, dans les communications numériques , il est une technique utilisée dans les téléphones cellulaires en ce moment qui fait bon usage de l' application de la IFFT à un signal dans le domaine temporel. L'OFDM applique un IFFT à une séquence de données du domaine temporel au niveau de l'émetteur, puis l'inverse avec une FFT au niveau du récepteur. Alors que la littérature aime utiliser IFFT-> FFT, cela ne fait vraiment aucune différence lequel vient en premier.

schéma de l'émetteur OFDM

Le principal avantage ici est fortement lié à la réponse de leftaroundabout. Il existe un type de distorsion appelé évanouissement par trajets multiples , et les téléphones portables dans les zones urbaines denses doivent y faire face en grande partie. Nous aimons modéliser l'évanouissement par trajets multiples comme une convolution avec des coefficients inconnus. Parce que la chaîne d'événements ressemble à IFFT-> Transmit-> Appliquer les trajets multiples-> Recevoir-> FFT, l'évanouissement par trajets multiples passera par la FFT et deviendra une simple multiplication point par point avec des valeurs inconnues. Ces valeurs sont beaucoup plus faciles à prévoir et à corriger que les coefficients de convolution.

Cet effet rend également un signal plus résistant aux trajets multiples / évanouissement qui pourraient supprimer (ou "annuler") un canal de fréquence entier. Cet article décrit comment

Une telle propagation par trajets multiples peut créer des valeurs nulles spectrales profondes dans la bande passante de fréquence des signaux radio reçus en raison de l'interférence destructrice de deux copies du signal arrivant à des moments légèrement différents. Une valeur nulle dans OFDM peut supprimer une ou plusieurs sous-porteuses. Le même nul dans la QAM à porteuse unique peut laisser tomber une rafale de symboles séquentiellement adjacents, selon le modèle de données spécifique à cet instant. Dans les cas extrêmes, la perte d'acquisition du signal est même possible. Il revient ensuite à la puissance du FEC pour récupérer la séquence de données d'origine.

myeslf
la source
Wow, c'est incroyablement intéressant! Merci! :)
tjwrona1992
1

Cette information a été fournie par l'utilisateur "Birdwes", mais il n'avait pas assez de réputation pour le poster lui-même donc je vais le poster ici pour lui car il semble pertinent et utile.

"Je n'ai pas assez de points dans ce forum pour ajouter un commentaire, donc je le fais ici: jetez un œil au code source d'Accord.Math Hilbert Transform et vous verrez pourquoi cela peut être une option viable: https: //github.com/primaryobjects/Accord.NET/blob/master/Sources/Accord.Math/Transforms/HilbertTransform.cs

Les utilisations pratiques incluent la construction d'émetteurs SSB ou presque n'importe quel plan de modulation. Recherchez la modulation IQ et vous comprendrez pourquoi le déphasage de -90 degrés est pertinent. Un produit de principes trigonométriques. par exemple https://user.eng.umd.edu/~tretter/commlab/c6713slides/ch7.pdf

La transformation de Hilbert utilise une étape intermédiaire entre les FFT de mise à zéro des composants négatifs. Vous pouvez en abuser pour filtrer également les autres fréquences. "

tjwrona1992
la source