Voici une sinusoïde de fréquence f = 236.4 Hz
(elle fait 10 millisecondes de long; elle a des N=441
points à la fréquence d'échantillonnage fs=44100Hz
) et sa DFT, sans zéro-padding :
La seule conclusion que nous pouvons donner en regardant la DFT est: "La fréquence est d'environ 200 Hz".
Voici le signal et sa DFT, avec un grand zéro-padding :
Maintenant nous pouvons donner une conclusion beaucoup plus précise : "En regardant attentivement le maximum du spectre, je peux estimer la fréquence 236Hz" (j'ai zoomé et j'ai trouvé que le maximum est proche de 236).
Ma question est: pourquoi disons-nous que le "zéro-padding n'augmente pas la résolution" ? (J'ai vu cette phrase très souvent, puis ils disent "ça n'ajoute que l'interpolation")
=> Avec mon exemple, le zéro-padding m'a aidé à trouver la bonne fréquence avec une résolution plus précise!
Réponses:
La résolution a une définition très spécifique dans ce contexte. Cela fait référence à votre capacité à résoudre deux tonalités distinctes à des fréquences proches. Vous avez augmenté la fréquence d'échantillonnage de votre estimation de spectre, mais vous n'avez acquis aucune capacité à distinguer entre deux tonalités qui pourraient être, par exemple, à 236 Hz et 237 Hz. Au lieu de cela, ils «fusionneront» en une seule goutte, peu importe la quantité de remplissage nul que vous appliquez.
La solution pour augmenter la résolution consiste à observer le signal pendant une période plus longue, puis à utiliser un DFT plus grand. Cela se traduira par des lobes principaux dont la largeur est inversement proportionnelle à la taille DFT, donc si vous observez assez longtemps, vous pouvez réellement résoudre les fréquences de plusieurs tons qui sont proches les uns des autres.
-
Pour voir comment cela se passe, voici un tracé de la FFT zoomée de l'addition de deux signaux: votre sinusoïde d'origine, et celle dont la fréquence en diffère de 0 à 100 Hz.
Ce n'est que vers la différence de 100 Hz de l'intrigue (côté gauche ici) que vous pouvez distinguer (résoudre) les deux.
Code Scilab pour générer le tracé ci-dessous.
la source
x(n)
allonger (avec0
à la fin), je garde lax(n)
longueur N, MAIS le changement est là: au lieu deDFT(k) = \sum x(n) exp(-2*i*pi*n*k/N)
pourk=0,1,...,N-1
, je faisDFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
pourk=0,1,...,10*N-1
... C'est comme ajouter plus de bacs (10 N
bacs au lieu deN
bacs de fréquence) mais en gardant les mêmesx(n)
de longueurN
. Maintenant, les casiers seraient de 10 Hz, 20 Hz, ..., 100 Hz, 110 Hz, 120 Hz, ..... => Est-ce la même chose que le zéro-padding: pas de réelle résolution supplémentaire, mais seulement une interpolation?DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
pourk=0,1,...,10*N-1
et en gardant la mêmex(n)
longueurN
donne-t-il le même résultat que le zéro-padding: pas vraiment plus de résolution, mais seulement une interpolation?Le terme «résolution» a plusieurs significations, ce qui peut dérouter les gens qui essaient de communiquer lorsqu'ils utilisent deux significations différentes.
Dans le sens optique, être capable de résoudre deux points voisins clairement séparés (ou deux pics adjacents dans le spectre) au lieu d'un blob flou, le remplissage nul n'aidera pas. C'est le sens le plus probable utilisé pour déclarer que le remplissage nul n'augmente pas la résolution.
Si une exigence de résolution nécessite un creux (par exemple une baisse d'au moins 3 dB) entre les pics spectraux, alors la résolution sera encore plus faible que l'espacement des cases FFT, par exemple pas même Fs / N, mais 2X à 3X cela, ou plus, selon le fenêtrage utilisé. Une exigence de résolution plus faible pourrait être simplement l'espacement des fréquences des vecteurs de base orthogonaux de la TFD, par exemple Fs / N.
En termes de points de tracé, oui, le remplissage nul vous donnera plus de points à tracer, comme dans la résolution DPI (points de tracé par pouce). Cela peut faciliter le repérage des extrema par le globe oculaire. Cependant, ce sont les mêmes points que vous obtiendriez en effectuant une interpolation de tracé de très haute qualité (interpolation Sinc) sans aucun zéro, donc ils n'ajoutent vraiment aucune information qui ne pourrait pas être calculée autrement sans le zéro.
En termes de suivi de hauteur, l'interpolation parabolique ou Sinc (interpolation entre les cases de résultat FFT) d'un résultat FFT fenêtré non nul peut vous donner un résultat tout aussi bon que d'un tracé FFT plus long, plus intensif en calcul. Ainsi, le padding zéro vous donne un "meilleur" résultat de suivi de la hauteur que la sélection de pic non-rembourrée et non interpolée, mais souvent beaucoup moins efficacement que l'utilisation de l'interpolation.
Si vous ajoutez du bruit à votre exemple, mais légèrement moins que le signal, vous constaterez que le pic à zéro nul peut être tout aussi inexact que le pic à zéro différent. Donc, dans le cas plus général, vous n'avez peut-être pas trouvé la «bonne» fréquence avec plus de précision qu'auparavant. Le remplissage nul n'interpole que le résultat inexact dû au bruit, ce qui explique pourquoi il n'augmente pas la résolution.
la source
f=236.4 hz
pendant le même10ms
mais avec fs = 192khz au lieu de 44.1khz: la vraie résolution de fréquence sera-t-elle alors plus élevée?sinc
courbe similaire à DFT plus étroite ou non? Sinon, cela implique que l'augmentation de la fréquence d'échantillonnage n'ajoutera pas de résolution (dans le sens de la capacité à résoudre les fréquences)