J'ai récemment réalisé que les FFT n'étaient pas parfaites. Ce qui signifie que si je prends un signal et que je prends ensuite sa FFT, puis que je fais une FFT inverse, la sortie résultante n'est pas exactement la même que l'entrée. Voici une image pour vous montrer ce que je veux dire:
Je pense que l'image est assez explicite. Le signal IFFT est juste une transformation inverse du "spectre FFT" et le tracé "Différence" est la différence entre le signal IFFT et le signal d'origine ( ).
De toute évidence, il existe des artefacts, bien qu'ils soient vraiment petits. Je voudrais savoir pourquoi ils se produisent en premier lieu. Est-ce à cause de la fenêtre finie de la transformée de Fourier? Ou à cause de quelque chose dans l'algorithme FFT?
fft
fourier-transform
dft
Kitchi
la source
la source
Réponses:
Les différences que vous voyez sont dues à des erreurs numériques au format virgule flottante. Toutes les opérations nécessaires pour effectuer une FFT et une FFT inverse ne peuvent être effectuées qu'avec une précision finie et vous avez montré le résultat de cette précision finie dans votre graphique inférieur droit.
la source
En général, un nombre ne peut pas être représenté exactement sous forme numérique. Une erreur est introduite. Si vous êtes dans Matlab, vous pouvez écrire eps à la commande, cela vous donne un nombre.
L'erreur que vous voyez dans votre tracé est dans la plage renvoyée par eps (c'est-à-dire 2 ^ (- 52)).
Même si vous attendez des valeurs réelles dans votre sortie de votre IFFT, vous pouvez voir que votre partie imaginaire n'est pas exactement égale à zéro. Même chose.
la source