En réponse à une question précédente , il a été déclaré qu'il fallait
touchez les signaux d’entrée (ajoutez des zéros à la fin de sorte qu’au moins la moitié de l’onde soit "vierge")
Quelle en est la raison?
fft
zero-padding
Jonas
la source
la source
Réponses:
Le remplissage zéro permet d'utiliser une FFT plus longue, ce qui produira un vecteur de résultat FFT plus long.
Un résultat FFT plus long a plus de cases de fréquence qui sont plus espacées en fréquence. Mais ils fourniront essentiellement le même résultat qu’une interpolation Sinc de haute qualité d’une FFT plus courte, non complétée de zéro, des données originales.
Cela pourrait donner un spectre d'aspect plus lisse lorsque tracé sans interpolation supplémentaire.
Bien que cette interpolation ne soit d'aucune utilité pour la résolution ou la résolution des fréquences adjacentes ou adjacentes, elle pourrait faciliter la résolution visuelle du pic d'une seule fréquence isolée ne présentant aucun signal ou bruit adjacent significatif dans le spectre. . Statistiquement, la densité plus élevée des résultats FFT rendra probablement plus probable le fait que le récepteur de l'amplitude du pic est plus proche de la fréquence d'une sinusoïde à fréquence d'entrée isolée aléatoire et sans autre interpolation (parabolique, etc.).
Mais, essentiellement, zéro remplissage avant une DFT / FFT est une méthode efficace en calcul pour interpoler un grand nombre de points.
Le remplissage par zéro pour la corrélation croisée, l'auto-corrélation ou le filtrage par convolution est utilisé pour ne pas mélanger les résultats de convolution (en raison d'une convolution circulaire). Le résultat complet d'une convolution linéaire est plus long que l'un des deux vecteurs d'entrée. Si vous ne fournissez pas la place nécessaire pour mettre fin à ce résultat de convolution plus long, la convolution rapide FFT ne fera que mélanger le résultat avec votre résultat désiré. Le remplissage à zéro fournit un tas de zéros dans lesquels mélanger le résultat le plus long. Et il est beaucoup plus facile de décomposer quelque chose qui a été mélangé / sommé avec un vecteur de zéros.
la source
Avant de décider de mettre votre signal dans le domaine temporel à zéro-pad, vous devez prendre en compte quelques éléments. Vous n'aurez peut-être pas besoin de mettre le signal à zéro du tout!
1) Allongez les données du domaine temporel (pas le remplissage nul) pour obtenir une meilleure résolution dans le domaine fréquentiel.
2) Augmentez le nombre de points FFT au-delà de la longueur de signal de votre domaine temporel (zéro remplissage) si vous souhaitez une meilleure définition des compartiments FFT, sans pour autant vous acheter une résolution plus vraie. Vous pouvez également patiner pour obtenir une puissance de 2 points FFT.
3) Lorsque vous manipulez les points FFT (au point précédent), assurez-vous que vos points de fréquence se trouvent là où vous le souhaitez. L'espacement des points est , où est la fréquence d'échantillonnage et le nombre de points FFT.fs/N fs N
Il y a quelques belles figures illustrant ces points sur http://www.bitweenie.com/listings/fft-zero-padding/
Une dernière chose à mentionner: si vous utilisez le pavé numérique dans le domaine temporel et que vous souhaitez utiliser une fonction de fenêtrage, veillez à bien le visualiser avant le pavé zéro. Si vous appliquez la fonction window après zéro padding, vous n'accomplirez pas ce que la fenêtre est censée accomplir. Plus précisément, vous aurez toujours une transition nette du signal à zéro au lieu d’une transition en douceur vers zéro.
la source
En général, la mise à zéro avant la TFD équivaut à une interpolation, ou à un échantillonnage plus fréquent, dans le domaine transformé.
Voici une rapide visualisation du fonctionnement du contraire. Si vous échantillonnez un signal avec une bande passante limitée dans le temps à un débit plus élevé, vous obtenez un spectre plus «réduit», c'est-à-dire un spectre avec plus de zéros aux deux extrémités. En d’autres termes, vous pouvez obtenir plus d’échantillons dans le temps en mettant simplement à zéro la fréquence après DFT, puis en IDFT le résultat à zéro.
Le même effet est inversé lorsque le remplissage à zéro se produit dans le temps. Tout cela parce que la reconstruction de signal parfaite est possible tant qu'un signal est limité en bande et échantillonné au moins au taux de Nyquist.
Le terme "résolution" dépend de la façon dont vous le définissez. Pour moi, cela signifie à quel point les deux points d'observation adjacents en temps ou en fréquence peuvent être discriminés de manière fiable (statistiquement). Dans ce cas, la résolution dépend en fait de la taille de la DFT due aux fuites spectrales. C'est-à-dire que la taille de la fenêtre est plus petite, que le signal transformé est plus flou ou taché, et inversement. Cela diffère de la fréquence d'échantillonnage ou de ce que je nomme «définition». Par exemple, vous pouvez avoir une image très floue échantillonnée à un taux élevé (haute définition), mais vous ne pouvez toujours pas obtenir plus d'informations qu'un échantillonnage à un taux inférieur. En résumé, le remplissage à zéro n'améliore pas du tout la résolution car vous ne gagnez pas plus d'informations qu'auparavant.
la source
Si l'on s'intéresse au spectre de la fonction de fenêtrage utilisée pour isoler l'échantillon temporel, le remplissage à zéro augmentera la résolution en fréquence de la fonction de fenêtrage.
Si le signal de temps est , où est la fonction de fenêtrage, le spectre global est alors , où annule la convolution. w ( t ) X ( f ) * W ( f ) *x(t)w(t) w(t) X(f)∗W(f) ∗
Si votre fonction de fenêtrage est un simple rectangle (une extraction d'un ensemble de valeurs de . Alors est la fonction de synchronisation. Ainsi, par exemple, si Nfft est identique à la largeur de votre rectangle et vous aviez une sinusoïde précisément à l'une des fréquences de la corbeille, puis les échantillons de la fonction de synchronisation qui sembleraient centrés sur cette corbeille tombent exactement au passage à zéro de l'heure creuse, et vous ne voyez pas la forme de la synchronisation dans Si vous mettez maintenant vos données à zéro dans la FFTX ( f )x(t) X(f) , vous verrez des échantillons à des endroits autres que le sommet et le passage à zéro, révélant ainsi la forme de la fonction de synchronisation dans le spectre résultant. Alors, à quoi sert le zéro-padding? Il est certainement utile à des fins pédagogiques de révéler la nature de la transformation discrète des signaux en fenêtre, ce qui est le cas habituel. Dans la pratique, cela pourrait être utile dans tous les cas où vous êtes intéressé par la forme spectrale d'une enveloppe isolée chevauchant une onde porteuse.
la source
Il peut y avoir différentes raisons à cela en fonction des processus effectués avant et après la transformation de Fourier. La raison la plus courante est d’obtenir une résolution de fréquence supérieure dans toute transformation résultante. Autrement dit, plus le nombre d'échantillons utilisés dans votre transformation est grand, plus la largeur de bande dans le spectre de puissance résultant est étroite. Rappelez-vous: binwidth = sample_frequency / transform_size (souvent appelée taille de la fenêtre). Vous pouvez imaginer à partir de cela que lorsque vous augmentez la taille de votre transformation, binwidth diminue (= meilleure résolution en fréquence). Le zéro de remplissage est un moyen d'augmenter la taille de la transformation sans introduire de nouvelles informations dans le signal.
Alors pourquoi ne pas simplement prendre une plus grande transformation sans zéro padding? Cela ne produirait-il pas le même effet? Bonne question. Dans de nombreux cas, vous souhaiterez peut-être analyser un flux de données de domaine temporel, pour lequel vous utiliserez peut-être une transformation de Fourier à court terme (stft). Cela implique de transformer tous les N échantillons en transformée en fonction de la résolution temporelle requise pour caractériser les modifications du spectre de fréquences. C'est ici que se trouve le problème. Une fenêtre trop grande et vous perdrez la résolution temporelle, une fenêtre trop petite et vous perdrez la résolution de fréquence. La solution consiste alors à prendre de petites fenêtres dans le domaine temporel vous donnant une bonne résolution temporelle, puis à les régler à zéro pour vous donner une bonne résolution fréquentielle. J'espère que cela vous est utile
Mise à jour
Je n'ai pas bien expliqué cela. J'aurais dû mieux le préciser. En se référant à une transformation fenêtrée, vous n'obtenez effectivement aucune résolution de fréquence «réelle», mais à des fins de visualisation (lecture du spectre de puissance avec l'œil), elle peut fournir des résultats plus clairs. En utilisant le taux d’échantillonnage critique, chaque lobe latéral occupe une seule case, ce qui, en fonction de la technique de représentation graphique, peut être trompeur. Le remplissage à zéro fournit un spectre de fréquence interpolé qui peut être plus révélateur. De plus, si vous utilisez une méthode de sélection de pics simple pour l'estimation de fréquence, l'effet d'interpolation spectrale du remplissage à zéro vous donnera un échantillon spectral plus proche du pic réel du lobe principal. Ce lien fournit des diagrammes utiles: http://www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html
la source
Je ne les ai pas vues mentionnées dans les bonnes réponses précédentes. Je vais donc ajouter les raisons supplémentaires suivantes pour le remplissage à zéro:
Les algorithmes Radix-2 sont plus efficaces, de sorte que le zéro atteint la puissance voisine de 2 (ou 4 dans certains cas pour Radix-4), ou plus significativement, l’évitement de facteurs premiers importants peut améliorer les performances en temps réel. De plus, lors de l’utilisation de la FFT à des fins d’analyse, un remplissage nul est souvent utilisé pour calculer des échantillons de la DTFT, par exemple pour déterminer la réponse en fréquence d’une FIR: comparer fft ([1 1 1 1]) à fft ([1 1 1 1], 512) identique à freqz ([1 1 1 1]).
la source