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.