Qu'est-ce qu'une bonne fonction de fenêtre FFT pour rejeter DC?

9

J'utilise une FFT pour analyser ce qui est essentiellement l'enveloppe de puissance d'un signal (voir ici pour plus d'informations sur le projet contenant), et, comme les nombres de puissance sont toujours positifs, pour éliminer la composante DC, j'aimerais utiliser une fenêtre fonction qui est 50/50 positive et négative, par rapport à la fonction tout positive habituelle.

J'ai pris la fonction " flat top ", supprimé le a0biais et converti les cosinus en sinus, mais je ne suis pas sûr que ce soit optimal (ou même significatif).

Toute suggestion?

Daniel R Hicks
la source
9
soustraire juste la moyenne avant le fenêtrage?
endolith

Réponses:

1

La dérivée première des fonctions de fenêtre continue les plus courantes (von Hann, etc.) rejettera le courant continu, mais aura toujours une réponse en fréquence d'amplitude similaire à celle de la fonction de fenêtre d'origine; vous pouvez donc toujours utiliser vos critères de "qualité" d'origine pour la sélection de la fenêtre, si elle n'est pas liée à la phase.

hotpaw2
la source
2
Bien que cette réponse soit principalement correcte, il s'agit plutôt d'un commentaire, il serait donc très utile de l'étendre.
Phonon
Cependant, cela répond à ma question dans une certaine mesure.
Daniel R Hicks
1
Y a-t-il une raison de le faire au lieu de simplement soustraire la moyenne avant le fenêtrage?
nibot
Si la réponse de JasonR est correcte, alors cette idée de rejeter DC via la fonction de fenêtre (et toujours obtenir une bonne estimation spectrale) ne fonctionnera pas.
nibot
@nibot: Une raison possible pourrait être qu'une somme plus une soustraction n'est pas possible (non disponible dans certains pipelines matériels ou latences fixes, par exemple.)
hotpaw2
7

Si vous souhaitez effectuer une analyse spectrale sur un signal avec une grande composante CC et que vous souhaitez supprimer ce pic CC, alors une fonction de fenêtre n'est pas ce que vous voulez. Comme d'autres réponses l'ont noté, un filtre passe-haut (ou, vu différemment, un filtre coupe-bande avec l'entaille à fréquence nulle) est une solution appropriée.

Pour comprendre pourquoi, vous devez réfléchir à ce que l'application d'une fonction de fenêtre fait à la réponse en fréquence de chaque sortie DFT. La DFT est définie comme:

X[k]=n=0N-1X[n]e-j2πnkN

Une interprétation du fonctionnement de la DFT est celle d'une banque de filtres à fréquences également espacées entre - f sN etfs-Fs2 . Refonte de la somme ci-dessus comme suit:Fs2

X[k]=n=0N-1Xk[n]

où:

xk[n]=x[n]ej2πnkN

Ainsi, la ème sortie DFT est générée en prenant d'abord le signal d'entrée x [ n ] et en le multipliant par une exponentielle complexe à la fréquence - 2 π kkx[n] pour donner un signal abaisséxk[n]. Le signal résultant est ensuite additionné sur lafenêtre àNéchantillons pour produire la sortie DFTX[k]. Il s'agit en fait d'un filtre à moyenne mobile (parfois appelé filtre à wagon couvert), dont la réponse impulsionnelle peut être décrite comme:2πkNxk[n]NX[k]

b[n]={1, x=0,1,,N10, otherwise

La réponse en amplitude du filtre boxcar peut être trouvée en prenant la transformée de Fourier à temps discret (DTFT) de cette réponse impulsionnelle:

|H(f)|=|sin(Nπffs)sin(πffs)|

f

x[n]

X[k]=n=0N-1w[n]X[n]e-j2πnkN=n=0N-1w[n]Xk[n]

Avec la fonction de fenêtre en place, le downconverted Xk[n]passe effectivement à travers un filtre FIR avec une réponse impulsionnelle décrite par la fonction fenêtre. Ainsi, la réponse en amplitude par sortie de la DFT est:

|H(F)|=|W(F)|

W(F) le DTFT de la fonction fenêtre w[n]. Notez maintenant que si vous avez choisi une fonction de fenêtre qui avait un zéro à DC et l'avez utilisée pour prémultiplierX[n]avant la DFT, vous provoqueriez en fait l'effet non voulu de l'annulation non seulement du courant continu dans le spectre résultant, mais aussi des fréquences centrales de chacune des sorties DFT. Ce n'est probablement pas ce que vous voulez.

Donc, si vous voulez vraiment simplement annuler la composante CC du signal, la supprimer via un autre type de prétraitement, pas de fenêtrage dans le domaine temporel, est la voie à suivre. Vous pouvez utiliser un filtre passe-haut linéaire avec une fréquence de coupure très basse ou soustraire la moyenne estimée du signal en premier, par exemple. Le choix entre ces méthodes doit être basé sur les autres contraintes de votre système.

Jason R
la source
3

Je ne pense pas que l'utilisation d'une fonction de fenêtre soit un bon moyen de supprimer DC. Comme l'endolith l'a mentionné, une méthode courante consiste simplement à soustraire la moyenne avant le fenêtrage. Une autre option serait d'appliquer un filtre passe-haut à votre signal avant l'analyse, par exemple, avec une fréquence de coupure d'environ 10 Hz.

schnarf
la source
L'application d'un filtre passe-haut n'est pas une option si le signal n'existe pas sous forme analogique. Mais je crois que vous (et endolith) avez raison de dire que la soustraction de la moyenne devrait fonctionner, surtout si une fenêtre est également utilisée pour ramener les points d'extrémité à zéro. (Et un filtre passe-haut aurait besoin d'une coupure inférieure, étant donné que j'analyse le signal jusqu'à peut-être 0,01 Hz.)
Daniel R Hicks
2
Pourquoi pensez-vous avoir besoin d'un signal analogique pour appliquer un filtre passe-haut? Il est certainement possible de créer un HPF numérique.
Jason R
@JasonR - J'avoue que je suis assez ignorant dans de telles choses (mes cours de signaux étaient il y a 40 ans, à peu près avant FFT, et al), mais il me semble que pour créer un filtre passe-haut numérique, je Il faudrait d'abord produire la transformée de Fourier du signal.
Daniel R Hicks
1
Ce n'est pas du tout le cas; vous pouvez générer un filtre passe-haut tout comme un filtre passe-bas, passe-bande, etc. En fait, il existe des techniques pour prendre un prototype de filtre passe- bas et le transformer en un filtre passe-haut qui a une réponse analogue. La plupart des logiciels de conception de filtres (par exemple MATLAB) peuvent être utilisés pour créer tous les types de filtres.
Jason R
1
Je ne sais pas d'où vous avez l'impression que la mise en œuvre d'un filtre passe-haut nécessite une différenciation. La différenciation est une opération passe-haut, mais n'est pas une mise en œuvre appropriée pour un filtre passe-haut (car sa réponse en fréquence est une rampe, ce qui lui permet d'amplifier les fréquences plus élevées où le bruit est souvent présent). L' article de Wikipedia sur les filtres passe-haut serait un bon début.
Jason R