Promedio de ángulo

7

Estoy trabajando en una demodulación 802.11a que funciona, en su mayor parte, pero tiene un error que causa errores intermitentes. No he terminado de caracterizarlo, pero parece que el problema está en mi bloque ecualizador.

802.11a es una señal OFDM, y cada símbolo OFDM tiene 64 subcanales. Cuatro de esos subcanales son pilotos (datos conocidos), en los subcanales 7, 21, -7 y -21. Utilizo los pilotos para corregir cualquier desplazamiento restante de la portadora (se muestra como un desplazamiento de fase constante en los pilotos) y el desplazamiento de temporización (aparece como un desplazamiento del revestimiento), es decir, el desplazamiento de fase es 0 en el bin 0 y crece a medida que se aleja de bin 0).

Hago un promedio simple para detectar la fase de desplazamiento de la portadora, y algunas manipulaciones simples antes de promediar para detectar el desplazamiento de la fase de tiempo (por ejemplo, multiplique el canal -21 por -1, multiplique el canal -7 por -3 y multiplique el canal 7 por 3). Estoy omitiendo intencionalmente algunos detalles innecesarios, pero espero que esto me dé la esencia de lo que estoy haciendo.

Mi problema es que la naturaleza circular de los ángulos puede hacer que el promedio se comporte de manera catastrófica para ciertos valores. Por ejemplo, imagine imaginar promediando y . Es fácil ver gráficamente que la respuesta debe ser o , pero la fórmula de promedio estándar da la respuesta de 0, literalmente lo contrario de la respuesta correcta.-4 45 5π4 45 5π-ππ

ingrese la descripción de la imagen aquí

¿Cuál es la forma correcta de promediar ángulos?

EDITAR: Trataré de aclarar un poco lo que estoy haciendo. Hay dos "condiciones de error" que se manifiestan de manera diferente en la salida de la FFT. Primero es el desplazamiento de la portadora, que se manifiesta como un desplazamiento de fase constante.

ingrese la descripción de la imagen aquí

Para este caso, es una buena idea promediar los valores del piloto cartesiano en lugar del ángulo, como sugirió John. Gracias.

La segunda condición de error es la compensación de tiempo, que se manifiesta como una compensación de fase lineal. Cuanto mayor es el desplazamiento de tiempo, mayor es la pendiente del desplazamiento de fase. La pendiente también puede ser negativa, dependiendo de si el receptor está adelante o atrás de donde debería estar.

ingrese la descripción de la imagen aquí

Ahora, dado que es estrictamente lineal (el origen pasa por cero), teóricamente podría calcular la pendiente a partir de un solo piloto. Primero calcularía el desplazamiento de fase de desplazamiento de la portadora (es decir, la condición de error n. ° 1), lo restaría y luego usaría cualquiera de los cuatro para calcular la pendiente. Eso evitaría promediar por completo. El problema es que el ruido puede hacer que estos valores salten, por lo que mi estimación es mucho mejor si uso los cuatro, por lo tanto, el promedio.

Afortunadamente, la imagen de arriba deja en claro que no puedo simplemente tomar los valores piloto y promediarlos tal como están, tengo que modificarlos para que sean un ruido constante +. Hago esto multiplicando el ángulo del piloto -21 por -1, el piloto -7 por -3, el piloto 7 por 3 y el piloto 21 por 1. De este modo, se vuelven equivalentes al piloto 21 y se pueden promediar.

ingrese la descripción de la imagen aquí

No conozco una buena manera de multiplicar el ángulo de un vector por una constante como "3" en el sistema cartesiano, por lo que me parece que tendría que convertir a coordenadas polares, multiplicar los ángulos por -1, -3, 3 y 1 respectivamente, convierten de nuevo a coordenadas cartesianas, promedian los pilotos, luego vuelven a convertir a polar para obtener el desplazamiento de fase. Si bien esto es factible, me gustaría encontrar una solución menos complicada si es posible.

Jim Clay
fuente
55
Siempre promedio los números complejos y luego tomo el ángulo de ese resultado.
John
1
También preferiría el método de @ John. En realidad, sumar los números complejos corresponde a una suma vectorial en el plano complejo que produce un ángulo deπen tu ejemplo Tomar el ángulo del resultado es suficiente ya que el promedio solo afecta la magnitud (a menos que el rango limitado de números sea un problema)
Deve
@ John Ese es un muy buen punto, pero como el caso del desplazamiento de tiempo / fase donde quiero multiplicar el ángulo de los canales "7" por 3 antes de promediar, no veo una buena manera de hacerlo. Supongo que podría convertir a polar, multiplicar por 3, volver a convertir a cartesiano, promedio, y luego volver a convertir a polar, pero eso es terriblemente extraño.
Jim Clay
@ JimClay: ¿Por qué están promediando valores juntos? Eso no está claro en tu descripción. En general, no debe promediar valores de manera coherente juntos a menos que de hecho sean coherentes; de lo contrario, obtienes la interferencia destructiva que has notado. Creo que un poco más de detalle ayudaría.
Jason R

Respuestas:

5

Como señaló en su edición, promediar los valores no es una gran opción para este tipo de problema. Una alternativa simple sería simplemente ajustar una línea a las mediciones de cuatro fases usando un ajuste lineal de mínimos cuadrados . Eso debería funcionar mejor que el enfoque de un solo punto.

Una solución posiblemente incluso mejor sería ajustar una sinusoide a las cuatro muestras complejas. Esto evita que primero tenga que calcular sus ángulos de fase, lo que podría causar una degradación en el rendimiento a baja SNR.

Además, para lograr su objetivo original de multiplicar la fase de un número complejo por 3, puede hacerlo simplemente llevando cada número a la tercera potencia:

arg(X3)=3arg(X)

Obviamente, esto también afectará la magnitud de cada muestra, pero si solo le preocupa la fase, generalmente puede solucionarlo. Al hacer esto, sin embargo, va a limitar el rango de compensaciones de tiempo sobre las que trabajará su estimador. Multiplicar la fase de un número complejo por 3 introducirá un2π/ /3 ambigüedad de fase en la salida (es decir, no podría detectar un cambio en la fase de 2π/ /3) Esto es similar a las ambigüedades de la fase de contacto que a menudo se ven en los sistemas de sincronización PSK (como un bucle Costas).

Jason R
fuente
3

La forma habitual de acercarse direccional es moverse a un enfoque vectorial (complejo).

Por ejemplo, si sus observaciones son periódicas con período PAGS entonces la media de norte observaciones, α^(norte) se puede encontrar según la ecuación (1) del enlace anterior:

μ^PAGS=PAGS2π[arg(norte=0 0norte-1mij2πα^(norte)/ /PAGS)]2π
que escala el α^ ser periódico sobre 2π, realiza una suma compleja de vector unitario, toma el argumento (ángulo) de la suma compleja y finalmente vuelve a escalar en [0 0,PAGS).

Se puede utilizar un enfoque similar para obtener una "varianza de muestra circular".

Peter K.
fuente
0

Cambiaría el dominio de [-π:+π) a [0 0:2π) y lidiar con todo módulo 2π. Entonces no necesitas lidiar con ángulos negativos.

O como John mencionó, use números complejos para todo hasta donde necesite un ángulo real.

Ryan Johnson
fuente
2
El problema es que eso solo cambia donde ocurre el problema, no lo elimina. Por ejemplo, imagine un ángulo de0.1 yy ángulo de 2π-0.1. El "promedio" seríaπ, que es, por supuesto, la respuesta incorrecta.
Jim Clay
Si, tienes razón. Debería realizar un enfoque basado en cuadrantes, como cómo se calcula la función atan2 y por la misma razón de la discontinuidad en±π (o 0 0/ /2π) Eso no se prestaría bien para realizar promedios.
Ryan Johnson
0

Aquí hay un truco rápido que he usado en el pasado para encontrar un "ángulo promedio". Es un poco torpe y usa más números mágicos de los que me gustaría, pero al menos es rápido y eficiente y no tiene la falla catastrófica que da el promedio aritmético simple.

// 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 )

Por lo general, almaceno los ángulos en algo así como la representación "brad" , de modo que la operación "mod 2pi" es una rápida "mordida y MÁSCARA".

Tengo una prueba de que la mediana de 3 promedios intermedios siempre da el promedio "correcto" para 2 ángulos que están a menos de 2pi / 3 de distancia; la mediana de 5 promedios intermedios siempre da el promedio "correcto" para 2 ángulos que están separados por menos de 4pi / 5, etc.

Cada vez que este algoritmo de "promedio_medio" promedia 2 ángulos juntos que están "no muy separados", como máximo 1 de los 3 promedios simples intermedios da un valor catastróficamente incorrecto (como máximo 2 de los 5 promedios intermedios). (Como ya mencionó, el valor "promedio0" es completamente incorrecto al intentar promediar 0.1 y 2pi-0.1). Luego, la mediana final () arroja el valor "incorrecto" (si hay uno) y devuelve uno de los 2 promedios correctos.

(¿Ha considerado la posibilidad de que el desplazamiento de temporización sea tan malo que el desplazamiento de fase cruza la línea + pi y se "ajusta" a -pi? Quizás tenga la suerte de que eso nunca suceda en su sistema).

David Cary
fuente
0

Para calcular el promedio de ángulos, puede usar estadísticas circulares como se define en Mardia KV, Jupp PE (2009, Directional Statistics, Vol. 494 Hoboken, NJ: Wiley) y como se usa en este documento, Eq. 10 :

La idea detrás de la ecuación 10 es que para calcular la media de una cantidad circular, primero es necesario transformar la posición y la dirección en un ángulo, que luego se proyecta al círculo de unidad 2D donde se calcula la media aritmética. Después de eso, el ángulo que forma la posición media se transforma de nuevo de un ángulo al espacio. Para las posiciones, esto toma la forma:

Xpagsrmirenortemit(t)=1+12πarctan2(yonortemiXCpagsyo(t)(pecado(2πXyo-π)),yonortemiXCpagsyo(t)(cos(2πXyo-π)))

en tu contexto, tienes norte medidas θyo con probabilidades pagsyo, la media θ es igual a:

θ=arctan2(yonortepagsyo(pecado(2πθyo-π)),yonortepagsyo(cos(2πθyo-π)))
Meduz
fuente
Sí, eso es básicamente el mismo enfoque que sugerí ... aunque el θla ecuación que tienes está mal; Creo que el1+ no es necesario ni el 12π. Editado para que coincida con lo que creo que es correcto. YMMV.
Peter K.