• No results found

El objetivo para un lazo de seguimiento de código es mantener la pista de la fase de un código específico en la señal. El lazo de seguimiento de código en los receptores GPS es un

lazo de seguimiento de retrazo (DLL – Delay Lock Loop). El objetivo del DLL es

correlacionar la señal de entrada con las tres réplicas de código como se muestra en la figura 1.12[16].

Figura. 1.12: Diagrama a bloques básico del lazo de seguimiento de código.

El primer paso (mostrado en la figura 1.12) es convertir el código C/A a banda base, para multiplicar la señal de entrada con una réplica local perfectamente alineada de la onda portadora. Después la señal es multiplicada con tres réplicas de código. Las tres réplicas están normalmente generadas con un espaciamiento de ±1/2 chip. Después de esta segunda multiplicación, las tres salidas pasan a la etapa de integración y descarga. La salida de estas integraciones es un valor numérico el cual indica cuánto se parece la réplica de código con el código en la señal de entrada.

Las salidas de las tres correlaciones IE, IPy ILson entonces comparadas para ver cuál de

todas proporciona la correlación más alta. La figura 1.13 [16] muestra un ejemplo del seguimiento de código.

En la figura 1.13 (a) el código late tiene la correlación más alta, entonces la fase de código

debe de ser disminuida, por ejemplo, la secuencia de código debe ser retrasada. En la figura 1.13(b) el pico más alto está localizado en la réplica prompt, y las réplicas early y late

tienen la misma correlación, la fase del código es correctamente seguida y el lazo está correctamente sincronizado.

El DLL con tres correladores, como el de la figura 1.12, es óptimo cuando la onda portadora local está bloqueada en fase y frecuencia. Pero cuando hay errores de fase en la onda portadora local, la señal tendrá mucho ruido, por lo que será difícil que el DLL pueda mantener el bloqueo sobre el código. Por estas razones se recomienda utilizar el diseñado que muestra la figura 1.22 [16].

Figura. 1.13: Seguimiento de código.

El diseño de la figura 1.14 tiene la ventaja que es independiente de la fase en la onda portadora local. Si la onda portadora local está en fase con la señal de entrada, toda la energía estará en la rama I. Pero si la fase de la portadora local cambia respecto a la fase de

Figura. 1.14: Diagrama a bloques del DLL con seis correladores.

El desempeño del lazo de seguimiento de código tiene que ser independiente del desempeño de lazo de seguimiento de fase, el lazo de seguimiento tiene que usar las ramas

In-phase y quadraphase para el seguimiento del código.

1.4.2.4 Efecto Doppler en el proceso de demodulación

El efecto Doppler es un fenómeno, observado para las ondas de acústica y electromagnética, que se caracteriza por un cambio en la frecuencia aparente de una onda, como resultado del movimiento relativo entre el emisor (satélite) y el receptor.

La frecuencia Doppler, en el sistema GPS, puede cambiar acercándose a valores tan altos como 10 kHz en caso de una velocidad máxima del satélite combinada con una muy alta velocidad del usuario [1]. Para un receptor estacionario, el cambio de la frecuencia Doppler nunca será superior a 5 kHz.

Estos cambios de frecuencia causan rotaciones en la fase instantánea de la señal modulada recibida por el receptor. Si la diferencia de frecuencia es muy grande, la rotación de fase instantánea no puede discriminarse de las rotaciones de fase de ±180º, que se ocasionan en

la modulación BPSK de la señal. Esto confunde el proceso de demodulación de datos, causando posible pérdida en el lazo de seguimiento [4].

Por esta razón a la hora de diseñar el proceso de seguimiento, se deben buscar mecanismos que compensen estas rotaciones. (Más detalles en [17, 18]).

1.4.3 Procesamiento de los datos de navegación.

La velocidad del dato de navegación es 50 bps. Mientras que la velocidad de muestreo a la salida del bloque de seguimiento es de 1000 muestras por segundo (sps). Por lo que antes que los datos de navegación puedan ser decodificados, la señal resultante del bloque de seguimiento debe ser convertida de 1000 sps a 50 bps. Es decir que 20 muestras consecutivas serán cambiadas por 1 bit. A este procedimiento de conversión se le conoce como sincronización de bit.

Figura. 1.15: Se muestra la salida del bloque de seguimiento.

La primera tarea del procedimiento de sincronización de bit es encontrar el tiempo en una secuencia donde ocurre la transición de bit. Primero, se debe detectar los cruces por cero.

Un cruce por cero es donde la salida cambia de 1 a -1, o viceversa. Cuando un cruce por cero es localizado, el tiempo de una transición de bit es localizado. Cuando el tiempo de una transición de bit es conocido, es posible encontrar todos los tiempos de la transición de bit. Estos se encuentran separados 20 ms del principio de la primera transición de bit

detectada. La figura 1.15 [16] muestra como todas las transiciones de bit son encontradas en una secuencia de 1 segundo. Las líneas punteadas marcan las transiciones de bit separadas cada 20 ms. La señal de la figura es muy fuerte, una señal débil tendrá puntos más cerca de cero.

Cuando el tiempo de la transición de bit es localizado, la señal a 1000 sps será convertida a una tasa de bit de 50 bps. Para hacer esto, 20 muestras serán remplazadas por un bit.

Una vez obtenidos los bits de navegación, por medio de la sincronización de bit, estos deben ser decodificados.

1.4.3.1 Decodificación de los datos de navegación.

El primer paso en el proceso de decodificación es determinar donde comienza una subtrama. Como explica la sección 1.3, cada subtrama comienza con un preámbulo fijo de 8 bits, en la palabra TLM. El patrón de dicho preámbulo es 10001011.

Hay que tener en cuenta que debido a que los lazos Costa tienen la habilidad de seguir la señal con cambios de fase de 180º, este preámbulo puede ser invertido (01110100). Como estos dos patrones pueden encontrarse en cualquier lugar de los datos recibidos, entonces se debe realizar un chequeo para autentificar este preámbulo. El procedimiento de autentificación comprueba si el mismo preámbulo se repite cada 6 segundos, correspondiente al tiempo que tarda entre la transmisión de dos subtramas consecutivas. La búsqueda del preámbulo es implementada a través de la correlación. La primera entrada a la función de correlación es la secuencia entrante de bits de los datos de navegación. La segunda entrada a la función de correlación es el preámbulo de 8 bits también representado con -1’s y 1’s. Cuando usamos valores de -1 y 1 en lugar de 0 y 1, la salida de la función de correlación es 160 cuando el preámbulo es localizado y -160 cuando un preámbulo invertido es localizado. Un ejemplo de la correlación entre una secuencia de datos de navegación y el preámbulo puede ser visto en la figura 1.16 [16].

Cuando el preámbulo correcto es localizado, el dato de cada subtrama puede ser extraído. Si embargo, si la correlación muestra que el preámbulo está invertido, toda la secuencia de navegación debe ser invertida antes de extraer los datos.

Figura. 1.16: Correlación entre 37 segundos de datos de navegación y el preámbulo de 8

bits. Los picos indican la ubicación del comienzo de una subtrama.

Una vez decodificados los datos y sabiendo la estructura de cada subtrama (ver sección 1.3) se pueden extraer los datos de navegación. Después de leer alrededor de 30 segundos de datos, se establecerá el comienzo de una subtrama para determinar el momento cuando el dato fue transmitido por el satélite. Una vez determinado el tiempo de transmisión, los datos de efemérides serán decodificados. Estos se utilizarán para calcular la posición del satélite en el momento de la transmisión.

Luego se calculará el pseudorango. Los pseudorangos son calculados basándose en el momento de transmisión del satélite y el tiempo de llegada al receptor. El tiempo de llegada se basa en el comienzo de la subtrama.

Finalmente se calcula la posición del usuario. La posición es calculada con los valores del pseudorango y la posición del satélite encontrada por los datos de efemérides.

CAPÍTULO 2.

IMPLEMENTACIÓN DE BLOQUES DE RECEPTOR

GPS USANDO MATLAB.

En este capítulo explica las funciones y algoritmos, para la recepción de señales del sistema GPS, desarrollado durante la realización de este trabajo. Se incluye un breve preámbulo teórico al inicio de cada epígrafe que se considera necesario para un mejor entendimiento del funcionamiento del sistema.

En cada epígrafe se incluyen las funciones en MATLAB que componen el sistema con el fin de ilustrar mejor los métodos y algoritmos utilizados. Todo el sistema ha sido programado utilizando MATLAB versión 7.4.0.287 (R2007a), por tanto algunas funciones empleadas presentan problemas de compatibilidad con versiones anteriores de este software.

Como explica el epígrafe 1.7 del capítulo 1, el procesamiento de la señal GPS toma lugar en los canales del receptor digital. Como muestra la figura 1.14 el primer paso en el procesamiento digital de la señal es la adquisición, donde se determina que satélite esta visible para el usuario. Luego se realiza el proceso de seguimiento donde se demodulan los datos de navegación. Y finalmente se extraen los datos de navegación, para luego ser procesados y realizar los cálculos de la posición.

Para realizar todos estos procesos, previamente, la señal debe ser demodulada de su portadora. Es por esto que en la descripción de estos procesos, en el capítulo 1, se explica que en alguna parte de los mismos se debe hacer una correlación con una onda portadora generada localmente. Sin embargo para los objetivos de este proyecto se asume que la señal ya esta en banda-base. Por lo que no se implementan los procesos de demodulación de la señal.

Teniendo en cuenta los objetivos de este proyecto, solo se implementan los algoritmos de adquisición y seguimiento de la señal GPS. Para más información sobre la implementación de los procesos de extracción y decodificación de los datos, y los calculo de posicionamiento revisar[1].

2.1 Generación del Código C/A

Antes de explicar la implementación de la adquisición y seguimiento, es necesario hablar de la generación del código C/A. Ya que estos procesos requieren de la generación de dicho código para su funcionamiento.

En el epígrafe 1.2.3.1 del capítulo 1 se expone como se generan estos códigos en los satélites. Como se explica en dicha sección que el generador de código C/A está formado por dos registros desplazamientos de 10 bit, G1 y G2, que se realimentan linealmente; generando un código pseudo aleatorio (PRN) de 1023 bits de longitud (ver figura 2.1) [19].

Figura 2.1: Diagrama del Generador de Código C/A.

Ambos registros se inicializan en el estado todo a uno. El registro G1 esta formado por una suma módulo-2 (OR-exclusivo), de los estados 3 y 10, que alimenta la entrada del registro. Por su parte el registro G2 está formado por dos sumas módulo-2 (OR-exclusivo). El primer OR de G2, lo integran los estados 1,2, 3, 6, 8, 9 y 10, y alimenta la entrada del registro. El segundo OR de G2 es la suma de dos bits del registro que son seleccionados según la identificación del satélite (por ejemplo en el satélite 1 los bits que integran en OR son el 2 y el 6). La Tabla 1 del Anexo 1 resume los bits que utiliza este OR para cada uno de los satélites.

Como se ilustra en la figura 2.1, el código C/A es el resultado de la suma un OR-Exclusivo de la salida del G1 y la salida del segundo OR de G2 (llamada G2sv).

Tabla 2.1

Operación OR exclusivo Multiplicación Ordinaria Entrada Entrada Salida Entrada Entrada Salida

0 0 0 -1 -1 +1

0 1 1 -1 +1 -1

1 0 1 +1 -1 -1

1 1 0 +1 +1 +1

Hay que tener en cuenta que cuando en el satélite se realiza la modulación BPSK, la secuencia binaria se representa por la representación polar de no retorno a cero. Por lo que la secuencia toma valores de +1 o -1, donde el 0 equivale a +1 y el 1 equivale a -1. Como una multiplicación entre valores de +1 y -1 es equivalente a un OR de valores de 0 y 1 (como se demuestra en el tabla 2.1), a la hora de programar en el MATLAB, el OR puede ser sustituido por una simple operación de multiplicación de valores de ±1. La figura 2.2 muestra las líneas de código utilizadas para la implementación en MATLAB del generador de código C/A.

function CA= cacode(sv, chiprate, fs, nsamples)

% sv= Identificación del satélite (1 al 32) % chiprate = No de chips por segundo

% fs= Frecuencia de muestreo % nsamples = No. de muestras

fase = [2 6; 3 7; 4 8; 5 9; 1 9; 2 10; 1 8; 2 9; 3 10; 2 3; 3 4; 5 6; ...

6 7; 7 8; 8 9; 9 10; 1 4; 2 5; 3 6; 4 7; 5 8; 6 9; 1 3; 4 6; 5 7; ...

6 8; 7 9; 8 10; 1 6; 2 7; 3 8; 4 9];

G1=-1*ones(1,10);%se inicializa G2 y G1 con todos los valores en 1(es %decir en -1)

G2=G1;

s1=fase(sv,1);%los tomas del 2do OR del G2

s2=fase(sv,2); tmp=0;

for i=1:1023

G(i)=G2(s1)*G2(s2)*G1(10);%OR entre 2do OR de G2 y la salida de G1

tmp=G1(1);

G1(1)=G1(3)*G1(10);%OR G1, su resultado alimenta la entrada de G1

G1(2:10)=[tmp G1(2:9)];%Se hace el desplaza de los registros de G1

tmp=G2(1);

G2(1)=G2(2)*G2(3)*G2(6)*G2(8)*G2(9)*G2(10);%OR G2, su resultado

%alimenta la entrada de G2 G2(2:10)=[tmp G2(2:9)];%Se hace el desplaza de los registros de G2

end;

i=1:nsamples;

CA(i)= G(ceil(i*chiprate/fs));%Se genera el Código C/A

2.2. Adquisición

Como se ha explicado cada satélite trasmite un código C/A que es diferente al transmitido por los demás satélites. El receptor GPS debe correlacionar la señal recibida con cada uno de los 32 códigos C/A, para determinar qué satélite está disponible para el usuario. Para cada código el receptor debe realizar una búsqueda en dos dimensiones: la frecuencia y la fase [20]. A este proceso se le llama Adquisición.

Además de determinar que satélite es visible para el usuario, la adquisición debe determinar dónde comienza un periodo del código C/A. Es decir desde dónde comienzan los datos, de un satélite determinado. Este parámetro se le llama fase del código C/A.

Por otra parte, durante la transmisión ocurre una desviación de la señal portadora causada por el efecto Doppler. Aunque se asume que ya la señal está en banda-base y no es necesario determinar la portadora para que sea demodulada, sí se debe calcular los cambios en su frecuencia, para que en el proceso de seguimiento se puedan compensar las afectaciones que provoca este corrimiento. Para esto se utiliza complejos algoritmos de seguimiento de la portadora, como los descritos en el capítulo 1.

Sin embargo el desplazamiento Doppler, puede estimarse fácilmente a partir de la fase del código, por lo que, en este proyecto, se propone implementar este proceso dentro del algoritmo de seguimiento, como un elemento de la compensación del efecto Doppler. Por lo que se explicará en detalles en el epígrafe 2.3.

Existen varias técnicas para realizar el proceso de Adquisición, a continuación se explicaran los dos métodos más utilizados. Para más información sobre otros métodos para implementar la Adquisición, ver [21-23]

2.2.1. Búsqueda Serial

La Búsqueda Serial es el algoritmo de adquisición más sencillo y más utilizado. En este método se utiliza el correlacionador no coherente mostrado en la figura 2.3. La señal que entra al correlacionador tiene la forma de la ecuación 2.1, donde la señal recibida (S) es una combinación de señales de todos los n satélites visibles. Es por esto que el primer paso es definir la señal del satélite especifico, para esto la señal entrada se multiplica por la replica del código C/A del satélite a buscar, CA[n + m]. Donde n representa la n muestra y m el

número de muestra que es desplazado la replica del código C/A [24]. Por ejemplo para una frecuencia de muestreo de 8 MHz, la longitud de un periodo de código C/A es 8000.

)

(

...

)

(

)

(

2 1

t

S

t

S

t

S

S

=

+

+

+

n (2.1)

Una vez definido la señal del satélite especifico, se separan los componentes in-phase y quadraphase de dicha señal. Luego las componentes I y Q se acumulan para uno o más

períodos de código. La suma acumulada se eleva al cuadrado, se correlacionan entre sí y se suman para producir un valor de correlación promedio[25].

Figura 2.3: Correlacionador No Coherente en el dominio del tiempo.

La salida del sistema es el valor de correlación que hay entre la señal de entrada y la señal generada localmente. Si se excede un umbral predefinido significa que el satélite fue adquirido.

Para ubicar la fase donde comienza la señal del satélite, este proceso se debe ejecutar dentro de un lazo, probando el proceso de correlación en las distintas muestras de la señal capturada. Si en una de las muestras el resultado de la correlación genera un pico de potencia mayor al umbral predefinido, significa que es la fase correcta y que a partir de esta muestra se encuentran los datos de navegación del satélite. Las figuras 2.4 y 2.5 muestran dos maneras de implementar este proceso en MATLAB.

function C = serialsearch(data, sat_id, ch_rate, fs, n_data)

% data = señal a procesar % sat_id = satélite a buscar

% ch_rate = Razón chipping del código C/A (1.023 MHz) % fs = Frecuencia de Muestreo

% n_data = No. de Muestras de datos (típicamente 16000 muestras, deben % ser uniformes)

% Generación del código C/A

ca = cacode(sat_id, ch_rate, fs, n_data/2);

% Se separan los componentes I y Q de la señal

I_comp = imag(data); Q_comp = real(data);

% Lazo de la fase del código

for phase_index=1: (n_data/2)

% Se Acumula la correlación de I y Q con el código C/A

I = sum(I_comp(phase_index:phase_index+(n_data/2-1)) .*ca); Q = sum(Q_comp(phase_index:phase_index+(n_data/2-1)) .*ca); %Se ajustan y se suman

C(phase_index)= I.^2 + Q.^2;

end % Fin del Lazo

plot(C); % Se gráfica el resultado de la correlación

ph = find(C==max(max(C))); %Se determina la fase del código

Figura 2.4: Implementación en MATLAB del método de Búsqueda Serial.

function [C, ph] = serials(data, sat_id, ch_rate, fs, n_data)

% data = señal a procesar % sat_id = satélite a buscar

% ch_rate = Razón chipping del código C/A (1.023 MHz) % fs = Frecuencia de Muestreo

% n_data = No. de Muestras de datos (típicamente 16000 muestras, deben % ser uniformes)

% Generación del código C/A

ca = cacode(sat_id, ch_rate, fs, n_data/2);

% Lazo de la fase del código

for phase_index=1:(n_data/2)

% Se correlaciona la señal y el código C/A % el resultado de la correlación se acumula.

x = sum(data(phase_index:phase_index+(n_data/2-1)).*ca);

%Se ajustan y se suman

C(phase_index)= abs(x)^2;

end % % Fin del Lazo

plot(C); % Se gráfica el resultado de la correlación

ph = find(C==max(max(C))); %Se determina la fase del código

2.2.2. Búsqueda FFT

Una forma más eficiente de realizar la adquisición es utilizar una convolución circular, para obtener el siguiente resultado:

(

)

(

)

[

L

]

L n

m

n

CA

n

x

m

R

=

+

− = 1 0

]

[

]

[

(2.3)

La convolución circular es una multiplicación en el dominio de la frecuencia. De manera que podemos escribir la ecuación 2.3 como[26]:

)

])

[

(

])

[

(

(

]

[

]

[

]

[

1 *

n

CA

F

n

x

F

F

n

CA

n

x

m

R

=

=

(2.4) Convolución Circular

En esta ecuación se utiliza la transformada discreta de Fourier (DTF) y su inversa, para calcular R. Esto puede ser adaptado para la adquisición de las señales GPS, como se muestra en la figura 2.6. Por este método los componentes in-phase y quadraphase se

utilizan como las entradas reales e imaginarias, respectivamente, en el cálculo de la DFT. El resultado se multiplica por la conjugada compleja de la DFT del código C/A generado localmente. La convolución circular se obtiene tomando la magnitud de la transformada inversa Fourier, del resultado de la correlación, como se ve en la figura 2.3. El algoritmo de la transformada rápida de Fourier (FFT) se utiliza para implementar la DFT y IDFT, por lo que este método suele ser llamado búsqueda FFT [24].

Figura 2.6: Correlacionador No Coherente en el dominio de la frecuencia.

Finalmente, usando este método, el algoritmo de la adquisición en MATLAB sería el presentado en la figura 2.7.

function [C, ph] = fftsearch(data, sat_id, ch_rate, fs, n_data)

% Ejecuta una convolución circular usando la FFT y IFFT % Parámetros

% data = señal a procesar % sat_id = satélite a buscar

% ch_rate = Razón chipping del código C/A (1.023 MHz) % fs = Frecuencia de Muestreo

% n_data = No. de Muestras de datos (típicamente 8000 muestras) % Generación del código C/A

CA = cacode(sat_id, ch_rate, fs, n_data);

% FFT de lo señal recebida

X = fft(data(1:n_data));

% FFT de la conjugada del código CA

F_CA = conj(fft(CA));

% Se Multiplica en el dominio de la frecuencia la señal y el código C/A % finalmente se halla el cuadrado de la IFFT del resultado.

Related documents