Pourquoi les grandeurs sont-elles normalisées lors de la synthèse (IDFT) et non de l'analyse (DFT)?

17

Dans la plupart des exemples et du code FFT que j'ai vus, la sortie (amplitudes de fréquence) de l'opération DFT vers l'avant est mise à l'échelle par N - c'est-à-dire qu'au lieu de vous donner l'amplitude de chaque tranche de fréquence, cela vous donne N fois l'amplitude.

Sur le plan opérationnel, cela est simplement dû au fait que la TFD est calculée en prenant le produit interne du signal avec chaque sinus de base (c'est-à-dire une corrélation non normalisée). Cependant, cela ne répond pas à la question philosophique de savoir pourquoi ne divisons-nous pas simplement par N avant de renvoyer la sortie?

Au lieu de cela, la plupart des algorithmes se divisent par N lors de la re-synthèse.

Cela me semble contre-intuitif et (à moins que je manque quelque chose), cela rend toutes les explications de la DFT très déroutantes.

Dans tous les scénarios que je peux imaginer, la magnitude réelle (et non la magnitude * N) est la valeur dont j'ai besoin pour une opération DFT, et la magnitude normalisée est la valeur que je veux saisir dans une opération IDFT.

Pourquoi la DFT n'est-elle pas définie comme DFT / N, et l'IDFT définie comme une simple somme de sinusoïdes de magnitude normalisée?

bryhoyt
la source
2
Je pense honnêtement que c'est l'une des questions les plus cool jamais posées ici.
Phonon

Réponses:

9

Que vous mettiez à l'échelle la sortie de votre DFT, en avant ou en inverse, cela n'a rien à voir avec la convention ou ce qui est mathématiquement pratique. Cela a tout à voir avec l'entrée de la DFT. Permettez-moi de montrer quelques exemples où la mise à l'échelle est requise ou non requise pour la transformation directe et inverse.

Doit mettre à l'échelle une transformation directe de 1 / N.

Pour commencer, il doit être clair que pour analyser une simple onde sinusoïdale, la longueur de la transformation ne devrait pas être pertinente, mathématiquement parlant. Supposons que N = 1024, Freq = 100 et que votre signal soit:

f (n) = cos (Fréq * 2 * Pi * n / N)

Si vous prenez une DFT de 1024 points de f (n), vous constaterez que bin [100] = 512. Mais ce n'est pas une valeur significative tant que vous ne l'avez pas mise à l'échelle par N. 512/1024 = 1/2 et bien sûr, l'autre 1/2 est dans le spectre négatif dans bin [924].

Si vous doublez la longueur de la DFT, N = 2048, les valeurs de sortie seraient le double de celles de la DFT à 1024 points, ce qui, encore une fois, rend les résultats dénués de sens à moins que nous ne les mettions à l'échelle 1 / N. La longueur de la TFD ne devrait pas être un facteur dans ce type d'analyse. Donc, dans cet exemple, vous devez redimensionner le DFT par 1 / N.

Ne doit pas mettre à l'échelle une transformation directe.

Supposons maintenant que vous ayez la réponse impulsionnelle d'un filtre FIR à 32 prises et que vous souhaitiez connaître sa réponse en fréquence. Pour plus de commodité, nous supposerons un filtre passe-bas avec un gain de 1. Nous savons que pour ce filtre, la composante continue du DFT doit être 1. Et il doit être clair que ce sera le cas quelle que soit la taille du DFT car la composante DC est simplement la somme des valeurs d'entrée (c'est-à-dire la somme des coefficients FIR).

Ainsi, pour cette entrée, la DFT n'est pas mise à l'échelle par 1 / N pour obtenir une réponse significative. C'est pourquoi vous pouvez mettre à zéro une réponse impulsionnelle autant que vous le souhaitez sans affecter le résultat de la transformation.

Quelle est la différence fondamentale entre ces deux exemples?

La réponse est simple. Dans le premier cas, nous avons fourni de l'énergie pour chaque échantillon d'entrée. En d'autres termes, l'onde sinusoïdale était présente pour les 1024 échantillons, nous avons donc dû mettre à l'échelle la sortie de la DFT au 1/1024.

Dans le deuxième exemple, par définition, nous n'avons fourni de l'énergie que pour 1 échantillon (l'impulsion à n = 0). Il a fallu 32 échantillons pour que l'impulsion se fraye un chemin à travers le filtre à 32 prises, mais ce délai n'est pas pertinent. Puisque nous avons fourni de l'énergie pour 1 échantillon, nous mettons à l'échelle la sortie de la DFT de 1. Si une impulsion était définie avec 2 unités d'énergie au lieu de 1, nous mettrions à l'échelle la sortie de 1/2.

Ne doit pas mettre à l'échelle une transformation inverse.

Considérons maintenant une DFT inverse. Comme pour le DFT avancé, nous devons considérer le nombre d'échantillons auxquels nous fournissons de l'énergie. Bien sûr, nous devons être un peu plus prudents ici car nous devons remplir à la fois les cases de fréquence positive et négative de manière appropriée. Cependant, si nous plaçons une impulsion (c'est-à-dire un 1) dans deux cases appropriées, alors la sortie résultante de la DFT inverse sera une onde cosinus avec une amplitude de 2 quel que soit le nombre de points que nous utilisons dans la DFT inverse.

Ainsi, comme avec la DFT directe, nous ne mettons pas à l'échelle la sortie de la DFT inverse si l'entrée est une impulsion.

Doit mettre à l'échelle une transformation inverse.

Considérons maintenant le cas où vous connaissez la réponse en fréquence d'un filtre passe-bas et que vous souhaitez effectuer une TFD inverse pour obtenir sa réponse impulsionnelle. Dans ce cas, puisque nous fournissons de l'énergie à tous les points, nous devons mettre à l'échelle la sortie de la DFT de 1 / N pour obtenir une réponse significative. Ce n'est pas aussi évident car les valeurs d'entrée seront complexes, mais si vous travaillez sur un exemple, vous verrez que c'est vrai. Si vous n'évoluez pas de 1 / N, vous aurez des valeurs de réponse impulsionnelle de crête de l'ordre de N, ce qui ne peut pas être le cas si le gain est 1.

Les quatre situations que je viens de détailler sont des exemples de points finaux où il est clair comment mettre à l'échelle la sortie de la DFT. Cependant, il y a beaucoup de zone grise entre les points d'extrémité. Prenons donc un autre exemple simple.

Supposons que nous ayons le signal suivant, avec N = 1024, Freq = 100:

f(n) = 6 * cos(1*Freq * 2*Pi * n/N)  n = 0 - 127
f(n) = 1 * cos(2*Freq * 2*Pi * n/N)  n = 128 - 895
f(n) = 6 * cos(4*Freq * 2*Pi * n/N)  n = 896 - 1023

Dans le domaine temporel

Notez les différences d'amplitude, de fréquence et de durée pour les trois composants. Malheureusement, la DFT de ce signal affichera les trois composants au même niveau de puissance, même si le 2ème composant a 1/36 du niveau de puissance des deux autres.

Domaine Freq non fenêtré

Le fait que les trois composants fournissent la même quantité d'énergie est évident, ce qui explique les résultats de la DFT, mais il y a un point important à souligner ici.

Si nous connaissons la durée des différentes composantes de fréquence, nous pouvons alors mettre à l'échelle les différents intervalles de fréquence en conséquence. Dans ce cas, nous ferions cela pour mettre à l'échelle avec précision la sortie de la DFT: bin [100] / = 128; bin [200] / = 768; bac [400] / = 128;

Ce qui m'amène à mon dernier point; en général, nous n'avons aucune idée de la durée pendant laquelle une composante de fréquence particulière est présente à l'entrée de notre DFT, nous ne pouvons donc pas faire ce type de mise à l'échelle. En général, cependant, nous fournissons de l'énergie pour chaque point d'échantillonnage, c'est pourquoi nous devrions mettre à l'échelle la TFD avant de 1 / N lors de l'analyse d'un signal.

Pour compliquer les choses, nous appliquerions presque certainement une fenêtre à ce signal pour améliorer la résolution spectrale de la DFT. Étant donné que les première et troisième composantes de fréquence sont au début et à la fin du signal, elles sont atténuées de 27 dB tandis que la composante centrale n'est atténuée que de 4 dB (fenêtre de Hanning).

Spectre fenêtré

Pour être clair, la sortie de la DFT peut être une assez mauvaise représentation de l'entrée, mise à l'échelle ou non.

Dans le cas de la DFT inverse, qui est généralement un problème de mathématiques pures, par opposition à l'analyse d'un signal inconnu, l'entrée de la DFT est clairement définie, vous savez donc comment mettre à l'échelle la sortie.

Lors de l'analyse d'un signal avec un analyseur de spectre, analogique ou FFT, les problèmes sont similaires. Vous ne connaissez pas la puissance du signal affiché, sauf si vous connaissez également son rapport cyclique. Mais même dans ce cas, le fenêtrage, la portée, les taux de balayage, le filtrage, le type de détecteur et d'autres facteurs fonctionnent tous pour faire fausse route.

En fin de compte, vous devez être très prudent lorsque vous vous déplacez entre les domaines temporel et fréquentiel. La question que vous avez posée concernant la mise à l'échelle est importante, donc j'espère avoir clairement indiqué que vous devez comprendre l'entrée vers la DFT pour savoir comment mettre à l'échelle la sortie. Si l'entrée n'est pas clairement définie, la sortie de la DFT doit être considérée avec beaucoup de scepticisme, que vous la moduliez ou non.

user5108_Dan
la source
J'ai choisi cette réponse pour l'exhaustivité et de nombreuses informations détaillées, mais voir également l'excellente réponse de Phonon pour un aperçu intuitif.
bryhoyt
9

Je peux penser à plusieurs raisons impliquant des problèmes de précision informatique, mais cela ne rendrait probablement pas justice parce que mathématiquement nous le définissons de la même manière, et les mathématiques ne connaissent aucun problème de précision.

Voici mon point de vue là-dessus. Réfléchissons conceptuellement à ce que signifie DFT dans le sens du traitement du signal, et pas seulement purement comme une transformation. Dans ce cas, il me semble que l'application de la DFT à un signal et à un système nous donne envie de voir des résultats différents.

Par exemple, appliquons la DFT à un signal constant de valeur 1. Supposons également que ce signal soit de longueur finie et de 16 taps de long. Que voulons-nous de DFT dans ce cas? De toute évidence, nous voulons qu'il nous dise quelle est l'amplitude de chaque composante de fréquence du signal. Clairement, notre signal a une seule composante de fréquence 0 et d'amplitude 1. Mais la DFT nous donne un seul pic au bac 0 et à la hauteur 16! Dans ce cas, votre frustration avec la définition de la DFT est parfaitement logique. Nous devons mettre à l'échelle les coefficients d'analyse et non les coefficients de synthèse.

D'accord, analysons maintenant le même tableau de nombres, à savoir notre chaîne de 16 unités, mais dans ce cas en tant que système. Que voulons-nous conceptuellement la réponse en fréquence d'un système? La plupart des gens diront que c'est l'amplitude de la sortie par rapport à celle de l'entrée, c'est-à-dire la fonction de transfert. Dans ce cas, supposons que nous injections un signal DC d'amplitude unitaire dans notre système et examinions l'amplitude de la réponse en régime permanent. Eh bien, convoluez deux signaux constants à 16 prises ensemble et vous obtenez une rampe transitoire suivie d'une sortie en régime permanent qui est un signal CC d'amplitude (vérifiez-le!) 16! Dans ce cas, notre définition de la transformation d'analyse sans mise à l'échelle est plus logique qu'autrement.

À la fin de la journée, tout dépend de ce que vous essayez de représenter. Il existe de nombreuses raisons de considérer cette définition centrée sur le système de la TFD.

Cependant, si nous regardons la transformation d'un point de vue purement mathématique, aucune de celles-ci n'a le plus de sens, car nous pouvons rendre cette transformation orthonormée et unitaire en mettant à l' échelle les transformations d'analyse et de synthèse par1(N) . Cela préservera également la puissance de la représentation du temps et de la fréquence de sorte que le théorème de Parseval soit toujours valable.

Phonon
la source
Excellente réponse, merci! J'ai choisi la réponse de user5108_Dan pour l'exhaustivité, mais votre réponse a certainement aidé à fournir la meilleure intuition.
bryhoyt
7

En fait, 3 façons différentes de mettre les facteurs d'échelle sont courantes dans diverses et différentes implémentations FFT / IFFT: 1.0 avant et 1.0 / N arrière, 1.0 / N avant et 1.0 arrière, et 1.0 / sqrt (N) à la fois vers l'avant et vers l'arrière.

Ces 3 variations de mise à l'échelle permettent toutes à un aller-retour IFFT (FFT (x)), en utilisant des fonctions trigonométriques génériques sin () et cos () pour les facteurs de torsion, d'être une transformation d'identité.

Notez que la préservation de la magnitude sinusoïdale sur la FFT vers l'avant ne préserve pas l'énergie totale (comme dans le théorème de Parseval). Choisissez celui que vous préférez.

hotpaw2
la source