Comment faire la moyenne des réponses complexes (et justification)?

11

Je développe un logiciel qui calcule la réponse d'un système en comparant la FFT des signaux d'entrée et de sortie. Les signaux d'entrée et de sortie sont divisés en fenêtres et, pour chaque fenêtre, les signaux sont soustraits médians et multipliés par une fonction de Hann. La réponse de l'instrument pour cette fenêtre est alors le rapport des FFT des données traitées.

Je crois que ce qui précède est une procédure standard, bien que je puisse la décrire mal. Mon problème vient de la façon de combiner les réponses des multiples fenêtres.

Pour autant que je puisse voir, la bonne approche consiste à faire la moyenne des valeurs complexes, sur toutes les fenêtres. L'amplitude et la réponse en phase sont alors l'amplitude et la phase de la valeur complexe moyenne à chaque fréquence:

av_response = sum_windows(response) / n
av_amplitude = sqrt(real(av_response)**2 + imag(av_response)**2)
av_phase = atan2(imag(av_response), real(av_response))

avec boucles implicites sur les intervalles de fréquence.

Mais on m'a demandé de changer cela pour calculer l' amplitude et la phase dans chaque fenêtre d' abord , puis en moyenne les amplitudes et phases à travers toutes les fenêtres:

amplitude = sqrt(real(response)**2 + imag(response)**2)
av_amplitude = sum_windows(amplitude) / n
phase = atan2(imag(response), real(response))
av_phase = sum_windows(phase) / n

J'ai soutenu que c'était incorrect parce que la moyenne des angles était "juste fausse" - la moyenne de 0 et 360 degrés est de 180, par exemple, mais les gens avec qui je travaille ont répondu en disant "OK, nous afficherons uniquement l'amplitude".

Mes questions sont donc:

  • Ai-je raison de penser que la deuxième approche est généralement incorrecte pour les amplitudes aussi?
  • Si oui, y a-t-il des exceptions qui peuvent être pertinentes et qui peuvent expliquer pourquoi les personnes avec qui je travaille préfèrent la deuxième méthode? Par exemple, il semble que les deux approches s'accorderont à mesure que le bruit diminue, alors peut-être s'agit-il d'une approximation acceptée pour un faible bruit?
  • Si la deuxième approche est incorrecte, existe-t-il des références convaincantes et faisant autorité que je peux utiliser pour le montrer?
  • Si la deuxième approche est incorrecte, existe-t-il des exemples bons et faciles à comprendre qui le montrent pour l'amplitude (comme le fait la moyenne de 0 et 360 degrés pour la phase)?
  • Sinon, si je me trompe, quel serait un bon livre pour moi pour mieux m'éduquer?

J'ai essayé de faire valoir que la moyenne de -1 1 1 -1 1 -1 -1 -1 devrait être nulle plutôt que 1, mais ce n'était pas convaincant. Et même si je pense que je pourrais, avec le temps, construire un argument basé sur l'estimation de la probabilité maximale compte tenu d'un modèle de bruit particulier, ce n'est pas le genre de raisonnement que les gens avec qui je travaille écouteront. Donc, si je ne me trompe pas, j'ai besoin d'un argument puissant de l'autorité ou d'une démonstration "évidente".

[J'ai essayé d'ajouter plus de tags, mais je ne trouve pas ceux qui sont pertinents et je ne peux pas en définir de nouveaux en tant que nouvel utilisateur - désolé]

Andrew Cooke
la source
Quelle raison donnent-ils pour défavoriser votre méthode?
nibot
la réponse semble plus lisse lorsqu'elle est tracée avec la deuxième méthode. je pense que c'est parce que, pour les cas examinés, il n'y a pas de signal significatif (à f plus élevé), alors que la deuxième approche force un signal à "apparaître" du bruit. aussi, divers problèmes politiques / de communication comme vous pouvez le deviner.
Andrew Cooke
1
Avez-vous essayé de fournir des cas de test? Prenez des données aléatoires et filtrez-les à travers certains filtres avec une réponse en fréquence connue. Vérifiez que l'estimation de la fonction de transfert converge vers la fonction de transfert connue.
nibot
non. je n'ai pas. c'est une bonne suggestion. Merci. s'il est bien présenté, je peux voir que c'est convaincant.
Andrew Cooke

Réponses:

13

L'estimation de la fonction de transfert est généralement implémentée légèrement différemment de la méthode que vous décrivez.

Votre méthode calcule

F[y]F[X]

équerres représentent des moyennes prises sur des segments de données et une fonction de fenêtrage est appliquée à chaque segment de données avant de prendre la transformée de Fourier ( F ).F

Une implémentation plus typique calculera la densité spectrale croisée de x et y divisée par la densité spectrale de puissance de x:

F[y]F[x]|F[x]|2=F[y]F[x]F[X]F[X]

représente un produit ponctuel, et le conjugué complexe.

Je crois que cela vise à réduire l'effet des segments de données où les bacs de sont excessivement petits.F[X]

Estimation incohérente

Votre employeur vous a suggéré d'estimer la fonction de transfert à l'aide de

|F[y]||F[X]|

Cela fonctionnera , mais présente deux gros inconvénients:

  1. Vous n'obtenez aucune information de phase.
  2. Si vos mesures de l'entrée et de la sortie y ont un bruit supplémentaire, alors l'estimation de la fonction de transfert ne sera pas correcte.Xy

Votre méthode et la méthode que j'ai décrite contournent ces problèmes en utilisant une moyenne cohérente .

Les références

L'idée générale d'utiliser des segments moyennés superposés pour calculer les densités spectrales de puissance est connue sous le nom de méthode de Welch . Je crois que l'extension de l'utilisation de cela pour estimer les fonctions de transfert est également souvent connue sous le nom de méthode de Welch, bien que je ne sais pas si elle est mentionnée dans l'article de Welch. La recherche du document de Welch pourrait être une ressource précieuse. Une monographie utile sur le sujet est le livre de Bendat et Piersol, Random Data: Analysis and Measurement Procedures .

Validation

Pour valider votre logiciel, je vous suggère d'appliquer plusieurs cas de test, où vous générez du bruit blanc gaussien et le passez à travers un filtre numérique avec une fonction de transfert connue. Alimentez les entrées et les sorties dans votre routine d'estimation de la fonction de transfert et vérifiez que l'estimation converge vers la valeur connue de la fonction de transfert.

nibot
la source
ah! Je vous remercie. je vais enquêter / essayer cela.
Andrew Cooke
@nibot Quelles sont exactement les longueurs FFT utilisées ici?
Spacey
Vous pouvez utiliser n'importe quelle longueur. La longueur détermine la résolution et, implicitement (étant donné une quantité fixe de données à utiliser), le nombre de moyennes. Fft plus long = meilleure résolution mais aussi des erreurs plus importantes en raison de moins de moyennes.
nibot du
ok, une autre différence est que vous avez <F (y) F * (x)> / <F (x) F * (x)> tandis que Phonon a <F (y)> <F * (x)> / (< F (x)> <F * (x)>) afaict: o (
andrew cooke
Il n'y a aucun intérêt à calculer <F (y)> <F * (x)> / (<F (x)> <F * (x)>), car les <F * (x)> annuleront immédiatement. Je pense que c'est correct comme je l'ai écrit.
nibot
12

Bienvenue dans le traitement du signal!

Vous avez absolument raison. Vous ne pouvez pas simplement faire la moyenne des amplitudes et des phases DFT séparément, en particulier les phases. Voici une démonstration simple:

z=une+bje|z|zz

|z|=une2+b2
z=bronzer-1(bune)

zz1z2

z=z1+z22=une1+b1je+une2+b2je2=(une1+une2)+(b1+b2)je2

Dans ce cas,

|z|=(une1+une2)24+(b1+b2)24=12(une1+une2)2+(b1+b2)2une12+b12+une22+b222

Aussi,

z=bronzer-1(b1une1)+bronzer-1(b2une2)2bronzer-1(2(b1+b2)2(une1+une2))

|z|z

Maintenant, pour faire ce que vous essayez de faire, je suggère ce qui suit. Théoriquement, vous pouvez trouver une réponse impulsionnelle d'un système en divisant la DFT de la sortie par la DFT de l'entrée. Cependant, en présence de bruit, vous obtiendrez des résultats très étranges. Une façon légèrement meilleure de le faire serait d'utiliser une estimation de la réponse impulsionnelle FFT à deux canaux, qui va comme suit (dérivation non fournie ici, mais vous pouvez la trouver en ligne).

gje(F)=Fje1(F)+Fje2(F)++FjeN(F)NFjek(F)kkjego(F)=Fo1(F)+Fo2(F)++FoN(F)NgH^(F)H(F)

H^(F)=go(F)gje(F)|gje(F)|2

()

Phonon
la source
2
Merci; Je ne savais pas si voter pour celui-ci ou pour les nibots comme meilleure réponse - je pense qu'ils préconisent le même processus, alors je suis allé avec la recommandation du livre, mais si j'avais eu deux votes, cela aurait aussi inclus cela ...
Andrew Cooke
1
@andrewcooke Oui, ils défendent tous les deux exactement la même chose. J'espère que cela clarifie les choses pour vous et vos collègues.
Phonon
cela m'a été d'une grande aide (merci encore). Lundi, je proposerai que je (1) mette en œuvre la méthode suggérée et (2) fasse des comparaisons avec des données (synthétiques) connues pour les trois. alors j'espère que la meilleure approche gagnera: o)
andrew cooke
@Phonon Quelles longueurs de FFT utilisons-nous pour calculer les FFT ici? length_of_signal + max_length_of_channel + 1?
Spacey
@Mohammad Cela doit être au moins deux fois plus long que le délai que vous attendez. Cela est dû à la symétrie circulaire de la DFT, vous obtiendrez donc des valeurs de retard causales et non causales dans votre résultat.
Phonon
3

Il s'agit d'une différence entre la moyenne cohérente et incohérente des spectres FFT. Une moyenne cohérente est plus susceptible de rejeter le bruit aléatoire dans l'analyse. L'incohérence est plus susceptible d'accentuer les amplitudes de bruit aléatoires. Lequel de ces éléments est le plus important pour votre rapport de résultats?

hotpaw2
la source
s'ils donnent des résultats différents, je suppose que je veux une estimation impartiale. est non biaisé?
Andrew Cooke