Winkelmittelung


7

Ich arbeite an einem 802.11a-Demod, der größtenteils funktioniert, aber einen Fehler aufweist, der zeitweise Fehler verursacht. Ich habe die Charakterisierung noch nicht abgeschlossen, aber es scheint, dass das Problem in meinem Equalizer-Block liegt.

802.11a ist ein OFDM-Signal, und jedes OFDM-Symbol verfügt über 64 Unterkanäle. Vier dieser Unterkanäle sind Piloten (bekannte Daten) auf den Unterkanälen 7, 21, -7 und -21. Ich benutze die Piloten, um den verbleibenden Trägerversatz (wird in den Piloten als konstanter Phasenversatz angezeigt) und den Zeitversatz (wird als Liner-Versatz angezeigt) zu korrigieren, dh der Phasenversatz ist bei Bin 0 0 und wächst, wenn er weiter entfernt ist bin 0).

Ich mache eine einfache Mittelung, um die Trägerversatzphase zu erfassen, und einige einfache Manipulationen vor der Mittelung, um den Zeitphasenversatz zu erfassen (z. B. Kanal -21 mit -1 multiplizieren, Kanal -7 mit -3 multiplizieren und Kanal 7 mit 3 multiplizieren). Ich lasse absichtlich einige nicht benötigte Details weg, aber hoffentlich gibt dies den Kern meiner Arbeit wieder.

Mein Problem ist, dass die kreisförmige Natur von Winkeln dazu führen kann, dass sich die Mittelwertbildung für bestimmte Werte katastrophal schlecht verhält. Stellen Sie sich zum Beispiel eine Mittelwertbildung vor und . Es ist leicht grafisch zu erkennen, dass die Antwort entweder oder , aber die Standardmittelungsformel gibt die Antwort 0, buchstäblich das Gegenteil der richtigen Antwort.- -45π45π- -ππ

Geben Sie hier die Bildbeschreibung ein

Was ist der richtige Weg, um Winkel zu mitteln?

EDIT: Ich werde versuchen, das, was ich tue, etwas klarer zu machen. Es gibt zwei "Fehlerbedingungen", die sich am Ausgang der FFT unterschiedlich manifestieren. Erstens ist der Trägerversatz, der sich als konstanter Phasenversatz manifestiert.

Geben Sie hier die Bildbeschreibung ein

In diesem Fall ist es eine gute Idee, die kartesischen Pilotwerte anstelle des Winkels zu mitteln, wie John vorgeschlagen hat. Vielen Dank.

Die zweite Fehlerbedingung ist der Zeitversatz, der sich als linearer Phasenversatz manifestiert. Je größer der Zeitversatz ist, desto größer ist die Steigung des Phasenversatzes. Die Steigung kann auch negativ sein, je nachdem, ob sich der Empfänger vor oder hinter dem Empfänger befindet.

Geben Sie hier die Bildbeschreibung ein

Da es nun streng linear ist (der Ursprung geht durch Null), könnte ich theoretisch die Steigung von nur einem Piloten berechnen. Ich würde zuerst den Phasenversatz des Trägerversatzes berechnen (dh Fehlerbedingung Nr. 1), diesen herausziehen und dann eine der vier verwenden, um die Steigung zu berechnen. Das würde eine Mittelwertbildung insgesamt vermeiden. Das Problem ist, dass durch Rauschen diese Werte herumspringen können. Daher ist meine Schätzung viel besser, wenn ich alle vier Werte verwende - also die Mittelung.

Hoffentlich macht das obige Bild deutlich, dass ich die Pilotwerte nicht einfach so nehmen und mitteln kann, wie sie sind. Ich muss sie modifizieren, um sie zu einem konstanten + Rauschen zu machen. Dazu multipliziere ich den Winkel des -21-Piloten mit -1, des -7-Piloten mit -3, des 7-Piloten mit 3 und des 21-Piloten mit 1. Sie entsprechen somit dem 21-Piloten und können gemittelt werden.

Geben Sie hier die Bildbeschreibung ein

Ich kenne keinen guten Weg, um den Winkel eines Vektors mit einer Konstanten wie "3" im kartesischen System zu multiplizieren, daher scheint es mir, als müsste ich in Polarkoordinaten konvertieren, die Winkel mit -1 multiplizieren. -3, 3 und 1 konvertieren zurück in kartesische Koordinaten, mitteln die Piloten und konvertieren dann zurück in polar, um den Phasenversatz zu erhalten. Während dies machbar ist, würde ich gerne eine weniger klunkige Lösung finden, wenn möglich.


5
Ich mittle immer die komplexen Zahlen und nehme dann den Winkel dieses Ergebnisses.
John

1
Ich würde auch @ Johns Methode bevorzugen. Das tatsächliche Addieren der komplexen Zahlen entspricht einer Vektoraddition in der komplexen Ebene, die in Ihrem Beispiel einen Winkel von ergibt . Es ist ausreichend, den Winkel des Ergebnisses zu nehmen, da die Mittelwertbildung nur die Größe beeinflusst (es sei denn, ein begrenzter Zahlenbereich ist ein Problem)π
Deve

@ John Das ist ein sehr guter Punkt, aber wie im Fall des Zeit- / Phasenversatzes, bei dem ich den Winkel der "7" -Kanäle vor der Mittelwertbildung mit 3 multiplizieren möchte, sehe ich keinen guten Weg, dies zu tun. Ich denke, ich könnte in polar konvertieren, mit 3 multiplizieren, zurück in kartesisch konvertieren, durchschnittlich, dann wieder in polar konvertieren, aber das ist schrecklich klunkig.
Jim Clay

@ JimClay: Warum mitteln Sie Werte zusammen? Das geht aus Ihrer Beschreibung nicht hervor. Im Allgemeinen sollten Sie Werte nicht kohärent zusammen mitteln, es sei denn, sie sind tatsächlich kohärent. Andernfalls erhalten Sie die von Ihnen festgestellte destruktive Störung. Ich denke, ein bisschen mehr Detail würde helfen.
Jason R

Antworten:


5

Wie Sie in Ihrer Bearbeitung betont haben, eignet sich die Mittelung der Werte nicht für diese Art von Problem. Eine einfache Alternative wäre, einfach eine Linie unter Verwendung einer linearen Anpassung der kleinsten Quadrate an die vier Phasenmessungen anzupassen. Das sollte besser funktionieren als der Einzelpunktansatz.

Eine möglicherweise noch bessere Lösung wäre, stattdessen eine Sinuskurve an die vier komplexen Proben anzupassen. Dies verhindert, dass Sie zuerst ihre Phasenwinkel berechnen müssen, was zu einer Leistungsverschlechterung bei niedrigem SNR führen kann.

Um Ihr ursprüngliches Ziel zu erreichen, die Phase einer komplexen Zahl mit 3 zu multiplizieren, können Sie dies auch tun, indem Sie einfach jede Zahl auf die dritte Potenz setzen:

arg(x3)=3arg(x)

Dies wirkt sich natürlich auch auf die Größe der einzelnen Stichproben aus. Wenn Sie sich jedoch nur um die Phase kümmern, können Sie dies normalerweise umgehen. Auf diese Weise begrenzen Sie jedoch den Bereich der Zeitversätze, über die Ihr Schätzer arbeiten wird. Das Multiplizieren der Phase einer komplexen Zahl mit 3 führt zu einer Mehrdeutigkeit der Phase in der Ausgabe (dh Sie könnten keine Phasenverschiebung von feststellen ). Dies ähnelt den Contant-Phase-Ambiguitäten, die häufig in PSK-Synchronisationssystemen (wie einer Costas-Schleife) auftreten.2π/.32π/.3


3

Der übliche Weg, sich der Richtung zu nähern, besteht darin, zu einem (komplexen) Vektoransatz überzugehen.

Wenn Ihre Beobachtungen beispielsweise mit der Periode periodisch sind, kann der Mittelwert von Beobachtungen gemäß Gleichung (1) des obigen Links gefunden werden: das das so skaliert , dass es über periodisch ist , eine Einheitsvektorkomplexsumme ausführt, das Argument (Winkel) der komplexen Summe verwendet und schließlich auf in skaliert .P.N.α^(n)

μ^P.=P.2π[arg(n=0N.- -1ej2πα^(n)/.P.)]]2π
α^2π[0,P.)

Ein ähnlicher Ansatz kann verwendet werden, um eine "zirkuläre Stichprobenvarianz" zu erhalten.


0

Ich würde die Domain von ändern [- -π::+π) zu [0::2π) und mit allem modulo umgehen 2π. Dann müssen Sie sich nicht mit negativen Winkeln auseinandersetzen.

Oder verwenden Sie, wie John erwähnte, komplexe Zahlen für alles, bis zu dem Punkt, an dem Sie einen tatsächlichen Winkel benötigen.


2
Das Problem ist, dass sich das Problem nur dort verschiebt, wo es auftritt, und dass es das Problem nicht beseitigt. Stellen Sie sich zum Beispiel einen Winkel von vor0.1 und und Winkel von 2π- -0,1. Der "Durchschnitt" wäreπDas ist natürlich die falsche Antwort.
Jim Clay

Ja, du hast recht. Sie müssten einen quadrantenbasierten Ansatz wie die Berechnung der atan2-Funktion und aus dem gleichen Grund der Diskontinuität bei durchführen±π (oder 0/.2π). Das würde sich nicht gut für Durchschnittswerte eignen.
Ryan Johnson

0

Hier ist ein kurzer Hack, den ich in der Vergangenheit verwendet habe, um einen "durchschnittlichen Winkel" zu finden. Es ist etwas klobig und verwendet mehr magische Zahlen als ich möchte, aber zumindest ist es schnell und effizient und hat nicht den katastrophalen Fehler, den eine einfache arithmetische Mittelung mit sich bringt.

// median_average: find the "average angle" from some set of angles.
// pick A and B "well separated" from each other and from 0 --
// perhaps A =~= 2pi/3 and B =~= 4pi/3
average0 = (average{ (angles .- 0) mod 2pi } + 0) mod 2pi
averageA = (average{ (angles .- A) mod 2pi } + A) mod 2pi
averageB = (average{ (angles .- B) mod 2pi } + B) mod 2pi
average = median ( average0, averageA, averageB )

Normalerweise speichere ich Winkel in so etwas wie "Brad" -Darstellung, so dass die "Mod 2pi" -Operation eine schnelle "Bitand MASK" ist.

Ich habe einen Beweis dafür, dass der Median von 3 Zwischenmitteln immer den "richtigen" Durchschnitt für 2 Winkel ergibt, die weniger als 2 pi / 3 voneinander entfernt sind. Der Median von 5 Zwischenmitteln gibt immer den "richtigen" Durchschnitt für 2 Winkel an, die weniger als 4 pi / 5 voneinander entfernt sind usw.

Immer wenn dieser "median_average" -Algorithmus zwei Winkel zusammen mittelt, die "nicht zu weit voneinander entfernt" sind, ergibt höchstens 1 der 3 einfachen Zwischenmittelwerte einen katastrophal falschen Wert (höchstens 2 der 5 Zwischenmittelwerte). (Wie Sie bereits erwähnt haben, ist der Wert "durchschnittlich0" völlig falsch, wenn Sie versuchen, 0,1 und 2pi-0,1 zu mitteln.) Dann wirft der letzte Median () den "falschen" Wert aus (falls vorhanden) und gibt einen der beiden richtigen Durchschnittswerte zurück.

(Haben Sie die Möglichkeit in Betracht gezogen, dass der Zeitversatz so schlecht ist, dass der Phasenversatz die + pi-Linie kreuzt und sich um -pi "dreht"? Vielleicht haben Sie das Glück, dass dies in Ihrem System niemals vorkommt).


0

Zur Berechnung des Durchschnitts der Winkel können Sie kreisförmige Statistiken verwenden, wie sie in Mardia KV, Jupp PE (2009, Directional Statistics, Band 494 Hoboken, NJ: Wiley) definiert sind und wie in diesem Artikel, Gl. 10 :

Die Idee hinter Gleichung 10 ist, dass zur Berechnung des Mittelwerts einer kreisförmigen Größe Position und Richtung zuerst in einen Winkel umgewandelt werden müssen, der dann auf den 2D-Einheitskreis projiziert wird, in dem das arithmetische Mittel berechnet wird. Danach wird der Winkel, den die mittlere Position bildet, von einem Winkel in den Raum zurücktransformiert. Für Positionen hat dies die Form:

xprednet(t)=1+12πarctan2(ichN.excpich(t)(Sünde(2πxich- -π)),ichN.excpich(t)(cos(2πxich- -π)))

in Ihrem Kontext haben Sie N. Maße θich mit Wahrscheinlichkeiten pichder Durchschnitt θ entspricht:

θ=arctan2(ichN.pich(Sünde(2πθich- -π)),ichN.pich(cos(2πθich- -π)))

Ja, das ist im Grunde der gleiche Ansatz wie der, den ich vorgeschlagen habe ... obwohl der θGleichung, die Sie haben, ist falsch; Ich glaube das1+ ist nicht notwendig, noch ist die 12π. Bearbeitet, um dem zu entsprechen, was ich für richtig halte. YMMV.
Peter K.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.