DFT - Suppression de l'effet de fenêtre dans le domaine spectral avec convolution

11

Je pensais au sujet de fenêtrage DFT et une pensée m'est venue à l'esprit. Un DFT donnera le spectre d'un signal alambiqué avec le spectre de la fenêtre utilisée, ayant donc des lobes principaux et des lobes latéraux.

J'ai pensé qu'il serait possible de supprimer l'effet de fenêtre sur le spectre du signal en convoluant à nouveau à la fois le signal et l'amplitude du spectre de fenêtre, et cela a en effet fonctionné comme vous pouvez le voir sur l'image suivante.

entrez la description de l'image ici

À gauche, le spectre d'origine généré avec une fenêtre de suspension. A droite, le spectre alambiqué par la DFT d'une fenêtre suspendue. Le haut est le spectre lui-même, le bas est le findpeaksrésultat MATLAB .

Je n'ai jamais lu quoi que ce soit concernant cette technique, mais je suis à peu près sûr que je n'y ai rien inventé. Je me demande donc s'il y a un avantage à faire ce traitement sur le spectre ou s'il y a un inconvénient que je ne vois pas.

D'après ce que je vois, cela pourrait aider à détecter les pics comme nous pouvons le voir sur l'image précédente. De plus, il semble que le spectre soit un peu déformé comme nous pouvons le voir sur les 2 images suivantes. :

entrez la description de l'image ici entrez la description de l'image ici

Où le graphique bleu est le spectre et le graphique rouge le spectre post-alambiqué.

  • Tu as pensé à ça?
  • Y a-t-il un problème qui pourrait résulter de cette convolution post-FFT?
  • Un papier qui traite le sujet?

ÉDITER

Vous pouvez trouver un script ici qui générera le graphique suivant:

entrez la description de l'image ici

Pier-Yves Lessard
la source
1
Pourriez-vous fournir le code que vous avez utilisé pour tracer les chiffres? Je suppose que la fluidité de la fonction convolue n'est qu'une question de résolution. Vous ne pouvez pas annuler le fenêtrage en convoluant encore une fois avec la même fenêtre (vous auriez en effet besoin de convolver, ce à quoi se réfère la réponse de rbj). En outre, une réelle amélioration serait une résolution de fréquence accrue et / ou une suppression accrue des lobes latéraux, dont aucune n'est obtenue ici. Trouver les «bons» pics est relativement facile pour les deux fonctions.
Matt L.
Je viens de modifier mon article pour ajouter un exemple de code.
Pier-Yves Lessard

Réponses:

1

En fait, il y a un inconvénient à votre suggestion: les signaux que vous avez montrés sont tous très clairement divisés en leurs composantes de fréquence, mais en général, les signaux réels ont tendance à être plus bruyants.

Selon l'application, vous souhaitez autant d'amortissement des fuites (lobes principaux supérieurs / lobes latéraux plus petits d'une fréquence de signal dans le spectre transformé) ou, comme autre exemple, le lobe principal le plus étroit possible.

Dans vos graphiques, il est visible que le lissage des spectres de magnitude avec une fenêtre fait le contraire de ceux-ci: les lobes principaux deviennent plus larges et plus petits, tandis que les produits de fuite provenant de la transformation d'un signal temporel fini gagnent en puissance. Appliqué à des signaux bruyants, cela entraînerait un inconvénient important.

Votre suggestion, cependant, est encore assez utile pour l'identification des pics!

Jonas Schwarz
la source
1

en restant fidèle au sujet "supprimer l'effet de fenêtre dans le domaine freq via convolution" (malgré que l'OP souhaitait peut-être réaliser quelque chose d'autre ou quelque chose de similaire), je pense ajouter mon commentaire ayant une expérience personnelle avec ce sujet spécifique.

Souvent, j'ai la nécessité de supprimer une fenêtre Hann dans le domaine fréquentiel, travaillant dans un cadre STFT qui utilise par défaut des cadres fenêtrés Hann, pour effectuer un traitement spectral avancé où le spectre d'entrée est attendu comme NON fenêtré à la place (par exemple, convolution à chevauchement-sauvegarde ou filtration).

En un mot: oui, vous le pouvez. Bien que la suppression mathématique d'une fenêtre (dans le domaine temporel ou fréquentiel) implique la reconstruction de données qui sont perdues à jamais, dans la pratique, vous pouvez le faire avec une perte minimale probable.

Prenons une fenêtre de Hann (cosinus augmenté). Sa formule dans le domaine temporel est y = (1-cos (pi * x)) / 2 avec x allant de zéro à et excluant un à travers la trame. Sa représentation correspondante dans le domaine fréquentiel est bin0 = (0,5,0i), bin1 = (- 0,5,0i). Pour supprimer son effet dans le domaine temporel, vous pouvez simplement vouloir diviser le signal par la fonction de fenêtre ci-dessus. Pour faire de même dans le domaine fréquentiel, vous pouvez simplement convoluer le spectre à débloquer avec le spectre de l'inverse de ladite fonction. Étant donné que cette fonction est nulle aux deux extrémités (en fait, elle est mathématiquement nulle uniquement au premier point, à moins d'erreurs d'arrondi), pour éviter l'infini, vous pouvez simplement échanger l'infini avec une grande valeur comme 10000 ou plus. Le résultat d'une telle convolution est le spectre sans fenêtre. En le reconvertissant dans le domaine temporel,

Peut-être que vous ne pouvez pas supprimer une fenêtre rectangulaire, car la quantité de données perdues en multipliant de grandes zones du signal par zéro est impossible à récupérer en théorie. Mais je pense que cela dépend du contenu du spectre. Par exemple, si c'est le spectre d'une sinusoïde simple, en supprimant le motif de fenêtre rectangulaire en convoluant avec le spectre d'une fonction qui est une valeur élevée où le rectangle était nul, et une où il était un (c'est-à-dire sa réciproque), vous pouvez peut-être encore obtenir (sensiblement) le spectre d'une sinusoïde pour reconstruire l'ensemble du signal.

elena
la source
0

c'est une bonne question et un bon aperçu que je suis sûr que d'autres ont eu. le de -convolution dans le domaine de fréquence est comme multiplier dans le domaine temporel et si vous déconvolution l'effet d'une fenêtre de Hann dans le domaine de fréquence, il est comme votre division par l'effet de la fenêtre Hann dans le domaine temporel. aux queues où la fenêtre de Hann passe à zéro, il y a une division par un nombre trop petit pour s'inquiéter.

généralement, l'effet de fenêtre est laissé, car si vous retransformez, vous souhaiterez peut-être l'effet de la fenêtre dans le domaine temporel. ou si vous ne vous retransformez jamais (il s'agit d'une alg d'analyse ou de modélisation et non d'une alg de modification), vous ne vous intéressez qu'aux paramètres qui sont les propriétés de ces pics, et vous vous contentez de l'effet connu de la convolution avec un connu noyau et qui pourrait modifier un paramètre extrait de manière déterministe. alors vous compensez simplement cela dans votre paramètre extrait.

enfin, selon ce que vous faites, vous voudrez peut-être envisager d'utiliser une fenêtre guassienne pour l'analyse. a très peu de problème de lobe latéral et dans des conditions linéaires (comme un filtre), chaque sinusoïde fenêtrée conserve la forme fenêtrée lorsqu'elle est retransformée dans le domaine temporel. cette fenêtre peut être annulée et une fenêtre Hann appliquée après la reconversion dans le domaine temporel.

robert bristow-johnson
la source
6
En principe, j'accepte vos déclarations. Cependant, l'OP ne parle pas de déconvolution, mais de convolution du spectre obtenu avec le spectre de la fenêtre de suspension. (c'est-à-dire essentiellement un fenêtrage avec une fenêtre au carré)
Maximilian Matthé
1
non, l'OP parle de supprimer l'effet, pas de doubler l'effet. la division est la même que la multiplication par l'inverse. c'est la multiplication par un tel nombre qui vous donne le résultat que nous appelons le quotient . étant que la convolution dans un domaine est la même que la multiplication dans l'autre domaine, alors la déconvolution est la même que la convolution avec quelque chose de spécialement déterminé.
robert bristow-johnson
2
L'OP parle de supprimer les ondulations, en effectuant une convolution du spectre obtenu avec le spectre de la fenêtre. Cela donne une multiplication du signal avec la fenêtre au carré (une fenêtre de la multiplication initiale dans le temps, la seconde provenant de la convolution en fréquence)
Maximilian Matthé
1
Enfin, pas exactement. Je fais une convolution des grandeurs du spectre qui donne un résultat différent de la multiplication de la fenêtre au carré. Je ne sais pas ce que cela représente mathématiquement ... Je le vois comme une corrélation croisée entre les deux amplitudes spectrales (puisque les spectres des fenêtres sont symétriques).
Pier-Yves Lessard
0

La technique que vous avez utilisée pour lisser le spectre est souvent utilisée lors de l'analyse du spectre lui-même et vous ne vous souciez pas des effets dans le domaine temporel (par exemple, la détection de signal basée sur la fréquence ou la mesure de la bande passante). Il n'est même pas nécessaire que la fenêtre utilisée pour le lissage soit la même que la fenêtre utilisée dans le domaine temporel. L'une des principales raisons d'utiliser une fenêtre de domaine temporel avant la DFT est de minimiser la discontinuité dans le bouclage que la DFT suppose aux extrémités du signal (la DFT est intrinsèquement circulaire). Le lissage dans le domaine fréquentiel a pour but de faciliter l'analyse telle que la détection des pics ou la mesure de la bande passante. La "meilleure" fenêtre pour l'un peut ne pas être la "meilleure" fenêtre pour l'autre. En fait, je n'ai jamais vu la DFT d'une fenêtre utilisée pour le lissage spectral.

Cassman
la source
La façon dont je le comprends, c'est que je fais une corrélation croisée avec le spectre, donc j'ai des pics au centre des lobes principaux. L'utilisation des fenêtres de domaine temporel semble être le choix évident et je ne vois pas pourquoi j'utiliserais une corrélation croisée de fenêtre de wagon couvert pour trouver où se situe le spectre de la fenêtre suspendue. Pourquoi voudrions-nous autre chose que la même fenêtre?
Pier-Yves Lessard
Oui, le résultat que vous décrivez est une convolution avec l'autocorrélation de la fenêtre, mais c'est juste une convolution avec une fenêtre différente. L'autocorrélation se traduira par un pic TRÈS serré à DC. Vous avez donc convolué efficacement le spectre du signal avec un filtre passe-bas très serré. C'est la réponse en fréquence de ce filtre qui vous donne le résultat que vous voyez, pas le fait qu'il s'agit d'une autocorrélation. Le fait qu'il s'agisse d'une autocorrélation est une coïncidence.
cassman