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.
¿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.
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.
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.
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.
fuente
Respuestas:
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:
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).
fuente
La forma habitual de acercarse direccional es moverse a un enfoque vectorial (complejo).
Por ejemplo, si sus observaciones son periódicas con períodoPAGS entonces la media de norte observaciones, α^( n ) se puede encontrar según la ecuación (1) del enlace anterior:
Se puede utilizar un enfoque similar para obtener una "varianza de muestra circular".
fuente
Cambiaría el dominio de[ - π: + π) a [ 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.
fuente
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.
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).
fuente
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 :
en tu contexto, tienesnorte medidas θyo con probabilidades pagsyo , la media θ es igual a:
fuente