-
UNIVERSIDAD DE SEVILLA
ESCUELA SUPERIOR DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA DE SISTEMAS Y AUTOMÁTICA
Detección de ataques de spoofing a los
sistemas de navegación global.
AUTOR: FERNANDO GARCÍA ZAPATA
TUTOR: ANÍBAL OLLERO BATURONE
SEPTIEMBRE 2013, SEVILLA
-
1
Índice Capítulo 1. Introducción
...............................................................................................................................
3
Evolución histórica de los sistemas GNSS
.................................................................................................
3
Las amenazas a los sistemas GNSS
...........................................................................................................
4
Receptores GPS basados en software
......................................................................................................
5
Capítulo 2. Estado del arte de la seguridad GPS
..........................................................................................
6
2.1 Técnicas de spoofing
...........................................................................................................................
6
2.1.2 Ataque mediante simulador de señales GPS
...............................................................................
6
2.1.3 Ataque mediante un receptor-spoofer GPS
.................................................................................
6
2.1.4 Ataque mediante varios receptores-spoofers GPS
......................................................................
7
2.2 Técnicas anti-spoofing
........................................................................................................................
8
2.2.1 Discriminación por ángulo de llegada
..........................................................................................
8
2.2.2 Autenticación de señales GPS
....................................................................................................
11
2.2.3 Monitorización de la calidad de la señal recibida
......................................................................
13
2.2.4 Correlación de la señal P
............................................................................................................
15
Capítulo 3. Sistema GPS
..............................................................................................................................
16
3.1 Introducción
......................................................................................................................................
16
3.2 Descripción del sistema
....................................................................................................................
17
3.3 Descripción de las señales GPS
.........................................................................................................
18
3.4 Modulación y código C/A
..................................................................................................................
20
3.5 Datos de navegación
.........................................................................................................................
21
3.6 Funcionamiento del sistema GPS
......................................................................................................
23
3.7 Adquisición
........................................................................................................................................
25
3.8 Seguimiento o tracking
.....................................................................................................................
26
3.9 Extracción de los datos de navegación
.............................................................................................
27
Capítulo 4. Anti-spoofing utilizando la señal P(Y)
.....................................................................................
29
4.1 Procesamiento de las señales secretas para autenticación
..............................................................
29
4.2 Implementación del mecanismo de autenticación
...........................................................................
32
4.3 Introducción al receptor software “Soft-GNSS”
...............................................................................
33
postProcessing.m
................................................................................................................................
35
Acquisition.m.......................................................................................................................................
35
Tracking.m
..........................................................................................................................................
36
4.4 Modificación del receptor software SoftGNSS v3.0
..........................................................................
37
-
2
initSettings.m
......................................................................................................................................
38
postProcessing.m
................................................................................................................................
40
Tracking.m
..........................................................................................................................................
43
CheckSpoof.m
......................................................................................................................................
47
Capítulo 5. Resultados
................................................................................................................................
52
Capítulo 6. Conclusiones y líneas futuras de desarrollo
............................................................................
58
Conclusiones
...........................................................................................................................................
58
Líneas futuras de desarrollo
....................................................................................................................
58
REFERENCIAS
..............................................................................................................................................
60
APÉNDICE A. TOMA DE LOS DATOS GPS.
..................................................................................................
61
-
3
Capítulo 1. Introducción
A lo largo de este proyecto vamos a desarrollar, aplicar y
analizar los resultados de una técnica anti-
spoofing para los sistemas GPS, en concreto una que utiliza la
señal militar para detectar ataques de
spoofing.
En este primer capítulo haremos una pequeña introducción sobre
la evolución de los sistemas de
navegación, las amenazas que han surgido y cómo ha proliferado
el desarrollo de sistemas de
navegación basados en software.
En el siguiente capítulo haremos un repaso sobre las técnicas,
tanto de ataque como de defensa, del
sistema GPS actual. Observaremos como a medida que han aparecido
nuevas técnicas para atacar estos
sistemas, se han desarrollado también mecanismos de defensa para
combatirlos. Estudiaremos varias
técnicas desarrolladas en los últimos años por numerosos
investigadores.
En el capítulo tres describiremos, de forma detallada, el
funcionamiento del sistema GPS. Es primordial
entenderlo, ya que así podremos analizar cuáles son sus
debilidades, cómo puede ser atacado y cómo
podemos defendernos de estos ataques.
Durante el capítulo cuatro describimos de forma detallada uno de
los mecanismos de defensa que
existen para los sistemas GPS. Además desarrollaremos, en Matlab
y utilizando un receptor GPS
software, este mecanismo para poder estudiar posteriormente sus
resultados.
En el capítulo cinco presentamos los resultados de aplicar el
mecanismo desarrollado en el capítulo
cuatro, tanto en una situación en la que el sistema está siendo
atacado como en una situación donde no
se produce el ataque, para comprobar como no arroja falsos
positivos (no indica que estamos bajo un
ataque cuando no lo estamos) y detecta correctamente cuando sí
se está atacando al sistema.
Finalmente, en el capítulo seis, se detallan las conclusiones
obtenidas tras analizar los resultados.
También se proponen líneas futuras de desarrollo, de manera que
el trabajo aquí desarrollado pueda ser
ampliado e implementado en sistemas que funcionen en tiempo
real.
Evolución histórica de los sistemas GNSS
Hoy en día los sistemas de navegación son ampliamente utilizados
en cientos de millones de
dispositivos, y son cada vez más los servicios, en muchos casos
críticos, que basan su funcionamiento en
una correcta sincronización temporal y en el conocimiento de la
posición exacta que es ofrecido gracias
a los GNSS (sistemas de navegación global por satélite).
Un ejemplo de este tipo de servicios son el guiado de aviones en
condiciones de poca o ninguna
visibilidad (ya sea por ser de noche o por inclemencias
meteorológicas) o la sincronización de las redes
de comunicaciones móviles.
-
4
Pero no solo los sistemas de navegación por satélite se utilizan
en infraestructuras críticas para la
sociedad, si no que cada día están más implantados en la vida
del ciudadano y forman una parte vital de
los servicios que utilizamos todos los días, tales como equipos
que utilizan nuestra posición para calcular
rutas y guiarnos hasta un punto de destino.
Por estos motivos resulta cada vez más importante garantizar la
integridad y seguridad de los
sistemas de navegación, ya que además, como se ha demostrado con
muchos otros casos de nuevas
tecnologías que han surgido a lo largo de la historia reciente,
tales como internet, cuanto más usado y
crítico se vuelve un servicio, más intereses (y, por tanto,
personas) aparecen e intentan atacarlo y sacar
provecho de sus vulnerabilidades.
Dentro de los sistemas GNSS, analizaremos el caso particular del
GPS, ya que es con mucha
diferencia el más usado en la actualidad. Los otros sistemas son
GLONASS, muy poco operativo desde el
desmantelamiento de la Unión Soviética, y Galileo, que aún no
está en funcionamiento y es poco
probable que lo esté antes de 2019. Además, Galileo será capaz
de funcionar también con señales GPS,
así que las vulnerabilidades GPS constituirán vulnerabilidades
también en Galileo en la medida en que
ambos sean compatibles.
En el sistema GPS debemos diferenciar, desde el punto de vista
de la seguridad, del uso civil y del
militar. En el caso del militar, hoy en día la seguridad no es
un problema, ya que desde su concepción se
pensó en hacer un sistema que fuese robusto e invulnerable (al
menos, en la medida de lo posible). No
ocurre así con el uso civil, que como veremos, no presenta
ninguna medida de seguridad.
Las amenazas a los sistemas GNSS
Una característica de los sistemas GNSS es que los receptores en
la Tierra funcionan con señales
de muy baja potencia, de hecho con un nivel de potencia que es
menor que el ruido térmico de los
propios sistemas. Esto provoca que el tipo de ataque más común y
sencillo de llevar a cabo consista en
ataques de denegación de servicio (DoS, “denial of service”),
realizados mediante el “jamming”, creando
interferencias.
Existe otro tipo de ataque, mucho más peligroso, denominado
“spoofing”. Este ataque consiste en
la suplantación de la señal GNSS, de manera que los receptores
calculen posiciones incorrectas. Este
ataque es mucho más dañino que el de denegación de servicio, ya
que permite que el usuario del
sistema GNSS reciba una posición incorrecta por parte del
receptor sin que éste sea capaz de detectarlo.
Este ataque es posible debido a que las señales GPS no llevan
ningún mecanismo de autenticación o
identificación para poder determinar que la señal recibida es
legítima. En el nuevo sistema Galileo sí que
se prevé incluir un sistema de autenticación, pero probablemente
constituya un servicio por el que haya
que pagar para su uso.
Los ataques de spoofing constituyen una amenaza real, como
demuestra el hecho de que
numerosos ataques de este tipo han sido llevados a cabo por
investigadores en entornos controlados.
-
5
Los métodos que se han desarrollado hasta ahora para mitigar
este tipo de ataques se basan
principalmente en comprobaciones entre varios sistemas distintos
(ya sean internos o externos al
sistema GNSS) y en la predicción de características de la señal
de navegación que estamos recibiendo.
Receptores GPS basados en software
En los últimos diez años ha habido una explosión, en gran parte
de la comunidad de
investigadores, en la implementación de receptores GPS mediante
software. En estos sistemas se
implementan los correladores, el tracking de la señal y el
procesamiento de los mensajes de navegación
para calcular la posición. Una característica común a la mayoría
de receptores basados en software es
que no funcionan en tiempo real, es decir, no procesan la señal
directamente, sino que utilizan como
entrada un fichero consistente en un log de señal GPS capturado
de alguna otra forma.
Estos sistemas presentan una clara ventaja respecto a los
sistemas basados en hardware
tradicionales: la flexibilidad a la hora de modificar, mejorar e
implementar nuevas características al
sistema, y es por este último motivo por el que hemos decidido
trabajar con un receptor GPS basado en
software, a pesar de que se han propuesto métodos para crear un
dispositivo anti-spoofing [2].
Las entradas que utilizaremos para este receptor serán dos
ficheros de datos con las señales GPS,
capturados ambos ficheros en el mismo momento separados una
distancia de varios metros.
-
6
Capítulo 2. Estado del arte de la seguridad GPS
Vamos a realizar un pequeño recorrido por las diferentes
técnicas para realizar ataques de spoofing
al sistema GPS y los mecanismos que se han desarrollado para
descubrir estos ataques.
2.1 Técnicas de spoofing
Para evaluar la forma de mitigar los ataques de spoofing,
primero debemos conocer cuáles son los
tipos de ataques que existen. Estos ataques pueden ser desde muy
simples hasta realmente sofisticados,
llegando en casos muy extremos (utilizando una gran cantidad de
recursos y tecnología) a ser
prácticamente indetectables
Los clasificaremos según el nivel de sofisticación del
ataque.
2.1.2 Ataque mediante simulador de señales GPS
El tipo de ataque más sencillo consiste en conectar un
amplificador y una antena a un generador
de señales GPS. Con esto lograríamos radiar señales GPS falsas
con los datos que nosotros configuremos
en el generador de señales.
Sin embargo, existen varios inconvenientes en este tipo de
ataques. El primero, y quizás el más
importante, es el coste: un simulador de señales GNSS puede
llegar a costar más de 250 mil euros.
Algunas empresas ofrecen opción de alquilar este tipo de equipos
por algo menos de mil euros a la
semana, lo que hace más viable un ataque de este tipo de corta
duración que un ataque continuado
durante un tiempo prolongado. Otro inconveniente es el tamaño,
ya que la mayoría de simuladores GPS
son equipos pesados y muy grandes. Esto lleva a que no se pueda
realizar este tipo de ataques en
entornos controlados por fuerzas de seguridad o simplemente de
forma discreta (por ejemplo, sería
inviable este tipo de ataque en un aeropuerto).
Como vemos, este tipo de ataque es muy sencillo de llevar a
cabo, pero solo teóricamente, para
llevarlo a la práctica hacen falta grandes recursos económicos y
que la zona de ataque no esté
controlada ni haya mucha afluencia de personas.
2.1.3 Ataque mediante un receptor-spoofer GPS
-
7
Una de las mayores dificultades de realizar con éxito un ataque
de spoofing es obtener, de
forma más o menos precisa, la posición y velocidad de la antena
del receptor al que queremos atacar.
Esto es importante porque, como veremos en las técnicas
anti-spoofing, podríamos detectar que un
ataque se está produciendo si estos datos que recibimos del
receptor GPS no son coherentes con el
estado de nuestro sistema.
Para solventar este problema, uno de los ataques consiste en
crear un pequeño
(suficientemente pequeño como para que sea portable) receptor
GPS que sea también capaz de emitir
una señal GPS spoofeada [2]. La forma de proceder sería
posicionar este pequeño receptor cerca de la
antena del sistema que queremos atacar, tal y como se indica en
la Figura 1, de manera que ambos
reciban aproximadamente la misma posición, velocidad y tiempo.
Con estos datos, nuestro receptor
sería capaz de generar una señal suficientemente elaborada que
logre realizar con éxito un ataque de
spoofing.
Figura 1. Esquema de los dispositivos para realizar un
ataque.
Por supuesto, este tipo de ataque también tiene sus
inconvenientes. Hoy en día no existen
equipos receptores-spoofers de GPS disponibles en el mercado, lo
que reduce drásticamente el número
de personas capaces de llevar a cabo este ataque.
Por otro lado, el software que debería llevar este sistema
debería ser bastante elaborado, ya que
debería implementar no solo un sistema de recepción de GPS, sino
también un sistema generador de
señales GPS que además deberá utilizar los datos que está
recibiendo el receptor, lo que implica que
debe haber sincronización entre el receptor GPS y el emisor de
señales GPS spoofeadas. Esto, a pesar de
que la estructura de los mensajes GPS es pública y está
perfectamente documentada, es complejo y
requiere muchos conocimientos, no solo de software sino también
de electrónica y hardware.
Otro inconveniente es que es necesario acceso físico al sistema
que quieres atacar, y además este
sistema no debe ser revisado por personas, ya que detectarían el
receptor y el ataque quedaría anulado.
2.1.4 Ataque mediante varios receptores-spoofers GPS
Este es el tipo de ataque más complicado de realizar, ya que
requiere mucha coordinación, que
las señales que emita cada equipo tenga la fase correcta, que no
se ataquen entre ellos, etc.
Ante este tipo de ataque, no hay defensa posible, al menos no
con el sistema GPS actual, la única forma
-
8
de detectarlos sería mediante autenticación criptográfica (como
tiene previsto implementar Galileo, por
ejemplo) pero esto no es posible con la tecnología GPS.
Se necesitan tantos equipos receptores-spoofers como antenas
tenga el objetivo al que se desea
atacar. Todos estos equipos deben estar sincronizados en fase,
es decir, deben tener algún mecanismo
de sincronización o compartir un oscilador. También deben
situarse de forma que los equipos no se
spoofeen entre ellos. El objetivo de esta configuración (varios
dispositivos, atacando cada uno a una
antena) es el de evitar un tipo de técnica anti-spoofing que
veremos posteriormente.
Estos son, básicamente, todos los tipos de ataques de spoofing
que se pueden llevar a cabo
actualmente.
Vamos ahora a analizar las diferentes técnicas que los
investigadores han propuesto durante los
últimos años para mitigar, o al menos detectar, estos
ataques.
2.2 Técnicas anti-spoofing
A medida que han ido apareciendo nuevas formas de atacar los
sistemas GNSS, también han
surgido métodos para detectarlos.
Hay que distinguir entre la detección y la actuación. Mientras
que, como veremos, sí se han
desarrollado técnicas para detectar los ataques, no hay forma de
evitarlos o pararlos, por lo que el único
mecanismo de actuación posible ante un ataque de este tipo es
dejar de confiar en los datos aportados
por el sistema GPS.
2.2.1 Discriminación por ángulo de llegada
Este mecanismo detecta el ataque gracias al uso de múltiples
antenas receptoras. Se basa en la
observación de las diferencias de las portadoras L1 captadas
entre diferentes antenas que comparten un
oscilador común.
-
9
Figura 2. Se observa la diferencia entre la fase de la señal que
recibe cada antena.
Como vemos en la Figura 2, las líneas discontinuas representan
las zonas de fase constante de la
señal emitida por el satélite, separadas una distancia igual a
la longitud de onda, y que son
perpendiculares al vector S, que es un vector que va desde el
receptor hasta el satélite (representaría la
línea de visión, LOS).
En este caso, en el que el receptor no está siendo atacado, la
diferencia de fase de portadora L1
que ven las dos antenas respecto al satélite será
previsible:
𝑑𝜑𝑖 = 𝑏𝑇𝐴�̂�𝑖 + 𝑁𝑖 + 𝐵 + 𝛾𝑖
Donde:
- i hace referencia al satélite del que estamos calculando la
fase
- b es el vector que une las dos antenas
- A es una matriz de cosenos direccionales para rotar
vectores
- �̂�𝑖 es el vector de la línea de visión (LOS) hasta el
satélite
- 𝑁𝑖 es un número aleatorio que variará para cada satélite
- B es un valor que dependerá de la implementación que
realicemos del sistema.
- 𝛾𝑖 es la suma de todos los errores en la fase de la portadora
para el satélite
-
10
Figura 3. Esquema de un sistema siendo atacado.
En el caso de que el receptor esté siendo atacado, como se
observa en la Figura 3, la diferencia
de fase entre las dos antenas será distinta a la esperada, y
gracias a este hecho detectaremos que se
está produciendo un ataque.
La Figura 4 muestra la variación de la fase para cuatro
satélites distintos. Como vemos, para
cada satélite obtenemos una variación distinta.
Figura 4. Variación de fase para distintos satélites.
El problema de este sistema es que, como vemos en la ecuación,
para poder estimar la fase
necesitamos la altura de las antenas. Esto no es un problema en
el caso de sean estáticas, pero si están
en movimiento (por ejemplo, montadas en un avión) necesitaremos
alguna forma de averiguar la altura
(y, obviamente, esta forma no puede ser utilizando las señales
GPS).
-
11
El algoritmo para la detección de spoofing sería el
siguiente:
1. Se calcula el valor de 𝑑𝜑𝑖 esperado. Para esto necesitamos
conocer la altura de las antenas y el
valor B.
2. Se mide 𝑑𝜑𝑖 y se compara con el valor calculado.
3. Para cada satélite, el error entre el valor medido y el
esperado se calcula cada 500 milisegundos,
aunque esta tasa podría ser mayor.
4. Basándonos en un umbral de error, que calcularemos en función
de la elevación del satélite del
que recibamos la señal, el peor caso esperado, si existe o no
multi-trayecto y en el error de la
altura de las antenas, aumentaremos o disminuiremos un contador
de errores.
5. Si el contador de errores alcanza un número, que estimaremos
en función de la tasa a la que
hayamos calculado los errores, se lanza una alarma de
ataque.
Este sistema se puede realizar con tantas antenas como se desee,
no únicamente con dos. Para
lograr engañar con éxito al sistema se necesitan tantos
dispositivos spoofers como antenas, por lo que
este método de detección de ataques constituye un sistema muy
robusto y difícil de vulnerar.
2.2.2 Autenticación de señales GPS
Un método para evitar el ataque de los sistemas GNSS, que ha
sido ampliamente discutido en
numerosas conferencias [3], consiste en la implementación de
algún tipo de mecanismo de
autenticación de señales para garantizar que la señal que
estamos recibiendo es, efectivamente, la señal
que esperamos y no una producida por un elemento externo.
Una de las dificultades a la hora de diseñar una mejora de este
tipo para los sistemas GNSS es
que debe ofrecer retrocompatiblidad, es decir, que los cambios
que introduzcamos en la arquitectura
del sistema GNSS deben permitir que los receptores antiguos,
aquellos que no implementan esos
cambios, puedan funcionar con normalidad. Este requisito es un
imperativo, y dificulta mucho el diseño
de un cambio en los sistemas GNSS.
Una opción es implementar secuencias para la autenticación de
señales. Este mecanismo de
control de acceso a las señales de navegación del satélite puede
hacerse en dos capas distintas: en la
capa de datos o en la capa de modulación de señal.
Si se aplica en la capa de datos, el receptor será capaz de
hacer un seguimiento de la señal, sin
embargo no podrá decodificar el contenido del mensaje, es decir,
no será capaz de calcular la posición,
velocidad ni el tiempo (PVT).
Un control de acceso a la capa de señal requiere que se
encripten los códigos PRN.
Para la implementación podríamos utilizar un cifrado continuo
(que es más rápido y tiene una
implementación en hardware más sencilla que un cifrado en
bloque). Este mecanismo consiste en un
cifrado de clave simétrica donde un flujo de bits no encriptados
(planos) se combinan con un flujo de
bits pseudoaleatorios, habitualmente mediante un OR exclusivo
(XOR). Para poder encriptar el código
-
12
PRN, a este código se le realiza el módulo 2 y se suma al flujo
cifrado, de manera que obtenemos un
código PRN cifrado.
Suponiendo una señal BPSK donde la componente en fase está
modulada por un código
conocido y la componente en cuadratura por un código encriptado,
la señal transmitida seguiría el
siguiente modelo:
𝑠(𝑡) = ∑ [𝑂𝑎𝑘(𝑡)𝐷𝑘(𝑡)cos (2𝜋𝑓𝐿1𝑡)] +
𝑁𝑘=1 ∑ [𝑂𝑏
𝑘(𝑡)𝑆𝐶𝑘𝐷𝑘(𝑡)sin (2𝜋𝑓𝐿1𝑡)]𝑁𝑘=1
Donde:
- N es el número de satélites visibles.
- 𝑂𝑎𝑘 y 𝑂𝑏
𝑘 son los códigos públicos para cada satélite K.
- 𝑆𝐶𝑘 es el flujo de cifrado.
- 𝐷𝑘 son los datos transmitidos.
El método a seguir sería el siguiente: se observa el flujo de
cifrado, 𝑆𝐶𝑘, durante un periodo de
tiempo determinado. Se extrae una parte del flujo binario con la
referencia de tiempo epoch de la SAS
(Signal Authentication Sequences, secuencias de señales de
autenticación) para una ventana de tiempo
determinada: por ejemplo, si en el instante 𝑛0 se observan 5000
chips del flujo binario, extraeríamos
𝑆𝐶𝑘[0: 5000, 𝑛0]. Como vemos, le añadimos la referencia de
tiempo.
Figura 5. Diagrama de bloques para la creación de una señal
cifrada.
La secuencia extraída es procesada y transmitida en el servicio
de mensajes de navegación con
autenticación. Esta secuencia o mensaje, definido como la
secuencia de señal de autenticación, sería así:
-
13
𝑆𝐴𝑆𝑘 = 𝑆𝐶𝑘[𝑛0 ∶ 𝑛0 + 𝑙]
Donde l es la longitud del código del SAS y 𝑛0 es el instante de
observación del primer chip del
flujo de cifrado 𝑆𝐶𝑘.
Finalmente, durante el proceso de decodificación y tras la
autenticación, el receptor obtiene el
SAS, genera la secuencia PN para ese tiempo epoch específico, y
realiza la correlación de ésta con las
muestras del código encriptado. El resultado de esta correlación
es pasado a un algoritmo que
determina, basándose en un umbral que puede haberse estimado
previamente, el estado de seguridad
de la señal. En la Figura 6 se muestra un esquema de este
proceso.
Figura 6. Diagrama de bloques para descifrar la señal.
El gran problema de este sistema es que requiere realizar
modificaciones tanto a los receptores
GPS actuales como a la estructura de las señales GPS, lo cual no
parece que vaya a ocurrir.
2.2.3 Monitorización de la calidad de la señal recibida
Este mecanismo se basa en la implementación de algoritmos que se
ejecutarían en el receptor
GPS de estaciones de referencia, que se encargarían de
monitorizar la calidad de las señales recibidas [4].
Esta técnica para detectar posibles ataques requiere tener
varios receptores fijos en distintos
lugares de referencia. El hardware que equipen estas estaciones
será más caro, ya que también debe ser
más fiable y, además, habrá pocos.
El fundamento de este mecanismo es que, idealmente, el pico de
correlación que obtenemos
con los códigos PRN será exactamente igual en todos los
receptores, independientemente de la
distancia que haya entre ellos.
-
14
Sin embargo, si se introduce una señal extraña, que en ese caso
sería la señal de spoofing, los
picos de correlación ya no serán iguales, tal y como se muestra
en la Figura 7.
Figura 7. Efecto de una señal extraña en los picos de
correlación.
Parte de la monitorización consiste en la implementación de un
algoritmo que busque
asimetrías en los picos de correlación. Estos algoritmos
tomarían, como entrada, diferentes medidas de
las señales GPS, realizarían un procesamiento a estas medidas y
entonces decidirían si la señal es
correcta o no. Esta decisión estará basada en tests
estadísticos, y se podría utilizar el criterio de
Neyman-Pearson para decidir si una determinada señal pasa o no
el test.
Para poder llevar a la práctica este método, necesitaríamos
receptores que implementen varios
correladores por canal, como se entenderá a continuación.
Dos de los test más comunes son el “delta-test” y
“ratio-test”.
Figura 8. Efecto de una forma de onda extraña en el seguimiento
del código
El “delta-test” (∆-test) está diseñado para identificar
asimetrías en los picos de correlación.
Hay que recordar que tendremos un pico de correlación cuando el
código esté perfectamente alineado.
-
15
El discriminante del test es el siguiente:
∆𝑚=𝐼𝑒𝑎𝑟𝑙𝑦,𝑚 − 𝐼𝑙𝑎𝑡𝑒,𝑚
2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚
Donde 𝐼𝑒𝑎𝑟𝑙𝑦,𝑚, 𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 e 𝐼𝑙𝑎𝑡𝑒,𝑚 son, respectivamente, las
acumulaciones en fase early,
prompt y late ya filtradas y m es el número del correlador. El
dividir por 2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 normaliza el
resultado a un valor máximo de uno. El discriminador asume que,
si se está haciendo el tracking de la
señal y estamos en fase con ella, los valores de 𝑄𝑒𝑎𝑟𝑙𝑦,𝑚,
𝑄𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 y 𝑄𝑙𝑎𝑡𝑒,𝑚 son, aproximadamente,
cero.
El “ratio-test” es un test que detecta máximos planos, picos de
correlación estrechos o muy
altos. El discriminante de este test es:
𝑅𝑚 =𝐼𝑒𝑎𝑟𝑙𝑦,𝑚 + 𝐼𝑙𝑎𝑡𝑒,𝑚
2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚
Donde, al igual que antes, se asume que estamos en fase con la
señal (es decir, que estamos en
la fase de “tracking” o seguimiento).
Los receptores multi-correlación generan m pares de
discriminantes por canal. Una vez están
bien determinados los efectos multitrayecto y el ruido térmico,
los discriminantes realizan los dos tests
estadísticos con el fin de determinar si la señal que recibimos
es correcta o no.
2.2.4 Correlación de la señal P
Este es otro de los mecanismos anti-spoofing que se han
propuesto a lo largo de los últimos
años [5], [6].
Este sistema hace uso de la señal militar, que es una señal sin
interés para los receptores civiles,
como mecanismo de comprobación de que la señal GPS recibida es
correcta.
Para ello necesitamos dos receptores, uno que se encuentre en un
lugar seguro, de manera que
la señal que reciba se encuentre siempre fuera del peligro de
ser falsa, y otro que sería el que utilizaría
el usuario, que sería un receptor GPS normal.
Periódicamente, el receptor GPS del usuario mandaría la señal
militar que está captando de cada
satélite del que está recibiendo la señal.
Este mecanismo es el que he implementado, y por tanto lo
describiremos con detalle más adelante.
-
16
Capítulo 3. Sistema GPS
3.1 Introducción
El sistema GPS (Global Positioning System) es un sistema de
navegación global (GNSS por sus siglas
anglosajonas) que permite determinar la posición de cualquier
objeto que tenga visibilidad con los
satélites que forman el sistema.
Fue creado por el Departamento de Defensa de los Estados Unidos,
que actualmente es también el
encargado de operarlo.
En 1957, la Unión Soviética lanzó al espacio el Sputnik I, el
primer satélite artificial de la historia,
cuyo propósito era aportar información sobre la concentración de
electrones en la ionosfera. Este
satélite emitía una señal de forma periódica, y fue este hecho
el que llamó la atención de los científicos
estadounidenses, George Weiffenbach y William Guier, que
pensaron en utilizar la variación de la
frecuencia que sufría esa señal debido al efecto Doppler para
así poder determinar la posición del
Sputnik.
Gracias a estos dos científicos y su logro se planteó la
posibilidad de realizar el cálculo inverso:
determinar la posición de un objeto en la Tierra a partir de la
señal que emitan satélites cuya órbita
estuviera determinada con suficiente precisión. Esta idea fue
rápidamente llevada a la realidad por la
Armada Estadounidense, que desarrolló el sistema TRANSIT, el
primer sistema que permitía determinar
la posición de un observador en la Tierra a partir de la
información que enviaban los satélites, y que
quedó operativo en 1964.
Este sistema primitivo tenía fines únicamente militares, aunque
en 1967, tres años después de su
puesta en marcha, se puso disponible para fines comerciales. Las
actualizaciones de la posición se hacían
cada cuarenta minutos, y el observador debía permanecer
prácticamente estático para obtener
información precisa, por lo que no se le encontró uso
comercial.
Posteriormente, en esa misma década, gracias al desarrollo de
los relojes atómicos, mucho más
precisos que los que había hasta entonces, se pensó en
desarrollar un nuevo sistema, más avanzado,
que permitiera calcular la posición de forma más precisa y de
objetos en movimiento. Así, en 1973, se
combinaron los programas de la Armada Estadounidense y de la
Fuerza Aérea de los Estados Unidos,
dando lugar al sistema conocido como NAVSTAR GPS.
Entre 1978 y 1985 se desarrollaron y pusieron en marcha once
satélites, que fueron sustituidos y
ampliados en sucesivas generaciones, hasta completar la
constelación de satélites actual, con capacidad
para operar en cualquier parte del mundo.
El sistema NAVSTAR garantiza siempre la presencia de, al menos,
cuatro satélites sobre el horizonte.
Este número corresponde al número mínimo de satélites necesarios
para determinar la posición de un
objeto con exactitud.
-
17
3.2 Descripción del sistema
El sistema GPS está compuesto por tres segmentos bien
diferenciados:
Segmento Espacial
Este segmento es el formado por los satélites que conforman la
constelación NAVSTAR y
que emiten la señal desde el espacio. Está formado por 24
satélites, distribuidos en seis órbitas
(cuatro satélites por órbita) con un período de rotación de doce
horas, un altitud de 20200 km
sobre la Tierra, una inclinación respecto al ecuador terrestre
de 55 grados, y una vida útil de
unos siete años y medio por satélite.
Estos satélites actúan como puntos de referencia a partir de los
cuales los receptores
GPS, mediante triangulación, calculan su posición en la Tierra.
Para que esta triangulación arroje
un resultado preciso, hacen falta al menos cuatro satélites
visibles, aunque con tres sería
suficiente en caso de que no nos importe saber a qué altura
sobre la superficie de la Tierra nos
encontramos.
Segmento de Control
Está formado por una serie de estaciones terrenas, distribuidas
por la superficie
terrestre, que se encargan de monitorizar constantemente cada
satélite, analizando las señales
emitidas por estos, y actualizar la información de navegación de
los satélites, enviándole la
información actualizada periódicamente.
Las estaciones están situadas cerca del plano ecuatorial, y en
ellas se encuentran
receptores con relojes de muy alta precisión.
Segmento de usuario
Este segmento no interactúa con los otros segmentos, y es el
correspondiente a los
receptores GPS, que reciben la señal emitida por los satélites y
calculan la posición. En el caso de
los receptores militares, utilizarán señales que proporcionan
más precisión y que no están
accesibles a los receptores comerciales, que tienen un error
sensiblemente mayor que los
receptores militares.
-
18
3.3 Descripción de las señales GPS
Las señales GPS son transmitidas por los satélites en dos
frecuencias distintas, ambas pertenecientes
a la banda L. Se utiliza esta banda para aprovechar las
condiciones de propagación de ondas de radio en
el espacio a estas frecuencias:
- Los retrasos producidos por la Ionosfera son muy altos para
frecuencias por debajo de los 100
MHz y por encima de los 10 GHz.
- La velocidad de propagación de las ondas electromagnéticas a
través del aire se hace menor a
medida que la frecuencia disminuye.
- Los códigos PRN (que se explican más adelante) requieren un
alto ancho de banda para la
modulación en la frecuencia de la portadora, por tanto,
necesitamos frecuencias altas para
tener un ancho de banda también alto.
- Las frecuencias deben estar en un rango en el que la señal no
se vea afectada por fenómenos
tales como la lluvia, nubes o nieve.
Las frecuencias utilizadas se denominan L1 y L2, y son múltiplos
de una frecuencia fundamental, f0
𝑓0 = 10.23 𝑀𝐻𝑧
𝑓𝐿1 = 154𝑓0 = 1575.42 𝑀𝐻𝑧
𝑓𝐿2 = 120𝑓0 = 1227.60 𝑀𝐻𝑧
En el segmento de usuario del sistema GPS, las únicas señales
involucradas son las que envían los
satélites, así que a partir de ahora me referiré a ellas
simplemente como “señales”, sin indicar de
manera explícita que son las enviadas por los satélites.
Las señales tienen tres partes bien diferenciadas:
- Portadora: es la señal a la frecuencia L1 o L2, y es la
utilizada para modular la señal de
información.
- Datos de navegación: aquí es donde se encuentra toda la
información correspondiente a las
órbitas de los satélites. Esta información es actualizada por
las estaciones terrestres
correspondientes al segmento de control, y son enviadas a los
satélites periódicamente.
Estos datos tienen un régimen binario de 50 bits por
segundo.
-
19
- Secuencia de propagación: todos los satélites tienen dos
secuencias o códigos de propagación.
El primero, llamado código de adquisición o código C/A, que es
el utilizado por los sistemas
receptores GPS no militares, y el código P, que es un código
encriptado utilizado para uso militar.
El código C/A, está formado por 1023 chips (un chip corresponde
a un bit), y se repite cada
milisegundo, mientras que el código P es más largo, formado por
aproximadamente 2.35∙1034
chips y se retransmite cada 266 días aproximadamente. Este
código tiene un campo que indica
en qué instante del código está enviando, para que el receptor
pueda sincronizarse. El código
C/A se transmite en la frecuencia L1, mientras que el P se
transmite en la frecuencia L1 y L2.
Vamos a basarnos en el esquema de la Figura 9 para explicar los
pasos para generar la señal GPS.
Figura 9. Esquema de generación señal GPS
Por un lado, generamos los datos de navegación a una tasa de 50
bits por segundo, como
indicamos antes, y de forma paralela generamos el código C/A
correspondiente al satélite que vaya a
enviar la señal.
Cuando tenemos ambas señales, las combinamos mediante una suma
de módulo 2
(correspondiente a una operación XOR entre las dos señales
digitales). También combinamos, mediante
la misma operación, los datos de navegación con la señal
P(Y).
La señal que obtenemos como resultado de estas operaciones se
modula a la frecuencia L1 y L2,
utilizando una modulación BPSK (binary phase shift keying). Es
importante hacer notar que ambos
códigos están modulados en fase y cuadratura, esto es, hay una
diferencia de fase de noventa grados
entre ambos códigos.
-
20
La señal que se transmite puede ser descrita, por tanto,
mediante la ecuación:
𝑠𝑘(𝑡) = √2𝑃𝐶(𝐶𝑘(𝑡) ⊕ 𝐷𝑘(𝑡)) cos(2𝜋𝑓𝐿1𝑡) + √2𝑃𝑃𝐿1 (𝑃𝑘(𝑡) ⊕ 𝐷𝑘(𝑡))
sin(2𝜋𝑓𝐿1𝑡) +
√2𝑃𝑃𝐿2(𝑃𝑘(𝑡) ⊕ 𝐷𝑘(𝑡)) sin(2𝜋𝑓𝐿2𝑡)
Donde:
- PC es la potencia de la señal que va con el código C/A.
- PPL1 es la potencia de la señal con el código P en la
frecuencia L1.
- PPL2 es la potencia de la señal con el código P en la
frecuencia L2.
- Ck es el código C/A asignado al satélite k.
- Dk son los datos de navegación correspondientes al satélite
k.
- fL1 y fl2 son las frecuencias L1 y L2 respectivamente.
El código C/A se repite cada milisegundo, mientras que un bit de
los datos de navegación se envía
cada veinte milisegundos. Esto quiere decir que por cada bit de
los datos de navegación, la señal
contiene veinte códigos C/A completos.
3.4 Modulación y código C/A
El sistema GPS utiliza una modulación CDMA basada en código
PRN.
Los códigos PRN (pseudorandom noise), transmitidos por los
satélites GPS, son secuencias
determinísticas con características similares al ruido blanco
gaussiano.
El código C/A es la suma de dos secuencias PRN de longitud 2𝑛 −
1, con n = 10. Este código es único
para cada satélite, siempre es el mismo y es público, es decir,
es conocido.
Estos códigos son utilizados como las secuencias de propagación
de las señales GPS debido a sus
propiedades, siendo sus características más importantes las
referidas a la correlación.
- Correlación cruzada: todos los códigos C/A están no correlados
respecto al resto de códigos.
Esto es, para dos códigos, Ci y CK correspondientes a los
satélites k e i, la correlación cruzada
puede expresarse como:
𝑟𝑖𝑘(𝑚) = ∑ 𝐶𝑖(𝑙)𝐶𝑘(𝑙 + 𝑚) ≈ 0
1022
𝑙=0
-
21
- Autocorrelación: todos los códigos C/A están no correlados
consigo mismos siempre que el
desfase sea distinto de cero. Gracias a esta propiedad es fácil
averiguar cuando dos códigos C/A
similares se encuentran alineados, tal y como se observa en la
Figura 10. Esta propiedad puede
expresarse como:
𝑟𝑘𝑘(𝑚) = ∑ 𝐶𝑘(𝑙)𝐶𝑘(𝑙 + 𝑚) ≈ 0, 𝑝𝑎𝑟𝑎 |𝑚| ≥ 1
1022
𝑙=0
Figura 10. Autocorrelación normalizada de un código C/A. Se
observa que el máximo se da para un desfase igual a cero.
3.5 Datos de navegación
Los datos de navegación están formados por tramas de 1500 bits
de longitud, estando cada una
de estas tramas formadas a su vez por cinco sub-tramas, cada una
de 300 bits de longitud, tal y como se
muestra en la Figura 10.
Una sub-trama está formada por diez palabras, donde cada palabra
tiene una longitud de treinta bits.
Las sub-tramas 1, 2 y 3 se repiten (tienen los mismos datos) en
cada trama, mientras que las tramas 4 y
5 tienen 25 versiones distintas (todas con la misma estructura
pero con diferentes datos). Como el
régimen binario es de 50 bits por segundo, se tardan seis
segundos en transmitir una sub-trama
completa, treinta segundos en una trama completa y doce minutos
y medio en enviar un mensaje de
navegación completo.
-
22
Figura 11. Estructura de los datos de navegación GPS.
Las sub-tramas están formadas por diez palabras y siempre
comienzan con dos palabras especiales,
telemetry (TLM) y handover-word (HOW). TLM es la primera palabra
y se repite en cada sub-trama, por
lo que se repite cada seis segundos. Contiene un preámbulo de
ocho bits, seguido por 16 bits de uso
reservado y de paridad. El preámbulo es utilizado para
sincronización de la trama. HOW contiene una
versión truncada, de 17 bits, del tiempo de la semana (TOW o
time of week), seguido por dos bits de
bandera. Los tres bits siguientes identifican la sub-trama, para
así saber cuál de las cinco sub-tramas es
la que estamos procesando.
Además de las palabras TLM y HOW, cada sub-trama contiene otras
ocho palabras.
- Sub-trama 1: aquí van contenidos todos los datos referentes a
la información del reloj. Esta
información es necesaria para poder establecer en qué instante
fue transmitido el mensaje por
el satélite. Además, en esta sub-trama van también los datos
relativos a la salud del satélite,
indicando si los datos son o no fiables.
- Sub-tramas 2 y 3: en estas sub-tramas van los datos
correspondientes a las efemérides. Estos
datos son los que indican la órbita del satélite, y son
necesarios para poder establecer la
posición del receptor.
- Sub-tramas 4 y 5: aquí van la información relativa al
almanaque. La información del almanaque
es la misma que la de las efemérides y la del reloj, pero con
menos precisión. Además, los
satélites envían información en el almanaque sobre el resto de
satélites, pero en las efemérides
cada satélite envía información relativa únicamente a sí
mismo.
-
23
3.6 Funcionamiento del sistema GPS
La idea detrás del sistema GPS es utilizar los satélites en el
espacio como puntos de referencia para,
aplicando triangulación, calcular nuestra posición.
La información que recibe un receptor de un satélite le permite
saber qué satélite es el que envía
los datos, cuál es la posición del satélite y el instante exacto
a la que esa información fue enviada (salió
del satélite).
El receptor comparará el instante al que la señal fue enviada
por el satélite y el instante en que ha
recibido esa información. La diferencia de ambos tiempos dará el
tiempo de propagación, y con este
tiempo y la velocidad de propagación de la señal es posible
calcular la distancia entre el receptor y el
satélite.
El receptor tendrá esta información de cada satélite con el que
tenga visibilidad, por lo que
mediante triangulación podrá calcular su posición. Una vez tiene
la distancia entre él y un satélite, sabrá
que su posición se encuentra en la superficie de una esfera de
radio esa distancia calculada y de centro
la posición del satélite. Si tiene la distancia con dos
satélites, aplicará este principio con ambos satélites
y la posición deberá encontrarse en la intersección de ambas
esferas, que es un círculo, por lo que aún
no puede determinar su posición. Con un tercer satélite,
aplicando el mismo principio que con dos,
obtendrá dos puntos (correspondientes a la intersección de tres
esferas). Utilizando un cuarto satélite,
no hay lugar a dudas de la posición en la que se encuentra el
receptor, ya que la intersección entre las
cuatro esferas es un único punto. En la Figura 12 se muestra
gráficamente la aplicación de este
algoritmo.
Figura 12. Triangulación con tres satélites en tres pasos.
Recalculando la posición continuamente, permite al receptor
conocer también su velocidad y la
dirección de movimiento.
-
24
Otra forma de determinar la velocidad a que se mueve el receptor
es utilizando el efecto Doppler,
ya que se produce precisamente por la diferencia de velocidades
entre emisor y receptor. Calculando la
diferencia entre la frecuencia de emisión de la señal y la
frecuencia a la que la recibimos, sabiendo que
esta diferencia viene producida por el efecto Doppler, un
receptor será capaz de calcular la velocidad a
la que se está moviendo.
Para poder realizar estos cálculos de la posición, necesitamos
ser capaces de recibir los datos de
navegación. Este no es un problema trivial, ya que a pesar de
que la señal sale de los satélites a una
frecuencia determinada (L1 o L2), debido al efecto Doppler no
será esa la frecuencia la que la señal
llegue a nosotros, sino que habrá una pequeña variación. Además,
también tenemos que lidiar con el
problema de la sincronización. Debemos averiguar, de alguna
manera, qué información estamos
recibiendo en el momento en que empecemos a recibir la señal, es
decir, el desfase que hay (aquí el
desfase es la diferencia entre el momento en que empezó a
transmitirse la unidad de información que
estamos recibiendo y el momento en que empezamos a
recibirla).
El procesamiento de señal para los sistemas de navegación (tanto
para GPS como para Galileo) está
basado en un sistema de canales, donde un canal representa la
adquisición de datos de un satélite. Esto
quiere decir que nos harán falta al menos cuatro canales para
calcular la posición de un receptor (ya que
cada canal estará recibiendo datos de un satélite). Antes de
asociar un canal a un satélite, necesitamos
saber qué satélites están visibles. En función de la forma en
que averigüemos esto, hablaremos de un
inicio frío o un inicio caliente:
- Inicio caliente o warm start: en este tipo de inicio, el
receptor combina la información que tenía
almacenada del almanaque y la última posición que computó. Los
datos del almanaque los
utiliza para hacer una estimación gruesa de la posición de los
satélites en el instante actual. Esta
información a su vez se utiliza junto a la de la última posición
calculada para estimar qué
satélites deben estar visibles.
Sin embargo, hay dos casos en los que esta opción de inicio no
arrojará resultados positivos. Si el
receptor está alejado de la última posición en la que estuvo
(por ejemplo, en otro continente),
los satélites que calcule como satélites visibles no lo estarán
realmente. Tampoco funcionará si
ha pasado mucho tiempo desde la última vez que el receptor
actualizó la información
correspondiente al almanaque, ya que los satélites podrían haber
variado su posición.
- Inicio frío o cold start: en este tipo de inicio, el receptor
no utiliza ninguna información
almacenada, sino que empieza a buscar todos los satélites hasta
encontrar alguno que esté
visible.
El problema de este método es que es muy lento, pueden pasar
varios minutos hasta que el
receptor tenga los datos suficientes para calcular la
posición.
Además del modo de inicio, existen dos fases para lograr la
sincronización correcta entre el receptor
GPS y la señal recibida. Estas fases son adquisición y
seguimiento.
-
25
3.7 Adquisición
El propósito de esta fase es identificar todos los satélites
visibles para el receptor.
Además, si el satélite está visible, tras la fase de adquisición
los siguientes parámetros tienen que
quedar determinados:
- Frecuencia: la frecuencia de la señal recibida no será
exactamente la frecuencia a la que la señal
fue transmitida por el satélite, si no que habrá variaciones
debido al efecto Doppler. La
variación producida por este efecto, suponiendo la máxima
velocidad del satélite y una
velocidad muy alta del receptor, será de unos 10 kHz. Para un
receptor estacionario la variación
nunca será superior a 5 kHz.
- Fase del código: este parámetro hace referencia al punto
exacto del bloque de datos que
estamos procesando en el que el código C/A comienza. En caso de
estar analizando un bloque
de datos correspondiente a un milisegundo, habrá un código C/A
completo y un comienzo de
código C/A.
Existen muchos métodos para realizar la adquisición, aunque
todos se basan en las propiedades de
las señales GPS, en especial de la propiedad de autocorrelación
del código C/A.
La señal recibida, s(t), será una combinación de todas las
señales de los N satélites visibles:
𝑠(𝑡) = ∑ 𝑠𝑛(𝑡)
𝑁
𝑛=1
Cuando estemos realizando la adquisición del satélite k, la
señal s(t) será multiplicada con el código C/A
local correspondiente a ese satélite. Gracias a la propiedad de
correlación cruzada que vimos
anteriormente, tras realizar esta multiplicación, las señales
del resto de satélites se verán reducidas
prácticamente a cero. Sin embargo, para que esto ocurra, la fase
del código C/A debe estar
perfectamente alineada.
Una vez hemos obtenido la señal del satélite de interés, debemos
bajarla a banda base para trabajar con
ella. Para eso multiplicamos la señal por una portadora generada
localmente a la frecuencia de la señal.
Sin embargo, como dijimos antes, a priori no sabemos la
frecuencia exacta de la señal, ya que habrá
variaciones de hasta 10 kHz. Es posible buscar la frecuencia
probando con diferentes frecuencias, en
pasos de 500 Hz, lo que nos da 41 frecuencias distintas para
probar. Una búsqueda, tanto de la fase de
código como de la frecuencia, con un resultado positivo, se
muestra en la Figura 13.
Como vemos, la fase de adquisición es una fase de búsqueda. Se
prueba cada una de las diferentes fases
del código (puede haber hasta 1023, ya que ese es el número de
bits del código), y lo mismo para cada
una de las frecuencias posibles. Cuando se han realizado todas
las pruebas, se busca el máximo valor de
señal obtenido, y si supera un umbral determinado, diremos que
el satélite es visible. En caso contrario,
el satélite no estará visible y probaremos con otro satélite
distinto.
-
26
Figura 13. Adquisición positiva tras completar la búsqueda en
código y frecuencia.
3.8 Seguimiento o tracking
El propósito de esta fase es refinar los valores de fases de
código y de frecuencia obtenidos en la fase de
adquisición, además de mantener actualizados estos valores, ya
que a medida que pasa el tiempo y
tanto los satélites como el receptor se van moviendo, van
cambiando.
El seguimiento está compuesto por dos partes diferenciadas:
- Seguimiento del código: hemos de mantener la fase del código
actualizada para poder extraer
correctamente los datos de navegación. Para esto se suele
utilizar un DLL, donde tres códigos
C/A locales son generados y correlados con la señal recibida. A
cada uno de estos códigos se les
llama Early code, Prompt Code, y Late code. Habitualmente
estarán separados (el desfase entre
ellos será) de medio chip.
- Seguimiento de la frecuencia/fase de la señal: debemos
mantener actualizada la frecuencia del
oscilador local para poder bajar a banda base la señal
correctamente. Esta parte puede ser
implementada de dos formas: utilizando un seguidor de fase o un
seguidor de frecuencia.
A continuación, en la Figura 14 se muestra un diagrama de
bloques completo para implementar un
sistema de seguimiento para un canal.
Se observa que primero se multiplica la señal por una señal
sinusoidal sin desfasar y por otra
desfasada 90 grados, a la misma frecuencia de la señal, para así
poder bajarla a banda base tanto la
componente en fase, I, correspondiente al código C/A, como la
componente en cuadratura, Q,
correspondiente al código P.
-
27
El siguiente paso es multiplicar por los códigos Early, Prompt y
Late y se integra. Debido a la
propiedad de correlación cruzada de los códigos C/A, en este
punto la señal en cuadratura, señal Q,
se hace prácticamente cero.
Figura 14. Diagrama de bloques para realizar el seguimiento en
un canal.
La fase de tracking o seguimiento se realiza continuamente, para
poder seguir los cambios de fase del
código y de frecuencia. Si en algún momento, durante esta fase,
se perdiera la señal del satélite, se
comenzaría de nuevo con la fase de adquisición.
3.9 Extracción de los datos de navegación
Cuando se está realizando la fase de seguimiento, somos capaces
de comenzar a extraer los bits de los
datos de navegación.
El valor de un bit se halla integrando los datos recibidos
durante veinte milisegundos.
Una vez leídos unos treinta segundos de datos, hemos debido
hallar el comienzo de una sub-trama, lo
cual es necesario para poder estimar en qué momento fue enviado
el mensaje.
Cuando tenemos el instante de transmisión, debemos extraer los
datos de las efemérides, para poder
establecer la posición del satélite cuando fueron enviados los
datos.
-
28
Finalmente, deberemos calcular los pseudorangos, esto es, las
distancias desde el receptor a los satélites.
Para esto nos basamos en el instante en el que fueron
transmitidos los datos y el instante en el que lo
hemos recibido, obteniendo así el tiempo de transmisión y, a
partir de ahí como conocemos la velocidad
de propagación de la señal GPS, obtendremos la distancia entre
el receptor y el satélite.
-
29
Capítulo 4. Anti-spoofing utilizando la señal P(Y)
Determinadas señales de los distintos sistemas de navegación
están especialmente diseñadas para
prevenir ataques de spoofing, o simplemente para evitar el
acceso no autorizado. Algunos ejemplos los
constituyen señales tales como la señal P(Y) en el caso de GPS o
el código P del sistema GLONASS.
Estas señales son desconocidas para el atacante, por lo que a la
hora de hacer spoofing no podrá
replicarlas.
Sin embargo, los usuarios civiles no tienen acceso al contenido
de la señal P(Y), e incluso los receptores
GPS militares autorizados utilizan hardware adicional para
evitar el spoofing.
A pesar de esto, los investigadores Todd E. Humphreys, Mark L.
Psiaki, Brady W. O'Hanlon, Jahshan A.
Bhatti y Daniel P. Shepard han propuesto un método que utiliza
estas señales para realizar la
autenticación de las señales recibidas, asegurando así que un
receptor no está siendo atacado o
detectando el ataque si se produjese.
Vamos a realizar la demostración de que este método arroja
resultados positivos, de manera que podría
ser implementado en sistemas reales como mecanismo para detectar
ataques.
A pesar de que utilicemos el sistema GPS, este mecanismo se
podría utilizar en cualquier sistema de
navegación que tenga al menos una señal segura, incluso si el
contenido de esta no es accesible
(característica presente en todos los sistemas de navegación
actuales).
4.1 Procesamiento de las señales secretas para autenticación
Vamos a suponer que un receptor GPS se encuentra recibiendo una
señal válida, es decir, estamos en la
fase de tracking, a la frecuencia L1. Como vimos anteriormente,
la señal transmitida estará compuesta
por la señal portadora, que será una onda sinusoidal, el código
C/A y P correspondiente a cada satélite, y
los datos de navegación.
Escogemos la frecuencia L1 porque en ella viajan tanto el código
C/A como el código P, transmitidos en
fase y cuadratura. Por tanto, un receptor estaría recibiendo la
siguiente señal:
𝑠𝐿1(𝑡) = ∑[𝑠𝑖𝐿1,𝐶/𝐴(𝑡) + 𝑠
𝑖𝐿1,𝑃(𝑌)(𝑡)]
𝑁
𝑖=1
Ahora nos centramos en las componentes tanto de datos como de
código para un satélite concreto.
Eliminamos el subíndice L1 por comodidad.
𝑠1𝑖(𝑡) = 𝐴1
𝑖𝐷𝑖(𝑡 − 𝜏𝑖𝐶,1)𝑥𝐶(𝑡 − 𝜏𝑖
𝐶,1) cos[2𝜋(𝑓𝐿1 + 𝑓𝐷,1𝑖) + 𝜃𝑖]
+ 𝐵1𝑖𝐷𝑖(𝑡 − 𝜏𝑖𝑃,1) 𝑥𝑃(𝑡 − 𝜏
𝑖𝑃,1)sin[2𝜋(𝑓𝐿1 + 𝑓𝐷,1
𝑖) + 𝜃𝑖]
Donde:
- Los subíndices C y P se refieren al código C/A y P,
respectivamente.
-
30
- A y B son parámetros de escala que modelan la potencia
recibida de la señal.
- D representa los datos de navegación.
- 𝑥𝑃 y 𝑥𝐶 representan el código P y el código C/A,
respectivamente.
- 𝜏𝑃 y 𝜏𝐶 representan la fase de la señal P(Y) y de la señal
GPS, respectivamente.
- 𝜃 representa diferencia de fase entre la señal recibida y el
oscilador local.
- 𝑓𝐷 es la variación de frecuencia producida por el efecto
Doppler.
Como indicamos antes, ahora el receptor, al estar en la fase de
tracking, se encargará de separar las
componentes de la señal en componente en fase y componente en
cuadratura y bajarlas a banda base.
La señal de salida tras ese proceso podemos expresarla como:
𝑠1(𝑡) = 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1){𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 −
𝜃1] + 𝑖
∙ 𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]}
+ 𝐵1𝐷(𝑡 − 𝜏𝑃,1)𝑥𝑃(𝑡 − 𝜏𝑃,1){𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1] −
𝑖
∙ 𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]}
Donde el superíndice ^ indica que son estimaciones.
El siguiente paso en la fase de seguimiento, como vimos,
consiste en multiplicar estas señales por los
códigos C/A e integrarlas. Vamos a suponer que se multiplica por
un único código C/A (ya que los otros
dos presentarán una correlación muy baja y no afectarán al
resultado). Como 𝑥𝐶 y 𝑥𝑃 son ortogonales, la
correlación cruzada de ambos llevará a la componente 𝑥𝑃 a
cero.
Obtendremos dos salidas, una para cada componente de la señal, e
integrando sobre un intervalo de
tiempo 𝑇𝐶, tendremos:
𝑆𝐼,1 = ∫ 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 −
𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]𝑑𝑡𝑇𝐶
0
𝑆𝑄,1 = ∫ 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 −
𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]𝑑𝑡𝑇𝐶
0
Se puede observar, por tanto, que durante la fase de seguimiento
se busca maximizar 𝑆𝐼,1, lo que
implica reducir 𝑆𝑄,1 hasta llevarlo a cero.
Este proceso es similar, con algunas pequeñas variaciones, en
todos los receptores GPS comerciales.
-
31
Lo que pretendemos hacer es procesar de la misma forma las
señales en dos receptores que se
encuentren en puntos distintos, sabiendo que la única
diferencia, a efectos de la señal P(Y), que habrá
entre ambos receptores es la diferencia de tiempo que tarda la
señal en llegar desde el satélite a cada
uno de los receptores. Esto mismo expresado de forma matemática
es lo siguiente:
𝑠𝑒ñ𝑎𝑙 𝑟𝑒𝑐𝑖𝑏𝑖𝑑𝑎 𝑒𝑛 𝑙𝑎 𝑙𝑜𝑐𝑎𝑙𝑖𝑧𝑎𝑐𝑖ó𝑛 1: 𝑥𝑃(𝑡 − 𝜏𝑃,1)
𝑠𝑒ñ𝑎𝑙 𝑟𝑒𝑐𝑖𝑏𝑖𝑑𝑎 𝑒𝑛 𝑙𝑎 𝑙𝑜𝑐𝑎𝑙𝑖𝑧𝑎𝑐𝑖ó𝑛 2: 𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2)
Si, una vez bajada la señal a banda base (tanto su componente I
como su componente Q), y antes de
multiplicar por el código C/A, realizamos una correlación de las
señales Q de ambos receptores,
tendremos la siguiente expresión:
𝑆𝑄,1:2 = ∫ 𝐵1𝐵2𝐷𝑇𝐶
0
(𝑡 − 𝜏𝑃,1)𝐷(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2) 𝑥𝑃(𝑡 − 𝜏𝑃,1)𝑑𝑡
Donde hemos eliminado el término del coseno y el seno ya que, al
bajar a banda base, el coseno tiende
a uno y el seno a cero.
Si ambos receptores están recibiendo la misma señal P(Y), el
resultado de esta operación arrojará un
pico de correlación cuando ambas señales estén desfasadas una
cantidad ∆𝑡 = 𝜏𝑃,2 − 𝜏𝑃,1. La aparición
de este pico indicará que, efectivamente, ambos receptores están
recibiendo la misma señal P(Y) y que,
por tanto, no están siendo atacados.
Sin embargo, debemos encontrar alguna forma de medir ese pico de
correlación para indicar que,
efectivamente, no se está produciendo un ataque. Observar
directamente un pico en la correlación
queda rápidamente descartado, ya que implicaría que cada
milisegundo deberíamos comprobar si
aparece un pico o no, y no solo es que el ojo humano no sea tan
rápido, es que implicaría que
deberíamos estar atentos continuamente a la salida de la
correlación, lo que no tiene tampoco sentido.
Tampoco podemos utilizar como medida la magnitud del pico de
correlación, ya que para señales
débiles puede aparecer un pico con una magnitud relativamente
baja, mientras que para señales fuertes
(con una potencia medianamente alta) una correlación negativa
puede dar un valor bastante alto,
debido a la magnitud de las señales, como se observa en la
Figura 15.
-
32
Figura 15. Correlación de dos señales iguales, pero de distinta
magnitud, consigo mismas. Se ve que, en la de la derecha los
valores de correlación negativos son más altos que el pico de la de
la izquierda.
Finalmente, abordaremos esta cuestión de la misma forma que se
aborda la detección de un satélite en
el proceso de adquisición. Estableceremos un coeficiente de
spoofing o coeficiente de correlación, que
definiremos como el resultado de la división entre el mayor
valor y el segundo mayor valor de la
correlación.
Si este coeficiente es mayor que un umbral determinado,
concluiremos que no se está produciendo un
ataque y viceversa.
4.2 Implementación del mecanismo de autenticación
Vamos a implementar este sistema de autenticación utilizando la
señal P(Y).
Debido a que desarrollar el hardware necesario para hacer una
implementación real del sistema sería
muy costoso, tanto técnicamente como económicamente, vamos a
realizarla en software, utilizando
para ello como herramientas Matlab y un receptor GPS
desarrollado sobre Matlab. Esto nos permitirá,
además, poder probar el sistema, ya que en la implementación
real, tendríamos que realizar el spoofing
para comprobar que efectivamente funciona, lo cual es ilegal
además de peligroso.
El receptor software GPS que utilizaremos es el denominado
“SoftGNSS v3.0” [7], desarrollado por Dennis M.Akos y Darius
Plausinaitis, y que se distribuye bajo la licencia de software
libre GNU. Nuestro objetivo será que el sistema sea capaz de
trabajar con dos ficheros a la vez (en la versión que se distribuye
solo trabaja con un fichero) y que nos indique si, en los datos
recogidos por cualquiera de los
-
33
dos ficheros, se está produciendo un ataque de spoofing o si por
el contrario todo funciona de forma correcta.
4.3 Introducción al receptor software “Soft-GNSS”
Este software está desarrollado en Matlab, mediante el lenguaje
“Matlab Language”, utilizado para
programar sobre esta plataforma.
El receptor recibe como entrada un fichero, que deberá ser un
fichero generado por la recepción de las
señales GPS sin ningún tipo de procesamiento, es decir, de las
señales en “raw”.
Durante la primera fase, la de adquisición, se determinan qué
satélites están visibles para el receptor.
Estos satélites son asignados a una estructura de canales,
incluyendo información sobre la frecuencia
Doppler, el desfase del código C/A, la potencia recibida,
etc.
La siguiente fase es la de seguimiento. Durante esta fase el
software irá leyendo bloques de bytes del
fichero correspondientes a un milisegundo de recepción, y
realizará las operaciones necesarias para
determinar los datos que está recibiendo.
Esto se hace secuencialmente para cada canal, es decir, primero
se procesará un canal, y cuando se
termine de procesar por completo, pasará al siguiente canal y
comenzará de nuevo el proceso con este
nuevo canal.
Cuando termine la fase de seguimiento de todos los canales, el
software decodificará los datos de
navegación recibidos en cada canal, y los procesará hasta
determinar la posición del receptor, arrojando
como salida una figura similar a la de la Figura 16. En caso de
no haber suficientes canales o no ser la
muestra (el fichero) lo suficientemente largo como para calcular
una posición, el programa arrojará
todos los datos que ha reunido tanto de la fase de adquisición
como de la de tracking.
De forma un poco más precisa, el código sigue el siguiente
workflow:
- Primero, unos poco milisegundos son leídos y pasados a la
función de adquisición. Esta función
buscará la presencia de señales GPS válidas, y para las que haya
presentes, estimará la fase del
código C/A y la frecuencia Doppler. El resultado se almacenará
en una estructura llamada
acqResults.
- Tras este proceso, la función preRun lee la estructura de
resultados, acqResults, e inicializa todos
los canales necesarios (uno por cada satélite encontrado en el
proceso de adquisición). Esta
función también limpia el workspace de Matlab mediante la
sentencia clear.
- Tras la inicialización de los canales, un bloque de datos,
correspondiente a un milisegundo, es
leído del fichero y pasado a la función de tracking. Las
efemérides decodificadas se almacenan
en una estructura, eph. Los resultados del tracking, tales como
las salidas de los correladores,
discriminadores, etc. Se almacenan en una estructura llamada
trackResults.
-
34
- Una vez ha terminado el tracking para todos los canales, la
función postNavigation comenzará a
analizar la señal que hemos obtenido. Identificará el comienzo
de una sub-trama, el tiempo de
propagación de la señal y estimará los pseudorangos.
- Finalmente, se calculan las coordenadas del receptor que
generó el fichero y se convierten a un
sistema de coordenadas como UTM o WGS84.
Figura 16. Resultado del procesamiento de un fichero en
coordenadas UTM.
Vamos a analizar y a explicar brevemente los ficheros más
importantes para nosotros. Como no estamos
interesados en calcular la posición, no explicaré ninguno de los
ficheros que tienen como misión esta
tarea.
InitSettings.m
Es el fichero principal de configuración del software. Creará
una estructura, settings, que almacenará las
variables comunes a todos los bloques que forman el sistema.
Esto quiere decir que los cambios que
hagamos en esta estructura, a través de este fichero, se verán
en todas las funciones del programa.
Los parámetros más importantes a configurar son los
siguientes:
- Settings.fileName: aquí deberemos poner la ruta hacia el
fichero que queremos procesar.
- Settings.IF: frecuencia a la que se encuentran los datos del
fichero.
-
35
- Settings.samplingFreq: frecuencia de muestreo a la que tomamos
los datos del fichero.
- Settings.msToProcess: número de milisegundos que queremos
procesar por canal.
Hay bastantes más parámetros, aunque los que en general
diferirán según cómo hayas hecho la
adquisición y muestreo de las señales para guardarlas en el
fichero son los que he mostrado.
postProcessing.m
Este script se encargará de ejecutar todas las funciones, desde
la de adquisición hasta la que calcula e
imprime los resultados de navegación.
Es el fichero principal que se encarga de conectar entre sí
todas las funciones y el resto de los scripts.
Mantiene las estructuras de datos y se encarga de pasárselas
como parámetros a las funciones que los
necesiten.
Acquisition.m
Aquí está definida la función acquisition. Esta función
implementa un algoritmo especial para hallar el
desfase de código y de frecuencia, basado en la transformada de
Fourier.
La función busca la presencia de una señal GPS en pasos de 0.5
kHz. Para cada paso de frecuencia, se
produce una búsqueda del desfase de código, almacenando el
resultado de la correlación, esto es, se
almacena el resultado de la correlación para cada paso de
frecuencia.
Una vez terminado el barrido en frecuencia, la función busca el
pico más alto de todas las correlaciones
que hemos almacenado. Una vez encontrado este pico, se busca el
segundo pico más alto, y se dividen
ambos picos. El resultado de esta división es el coeficiente que
se utilizará para determinar si hay
presencia de señal GPS o no. El umbral de decisión puede
ajustarse en el fichero initSettings.m, en la
variable settings.acqTreshold.
Si el coeficiente es mayor que el umbral de decisión, se hace
una aproximación más fina de la frecuencia
de la señal, ya que un error de 0.5 kHz es demasiado alto para
que el PLL pueda comenzar con el
tracking.
Los parámetros que utiliza la función no son más que los datos
del fichero, la estructura settings y una
tabla, generada anteriormente, con los códigos C/A de cada
satélite.
-
36
Figura 17. Resultado del proceso de adquisición de un
fichero.
Tracking.m
Esta función se encarga de hacer el seguimiento de las señales
GPS de cada canal.
Recibe los siguientes parámetros: un bloque de datos del
fichero, la estructura channel, que contiene
información relativa a los canales (si están activos, PRN, etc),
y una tabla de códigos C/A.
La función procesará el fichero, para cada canal, y devolverá
dos estructuras: el resultado del tracking,
en la estructura trackResults, y una versión actualizada de la
estructura channel.
La estructura channel se utiliza para pasar información de cada
canal, además de para almacenar nueva
información del mismo. Además, permite realizar el seguimiento
de forma continua, ya que para cada
milisegundo procesado se almacena la frecuencia, el desfase de
código, etc., y estos datos son utilizados
para procesar el siguiente milisegundo, que a su vez actualizará
la estructura una vez termine.
La estructura trackResults contiene los resultados, para cada
canal, de cada uno de los milisegundos
procesados, y serán mostrados en pantalla una vez finalice el
proceso, tal y como se muestra en la
Figura 18.
Es en esta función donde se realiza la correlación con los
códigos C/A, por lo que será de vital
importancia cuando queramos implementar el mecanismo
anti-spoofing, ya que aquí se encontrarán las
señales de interés.
-
37
Figura 18. Datos generados tras el proceso de tracking para un
canal.
Para iniciar el software, habrá establecer el directorio de
trabajo de Matlab en el directorio donde se
encuentren los ficheros, o bien añadirlo al Path de Matlab, y
ejecutar el script init.m.
4.4 Modificación del receptor software SoftGNSS v3.0
Para poder implementar el sistema anti-spoofing necesitamos
realizar varias modificaciones al programa.
Primero debemos tener claro qué necesitamos y qué tendremos que
modificar. Utilizaremos dos
ficheros, por lo que debemos añadir la capacidad al sistema de
trabajar con dos ficheros.
Esto significa que tendremos que mantener dos estructuras
channel, de manera que cada una mantenga
los datos del fichero que está procesando. Si quisiéramos hallar
la posición de ambos receptores,
deberíamos añadir también una nueva estructura trackResults, sin
embargo no estamos interesados en
el cálculo de la posición, así que podemos dejar esa estructura
tal y como está y que calcule únicamente
la posición de uno de los dos ficheros.
Por supuesto, al trabajar con dos ficheros, necesitaremos
también dos descriptores de fichero, que es la
forma en la que MATLAB trabaja con ellos.
A la hora de realizar la adquisición, deberemos realizarla de
ambos ficheros. Para determinar si se está
sufriendo spoofing, compararemos las señales P(Y) recibidas por
un receptor y por el otro, tal y como
explicamos antes. Sin embargo, debemos comprobar la señal P(Y)
recibida en cada receptor y entre los
mismos satélites, es decir, debemos correlar las señales P(Y) de
ambos receptores siempre que
provengan de un satélite que ambos receptores tengan en común.
Esto quiere decir que, tras la
-
38
adquisición, deberemos desechar aquellos canales que no
correspondan a satélites visibles para ambos
receptores.
Una vez terminada la adquisición, viene la fase de seguimiento.
Lo ideal sería hacer el seguimiento de
ambos ficheros en paralelo, pero en Matlab eso no es posible,
sino que ha de hacerse de forma
secuencial. Por tanto, deberemos hacer el tracking, que se
realiza en bloques de datos correspondientes
a un milisegundo, de cada fichero de forma secuencial, es decir,
hacer el tracking correspondiente a un
milisegundo de un fichero, hacer lo mismo con el otro fichero, y
así sucesivamente hasta terminar el
número de milisegundos total procesados. Esto deberá hacerse
para cada canal.
También debemos ser capaces de simular, de alguna manera, el
spoofing, ya que como se indicó antes,
realizarlo de forma real es ilegal. Para simular el ataque
deberemos sustituir la señal P(Y) de uno de los
ficheros por otra señal, por ejemplo un ruido blanco gaussiano,
que sería lo esperado si se realizara un
ataque de estas características.
Vamos a ir realizando modificaciones al código para lograr estos
objetivos.
initSettings.m
En primer lugar, necesitamos trabajar con dos ficheros, por lo
que el sistema debe ofrecernos esta
posibilidad. Debemos ser capaces de indicarle al software qué
ficheros vamos a utilizar, por lo que
añadimos en la estructura settings un nuevo parámetro que
indique la ruta al segundo fichero con el
que trabajaremos, llamado secondfileName.
También debemos ser capaces de indicarle al software si queremos
que haga spoofing o no, es decir, si
queremos que la señal P(Y) de uno de los dos ficheros sea
modificada para simular un ataque de
spoofing. Esta variable solo podrá tener dos valores, true si
queremos que sí se haga spoofing, y false, si
queremos que no se realice el ataque.
Para tal fin, añadimos una nueva variable a la estructura
settings, llamada makeSpoof.
Antes definimos la estrategia para determinar si se estaba
produciendo un ataque o no. Calcularemos
un coeficiente de spoofing, y en caso de que sea superior a un
umbral determinado, concluiremos que
no se está produciendo ningún ataque. De alguna manera debemos
indicar el valor de este umbral, así
que para tal fin creamos la variable spoofTreshold dentro de la
estructura settings.
Por otro lado, si volvemos a la ecuación de la correlación entre
las dos señales P(Y)
𝑆𝑄,1:2 = ∫ 𝐵1𝐵2𝐷𝑇𝐶
0
(𝑡 − 𝜏𝑃,1)𝐷(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 − 𝜏𝑃,1)𝑑𝑡
Observamos que existe un valor, ∆𝑡, que corresponde a la
diferencia entre lo que tarda la señal en llegar
a un receptor y al otro. En nuestro caso, que trabajamos con
ficheros, esta diferencia temporal será un
desfase provocado no solo por la diferencia entre los tiempos de
llegada de la señal a cada receptor,
sino por la diferencia entre los instantes en que se comienzan a
recoger los datos de cada fichero.
-
39
Por muy precisos que seamos, los aparatos tienen un tiempo de
calentamiento, que será diferente para
cada uno de los dispositivos que utilicemos para capturar los
datos y guardarlos en un fichero, por lo
que el valor ∆𝑡 puede llegar a ser significativo, de cientos de
milisegundos. En el caso de que un humano
tenga que, manualmente, iniciar cada dispositivo, el retardo
puede llegar a ser de varios segundos.
Aumentar el máximo valor posible de ∆𝑡 implica aumentar el rango
de la correlación que tendremos que
hacer para poder encontrar el pico. Es decir, si ∆𝑡 puede ser de
hasta un segundo, quiere decir que
tendremos que correlar al menos un segundo de la señal P(Y) de
ambos ficheros, ya que en caso utilizar
una señal de menos de un segundo, ∆𝑡 podría caer fuera del rango
de correlación y por tanto obtener
un falso positivo (creer que estamos siendo atacados cuando, en
realidad, simplemente es que la
ventana de tiempo debería ser mayor). Este fenómeno se ilustra
en la Figura 19.
Figura 19. A la izquierda, correlación con una ventana
insuficiente, a la derecha la misma correlación con una ventana
temporal más grande.
Para controlar el tamaño máximo de esta ventana temporal,
creamos una nueva variable en la
estructura settings, con el nombre msMaxToCheck, que indicará el
número máximo de milisegundos que
queremos de tamaño para la ventana temporal.
Por tanto, al fichero initSettings finalmente le hemos añadido
las siguientes líneas:
settings.secondfileName = ‘segundoFichero’;
settings.msMaxToCheck = 3000; settings.makeSpoof = false;
settings.spoofTreshold = 3.5;
Los datos que aparecen corresponden a una configuración de
ejemplo.
-
40
postProcessing.m
Como indicamos, este script se encarga, entre otras cosas, de
mantener y pasar las estructuras a las
diferentes funciones. Por tanto, aquí realizaremos todos los
cambios necesarios a estas estructuras
antes de pasárselo a las funciones.
Además, también es el encargado de llamar a las funciones, por
lo que si necesitamos llamar más de una
vez a una función, cambiar el orden de las llamadas, etc.
Tendremos que realizar esos cambios en este
fichero.
En primer lugar, tenemos que abrir dos ficheros, por lo que
tendremos dos descriptores de ficheros
distintos. Al ser ficheros raw, los abrimos en modo lectura
binaria. Para ello están las siguientes líneas
de código:
[fid, message] = fopen(settings.fileName, 'rb'); [fid2,
message2] = fopen(settings.secondfileName, 'rb');
Al existir dos ficheros, necesitaremos realizar la adquisición
dos veces. Esto implica, además de tener
que llamar dos veces a la función con los parámetros
correspondientes, tener dos estructuras de datos
para poder almacenar los resultados de la adquisición. También
deberemos llamar dos veces a la
función que imprime estos resultados, para poder evaluarlos.
disp (' Acquiring satellites for file 1...'); acqResults =
acquisition(data, settings);
disp(' Acquiring satellites for file 2...'); data = fread(fid2,
11*samplesPerCode, settings.dataType)'; acqResults2 =
acquisition(data, settings);
plotAcquisition(acqResults); plotAcquisition(acqResults2);
Ahora vendría la llamada a la función de tracking. Sin embargo,
tal y como indicamos anteriormente,
solo haremos el seguimiento de los canales que se encuentren en
ambos ficheros.
Esto quiere decir que tenemos que añadir el código necesario
para poder eliminar los canales (más bien,
los satélites asociados a esos canales) que no sean iguales en
ambos ficheros.
Para ello escribimos el siguiente código:
for i=1:settings.numberOfChannels for
b=1:settings.numberOfChannels if(channel(i).PRN == channel2(b).PRN)
break; end if(b == settings.numberOfChannels) channel(i).PRN = 0;
end end end
-
41
Como vemos, recorremos ambos arrays de estructuras de datos,
channel y channel2, que es donde
están almacenados los datos correspondientes a los canales, y
aquellos cuyos satélites, dados por el
campo PRN, no sean comunes a ambos ficheros, los eliminamos,
poniéndole el campo PRN a cero.
Una vez nos hemos asegurado de que vamos a procesar los mismos
canales para ambos ficheros,
necesitamos reordenar las estructuras channel y channel2, de
manera que estén ordenadas.
Esto es necesario porque, cuando realicemos el seguimiento,
deberemos hacerlo del mismo satélite en
ambos ficheros, por lo que en las estructuras channel y channel2
deben aparecer los satélites en el
mismo orden.
En la Figura 20 observamos el resultado tras la fase de
adquisición de dos ficheros donde no tenían
visibilidad los mismos satélites (solo uno en común).
Figura 20. Adquisición de dos ficheros que tienen visibilidad
con distintos satélites
Para ello creamos la función SortStruct, que nos ordenará una
estructura, de mayor a menor, según el
campo que le indiquemos.
channel = SortStruct(channel, 1); channel2 =
SortStruct(channel2, 1);
El campo PRN es el primero de la estructura channel, por eso le
pasamos un “1” como segundo
parámetro a la función.
La función SortStruct hace lo siguiente:
- Crea un cell array de tres dimensiones a partir de la
estructura de da