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.
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.
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.
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.
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.
quelle
Antworten:
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:
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 π/ 3 2 π/ 3
quelle
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 )
Ein ähnlicher Ansatz kann verwendet werden, um eine "zirkuläre Stichprobenvarianz" zu erhalten.
quelle
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.
quelle
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.
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).
quelle
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 :
in Ihrem Kontext haben SieN. Maße θich mit Wahrscheinlichkeiten pich der Durchschnitt θ entspricht:
quelle