miércoles, 10 de marzo de 2010

La magia del PRN

La magia del PRN consigue que un cacharro "gepeese" sea capaz de escuchar a los satélites que allá arriba le mandan sus señales.

Un satélite GPS gira en una órbita casi circular a unos 20.180 km de altura sobre la superficie terrestre. En enviar su señal no consume demasiado, unos 27 vatios, como una bombillita de poca luz. Emplea una buena antena, que enfocada hacia la Tierra distribuye algo más de energía hacía las zonas más alejadas, respecto de las que le quedan justo debajo. Esto compensa en parte el hecho de que el debajo "sólo" está a 20.180km, y la parte rasante a unos 25.700km. Con todo, dada la lejanía del satélite respecto de un receptor típico, a este le llegan aproximadamente 10-16 vatios. La señal es tan rematadamente débil que está inmersa en medio del ruido radioeléctrico existente debido a todo tipo de fuentes humanas presentes en la propia superficie.

Es como estar al fondo de una larga sala repleta de gente y esperar que nuestras palabras sean entendidas por alguién en el otro extremo, rodeado de personas en animada conversación.

Obviando muchos detalles, el caso es que podemos considerar que además de otra información, un satélite GPS repite sin cesar, cada milisegundo, una secuencia binaria (de ceros y unos) de 1023 dígitos. Cada satélite emplea una secuencia única, diferente a la empleada por el resto. El orden de los ceros y unos en la secuencia parece a primera vista aleatorio, sin una pauta clara, por lo que se les conoce como secuencias PRN.

PRN son las siglas inglesas de Pseudo Random Noise, ruido pseudo aleatorio, aunque puede usarse Number en vez Noise, entendiendo que no es pseudo aleatorio el número sino la secuencia. La señal formada por la repetición de esas secuencias de 1023 dígitos es lo que se llama el código C/A, pensado para uso civil, y encargado de ayudar a que el receptor pueda Adquirir (la A de C/A) la señal del satélite, además de hacer con él una estimación burda (la C en C/A es de Coarse) de la pseudodistancia. Hay otros códigos con secuencias PRN mucho más largas, como el P (de Preciso, en contraste a burdo) pensado para uso militar, o su versión encriptada Y (encrYpted).

El "Pseudo" indica que realmente la secuencia de ceros y unos no es al azar sino que se determina exactamente mediante ciertas reglas. Sin embargo tiene unas propiedades muy similares a las secuencias genuinamente aleatorias, y eso es lo que importa para su aplicación. Claro que el código C/A nos puede dar el pego de aleatorio como mucho 1 milisegundo, pues luego la secuencia se repite machaconamente.

¿Cuales son las reglas de creación de cada secuencia única? Se pueden explicar en términos de registros de desplazamiento de bits, y de operaciones lógicas. El caso es que esas reglas que usa el satélite, son conocidas y empleadas por los receptores. Y por cualquiera interesado si se lee por ejemplo la Interface Specification IS-GPS-200.

Yo he preferido seguir un excelente libro de texto sobre el GPS, el "Global Positioning System. Signals, Measurements, and Performance", segunda edición, de Pratap Misra y Per Enge, y hacer los "deberes" del final del capítulo 2, "GPS in 2005: An overview". Allí se pide calcular las secuencias PRN de 3 satélites distintos, el 05, el 19 y el 25, según las reglas explicadas. Las reglas son comunes a todos los satélites, cada satélite se distingue por usar unos parámetros con valores específicos. Una etiqueta como por ejemplo PRN05 designa tanto una secuencia PRN concreta, como el único satélite GPS que la emite.

Usando de nuevo octave, las gráficas de las secuencias de esos 3 satélites tienen esta pinta:



La secuencia de 1023 ceros y unos lógicos se muestra como una señal digital de pulsos, usando un valor de la señal de +1 para representar los ceros, y una señal con valor -1 para representar los unos. Cada dígito se convierte así en lo que se llama un "chip", un pulso rectangular de amplitud positiva o negativa. Hay 1023 chips en cada secuencia repetida. Visto como en la imagen anterior parece que se trata de un código de barras, pero acercandonos para ver sólo los 200 primeros chips de cada satélite, se aprecia mejor el sube y baja de la señal, sobre todo si se abre la imagen en una ventana para ella sola.



En estas figuras en el eje horizontal se representa el tiempo de emisión del chip. Si el primer chip se emite en t=0, el segundo se emite en t=1, ..., y el último chip de la secuencia, el 1023, se emite en t=1022, todo expresado en unidades de chip (de duración de chip), donde 1 chip equivale a 1/1023 milisegundos.

Y ahora llega la propiedad mágica crucial de las secuencias PRN. La correlación entre dos secuencias PRN de dos satélites cualesquiera es casi nula. La autocorrelación de cada secuencia PRN consigo misma desplazada es también casi nula, salvo para el desplazamiento nulo.

La correlación entre secuencias cualesquiera de ceros y unos, de la misma longitud, es algo muy sencillo. Poniendolas en paralelo se van comparando los elementos que ocupan la misma posición. Si sus valores coinciden, sumo 1. Si difieren, resto 1. Lo que me dé la suma al final es la correlación, si bien puedo normalizar diviendo entre la longitud de las secuencias. Es como hacer una operación de lógica booleana, el OR exclusivo o XOR.

Otra forma de cálcular el mismo resultado, empleando los niveles del "chip", +1 para los ceros y -1 para los unos, es la multiplicación. Cuando hay coincidencia tanto 1x1 como (-1)x(-1) dan 1. Cuando hay discrepancia (-1)x1 = 1x(-1)= -1. Agregando los resultados de tales multiplicaciones llegamos a lo mismo que antes, aunque así tenemos una definición más general, aplicable a cualquier señal con amplitudes tanto negativas como positivas, lo que nos será útil más adelante.

Si comparamos una secuencia con una copia de sí misma desplazada un número variable de pasos, se habla de autocorrelación. Si la copia no se desplaza (o se "desplaza" 0 pasos), siempre se suma 1 por cada dígito o chip, nunca se resta. Para una secuencia genuinamente aleatoria de 1023 dígitos la autocorrelación (sin normalizar) será de 1023. Por otro lado si la comparo con una copia exacta pero desplazada a derecha o izquierda, por la misma aleatoriedad de la situación de ceros y unos, casi tantas veces tendré coincidencias, sumando 1, como discrepancias, restando 1, y la suma total estará muy cerca de 0.

Este tipo de correlación es "circular". Al comparar una secuencia con otra desplazada a la derecha 10 pasos (cada paso corresponde a un dígito o a un chip), entendemos que el valor de la posición 1 pasa a la posición 11, el de la 2 a la 12, ..., el de la 1013 a la 1023, el de la 1014 a la 1, ..., y el de la 1023 a la 10. Si el desplazamiento es de 10 pasos a la izquierda, la posición 1 pasa a la 1014, ..., la 10 a la 1023, la 11 a la 1, ..., y la 1023 a la 1013.

La siguiente imagen refleja los valores de la autocorrelación para las PRN 05, 19 y 25, cada una con una copia desplazada un número de pasos (eje horizontal) entre 0 y 50. El aspecto para los pasos del 51 al 1022 es parecido al de los pasos 1 a 50. Un desplazamiento de 1023 pasos lleva a la configuración inicial.



Por cierto, esos pasos ¿son hacia la derecha o hacia la izquierda? En el caso de la autocorrelación da igual, por la simetría. Si comparo A con una copia C, de A desplazada a la izquierda 10 pasos, es igual que comparar C con una copia suya desplazada a la derecha 10 pasos, que resulta ser A.

Hay que fijarse que para desplazamiento cero siempre se obtiene la máxima correlación de 1023, faltaría más. Las funciones de autocorrelación en cada uno de los tres casos no coinciden exactamente, pero todas (esas tres y las del resto de satélites) comparten algo en común: los únicos valores de autocorrelación (sin normalizar) que se dan para cualquier paso entre 1 y 1022 son los tres siguientes: 63, -1 y -65. La clave es que esos valores son mucho más pequeños que el máximo, 1023.

Además la correlación entre la PRN de un satélite y la de cualquier otro satélite distinto, para cualquier paso (incluido el cero) también tiene siempre uno de esos tres valores: 63, -1, -65.

Las PRN de los satélites GPS para el código C/A son un tipo de secuencias matemáticas estudiadas por el Dr. Robert Gold, por lo que se conocen como códigos de Gold. Las propiedades enunciadas arriba se pueden probar rigurosamente.

El caso es que cada satélite emite una especie de huella dactilar. Y los receptores GPS tienen un "detector de huellas", un correlacionador. Es un circuito electrónico que genera la secuencia PRN de chips de un satélite dado, o su versión desplazada cierto número de pasos, y durante un milisegundo calcula la correlación de dicha secuencia con la señal que le llega.

Imaginemos que el correlacionador va a ver si recibe algo del satélite 19 en la señal que, captada por la antena del receptor, es acondicionada previamente por otros componentes del receptor. Para ello calculará la correlación entre la PRN19 generada localmente en el receptor y la señal. Por cada valor de la función de correlación para un cierto número de pasos de desplazamiento, hay que generar durante un milisegundo la secuencia PRN19 desplazada ese número de pasos, multiplicarla chip a chip por la señal recibida e ir sumando para tener al final el valor buscado. Este cálculo hay que repetirlo para los pasos del cero al 1022, hasta obtener los 1023 puntos de la función correlación.

Imaginemos también (problema 2.2(f) de Misra&Enge) que la señal que le llega es una suma de una señal completamente aleatoria, con distribución normal, media cero y desviación estándar de 4 unidades, junto con tres señales de los satélites 05, 19 y 25, de amplitud 1 (inferior pues a la del ruido aleatorio).

Como la distancia de cada satélite hasta el receptor será diferente, el origen de la secuencia de cada satélite (emitido cada milisegundo del reloj del satélite), llegará al receptor con un retraso variable. Supongamos que respecto a la marca de milisegundo del reloj del receptor, cuando comienza este a generar su PRN particular, el origen de la PRN05 recibida del satélite va retrasada 75 chips, el origen de la PRN19 recibida va retrasada 350 chips, y el origen de la PRN25 recibida va retrasada 905 chips. (Aunque es equivalente decir, por ejemplo, que el origen de la PRN05 desde su satélite va adelantada 1023-75 = 948 chips).

Bueno, pues la mezcla de las señales indicadas tendrá el siguiente aspecto, que dificilmente da idea de satélite alguno.




Teniendo que calcular 1023 valores, empleando un milisegundo por cada uno, en poco más de un segundo el correlacionador obtiene ... ¡algo así!:



Tatacháaaaaaan. Un maravilloso pico que destaca primoroso ¡justo en el paso 350! ¡Magia!

Ese pico por un lado descubre el código PRN del satélite 19 entre el aparente ruido informe, y por otro no menos importante, mide la pseudo distancia entre el satélite 19 y el receptor, salvo por un número entero de milisegundos.

Con la información del correlacionador, el receptor no sabe si la señal que le llega salió del satélite 19 hace 66 milisegundos y pico, o hace 67 milisegundos y pico, o hace 68 milisegundos y pico, o... pero sí sabe que el "pico" es de 350/1023 milisegundos. Cada chip dura 1/1023 milisegundos, tiempo en que la luz recorre "sólo" unos 293 metros. Los circuitos electrónicos pueden afinar y precisar el paso fraccionario en que se da el máximo de correlación, llegando a las milésimas, por ejemplo 350,276 en vez de 350. En una milésima de chip la luz recorre casi 30 centímetros, y ese es el orden de error en la estimación de la pseudo distancia basada en el código C/A (sin olvidar que es pseudo, no la distancia real, por el tema de la falta de sincronía entre el reloj del receptor y del satélite, y que hay otras fuentes de errores).

Vamos a ver esto del "pico". La función de correlación de la figura se obtiene al comparar la señal recibida con una copia de la secuencia PRN19 desplazada n pasos a la derecha. En términos temporales "desplazar a la derecha" significa "emitir con retraso": cada valor en la copia se emite n chips más tarde que en el original. El máximo encontrado en el paso 350 se da al utilizar una copia de PRN19 retrasada 350 chips. Eso indica que hay una coincidencia con el PRN19 original del satélite cuando esperamos 350 chips tras la marca de milisegundo del receptor. Esos 350 chips son el intervalo de espera entre una marca de milisegundo del reloj del receptor y la siguiente marca de milisegundo del reloj del satélite.

Tras captar el máximo de correlación y adquirir la señal del satélite 19, consideremos el momento en que por el reloj del receptor llega la marca de milisegundo X. El receptor sabe que llegará una marca de milisegundo del reloj del satélite dentro de 350/1023 milisegundos, es decir, cuando sea el tiempo de recepción X+(350/1023)ms. Pero no sabe qué marca de milisegundo es la que llega, cuándo fué emitida esa marca por el satélite. Necesita aún que alguién le "sople" que esa marca del satélite es la del milisegundo Y. Entonces el receptor ya podrá estimar la pseudodistancia como c por el intervalo temporal entre emisión y recepción: 0,001.c.(X+(350/1023)-Y).

¿Quién le sopla al receptor el tiempo exacto de emisión, según el reloj del satélite, de la marca de milisegundo que le llega? Pues la propia señal del satélite, que además del código C/A con su PRN, incluye bits de datos con todo lo necesario. Aunque como se transmiten a un ritmo muy lento de 50 bits por segundo, hace falta un poco de paciencia para poder seguir la señal (tracking). Pero antes de poder seguirla, y de poder acceder a esos bits de datos, hay que adquirir (adquisition) la señal, que es donde interviene el correlacionador.

Pero nunca es tan facil. Hay tantos detalles... Hemos asumido que la antena capta la señal, algún sistema electrónico la "acondiciona", y ya puede el correlacionador calcular punto a punto la correlación. Ya es bastante trabajo que esa función tenga 1023 puntos, y que haya que probar las PRN de todos los satelites, porque si el receptor de entrada no sabe dónde está, no sabe qué satélites pueden estar a la vista. Es que además la señal que el satélite emite en una frecuencia muy determinada se modifica por el efecto Doppler, debido al movimiento del satélite y el posible del receptor. Este tiene que buscar en varios intervalos de frecuencias, sin saber exactamente en cúal estará la señal de cada satélite, y por cada intervalo elegido hay que repetir los cálculos del correlacionador.

Es como si éste fuese un labriego que busca un anillo perdido en un surco, recorriendo con cuidado el mismo a ver si descubre su brillo, y recibe una aclaración de su amada, y propietaria del anillo: "... pero no estoy segura de que fuese en ese surco, salté por todo el terreno, y perdí no uno sino todos mis anillos, 4 ... o 10, no estoy segura".

Menos mal que estos cacharricos electrónicos son muy rápidos, y no tienen venas.