Pourquoi une fuite spectrale se produit-elle dans une FFT?

18

J'ai essayé de googler et de wikipedia, mais je n'ai obtenu aucune réponse au-delà de "c'est parce que la fréquence du signal d'entrée se situe entre deux cases".

Je comprends que c'est la raison, mais ce que je ne comprends pas, c'est pourquoi la fuite semble s'étendre à plusieurs bacs adjacents plutôt qu'à un seul bac adjacent.

Pour illustrer ce dont je parle, voici quelques données simulées (code à la fin du post): Freq_10

Ci-dessus, le spectre FFT (tracé sur une échelle logarithmique) d'une onde sinusoïdale de fréquence 10. Le taux d'échantillonnage est de un et le nombre d'échantillons est de 100. Le graphique a été décalé FFT. Il n'y a clairement qu'un pic au bac 10, et le reste est de l'ordre de l'erreur numérique, ou à peu près.

Freq_10_1

Il s'agit du spectre de fréquences à une fréquence générée de 10,1. Il y a clairement une «fuite» dans plus de bacs que le bac immédiatement adjacent.

freq_10_5

Ceci est l'intrigue pour une fréquence de 10,5.

Question: Pourquoi y a-t-il cette fuite et pourquoi s'étend-elle à tous les autres bacs plutôt qu'au bac adjacent immédiat?


Code, pour toute personne intéressée (code Python)

import numpy as np
import matplotlib.pyplot as plt

xFreq = 10.5
xSize = 100.0
xPeriod = xSize/xFreq
x = np.linspace(1,xSize,xSize)

data = np.sin(2*np.pi*x/xPeriod)
fft = np.fft.fft(data)
fft = np.fft.fftshift(fft)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(abs(fft), "o")
ax.set_yscale('log')
plt.show()

J'ai changé la xFreqvaleur de 10.0en 10.5, etc.

Kitchi
la source
Tout signal qui ne rentre pas exactement dans la longueur de la fenêtre de la FFT produit une discontinuité lorsque vous l'enroulez. Les discontinuités, comme les impulsions ou les fonctions de pas, contiennent certaines de toutes les fréquences.
endolith

Réponses:

12

Une FFT a une longueur finie et constitue ainsi une fenêtre rectangulaire par défaut sur un flux de données. Une fenêtre dans le domaine temporel se traduit par une convolution dans le domaine fréquentiel avec la transformation de la fenêtre. Notez que la transformation d'une fenêtre rectangulaire est une fonction Sinc (sin (x) / x), qui a une largeur infinie. Ce n'est pas seulement 2 bacs de largeur. Ainsi, les ondulations de la fonction Sinc apparaîtront comme des "fuites" loin de tout pic spectral qui n'est pas parfaitement périodique dans la longueur de la FFT.

L'image ci-dessous montre une partie de la réponse en fréquence de la fonction sinc. Lorsque la tonalité est centrée sur l'un des casiers, tous les autres points sont alignés avec les valeurs nulles dans la réponse en fréquence. S'il n'est pas centré sur un casier, c'est comme déplacer la réponse en fréquence entière, ce qui fait tomber les autres casiers sur des parties non nulles de la réponse en fréquence.

entrez la description de l'image ici

Une autre façon de voir les choses est qu'une FFT est juste une banque de filtres, où chaque étage de bande d'arrêt de filtre a beaucoup d'ondulations, et n'est certainement pas infini en atténuation à plus d'un bac de la fréquence centrale. Certaines fenêtres (von Hann, etc.) autres que rectangulaires ont des bandes d'arrêt inférieures, ce qui est une des raisons de leur utilisation populaire.

hotpaw2
la source
1
Notez que les soi-disant "fuites" spectrales n'apparaissent pas dans la FFT des entrées périodiques exactement centrées sur le bin car la fonction Sinc est exactement nulle (entre les changements de signe) à toutes les autres fréquences centrales de bin (complètement orthogonales à ces noyaux de filtre et Vecteurs de base FFT).
hotpaw2
J'espère que cela ne vous dérange pas la modification. N'hésitez pas à le jeter si vous ne l'aimez pas.
Jim Clay
@Jim Clay: Merci pour le graphique ajouté. Je n'arrivais pas à comprendre comment en envoyer un depuis mon iPhone.
hotpaw2
1
Merci merci merci. Merci de NE PAS expliquer la fuite en disant: "La FFT suppose que sa séquence d'entrée est périodique." Cette notion idiote de «périodicité supposée» est, malheureusement, répétée beaucoup trop souvent dans la littérature du DSP. [-Rick-]
Parfois, l'hypothèse de périodicité d'entrée est utile, lors de l'échantillonnage synchrone de rotation d'arbre de la longueur de trame FFT (ou de la création d'exemples synthétiques en classe), par exemple. Mais avec l'audio (etc.), le découpage et le fenêtrage des trames de données non liées à des longueurs de périodicité sont plus courants, ce qui rend l'hypothèse généralement fausse pour le travail dans ces domaines.
hotpaw2
0

hotpaw2La réponse est bonne, mais je voudrais développer un peu le user5133commentaire de:

Merci de NE PAS expliquer la fuite en disant: "La FFT suppose que sa séquence d'entrée est périodique." Cette notion idiote de «périodicité supposée» est, malheureusement, répétée beaucoup trop souvent dans la littérature de DSP

et en même temps répondre à la question aussi. Notez que je suis un expert dans ce domaine --- n'hésitez pas à commenter, corriger ou confirmer.

Z{1,2,,N}

X(ω)=n=-X[n]e-jeωn.

NNZ

Xk =def n=0N-1Xne-2πjekn/N,kZ
ce qui correspond aux fréquences discrètes X(2πk/N)n{1,2,,N}X[n]w[n]wn{1,,N}

Mais la transformée de Fourier d'un produit est la convolution des transformées de Fourier:

F{Fg}=F{F}F{g}

sinc

-w(F)e-jωtt=-ττe-jωtt=2τsinc(ωτ)

sinc

anderstood
la source
on dirait que @ user5133 ne traîne plus. mais la gratitude de Rick est déplacée: "Merci de NE PAS expliquer les fuites en disant:" La FFT suppose que sa séquence d'entrée est périodique. " Cette notion idiote de «périodicité supposée» est, malheureusement, répétée beaucoup trop souvent dans la littérature du DSP. Il se trompe. La DFT étend très certainement périodiquement les données de longueur finie qui lui sont transmises. La DFT fait supposer que les données qui lui est transmis est une période d'une séquence périodique.
robert bristow-johnson