identificación de radiobases ds-cdma detectando su desfasaje del

Anuncio
UNIVERSIDAD SIMÓN BOLÍVAR
DECANATO DE ESTUDIOS PROFESIONALES
COORDINACIÓN DE INGENIERÍA ELECTRÓNICA
IDENTIFICACIÓN DE RADIOBASES DS-CDMA DETECTANDO SU
DESFASAJE DEL CÓDIGO PN SOBRE PLATAFORMA LABVIEW
Por:
Br. Daniel San Martín Lens
PROYECTO DE GRADO
Presentado ante la Ilustre Universidad Simón Bolívar
como requisito parcial para optar al título de
Ingeniero Electrónico
Sartenejas, octubre de 2010
UNIVERSIDAD SIMÓN BOLÍVAR
DECANATO DE ESTUDIOS PROFESIONALES
COORDINACIÓN DE INGENIERÍA ELECTRÓNICA
IDENTIFICACIÓN DE RADIOBASES DS-CDMA DETECTANDO SU
DESFASAJE DEL CÓDIGO PN SOBRE PLATAFORMA LABVIEW
Por:
Br. Daniel San Martín Lens
Realizado con la asesoría de:
Ing. Miguel Augusto Díaz Díaz
PROYECTO DE GRADO
Presentado ante la Ilustre Universidad Simón Bolívar
como requisito parcial para optar al título de
Ingeniero Electrónico
Sartenejas, octubre de 2010
UNIVERSIDAD SIMÓN BOLÍVAR
DECANATO DE ESTUDIOS PROFESIONALES
COORDINACIÓN DE INGENIERÍA ELECTRÓNICA
ACTA DE EVALUACIÓN DEL PROYECTO DE GRADO
CÓDIGO DE LA ASIGNATURA: EP________________________ FECHA:___/___/______
ESTUDIANTE:_______________________________________ CARNET:______________________
TÍTULO DEL TRABAJO: _____________________________________________________________
TUTOR: Prof.
CO-TUTOR: Prof.
JURADO: Profs.
APROBADO:
REPROBADO:
OBSERVACIONES:
El Jurado considera por unanimidad que el trabajo es EXCEPCIONALMENTE BUENO:
SI:
NO:
En caso positivo, justificar razonadamente:
Jurado
Jurado
Tutor Académico
Co-Tutor
Jurado
Nota: Colocar los sellos de los respectivos Departamentos. Para jurados externos, usar sello de la
Coordinación
UNIVERSIDAD SIMÓN BOLÍVAR
DECANATO DE ESTUDIOS PROFESIONALES
COORDINACIÓN DE INGENIERÍA ELECTRÓNICA
IDENTIFICACIÓN DE RADIOBASES DS-CDMA DETECTANDO EL
DESFASAJE DEL CÓDIGO PN SOBRE PLATAFORMA LABVIEW
Informe de Proyecto de Grado presentado por Daniel San Martín Lens Carnet: 04-37575
Realizado con la Asesoría del Ing. Miguel Augusto Díaz Díaz.
RESUMEN
Las radiobases de transmisión pertenecientes a la tecnología celular DS-CDMA realizan el
enmascaramiento de las señales del enlace de bajada mediante la utilización de un código de
ruido pseudoaleatorio. Las radiobases son identificadas a través del desfasaje particular de dicho
código que emplea cada una de ellas, el cual es detectable en el canal piloto. El presente trabajo
tiene por objeto realizar la detección e identificación de las radiobases presentes en un área
geográfica determinada, a partir de la determinación del desfasaje que emplea cada una de ellas.
Para lograrlo se comprobaron los algoritmos de generación de los códigos pseudoaleatorios, así
como sus características de autocorrelación y nivel de aleatoriedad, asegurando que cumplieran
con las propiedades de balance y autocorrelación esperadas. Partiendo de esta comprobación se
diseñó una herramienta de detección e identificación de los desfasajes de cada canal piloto
presente en la transmisión, basando el desarrollo del buscador en el aprovechamiento de las
propiedades de los códigos pseudoaleatorios en fase y cuadratura. Se obtuvieron resultados
gráficos de la presencia de los canales piloto y los multitrayectos configurados en el transmisor,
así como un indicador de la existencia de polución de pilotos. Todos los datos de interés y las
gráficas obtenidas son almacenados en el disco duro. La totalidad del diseño se realizó utilizando
el software LabVIEW® para la programación de las diferentes etapas del proyecto.
Palabras clave: canal piloto, ruido pseudoaleatorio
iv
A mis abuelos,
por todo su cariño y dedicación
A todos mis padres,
por todo su apoyo y amor
A mis hermanos,
espero ser siempre su guía y amigo
A Miguel,
por su gran influencia en mi futuro
A Cristina,
por todo su amor y compañía
A mis amigos,
por todos los buenos momentos
A Rico,
por haber sido parte de mi vida
v
AGRADECIMIENTOS
Primero quisiera a gradecer a toda mi familia porque es gracias a ellos que soy quien soy y
como soy, gracias por todos los años de esfuerzo y crianza que invirtieron en mi, espero hacerlos
sentir siempre orgullosos. Todo lo que soy es por y para ustedes. De ustedes aprendí los valores
necesarios para salir adelante por mis propios medios, ayudando a los demás en el proceso.
También aprendí que todo lo valioso de la vida se alcanza con esfuerzo y dedicación, y que la
mejor recompensa es el resultado de un trabajo bien hecho. Aún me queda mucho por recorrer y
muchos logros que cultivar en el proceso, todos los cuales serán siempre gracias a su apoyo. Por
todo esto y mucho más, estaré siempre agradecido y orgulloso de todos.
En segundo lugar quisiera agradecer a mi tutor y amigo, el ingeniero Miguel Augusto Díaz
Díaz. Mi agradecimiento hacia él se extiende más allá de la realización de este trabajo, sin cuyos
valiosos consejos y guía no pudiera haber sido realizado. Fue gracias a sus amplios
conocimientos y la inmensa pasión e interés con que imparte sus clases, que decidí en un punto
crítico de mi carrera tomar el camino de las telecomunicaciones en definitiva y para siempre. De
ahora en adelante, cualquier logro que consiga en esta área, incluyendo la Maestría próxima, será
en gran medida gracias a él. Por toda su orientación, apoyo y amistad tendrá hoy y siempre mi
gratitud.
Quisiera también dedicarle unas palabras de agradecimiento a mi novia Cristina De Sousa,
quien siempre tuvo una inmensa paciencia conmigo durante los momentos más difíciles de la
realización de este trabajo. Sin sus constantes palabras de aliento e impulso este trabajo no sería
ni la mitad de lo que es, y sin ella yo no sería ni la mitad de lo feliz que soy. Gracias mi vida, te
amo.
vi
De igual manera agradezco a todos los amigos que de una u otra forma han influido en mi
manera de ser, y con quienes comparto un vínculo que difícilmente se romperá. Inicio mi
agradecimiento con los amigos de la infancia: Alexmay, Leo, Oswaldo, Otto, Eder, Moisés, Luis
Alexis, Mauro, Juanita y Capriles; definitivamente esos años de colegio estarán siempre en mi
memoria, gracias a ustedes por entender todas las veces que no pude ir a la playa o a jugar truco
mientras realizaba este trabajo. Siguiendo de manera cronológica quisiera agradecer a mis
primeros amigos universitarios: Eduars, Rene, Jorge, Plan, El Viejo, El Catire, Mamantón,
Guaipo, y un apartado especial para mi gran amigo Roberto “Bocina” Gil, con quienes viví tantas
cosas buenas junto con mis amigas: Mumu, Gaby, Adriana y Diana, quienes estuvieron ahí
durante todo ese tiempo también.
Agradezco a mi tocayo Daniel por todo lo que compartimos y a mi amigo Christian por
todo su interés en la realización de este trabajo y por las muchas horas de estudio en conjunto, sus
palabras de aliento siempre ayudaron a mitigar mis mayores preocupaciones. Así llego a mis
amigos y grandes trolazos: El Mocho, Fede, Emilio y El Osito, quienes junto con Plan fueron
partícipes de innumerables bromas, así como de infinitas horas de laboratorios y proyectos.
Gracias a ustedes por ayudarme a hacer más llevadera la odisea de estudiar electrónica en la
USB.
vii
ÍNDICE
RESUMEN .......................................................................................................................... iv AGRADECIMIENTOS ...................................................................................................... vi ÍNDICE DE TABLAS ........................................................................................................ xi ÍNDICE DE FIGURAS ...................................................................................................... xii LISTA DE ABREVIATURAS ......................................................................................... xiv INTRODUCCIÓN ............................................................................................................... 1 Justificación e Importancia .............................................................................................. 1 Planteamiento del Problema ............................................................................................. 2 Objetivo General .............................................................................................................. 3 Objetivos Específicos ....................................................................................................... 3 CAPÍTULO 1 FUNDAMENTOS TEÓRICOS .................................................................. 6 1.1. Orígenes de la tecnología ....................................................................................... 6 1.2. Códigos ortogonales y espectro expandido ........................................................... 7 1.3. Códigos Walsh ..................................................................................................... 11 1.4. Códigos de ruido pseudoaleatorio........................................................................ 15 1.5. Identificación de bases de transmisión ................................................................ 21 1.6. Multitrayectos y su recepción .............................................................................. 22 1.7. Modulación QPSK ............................................................................................... 24 1.8. Software LabVIEW ® ......................................................................................... 25 CAPÍTULO 2 GENERACIÓN Y PRUEBA DE LOS CÓDIGOS ................................... 27 2.1. Primera aproximación al espectro expandido ...................................................... 29 2.2. Generación y prueba de los códigos Walsh ......................................................... 31 2.3. Generación y prueba de los códigos PN .............................................................. 33 viii
2.3.1. Diseño de los registros de corrimiento .......................................................... 33 2.3.2. Conversión de los códigos PN binarios ......................................................... 38 2.3.3. Pruebas de los códigos PN ............................................................................ 40 CAPÍTULO 3 DISEÑO DEL GENERADOR Y DEL RECEPTOR ................................ 51 3.1. Resumen del procedimiento experimental ........................................................... 51 3.2. Enfoque inicial, el espectro expandido ................................................................ 52 3.3. Aplicando modulación y demodulación analógica .............................................. 52 3.4. Búsqueda de patrones en arreglos binarios .......................................................... 57 3.5. Generación y detección de multitrayectos ........................................................... 66 3.5.1. Primera aproximación.................................................................................... 66 3.5.2. Generación de trayectos cíclicos ................................................................... 67 3.5.3. Modelo de generación, modulación y demodulación de pilotos ................... 68 3.6. Procesamiento digital y representación gráfica de resultados ............................. 76 3.7. Detección de polución de pilotos ......................................................................... 79 3.8. Solución al problema de las detecciones falsas ................................................... 80 3.9. Recorrido paso a paso del funcionamiento de la herramienta ............................. 82 3.10. Diseño de la interfaz gráfica final .................................................................... 83 CAPÍTULO 4 RESULTADOS Y DISCUSIÓN ............................................................... 89 4.1. Caso ideal: radiobases equidistantes .................................................................... 89 4.1.1. Resultados para pruebas de una radiobase .................................................... 89 4.1.1.1. Cero multitrayectos .................................................................................... 89 4.1.1.2. Un multitrayecto ......................................................................................... 93 4.1.1.3. Dos multitrayectos ...................................................................................... 96 4.1.1.4. Tres multitrayectos ..................................................................................... 99 4.1.2. Resultados para prueba de dos radiobases................................................... 102 4.1.3. Resultados para prueba de tres radiobases .................................................. 106 ix
4.1.4. Resultados para prueba de cuatro radiobases .............................................. 110 4.1.5. Resultados para prueba de cinco radiobases................................................ 115 4.1.6. Resultados para prueba de seis radiobases .................................................. 120 4.2. Caso no ideal: radiobases a diferentes distancias .............................................. 126 4.3. Análisis de resultados y limitaciones del proyecto ............................................ 131 CONCLUSIONES Y RECOMENDACIONES ............................................................... 133 REFERENCIAS BIBLIOGRÁFICAS ............................................................................. 135 APÉNDICES .................................................................................................................... 137 APÉNDICE A: Diagrama de bloques de las etapas del sistema .................................. 138 x
ÍNDICE DE TABLAS
Tabla 2.1: Resultados para distintos códigos de expansión .............................................. 30 Tabla 4.1: Resultados para el caso 4.1.1.1 ........................................................................ 90 Tabla 4.2: Resultados para el caso 4.1.1.2 ........................................................................ 93 Tabla 4.3: Resultados para el caso 4.1.1.3 ........................................................................ 96 Tabla 4.4: Resultados para el caso 4.1.1.4 ........................................................................ 99 Tabla 4.5: Resultados para el caso 4.1.2 ......................................................................... 103 Tabla 4.6: Resultados para el caso 4.1.3, primera mitad ................................................ 107 Tabla 4.7: Resultados para el caso 4.1.3, segunda mitad ................................................ 107 Tabla 4.8: Resultados para el caso 4.1.4, primera mitad ................................................ 111 Tabla 4.9: Resultados para el caso 4.1.4, segunda mitad ................................................ 112 Tabla 4.10: Resultados para el caso 4.1.5, primer tercio ................................................ 117 Tabla 4.11: Resultados para el caso 4.1.5, segundo tercio.............................................. 117 Tabla 4.12: Resultados para el caso 4.1.5, tercer tercio .................................................. 117 Tabla 4.13: Resultados para el caso 4.1.6, primer cuarto ............................................... 122 Tabla 4.14: Resultados para el caso 4.1.6, segundo cuarto ............................................. 122 Tabla 4.15: Resultados para el caso 4.1.6, tercer cuarto ................................................. 122 Tabla 4.16: Resultados para el caso 4.1.6, último cuarto................................................ 123 Tabla 4.17: Resultados para el caso 4.2, primer tercio ................................................... 128 Tabla 4.18: Resultados para el caso 4.2, segundo tercio................................................. 128 Tabla 4.19: Resultados para el caso 4.2, último tercio .................................................... 128 xi
ÍNDICE DE FIGURAS
Figura 1.1: Diferentes esquemas de múltiple acceso
7 Figura 1.2: Comparación entre una señal banda estrecha y una de espectro expandido
9 Figura 1.3: Comparación entre expansión por saltos de frecuencia y secuencia directa 10 Figura 1.4: Matriz de códigos Walsh de dimensión 64x64
14 Figura 1.5: Expansión y conversión de formato del canal piloto
15 Figura 1.6: Registro de corrimiento de tres etapas
16 Figura 1.7: Registros de desplazamiento para los códigos PN-I y PN-Q
18 Figura 1.8: Registros de desplazamiento para los códigos PN-I y PN-Q
20 Figura 1.9: Posicionamiento de los 512 pilotos en el código PN
22 Figura 1.10: Múltiples caminos de la señal
23 Figura 1.11: Ilustración del rake receiver
24 Figura 1.12: Constelacion QPSK
25 Figura 2.1: Proceso de generación de la matriz de códigos Walsh
32 Figura 2.2: Generación de los códigos PN binarios
37 Figura 2.3: Conversión de los códigos PN binarios a bipolares
39 Figura 2.4: Primera etapa del protocolo de verificación de autocorrelación
44 Figura 2.5: Segunda etapa del protocolo de verificación de autocorrelación
45 Figura 2.6: Tercera etapa del protocolo de verificación de autocorrelación
46 Figura 2.7: Cuarta etapa del protocolo de verificación de autocorrelación
47 Figura 2.8: Quinta etapa del protocolo de verificación de autocorrelación
48 Figura 2.9: Gráfica de la autocorrelación del código PN-I para 3 detecciones
49 Figura 2.10: Gráfica de la autocorrelación del código PN-Q para 3 detecciones
50 Figura 3.1: Segmento de transmisión de la primera aproximación
54 Figura 3.2: Segmento de recepción de la primera aproximación
54 Figura 3.3: Segmento de transmisión del segundo enfoque
56 Figura 3.4: Segmento de recepción del segundo enfoque
56 Figura 3.5: Primera detección de patrones binarios
58 Figura 3.6: Implementación de la espera de 1000 ciclos
62 Figura 3.7: Ambos casos de la implementación del reset de desfasaje
63 Figura 3.8: Primer esquema de la detección por correlación
67 Figura 3.9: Implementación de la función FIFO en el modulador
70 xii
Figura 3.10: Modificación de la función FIFO
71 Figura 3.11: Buscador de coincidencias
73 Figura 3.12: Detector de polución
80 Figura 3.13: Ventana de configuración del transmisor
84 Figura 3.14: Ventana de multitrayectos detectados
85 Figura 3.15: Ventana de radiobases detectadas
86 Figura 3.16: Ventana de datos de control
87 Figura 3.17: Ventana de instrucciones
88 Figura 4.1: Gráfica de trayectos para el caso 4.1.1.1
91 Figura 4.2: Gráfica de radiobases para el caso 4.1.1.1
92 Figura 4.3: Gráfica de trayectos para el caso 4.1.1.2
94 Figura 4.4: Gráfica de radiobases para el caso 4.1.1.2
95 Figura 4.5: Gráfica de trayectos para el caso 4.1.1.3
97 Figura 4.6: Gráfica de radiobases para el caso 4.1.1.3
98 Figura 4.7: Gráfica de trayectos para el caso 4.1.1.4
100 Figura 4.8: Gráfica de radiobases para el caso 4.1.1.4
101 Figura 4.9: Gráfica de trayectos para el caso 4.1.2
104 Figura 4.10: Gráfica de radiobases para el caso 4.1.2
105 Figura 4.11: Gráfica de trayectos para el caso 4.1.3
108 Figura 4.12: Gráfica de radiobases para el caso 4.1.3
109 Figura 4.13: Gráfica de trayectos para el caso 4.1.4
113 Figura 4.14: Gráfica de radiobases para el caso 4.1.4
114 Figura 4.15: Gráfica de trayectos para el caso 4.1.5
118 Figura 4.16: Gráfica de radiobases para el caso 4.1.5
119 Figura 4.17: Gráfica de trayectos para el caso 4.1.6
124 Figura 4.18: Gráfica de radiobases para el caso 4.1.6
125 Figura 4.19: Gráfica de trayectos para el caso 4.2
129 Figura 4.20: Gráfica de radiobases para el caso 4.2
130 xiii
LISTA DE ABREVIATURAS
CDMA
Code Division Multiple Access o Acceso Múltiple por División de Códigos
FH
Frecuency Hopping o Salto Frecuencial
DS
Direct Sequence o Secuencia Directa
GUI
Graphical User Interface o Interfaz Gráfica de Usuario
IS-95
Interim Standard o Estándar Interno N° 95
TDMA
Time Division Multiple Access o Acceso Múltiple por División de Tiempo
FDMA
Frecuency Division Multiple Access o Acceso Múltiple por División de Frecuencia
PN
Pseudo-Noise Code o Código Pseudoaleatorio
PN-I
In-Phase Pseudo-Noise Code o Código Pseudoaleatorio en Fase
PN-Q
Quadrature Pseudo-Noise Code o Código Pseudoaleatorio en Cuadratura
QPSK
Quadrature Phase Shift Keying o modulación por desplazamiento de cuatro fases
xiv
INTRODUCCIÓN
Todo proceso de comunicación inalámbrico es por definición susceptible de recibir
interferencias externas, por tratarse de un medio de propagación desprotegido y cuyas
características varían en el tiempo en función de diversas variables tanto ambientales como
humanas. En el caso de la tecnología celular, estas interferencias degradan el nivel de cobertura y
la calidad de servicio que se presta a los suscriptores.
La transmisión de datos a través de la técnica de espectro expandido ha sido usada desde
hace años en comunicaciones militares para resistir interferencia intencional y para lograr una
baja probabilidad de detección [1]. Sin embargo, en años recientes la técnica de espectro
expandido se ha desplazado hacia las comunicaciones comerciales, llevando a la introducción del
Interim Standard (Estándar Interno) IS-95, el cual define la tecnología de múltiple acceso por
división de códigos como un estándar para el desarrollo de redes comerciales de telefonía celular
digital y sistemas de comunicación personal. Desde entonces han sido implementados sistemas
CDMA en las principales áreas metropolitanas, haciendo uso del estándar IS-95 en diversas
ciudades alrededor del mundo. Este hecho ha incrementado la densidad de usuarios presentes en
las redes, por lo que se ha hecho necesaria su expansión a través del despliegue de nuevas
estaciones de transmisión y recepción.
Justificación e Importancia
La ampliación de las redes de este tipo por medio de la instalación de nuevas celdas se hace
cada vez más difícil con el paso del tiempo, debido a que cada vez son más las celdas
preexistentes en la zona de interés al momento de la implementación de una nueva. Este hecho
impacta directamente en la planificación y localización de las radiobases en la topografía del
terreno a ser cubierto por el proveedor de servicios. Para llevar a cabo dicha planificación se
requiere hacer diversas mediciones de campo para estimar la calidad de la cobertura a través de
parámetros como la potencia, la relación señal a ruido, y en el caso de CDMA, la relación de
potencia de cada código. También se requiere conocer todas las celdas de las cuales se reciben
2
señales en un punto a fin de estudiar posibles fuentes de interferencia. Todas estas mediciones
involucran generalmente equipos muy sofisticados y de alto costo, el cual incide directamente en
los costos totales de planificación e implementación del sistema en la zona. Es por esto que el
desarrollo de una herramienta de análisis de menor costo provee una solución para reducir los
costos de implementación de la tecnología.
Planteamiento del Problema
Para poder llevar a cabo el desarrollo de la herramienta de análisis propuesta, es necesario
conocer a fondo cómo funciona el sistema CDMA. El estándar IS-95 define la normativa que rige
todos los procesos involucrados en la transmisión de señales mediante la implementación de la
tecnología celular CDMA, por lo que un estudio detallado del mismo podrá indicarnos cuál es el
parámetro a medir a la hora de obtener la potencia de un código CDMA. De la misma manera, es
importante conocer de qué manera influyen los diversos trayectos que toma la señal antes de
llegar al dispositivo móvil, o en este caso, al medidor; así como de qué manera se enmascaran las
señales en el trayecto entre la estación de transmisión y el dispositivo móvil o medidor.
Otros puntos críticos a conocer se relacionan con la manera como se realiza la expansión
del espectro en CDMA, así como el proceso de generación de los códigos utilizados por el
sistema para los diversos canales. Una vez obtenidas las respuestas a estas interrogantes, surgen
otras relacionadas con la manera mediante la cual se van a implementar todos estos
procesamientos de los datos, tanto para la generación de señales de prueba, como para su
posterior detección y medición para generar los resultados gráficos deseados.
Este proyecto se enfoca en la identificación de las celdas presentes en un punto geográfico
determinado, lo cual es un indicativo de posibles interferencias debidas a la recepción de señales
de varias estaciones. Esto permitirá al usuario poder analizar las posibles fuentes que generan esta
recepción excesiva y tomar acciones correctivas que representen un aumento en la capacidad de
la red, específicamente para redes que implementen la tecnología celular CDMA2000-1X (Code
3
Division Multiple Access, o Acceso Múltiple por División de Código) como método de
transmisión y recepción de la información.
Objetivo General
Desarrollar una herramienta de simulación que permita el monitoreo de las señales de un
sistema CDMA2000-1X con el fin de identificar las celdas recibidas en un punto geográfico
determinado, provista de una interfaz gráfica que permita la visualización de los distintos pilotos
que se reciben en dicho punto.
Objetivos Específicos
− Identificar cómo se generan los pilotos en el sistema.
− Evaluar de qué manera influyen los diversos trayectos que toma la señal antes de
llegar al medidor.
− Determinar el proceso de enmascaramiento de las señales en el enlace de bajada.
− Investigar sobre el funcionamiento de los distintos módulos que posee el software
LabVIEW 8.5 con el que se desarrollará la herramienta.
− Identificar cómo se realiza la expansión del espectro en CDMA.
− Determinar el orden de los pasos que sigue el procedimiento de generación en general
y evaluar el proceso de reversión que debe aplicarse para la obtención de la señal
original.
CAPÍTULO 1
FUNDAMENTOS TEÓRICOS
1.1. Orígenes de la tecnología
En la constante evolución de los procesos de comunicación del ser humano, hemos
llegado a una era en la que gran parte del trafico de información, ya sea de datos o de voz, es
realizado de manera inalámbrica. Dentro del vasto campo de las telecomunicaciones inalámbricas
han venido suscitándose grandes avances en lo referente a las diversas maneras de transmitir y
recibir las señales de radiofrecuencia que transportan la información. Uno de estos avances viene
a ser la tecnología celular CDMA (Code Division Multiple Access, o Acceso Múltiple por
División de Código).
El término acceso múltiple se refiere al hecho de que múltiples usuarios son capaces de usar
el sistema celular simultáneamente. Los sistemas de acceso múltiple comparten un recurso
limitado (por ejemplo, el espectro frecuencial) para proveer a los usuarios con canales de voz por
demanda. Los métodos tradicionales de separación de señales en tiempo (TDMA, Time Division
Multiple Access o Acceso Múltiple por División de Tiempo), o en frecuencia (FDMA, Frecuency
Division Multiple Access o Acceso Múltiple por División de Frecuencia) presentan maneras
relativamente simples de asegurar que las señales son ortogonales y no interferentes. En el caso
de TDMA, el acceso múltiple se realiza por medio de time slots o ranuras de tiempo; mientras
que en el FDMA, es logrado mediante la asignación de frecuencias distintas a cada usuario,
separadas por una banda de guarda para prevenir interferencias. Sin embargo, en CDMA
diferentes usuarios ocupan el mismo espectro frecuencial al mismo tiempo, pero son separados el
uno del otro a través del uso de una serie de secuencias o códigos ortogonales. La Figura 1.1
ilustra las diferencias previamente explicadas.
7
Figura 1.1: Diferentes esquemas de múltiple acceso
Fuente: Yang, S., “CDMA RF System Engineering”, p. 45
1.2. Códigos ortogonales y espectro expandido
El espectro expandido es un medio de transmisión en el que la señal ocupa un ancho de
banda por encima del mínimo necesario para enviar la información; la expansión se realiza por
medio de un código que es independiente de los datos, y un receptor sincronizado con el código
es utilizado para comprimir y recuperar los datos [2]. Esta característica de acceso al medio
permite que en el sistema CDMA el mismo sea compartido por todos los usuarios activos, sin
necesidad de ser divididos en múltiples ranuras ocupadas individualmente como en el caso de
TDMA o FDMA.
A primera vista no parece lógico el hecho de que incrementar deliberadamente el ancho de
banda requerido para la transmisión incremente a su vez la capacidad del sistema, después de
8
todo, en un esquema tradicional como el de múltiple acceso por división de frecuencias
incrementar el ancho de banda requerido para cada usuario implica una disminución del número
total de usuarios que el espectro puede soportar (tomando en cuenta que el espectro es un recurso
de tamaño fijo, limitado por un organismo rector).
La ventaja de esta expansión para el caso de CDMA, es que le confiere la habilidad de
mitigar el efecto de la distorsión por multitrayectos, así como una resistencia adicional a
desvanecimientos profundos que pudiesen ocurrir en bandas de frecuencia específicas. Para el
caso de una distorsión fija o de variaciones lentas, la misma pudiera ser contrarrestada con
ecualización adaptativa, es decir, llevando a cabo un ajuste dinámico de la amplitud del filtro de
recepción para cada frecuencia incluida en la ventana de filtraje. Pero por otra parte, si la
distorsión varía rápidamente en función del tiempo, como sucede en el caso de un ambiente
móvil, sería realmente difícil lograr una adaptación lo suficientemente rápida como para lograr
una correcta adecuación de la señal. El espectro expandido provee una medida extra de
inmunidad a este tipo de distorsión, lo cual puede apreciarse claramente en el dominio de las
frecuencias ya que el desvanecimiento por multitrayectos genera una disminución importante de
la amplitud de la señal para una banda específica. En cambio, esta disminución tendría poco
efecto en la calidad total de la señal si la misma se encontrara expandida en una banda espectral
mucho mayor. La característica de expansión de espectro del sistema CDMA hace a la
comunicación robusta en ambientes de desvanecimiento por multitrayectos. A medida que el
ancho de banda de la señal aumenta, la probabilidad de desvanecimiento profundo para la banda
completa de la señal disminuye (ver Figura 1.2). En consecuencia, el receptor puede detectar la
señal correctamente usando la información parcial transmitida sobre las bandas de frecuencia no
atenuadas, para la mayor parte del tiempo de la comunicación.
9
Figura 1.2: Comparación entre una señal banda estrecha y una de espectro expandido
Fuente: Ilustración realizada por el autor
Para el caso de la tecnología CDMA, la expansión del espectro puede ser lograda mediante
la implementación de dos técnicas diferentes: frecuency hopping (FH) o por salto de frecuencia, y
direct-sequence (DS) o por secuencia directa. La primera viene a ser la técnica en la cual la señal
transmitida es desplazada de manera pseudoaleatoria por el sintetizador de frecuencias dentro de
una banda de frecuencias específica denominada banda de saltos (del inglés hopping bandwidth).
De esta manera se minimizan los efectos de interferencia e intercepción por parte de terceros, ya
que la misma se encuentra constantemente cambiando su frecuencia de transmisión. La expansión
espectral viene dada en este caso por la implementación de la banda de saltos.
Por otra parte, la técnica de secuencia directa o DS, por sus siglas en inglés, se realiza
mediante la multiplicación de la señal de datos con una señal de alta velocidad (banda ancha), la
cual realiza la expansión de la totalidad del mensaje a transmitir, sin realizar cambios en la
frecuencia de transmisión. De esta manera si la señal de datos es de banda estrecha en
comparación con la señal de expansión, como en efecto lo es para el caso en estudio, la señal
resultante de la multiplicación directa de estas señales tendrá aproximadamente el ancho de banda
de la señal de expansión [3]. La señal resultante al aplicar el procedimiento de expansión por
10
secuencia directa al sistema CDMA se conoce entonces como DS/CDMA. En la Figura 1.3 se
aprecia claramente el comportamiento de ambas técnicas en el dominio de las frecuencias,
pudiéndose notar la expansión en una banda mayor a la de la señal original.
Figura 1.3: Comparación entre expansión por saltos de frecuencia y secuencia directa
Fuente: http://www.futaba.com/products/irc/technology/index.asp consultado el día 20/09/2010
En CDMA, la señal de banda estrecha de cada usuario es expandida a un ancho de banda que
es mayor al mínimo requerido para transmitir la información. Cada una de estas señales es
expandida con un código diferente, logrando de esta manera la canalización de usuarios
simultáneos mediante la utilización de códigos ortogonales. Todas las señales expandidas
correspondientes a cada uno de los usuarios son unidas para conformar una sola señal compuesta,
la cual es transmitida al aire en la misma banda frecuencial. Por su parte, el receptor es capaz de
distinguir entre los diferentes usuarios usando una copia del código original, correlacionando este
último con la señal compuesta recibida. Al hacer esto, las señales de los demás usuarios que no
posean el código utilizado serán rechazadas.
11
El sistema IS-95 posee enlaces asimétricos, es decir, el enlace de la base de transmisión al
móvil o forward link (enlace de avance) y el del móvil a la base de transmisión o reverse link
(enlace inverso) tiene cada uno diferentes estructuras. Las diferencias van desde el esquema de
modulación hasta los métodos de control de error. Además, cada enlace utiliza códigos diferentes
para canalizar usuarios individuales. El forward link está constituido por cuatro tipos de canales
lógicos: un pilot channel (canal piloto), un sync channel (canal de sincronismo), hasta siete
paging channels (canales de mensajes del sistema) y el resto son traffic channels (canales de
tráfico). Cada uno de estos canales del forward link es primero expandido ortogonalmente
mediante una función Walsh y luego es enmascarado por un par de secuencias PN cortas, de
longitud 215. Todos estos canales son sumados para conformar la señal compuesta a ser
transmitida hacia los móviles [2].
El reverse link, por su parte, consiste de dos tipos de canales lógicos: access channels
(canales de acceso) y traffic channels (canales de tráfico). Cada uno de estos canales es
expandido ortogonalmente por un único código PN largo, de longitud 242; por lo tanto, cada canal
es identificado utilizando el código PN largo individual. La razón por la cual no es utilizado un
canal piloto es debido a que es impráctico que cada móvil se encuentre transmitiéndolo
constantemente. Sin embargo, el reverse link no es motivo de estudio en el presente trabajo, por
lo que no se considerará en adelante.
1.3. Códigos Walsh
Como hemos visto, en aplicaciones celulares típicas la señal DS/CDMA es generada
mediante dos pasos: la expansión y el enmascaramiento. Primero un código de expansión
ortogonal es multiplicado con la secuencia de datos, lo cual expande el ancho de banda de la
señal de cada usuario y la hace ortogonal con respecto a la del resto de los usuarios. En el caso
del enlace de bajada de un sistema IS-95 se utilizan códigos Walsh ortogonales de una longitud
de 64 chips para esta expansión espectral, ya que la ortogonalidad evita la interferencia mutua
entre diferentes usuarios.
12
Se denominan chips a la unidad básica de transmisión del mensaje expandido como una
manera de diferenciarla de los bits de datos originales. De esta manera la tasa de chips de un
código viene a ser el número de pulsos (o chips) por segundo al cual se realiza la transmisión o
recepción del mismo. La tasa de chips suele ser mucho mayor a la tasa de bits del mensaje
original, lo que significa que cada bit es representado por múltiples chips. A la relación del
número de chips utilizados por cada bit para su expansión se le conoce como spreading factor o
factor de expansión. En el caso de los códigos Walsh utilizados en la tecnología celular
CDMA2000-1X, el factor de expansión es de 64. Esto significa que por cada bit de datos se
transmiten 64 chips, por lo que la velocidad de transmisión de 19,2 Kbps se convierte en una tasa
de chips de 1,2288 Mcps.
Para la generación de los códigos de expansión que convertirán los bits en chips se emplea
la matriz Hadamard, donde se emplea la recursión para generar matrices de mayor orden a partir
de matrices de menor orden. Para ello se emplea la siguiente expresión:
(1.1)
donde
contiene los mismos elementos de
, pero de manera invertida. Para
ejemplificar esto, veamos cómo la semilla utilizada para generar los códigos Walsh (ecuación
1.2) es invertida para formar la siguiente matriz de dimensión 4x4 (ecuación 1.3).
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
1
(1.2)
0
1
1
0
(1.3)
13
De esta manera se obtienen entonces cuatro códigos Walsh ortogonales, a partir de las
filas de la matriz obtenida en la ecuación 1.3:
0
0 0
0
0
1
0 1
0
0
1 1
0
1
1 0
(1.4)
Utilizando recursivamente la ecuación 1.1 se generan matrices de mayor orden para
obtener conjuntos mayores de secuencias ortogonales. De esta manera es posible obtener una
matriz de 64x64, de donde se obtendrán entonces los 64 códigos Walsh ortogonales utilizados por
el sistema a partir de las 64 filas de la matriz obtenida (ver Figura 1.4). El código Walsh asignado
a un usuario en el enlace de bajada es único para dicho usuario. Por otra parte, códigos Walsh
dedicados pueden ser utilizados para canales comunes que serán monitoreados por todos los
móviles, como en el caso del canal de piloto y el de sincronismo. En el enlace de subida, sin
embargo, diferentes códigos Walsh transmitidos por un mismo usuario pueden indicar diferentes
tipos de información. Por ejemplo, un usuario puede transmitir datos utilizando un código y voz
utilizando otro código diferente [4].
En el caso particular del canal piloto que no transmite datos, el mismo se compone
únicamente de ceros en su forma binaria, por lo que al realizar la expansión con el código W0
compuesto también únicamente de ceros se obtiene una salida igualmente compuesta únicamente
de ceros. Antes de seguir al proceso de enmascaramiento, los chips de todos los canales se
convierten a un formato que facilite su modulación analógica. Esta conversión se realiza
intercambiando los ceros binarios por el valor +1 y los unos binarios por el valor -1. Es así como
el canal piloto se compondrá únicamente de valores +1 a la salida de la conversión [5]. Esto se
ejemplifica claramente en la Figura 1.5.
14
Figura 1.4: Matriz de códigos Walsh de dimensión 64x64
Fuente: TIA/EIA-95-B, “Mobile Station-Base Station Compatibility Standard for Dual-Mode
Spread Spectrum Systems”, p. 7-22
15
Figura 1.5: Expansión y conversión de formato del canal piloto
Fuente: Ipatov, V., “Spread Spectrum and CDMA: Principles and Applications”, p. 348
1.4. Códigos de ruido pseudoaleatorio
Para poder hablar en detalle sobre la generación y utilización de los códigos de ruido
pseodoaleatorios, debemos primero definir qué significa exactamente este término. La palabra
pseudo viene del griego, y es utilizada como prefijo para indicar falsedad. En este caso en
particular, indica que realmente no hay aleatoriedad en los códigos PN. Una señal aleatoria no
puede ser predicha, por lo que sus variaciones futuras solo pueden ser descritas en un sentido
estadístico. Sin embargo, una señal pseudoaleatoria no es en absoluto aleatoria, por el contrario,
es una señal periódica y determinística que es conocida tanto para el emisor como para el
receptor. El motivo por el cual se le confiere esta característica de aleatoriedad, es debido a que
para cualquiera que no posea el código, el mismo aparece como una señal realmente aleatoria
dado que parece poseer las propiedades estadísticas del ruido blanco [3].
Para poder verificar que en efecto el código PN posee características de aleatoriedad para
agentes externos, deben comprobarse tres propiedades básicas:
16
‐
Propiedad del Balance: En cada período de la secuencia el número de unos y ceros
binarios deben ser iguales o al menos no deben diferir en más de uno.
‐
Propiedad de la Correlación: Si un período de la secuencia es comparado término a
término con cualquier versión desplazada de él mismo, es deseable que el número de
coincidencias difiera del número de no coincidencias en no más de uno.
‐
Propiedad de la Corrida: Una corrida se define como una secuencia consecutiva del
mismo tipo de dígito binario. Es deseable que la mitad de las corridas de cada tipo sean de
longitud 1, una cuarta parte de longitud 2, una octava parte de longitud 3, y así
sucesivamente.
Los códigos PN son generados a partir de linear feedback shift registers o registros de
desplazamiento lineales retroalimentados. Un ejemplo de esto puede apreciarse en la Figura 1.6,
donde se ilustra un registro de desplazamiento de tres etapas. Los dígitos binarios son
desplazados a través de las diferentes etapas del registro y la salida de la última etapa es
combinada con una intermedia para servir de entrada a la primera. De esta manera el registro
genera continuamente bits de salida que son realimentados. Estos bits de salida son precisamente
los que conforman el código PN [2].
Figura 1.6: Registro de corrimiento de tres etapas
Fuente: Ilustración realizada por el autor
17
El lazo de realimentación consiste en este caso de una adición módulo 2 de las etapas
involucradas. Como resultado de esto, para que el registro de corrimiento pueda funcionar
correctamente debe existir un estado de inicialización en el que no todos los registros se
encuentren con un valor de cero lógico; de otra manera la secuencia producirá únicamente ceros a
la salida y tendremos un ciclo infinito [4].
Como se mencionó anteriormente, una propiedad importante de los códigos PN binarios
generados con registros de corrimiento de máxima longitud es que los mismos son ortogonales
con versiones desplazadas de sí mismos. De esta manera, al sustituir los unos y ceros binarios por
los valores -1 y +1 respectivamente, puede comprobarse que se cumpla la siguiente función de
auto correlación:
∑
donde
2
1
1,
1,
0
0
(1.5)
viene a ser la autocorrelación del código PN, Ci es el código utilizado y Ci-τ
una versión desplazada del mismo [4]. De una forma más sencilla, la fórmula de la
autocorrelación también puede entenderse de la siguiente manera [3]:
ú
ó
í
í
(1.6)
í
donde p es el tamaño de un período completo del código a analizar.
En el caso particular de CDMA, cada canal se expande mediante el uso de códigos PN en
fase y cuadratura, tal como lo indica la Figura 1.6. La secuencia de expansión debe ser de
longitud 215 chips, es decir, 32768 chips. La componente en fase se conoce como PI (del inglés in
18
phase o en fase), y la componente en cuadratura de conoce como PQ (del inglés quadrature o
cuadratura). Estas secuencias son llamadas secuencias PN piloto, y se generan mediante los
siguientes polinomios característicos: [6]
PI(x) = x15 + x13 + x9 + x8 + x7 + x5 + 1
(1.7)
PQ(x) = x15 + x12 + x11 + x10 + x6 + x5 + x4 + x3 + 1
(1.8)
A continuación se ilustran los registros de desplazamiento que se generan a partir de los
polinomios característicos mencionados, los cuales proporcionarán a su salida el código PN
respectivo a cada uno de ellos, es decir, en fase y cuadratura (ver Figura 1.7).
Figura 1.7: Registros de desplazamiento para los códigos PN-I y PN-Q
Fuente: Ilustración realizada por el autor
19
Las secuencias de máxima longitud generadas por los registros de corrimiento mostrados
son de longitud 215-1, es decir, 32767 chips. Para completar el número adecuado de 32768 chips
se procede a insertar un cero en ambos códigos, donde se presente una corrida de 14 ceros
consecutivos. Esto sucede una sola vez en todo el período para ambos códigos, ya que representa
la salida de la semilla o estado inicial de las etapas, en la que se introducen ceros en las catorce
primeras y un uno en la quinceava. De esta manera se completa entonces una corrida ahora de 15
ceros y los códigos tienen ambos 32768 chips de longitud. Es importante notar que al introducir
este cero se realiza un balanceo del número total de unos y ceros que posee el código,
cumpliendo así con la Propiedad del Balance previamente explicada.
Debido a las características de aleatoriedad ya mencionadas que poseen los códigos PN,
los mismos son utilizados en el forward link luego de la expansión por código Walsh. A la señal
de datos expandida se le aplica un proceso de aleatorización al multiplicarla con un código PN,
generalmente de la misma tasa, lo que genera un enmascaramiento por chips. El código PN
utilizado se conoce como el código de enmascaramiento de la señal. Así, cada usuario CDMA
percibe a los demás usuarios como una señal de ruido aleatorio, y la colisión de las señales entre
usuarios puede ser evitada a pesar de que ocupan el mismo espectro. De esta manera, cada
usuario puede aprovechar plenamente el medio hasta que el nivel de interferencia proporcional al
número de señales aleatorias multiusuario no hace posible la transmisión de mayores cantidades
de información sobre el mismo. Esto es especialmente beneficioso cuando la tasa de transmisión
de datos es variable en el tiempo, lo cual es muy común en aplicaciones de comunicaciones
prácticas.
En un ambiente de telefonía celular móvil, la señal DS/CDMA transmitida usualmente
llega al receptor a través de múltiples vías de propagación con retardos diferentes para cada una,
dado que la señal sufre reflexiones ocasionadas durante el trayecto por la colisión con el
sinnúmero de obstáculos que presentan los ambientes urbanos actuales. Es por esto que la
ortogonalidad entre canales de datos impuesta en el proceso de expansión por códigos Walsh a
menudo no puede mantenerse en el receptor. Además, como la propiedad de auto correlación y
la correlación cruzada de los códigos de expansión ortogonales es muy pobre, la interferencia
resultante de la propagación multitrayectos puede degradar críticamente el desempeño de la
20
detección de datos, a no ser que sea tomada otra medida preventiva. Por tanto, el proceso de
enmascaramiento que aleatoriza la señal mientras mantiene una buena correlación es esencial en
comunicaciones DS/CDMA inalámbricas.
Para lograr este enmascaramiento previo a la modulación analógica, una vez que los datos
expandidos por la función Walsh correspondiente de acuerdo al canal son sumados para formar la
señal a transmitir, esta es multiplicada de manera paralela por los códigos PN-I y PN-Q. De cada
una de estas ramas se obtiene entonces lo que será la entrada del modulador QPSK (del inglés
Quadrature Phase Shift Keying o modulación por desplazamiento de fase en cuadratura). La
rama PN-I se modula a través de una sinusoide, y la rama PN-Q a través de una onda cosenoidal.
Luego ambas señales analógicas se suman para de esta manera obtener la señal de transmisión
hacia los dispositivos móviles. Un diagrama de este proceso puede apreciarse con mayor claridad
en la Figura 1.8
Figura 1.8: Registros de desplazamiento para los códigos PN-I y PN-Q
Fuente: Ipatov, V., “Spread Spectrum and CDMA: Principles and Applications”, p. 351
21
1.5. Identificación de bases de transmisión
En el enlace de bajada una secuencia de enmascaramiento específica es asignada a cada
celda, lo que hace que tanto las interferencias de celdas cercanas como las interferencias
producidas por los demás usuarios de la celda sean detectadas como ruido aleatorio en el receptor
[7]. Por otra parte, en el enlace de subida una secuencia de enmascaramiento es asignada
específicamente a cada usuario, ya que la alineación temporal entre diferentes usuarios no está
garantizada. En sistemas con sincronía inter-celda, tales como el CDMA2000-1X, tanto las
estaciones de radio como los receptores móviles pueden alinear sus temporizadores a una
referencia de tiempo externa. En consecuencia, en aras de la simplicidad de la circuitería y de la
facilidad de coordinación del sistema, es empleado un código de enmascaramiento común en
todas las estaciones de radio y receptores móviles del sistema, teniendo cada estación de radio un
desfasaje único de dicho código para prevenir colisiones entre las señales [8].
El canal piloto viene a ser entonces la referencia para todos los terminales a la hora de
llevar a cabo la demodulación de la señal. Es además el parámetro mediante el cual los terminales
seleccionan e identifican a las estaciones de radio que se encuentren en las cercanías, ya que los
canales piloto de todas las estaciones de radio son configurados con una potencia de 4 a 6 dB
mayor que los canales de tráfico, para que dichos terminales puedan detectarlos. Todas las
antenas de transmisión usan el mismo código PN, y cada celda en específico se identifica con un
desfasaje de dicho código PN. La sincronización es coordinada mediante el uso de radios de GPS
(Global Positioning System o sistema de posicionamiento global) en las bases de transmisión, ya
que este sistema no solo provee triangulación para determinar su ubicación geográfica, sino que
también provee un servicio de relojes sincronizados fácilmente disponibles [9].
Es entonces este único desfasaje quien sirve como indicador de cada una de las estaciones
de radio, por lo que en la planificación de la red debe tomarse en consideración la frecuencia con
la cual cada desfasaje es utilizado, así como qué desfasajes son utilizados entre estaciones de
radio vecinas. Esto es lo que viene a ser el concepto de re-uso en un sistema celular CDMA
donde realmente no se re-usan las frecuencias de transmisión sino los desfasajes del código PN.
22
Los desfasajes entre los distintos canales piloto de las estaciones de radio del sistema se
dan en incrementos de 64 chips, por lo que con un tamaño total del código de 32768 chips se
obtienen un total de 512 desfasajes únicos (ver Figura 1.9). Es por esto que las posibles
confusiones por parte de los terminales móviles a la hora de sincronizarse con uno de estos
canales piloto son generadas mayormente por la disponibilidad de varios de ellos (inicialmente
tres, actualmente cuatro) [10] con un nivel de potencia lo suficientemente fuerte como para
considerarse dentro del rango que lo hace elegible por el terminal, haciendo poco fiable la
identificación de la mejor señal [9]. Esta condición se conoce con el nombre de polución de
pilotos, y es una condición no deseable en el sistema ya que afecta directamente la capacidad de
número de usuarios y las velocidades de transmisión de los mismos. [11]
Figura 1.9: Posicionamiento de los 512 pilotos en el código PN
Fuente: Prateek S., “Impact of Pilot Channel Pollution in CDMA Systems”, p. 1
1.6. Multitrayectos y su recepción
En un ambiente de telefonía celular, la señal llega a través de diferentes caminos y en
diferentes momentos al receptor. Esto es debido a la presencia de objetos que se interponen en el
camino y generan reflexiones (ver Figura 1.10). Los multitrayectos pueden ser divididos a
manera general en tres categorías, de acuerdo a la medida de tiempo entre la llegada del primer
23
trayecto y la del último. Estas categorías son: desvanecimiento, confusión de chips y eco. En el
ambiente de telefonía móvil, el eco no suele ser un problema ya que los caminos de la señal rara
vez tienen longitudes tan extensas. Para el caso del desvanecimiento, como ya hemos visto, el
espectro expandido provee un alto nivel de protección debido a que los desvanecimientos suelen
ser en frecuencias específicas y la expansión espectral nos permite obtener la señal del resto de la
banda de frecuencia. Pero las diferencias comparables a varios tamaños de chip son las que
realmente afectan al sistema, ya que el receptor detecta dos chips diferentes al mismo tiempo.
Figura 1.10: Múltiples caminos de la señal
Fuente: Rosenberg, A. y Kemp S., “CDMA Capacity and Quality Optimization”, p. 96
Considerando tres trayectos de igual potencia, cuando un chip es transmitido llegará al
receptor tres veces separadas. Un receptor único se sincroniza con uno de los tres trayectos y los
otros dos trayectos están corridos en tiempo, por lo que producen interferencia. La mejor solución
para este problema es la de sumar las tres señales recibidas en el orden inverso a su retraso, esto
se conoce como rake receiver o receptor rastrillo y viene a ser un adaptative matched filter o un
filtro adaptativo emparejado, donde cada representación de la señal se conoce como uno de los
filamentos del rastrillo (ver Figura 1.11). La suma de los tres trayectos genera el chip deseado
24
con el triple de la amplitud, lo cual es proporcional a nueve veces la potencia, que viene a ser el
cuadrado de la amplitud, por lo que la implementación de este tipo de receptor ayuda a mitigar
enormemente los efectos causados por los multitrayectos en la señal de CDMA [9].
Figura 1.11: Ilustración del rake receiver
Fuente: Schulze H. y Lüders C., “Theory and Applications of OFDM and CDMA”, p. 268
1.7. Modulación QPSK
Los esquemas de modulación PSK mapean los bits de información a fases del círculo
unitario en el plano complejo. La modulación por desplazamiento de fase en cuadratura involucra
el mapeo de dos bits de entrada a uno de cuatro posibles valores de la constelación. Un ejemplo
de esta puede apreciarse en la Figura 1.12. Puede notarse la utilización de codificación Gray, la
cual realiza el mapeo de parejas de bits en la constelación de símbolos de modulación de una
manera tal que los símbolos de modulación adyacentes difieran sólo en un bit. [12]
25
Figura 1.12: Constelacion QPSK
Fuente: Mandyam G. y Lai J., “Third-Generation CDMA Systems for
Enhanced Data Services”, p. 31
1.8. Software LabVIEW ®
El software LabVIEW es una plataforma y ambiente de desarrollo para un lenguaje de
programación visual de la compañía National Instruments. Sus siglas significan Laboratory
Virtual Instrumentation Engineering Workbench o laboratorio de ingeniería de instrumentación
virtual, y es comúnmente usado para la adquisición y procesamiento de señales, control
instrumental y automatización industrial.
Su lenguaje de programación, también conocido como “G” es un lenguaje de
programación de flujo de datos. La ejecución está determinada por la estructura de un diagrama
26
de bloques gráfico en el cual el programador conecta diferentes nodos mediante cables virtuales.
Estos cables propagan las variables y cada nodo puede ejecutarse tan pronto como todos los datos
de entrada conectados al mismo estén disponibles en sus terminales. Los programas y subrutinas
creados en LabVIEW reciben el nombre de instrumentos virtuales o VI’s, por sus siglas en inglés.
Cada VI tiene tres componentes: un diagrama de bloques, un panel frontal y un panel de
conexiones; este último es usado para representar al VI en el diagrama de bloques de otro, a
manera de subrutina. Controles e indicadores en el panel frontal permiten al operador introducir o
extraer datos de un VI en ejecución.
CAPÍTULO 2
GENERACIÓN Y PRUEBA DE LOS CÓDIGOS
El procedimiento general a seguir para la realización del proyecto incluye varias etapas y
sub-etapas. Debido a que el proyecto final es una parte del receptor de señales DS/CDMA, para
poder verificar su correcto funcionamiento deben primero crearse estas señales, teniendo éstas
parámetros configurables que puedan ser obtenidos luego con el receptor. Tenemos entonces que
inicialmente se divide el proyecto en tres grandes etapas: generación de señales DS/CDMA,
recepción correcta de las señales generadas y procesamiento de las mismas. Dentro de la etapa de
generación existen a su vez varias sub-etapas; primero debe generarse el piloto, luego éste debe
expandirse con el código Walsh apropiado. Posteriormente debe enmascararse con el código PN
en fase y cuadratura con un desfasaje específico, obtener una amplitud y modularse para
finalmente ser sumado con una cantidad variable de pilotos, cada uno de los cuales contará con
un desfasaje del código PN usado para su enmascaramiento. Tanto los desfasajes, como las
amplitudes y el número de pilotos y multitrayectos pueden ser configurados por el usuario para
simular un canal de radio.
En la etapa de recepción debe realizarse el proceso inverso, iniciando por la demodulación
de la señal para su procesamiento en búsqueda de los desfasajes y amplitudes configurados en el
generador. Para ello se tomará la señal de entrada constituida por la suma de todos los trayectos y
se analizarán sus características de correlación punto a punto mediante un código PN que se
desplaza al doble de la velocidad y permite recorrer la señal entera en búsqueda de los desfasajes
para los cuales exista una alta correlación, hallando así los desfasajes generados y las amplitudes
asociadas a cada uno de ellos.
28
En la etapa de procesamiento de los datos se guardan en un arreglo todos estos desfasajes
encontrados y sus amplitudes asociadas, para cada una de las componentes en fase y cuadratura.
De esta manera podrán luego detectarse las coincidencias entre ambas y obtener los desfasajes y
amplitudes de todos los trayectos recibidos correctamente. Luego se implementará una versión
propietaria del code search (buscador del código del piloto) para agrupar los trayectos de la
misma estación de transmisión en un solo trayecto de mayor potencia y mostrarlo en la posición
determinada para dicha estación.
Posteriormente se analizarán las potencias finales de todas las estaciones de transmisión
detectadas para determinar si están dadas o no las características de una situación de polución de
pilotos. Se presentarán gráficamente los resultados obtenidos para todos los trayectos, así como
para las estaciones detectadas, junto con un indicador visual de la existencia o no de polución de
pilotos. Como tarea final, se organizará la configuración de los desfasajes, amplitudes y número
de pilotos y trayectos, así como las gráficas previamente mencionadas y otros datos de control en
una GUI (graphical user interface o interfaz gráfica de usuario) que permita un manejo sencillo
de la herramienta por parte de cualquier tipo de usuario.
A manera de inicio del trabajo experimental, se procedió con la instalación del software
LabVIEW 8.5 en el sistema operativo Windows XP. Una vez culminado este proceso fue
instalado un módulo complementario llamado Modulation Toolkit (o herramientas de
modulación), el cual contiene un compendio de funciones especializadas para la generación y
medición de señales analógicas y digitales, así como otras herramientas inherentes a tareas de
procesamiento de señales. Luego se llevaron a cabo algunas pruebas sobre la funcionalidad del
programa, tales como crear una función simple que realizara varias operaciones matemáticas,
observar los resultados en el panel de control, personalizar la apariencia de los indicadores, entre
otras; todo esto con el motivo de familiarizarse con el funcionamiento y la manera de utilizar el
programa para ejecutar comandos como inicialización de variables, creación de constantes y
utilización de las funciones prefabricadas.
29
2.1. Primera aproximación al espectro expandido
Una vez culminada la fase de exploración del software, se realizó una prueba más
específica en relación a sus capacidades para proporcionar expansión espectral a un stream (o
flujo) de datos binarios para asegurar que de hecho sería posible utilizar las funcionalidades del
Modulation Toolkit. Para llevar a cabo esta prueba se utilizó la función Spread Symbols (o
expandir símbolos), con una entrada de datos binarios aleatorios. De esta manera se pretendía
comprobar que sin importar cuál fuera la entrada específica para un momento dado, la función
generara la correcta expansión de la misma. Esta entrada se realizó mediante la implementación
de un for loop (o ciclo de repetición condicional), cuyo número de repeticiones estaría controlado
por el usuario en el panel frontal. Dentro de este for loop se encuentra un generador de números
aleatorio, cuya salida están entre 0 y 1 para cada una de las veces que se realice el ciclo. A esta
salida se le resta el valor de 0,5 teniendo entonces un resultado aleatorio y equiprobable entre -0,5
y 0,5. En este punto se agrega un comparador para determinar si el resultado es mayor o menor a
cero, obteniendo una salida booleana; en el caso de ser mayor a cero el valor de true o verdadero
se convierte en un bit 1 y en el caso contrario, es decir, false o falso, en un bit 0.
Una vez culminado el número de ciclos especificados por el usuario, se obtiene un arreglo
unidimensional de longitud igual a dicho número; este arreglo contiene un bit en cada casilla y
los mismos son aleatoriamente 1 o 0. En este punto se agrega un indicador para observar los
datos que servirán de entrada al proceso de expansión y así poder compararlos con los que se
esperan obtener teóricamente luego de dicho proceso. Además de la entrada de los datos, la
función debe ser configurada con otro parámetro importante: el código de expansión. Por tratarse
de una primera prueba se utilizó un código sencillo de tres dígitos, de tal manera que los datos
expandidos debían ser tres veces más a los de entrada. Para verificar que en efecto esto sucedía,
se colocó un indicador a la salida de la función de expansión. Los códigos usados fueron tres:
uno cuyos valores sólo eran 1, uno cuyos valores sólo eran 0, y uno que alternaba los valores 1 y
0.
30
Para varias corridas de dos bits de longitud se observaron los resultados expresados en la
Tabla 2.1:
Tabla 2.1: Resultados para distintos códigos de expansión
Fuente: Datos generados por la herramienta
ENTRADA 01 10 11 01 00 10 11 01 CODIGO DE EXPANSION
111
111
000
000
101
101
010
010
RESULTADO 111000 000111 111111 000111 101101 010101 101101 010101 De esta manera se comprobó como en efecto la función de expansión se comporta tal
como se deseaba, haciéndola perfectamente aplicable en el proyecto.
Habiendo confirmado que uno de los procesos más importantes del proyecto podía
realizarse sin inconvenientes, se estableció la posible viabilidad del mismo siguiendo incialmente
tres líneas de acción: creación de la matriz de códigos Walsh, generación de los códigos PN-I y
PN-Q de acuerdo al estándar y aplicación de ambos a un piloto para luego ser modulado.
Alcanzado este punto se realizaría la replicación de estos resultados un número de veces
suficiente para poder realizar pruebas extensivas sobre la recepción de los trayectos. Basado en la
teoría de polución de pilotos se decidió que un número adecuado para probar todos los casos
posibles sería el de seis pilotos, cada uno de ellos con un número de multitrayectos configurable
entre cero y tres. De esta manera se tendría entonces un total de 24 trayectos agrupables en 6
pilotos estándar.
31
Paralelamente al desarrollo del generador se probaron distintos enfoques al proceso de
recepción y detección de los trayectos, para luego pasar al diseño de las operaciones de
procesamiento que permitirían expresar los resultados gráficos deseados. Cada uno de estos
procedimientos y sus pruebas se detallan a continuación en las secciones siguientes.
2.2. Generación y prueba de los códigos Walsh
La matriz de códigos Walsh nos permite seleccionar el código de expansión a utilizar.
Como sabemos, el utilizado en el caso de los pilotos es el W0, el cual se constituye de un arreglo
unidimensional de 64 ceros. Es por esto que para el desarrollo de este proyecto pudo haber sido
utilizado un arreglo constante de este tipo sin limitar la funcionalidad del mismo. En lugar de
esto, se realizó un programa que generara la matriz completa y luego permitiera mediante un
selector configurado por el usuario, seleccionar qué fila se desea utilizar. De esta manera se
habilita el uso de toda la tabla, abriendo la posibilidad al proyecto de desarrollos futuros que
pudiesen involucrar la utilización de otros canales aparte del piloto.
Para la generación de la matriz se procede tal como indica la teoría, partiendo de una
matriz como la indicada en la Ecuación 1.2 y aplicándola a la Ecuación 1.1 hasta alcanzar el
tamaño deseado de 64x64. Para ello se creó la matriz base 2x2 como una constante, y se hizo uso
de la función Insert Into Array (insertar en el arreglo), la cual tiene como parámetros de entrada
el arreglo base, el arreglo que se desea insertar y la selección de la fila y/o columna en la que se
desea realizar la inserción.
Como paso inicial se inserta la matriz base en ambas entradas, indicando que sea insertada
en la posición de la fila 2, tomando en cuenta que el programa toma la primera fila como la cero.
Tenemos así una matriz 4x2 que consta de la concatenación de la matriz base con ella misma, tal
como se aprecia en la Figura 2.1(a). Paralelamente a esto se hace lo mismo solo que en lugar de
concatenarla con ella misma, se hace con la negada o inversa, obteniendo la expresión de la
Figura 2.1(b). Posterior a esto se realiza una nueva concatenación de las expresiones de las
32
figuras 2.1(a) y 2.1(b) para obtener la Figura 2.1(c). Finalmente este proceso se repite hasta
alcanzar la matriz Walsh deseada de tamaño 64x64.
Figura 2.1: Proceso de generación de la matriz de códigos Walsh
por concatenación de la matriz base consigo misma (a), concatenación de la matriz base
con su negada (b), y concatenación de los resultados previos (c)
Fuente: Figura elaborada por el autor
Una vez finalizado el proceso se compara la matriz obtenida con la especificada en el
estándar (ver Figura 1.4) para determinar su validez. Posteriormente esta matriz se guarda como
una constante para evitar el proceso de generación en cada corrida del proyecto principal. Para
obtener la fila del código W0, o cualquier otro que se desee, se conecta esta constante a la entrada
de la función Index Array (índice de la matriz). Esta función tiene otros dos parámetros de
entrada, que vienen a ser el número de fila o de columna que se desea extraer de la matriz
original, es decir, el índice del código. En este caso se conecta un control del panel frontal a la
entrada del índice de fila, haciendo que este número pueda ser configurado entre 0 y 63, para un
total de 64 posibles códigos de la matriz. Como salida se obtiene entonces la fila indicada por el
control, que para este proyecto será siempre la correspondiente al índice cero, es decir, el código
W0 de expansión de pilotos.
33
2.3. Generación y prueba de los códigos PN
2.3.1. Diseño de los registros de corrimiento
Para poder generar los códigos PN-I y PN-Q, es necesario diseñar los registros de
corrimiento expresados en las ecuaciones 1.6 y 1.7 e ilustrados en la Figura 1.6. Partimos
entonces de un arreglo de 15 casillas, que servirán como las 15 etapas del registro de corrimiento.
Este arreglo se inicializa con una semilla o estado inicial de 14 ceros en las posiciones inferiores
y un uno en la mayor. Para el procesamiento del mismo, se genera un indicador para esta
constante, ya que los indicadores nos permiten crear a su vez variables locales.
El primer paso consiste en obtener los valores de los registros de interés para cada uno de
los códigos, para poder realizar la operación de adición módulo 2 con ellos. Para esto utilizamos
primero la función Index Array explicada anteriormente, la cual permite ser configurada para
obtener los elementos del arreglo que sean indicados en sus terminales. De nuevo, para cada
código tendremos distintos valores para estos índices. La función genera tantas salidas como
índices se hayan configurado, obteniendo así el valor que poseen en ese momento los registros
deseados. Todos estos valores servirán de entrada para una nueva función llamada Compound
Arithmetic, o “combinación aritmética”, la cual puede ser configurada para realizar las funciones
de suma, multiplicación, AND, OR y XOR de todos los datos de entrada simultáneamente. Se
selecciona la función XOR que viene a ser el equivalente a una adición en módulo 2, obteniendo a
la salida el resultado final binario de la operación.
A continuación se procede a realizar el corrimiento de los registros hacia la posición
menos significativa, con el fin de introducir el resultado recién obtenido en el registro superior.
Para ello hacemos uso de la función Array Subset, o “subconjunto del arreglo”, la cual nos
permite obtener una porción del arreglo de entrada mediante la configuración de dos parámetros:
el índice a partir del cual se tomará el subconjunto y la longitud del mismo. Se define el índice en
la posición 1 y se configura una longitud de 14 registros, para así obtener la porción del arreglo
de entrada que debe ser corrida hacia los registros inferiores. Teniendo este nuevo arreglo de 14
34
registros, el mismo toma automáticamente la numeración de 0 a 13 para cada uno de ellos, por lo
que solo resta incluir en la quinceava posición, o índice 14, al resultado obtenido en la función
XOR del Compound Arithmetic.
Para realizar esta inclusión se utiliza la función Insert Into Array, cuyo funcionamiento
fue explicado en la sección 2.2. De esta manera, se define el índice 14 como la posición en la cual
se desea hacer la inserción, y se conecta la salida del Compound Arithmetic a la entrada del nuevo
elemento a insertar. En la salida tendremos entonces un arreglo compuesto de nuevo por 15
registros, donde los catorce primeros son el conjunto que se desplazó y el último es el resultado
del XOR. Llegado este punto, a dicha salida se conecta entonces una variable local configurada en
modo de escritura, que sobrescribe el contenido de la que fue usada al inicio de todo el proceso.
De esta manera en la próxima corrida se tiene que sucede de nuevo todo el proceso pero con el
último resultado como entrada inicial, generándose de esta manera el corrimiento cíclico de los
registros hasta alcanzar la máxima longitud en la cual el registro vuelve al estado inicial o
semilla.
Es importante destacar el hecho de que la salida final del registro de corrimientos no es
directamente el resultado del XOR, sino que son todos los valores que en cada ciclo se “expulsan”
del índice cero, o primer registro. En una aproximación inicial se tomó la salida del XOR como la
fuente de valores para generar el arreglo de los códigos PN, lo que trajo consigo errores ya que no
se incluía entonces a los valores de la semilla o estado inicial en la formación del arreglo final.
Una inspección más detallada dio como resultado la corrección de este error, tomándose entonces
la salida del primer registro como entrada para la generación de los arreglos de los códigos PN-I
y PN-Q.
La formación de estos códigos fue realizada con la implementación de la función Insert
Into Array de la cual ya hemos hablado anteriormente. La misma tiene como entrada inicial la
variable local de un arreglo vacío configurada a modo de lectura, tal como en el caso del registro
de corrimiento, ya que en la salida tiene la misma variable solo que en modo de escritura. De esta
manera se genera una realimentación del proceso, donde la salida vuelve a ser la entrada para el
35
ciclo siguiente, y así sucesivamente. Así mismo, a la entrada de nuevos elementos a insertar en el
arreglo se conecta entonces la salida del primer registro del proceso del shift register, y a la
entrada del valor del índice en el cual se va a realizar la inserción se debe conectar una variable
que incremente a cada ciclo para ir llenando el arreglo en posiciones sucesivas.
Todo este proceso se enmarca en una estructura llamada while loop, la cual tiene la
función de ejecutar todos los comandos que se encuentren en su interior hasta que se interrumpa
su operación. La estructura cuenta con dos elementos principales, como son: un contador que
lleva el registro del número de veces que se ha ejecutado el ciclo y un control de parada utilizado
para detener su ejecución. Esta interrupción se genera mediante un valor binario y puede
configurarse de dos maneras: stop if true (detener si la condición es cierta) o continue if true
(detener si la condición es falsa).
De esta manera tenemos que el contador de ciclos puede usarse directamente para la
entrada del valor del índice en el cual se va a realizar la inserción en el Insert Into Array
empleado para formar los códigos PN. Así mismo, se puede configurar el while loop para detener
su ejecución una vez conformados los códigos finales. Para ello utilizamos la función Array Size,
o tamaño del arreglo, para calcular la longitud del arreglo de salida, la cual se conecta a un
comparador que verifica la igualdad entre dos números. Al otro conector de este comparador se
conecta una constante cuyo valor fijaremos en 32767, que es el tamaño máximo del arreglo que
se puede obtener con un registro de corrimiento de 15 elementos (215-1). Al hacer esto, la
estructura se ejecuta hasta que el código PN formado alcance la longitud máxima y luego detiene
su ejecución, habiendo configurado la misma para el caso de stop if true.
Para obtener la longitud deseada de 215 o 32768, tal como se estipula en el estándar IS-95,
se debe agregar un cero donde se encuentren 14 ceros consecutivos. Esto sucede únicamente al
inicio del código debido a la presencia de la semilla, por lo que es allí donde se procede a insertar
el nuevo elemento. Para ello se utiliza nuevamente la función Insert Into Array, teniendo como
entradas el código incompleto, una constante de valor cero como elemento a insertar y un índice
de inserción de 0. Este índice puede ser cualquier número entre 0 y 13 pero se tomó el cero como
36
un valor más formal. A la salida de la función de inserción tendremos entonces el código PN
formado en su totalidad (ver Figura 2.2).
Para evitar el proceso de generación de los códigos para cada corrida del proyecto, se
crean constantes a partir de estas variables, las cuales pueden duplicarse y utilizarse cuantas veces
sea necesario. Todo este procedimiento debe realizarse independientemente para cada código ya
que cada uno utiliza distintas posiciones de los registros de corrimiento para ejecutar la función
XOR y por lo tanto serán completamente diferentes.
37
Figura 2.2: Generación de los códigos PN binarios
Fuente: Captura de pantalla del software LabVIEW®
38
2.3.2. Conversión de los códigos PN binarios
En el momento en el cual se lleva a cabo el proceso de enmascaramiento con los códigos
PN, los mismos no se emplean en su forma binaria. Esto es debido a que los datos a enmascarar
tampoco se encuentran en formato binario. En su lugar, los bits han sido convertidos a valores
bipolares de ‘+1’ y ‘-1’ en sustitución de los ‘0’ y ‘1’, respectivamente. Es por esto que se hace
imperante la necesidad de convertir los códigos PN binarios que fueron generados, a códigos PN
de valores bipolares de ‘+1’ y ‘-1’ que sigan exactamente el mismo patrón. En pocas palabras,
deben ser intercambiados todos los ceros por valores ‘+1’ y todos los unos por valores ‘-1’.
Para llevar a cabo esta operación se utiliza un while loop en el que se ejecutarán todos los
comandos de manera cíclica. Inicialmente tendremos cada uno de los códigos binarios conectados
a una función Index Array independiente para cada uno; esta función es la que extrae elementos
de un arreglo dada su posición. De nuevo se conecta el contador interno del while loop a las
entradas de configuración del número de índice a extraer, de manera que a cada ejecución del
ciclo se extraiga el elemento siguiente. A medida que los unos y ceros se van obteniendo en la
salida, se conectan con un comparador que verifica si es o no igual a cero, dando como resultado
un valor booleano de true para cuando lo sea y uno de false para cuando no lo sea, es decir,
cuando sea uno. Esta salida booleana pasa a ser entonces la entrada de una estructura de casos o
case structure, donde se pueden configurar varios escenarios de ejecución dependiendo de la
entrada recibida. En esta aplicación los escenarios se etiquetan como true y false para dar lugar a
los únicos dos casos posibles. De manera tal que dependiendo del valor booleano recibido de la
etapa anterior se ejecutarán los comandos que estén en una u otra ventana de escenarios. Para el
caso true, es decir, que el número a convertir es un cero, se configura una constante de valor +1
como salida de la ventana. Para el caso contrario se configura entonces una constante de valor -1.
De esta manera se obtiene a la salida de este case structure un +1 o un -1 dependiendo si la
entrada fue un 0 o un 1 respectivamente.
Posteriormente se deben conformar nuevamente los arreglos a partir de estos resultados,
por lo que hacemos uso de la función Insert Into Array usando como entrada del valor a insertar
39
esta salida que acabamos de obtener. La entrada que especifica el índice en el cual se va a insertar
es conectada de igual forma al contador interno del while loop, haciendo entonces la conversión
uno a uno de cada elemento del código binario en el nuevo código. La entrada del arreglo será
una variable en modo de lectura inicializada en vacío, y la salida será la misma variable en modo
de escritura. De esta manera, y como se ha realizado anteriormente, la salida de un ciclo se
convierte en la entrada del siguiente, pudiendo entonces completar la formación de ambos
códigos PN en su nuevo formato.
La finalización de la ejecución está ligada a la finalización de la conversión de datos, por
lo que puede hacerse de varias maneras. La seleccionada fue de nuevo la de comparar el tamaño
del arreglo que se formaba mediante las funciones de Array Size y de comparación, con una
constante de 32768. La salida del comparador se conecta al control de parada de la estructura
configurado para stop if true, y al cumplirse la condición se detiene la ejecución de la misma (ver
Figura 2.3). Una vez más, para evitar realizar este proceso en cada corrida del proyecto final, se
crean constantes a partir de estas variables, las cuales pueden duplicarse y utilizarse cuantas veces
sea necesario.
Figura 2.3: Conversión de los códigos PN binarios a bipolares
Fuente: Captura de pantalla del software LabVIEW®
40
2.3.3. Pruebas de los códigos PN
Para poder asegurar que los códigos PN generados y que van a ser usados en adelante para
procesos críticos del funcionamiento total del proyecto se comportan tal como se desea
teóricamente, es necesario conducir una serie de pruebas que lo verifiquen. La primera prueba a
realizar es la del balance entre unos y ceros, o entre +1 y -1, según el formato del código que se
verifique. Para otorgar redundancia a los resultados se comprobaron ambos casos para cada uno
de los dos códigos PN.
El procedimiento a seguir fue el de tomar cada constante de código generado y conectarlo
a la entrada de una función Add Array Elements (sumar elementos del arreglo), con lo que a la
salida se obtiene el resultado de la suma de todos los elementos del arreglo para cada caso. En los
casos binarios si tenemos igual número de ceros y unos, una suma de todos los elementos debe
dar un total igual a la mitad de los elementos, ya que solo los unos contribuyen a la operación.
Por lo tanto, se debe obtener un resultado de 16384 para ambos códigos. Para los casos en
formato bipolar, una suma de todos los elementos debe dar un total igual a cero, ya que todos los
elementos se cancelan unos con otros al haber el mismo número de positivos que de negativos. Al
obtener estos resultados se comprueba entonces que se cumple la condición de balance para los
códigos.
Otra prueba necesaria es la de autocorrelación, para la cual debemos realizar el cálculo de
cuántas igualdades y desigualdades existen al comparar el código con versiones desplazadas de sí
mismo, de acuerdo a la Ecuación 1.6. Para realizar la prueba de una manera completa este
chequeo debe realizarse con todos los posibles desplazamientos del código, por lo que se
requerirán un total de 32768 ciclos para confirmar que en efecto hay una alta correlación
únicamente en el caso en que no existe desplazamiento, y una baja correlación para todas las
versiones desplazadas. Este principio es básico para asegurar el buen funcionamiento del
proyecto, por lo que esta prueba es de gran importancia para verificar la posible utilización de los
códigos.
41
El proceso se desarrolla de nuevo dentro de un while loop para asegurar que se tomen en
cuenta la totalidad de los elementos de los arreglos. No se ahondará en el procedimiento de
detención de la ejecución ya que el mismo ha sido explicado de manera profunda con
anterioridad. Así mismo, se explicará de manera singular para el caso de uno de los códigos,
asumiendo que todo el procedimiento es duplicado para realizar la verificación de ambos. Cada
ciclo consta fundamentalmente de cinco etapas, en la primera se genera la versión desplazada del
código, en la segunda se comparan término a término la totalidad de los elementos de ambos
arreglos, en la tercera se generan arreglos que guarden los resultados de la comparación anterior,
en la cuarta se aplica como tal la Ecuación 1.6 con los datos de la etapa anterior y en la quinta se
grafican estos datos para obtener una representación visual de los mismos. Estas etapas estarán
claramente delimitadas y enmarcadas en un flat sequence structure (estructura de secuencia
plana), el cual se compone de ventanas concatenadas que se ejecutan de manera consecuente y en
las que se realizan por completo todos los procesos inherentes a cada una antes de proseguir a la
siguiente.
En la primera etapa básicamente lo que se quiere es obtener trozos del código, solo que del
tamaño del código completo. Por esto la ejecución inicia conectando el código a probar en la
entrada de una función Array Subset, cuyo tamaño del subarreglo se define de 32768 (lo cual no
lo hace realmente un subarreglo, pero se mantendrá esta terminología para darle sentido a la
explicación), y su índice de inicio está conectado a un contador que incrementa con cada ciclo.
En este caso no se usa el contador del while loop debido a que para el caso en el que se requiera
graficar más de una corrida a la vez, es necesario llevar dicho contador a cero, como ya se verá
más adelante. Al subarreglo obtenido pasa a ser la entrada de la función Array Size, para poder
obtener su longitud y usarla como entrada de un comparador de igualdad conectado a una
constante de 32768. El resultado de esta comparación activará uno de los dos posibles escenarios
del case structure que sigue a continuación.
A primera vista pareciera que el arreglo siempre va a tener una longitud de 32768, ya que
ese es el tamaño de la porción que se define en el Array Subset, pero sucede que para
LabVIEW® todas las casillas siguientes al último elemento se consideran vacías y, por lo tanto,
inexistentes. De esta manera, la ejecución del primer ciclo será el único momento en el cual este
42
subarreglo sea de tamaño 32768, ya que para el siguiente ciclo en el que el índice de inicio
aumenta en una unidad, el tamaño del subarreglo disminuye en una unidad también. Sabiendo
esto volvamos al case structure, donde en el caso true, es decir, que el arreglo es de tamaño
32768, el mismo entra y sale del escenario sin sufrir modificación alguna, listo para entrar a la
segunda etapa del proceso.
Por el contrario, para el caso del resto de las ejecuciones del ciclo donde la longitud del
subarreglo se hace cada vez menor, se hace necesario compensar la falta de elementos. Pero esta
compensación no puede ser realizada a la ligera, ya que sólo pueden compensarse el número de
elementos que falten y en el orden adecuado. Por ejemplo, para el caso de la segunda ejecución
donde el subarreglo es una unidad menor, debe agregarse al final el elemento inicial que se está
dejando por fuera. Igualmente si llegamos a la mitad del código, la otra mitad que lo completa
debe ser la primera mitad faltante concatenada al final. Al hacer esto obtenemos un código que se
desplaza de manera cíclica manteniendo constante su tamaño y agregando al final los elementos
que sean necesarios del principio.
Esto se logra en el caso false del case structure, donde como paso inicial se conecta la
constante de 32768 a un sustractor a cuyo segundo terminal se conecta el resultado de la función
Array Size recién utilizada. De esta manera se determinan cuantos elementos faltan para
completar el tamaño total del arreglo. Este resultado se conecta al terminal de tamaño del
subarreglo de una nueva función Array Subset a cuyo terminal de índice de inicio se conecta una
constante de valor cero, y a su entrada el arreglo original. Así se obtiene a la salida una porción
del inicio del arreglo del tamaño requerido para completar el obtenido en el primer Array Subset.
Sólo faltaría concatenar este subarreglo al final del primero, para lo cual se utiliza la función
Insert Into Array conectando a la entrada principal el primer subarreglo, al terminal de inserción
el segundo arreglo y al terminal de índice de inserción el resultado obtenido de la función Array
Size. A la salida tendremos entonces un arreglo de tamaño 32768 compuesto de la primera
porción obtenida del final del arreglo original, concatenada con la porción faltante del inicio en el
punto donde termina dicha primera porción.
43
Al realizar este proceso varias veces se obtiene un arreglo que se desplaza elemento a
elemento para poder ser comparado en la segunda etapa con el arreglo original. Para poder
asegurar que esto suceda incluso al llegar al final del arreglo original, debe tomarse la precaución
de reiniciar el contador independiente que es usado en el primer Array Subset fuera del case
structure. Recordemos que este contador está conformado por una función increment, la cual
tiene la tarea de aumentar en una unidad el dato de entrada. En la salida se conecta entonces una
variable en modo escritura y en la entrada la misma en modo lectura, como ya hemos hecho
anteriormente.
Para reiniciar esta variable en el momento adecuado debe ser agregado dentro del caso
false del case structure un comparador de igualdad en cuyos terminales de entrada se conecten el
resultado del Array Size del primer subarreglo y una constante de valor 1. Esto debido a que
cuando solo se esté tomando este último elemento y concatenándole los primeros 32767
elementos del arreglo original, el próximo paso será volver de nuevo al arreglo original. De esta
manera, cuando el tamaño del primer subarreglo sea igual a 1 el comparador tendrá un resultado
de true, activando el caso true de un case structure que se agrega dentro del primero. En este
escenario solo habrá una variable en modo escritura del contador independiente del proceso, con
una constante de cero conectada a su terminal de entrada. Así la misma pasará a valer cero para la
próxima corrida y el primer subarreglo volverá a ser el arreglo original completo. El caso false de
este case structure interno permanece vacío ya que mientras no se cumpla la condición deseada
no es necesario realizar ninguna otra operación extra. En este punto se culmina la primera etapa,
de la cual se utilizarán en la siguiente el arreglo original y su versión desplazada que se obtiene a
la salida del case structure mayor (ver Figura 2.4).
44
Figura 2.4: Primera etapa del protocolo de verificación de autocorrelación
Fuente: Captura de pantalla del software LabVIEW®
La segunda etapa está constituida por la comparación término a término de la totalidad de
los elementos de ambos arreglos. Para ello utilizaremos un for loop, el cual tendrá como entradas
los dos arreglos obtenidos en la etapa anterior y a cuyo terminal de selección del número de
ciclos de ejecución se conecta una constante de 32768 para asegurar que se evalúan los arreglos
de forma completa. Dentro del for loop se ubican dos funciones Index Array, una para cada
arreglo, y cuyos terminales de índice de extracción se conectan al contador de ejecuciones del for
loop. De esta manera en cada ciclo interno del for loop se estarán extrayendo términos de ambos
arreglos que estén ubicados en la misma posición. Seguidamente se procede a comparar su
igualdad, donde se obtiene un booleano que puede ser true o false dependiendo de si son o no
iguales. Se tiene entonces un case structure en el que para ambos casos presenta una función
increment que aumenta un contador, de nombre distinto según el caso. Así, se logra contabilizar
el número total de veces que hay igualdades y desigualdades, tomando en cuenta todos los
45
elementos de ambos arreglos. Este chequeo completo se realiza cada vez que ocurre un solo
desplazamiento en el paso anterior (ver Figura 2.5).
Es importante que antes de entrar en esta segunda etapa se lleven a cero los contadores de
igualdad y desigualdad, por lo que en la primera deben agregarse variables en modo escritura de
cada uno de los ellos, con una constante de cero en ambos terminales de entrada.
Figura 2.5: Segunda etapa del protocolo de verificación de autocorrelación
Fuente: Captura de pantalla del software LabVIEW®
46
La tercera etapa comprende la formación de los arreglos que contienen los resultados del
número de igualdades y desigualdades encontradas para cada uno de los 32768 posibles
desplazamientos del código original. Para generarlos se emplea la función Insert Into Array, una
para cada variable del contador de la segunda etapa, tomando como entrada arreglos vacíos que
se realimentan en cada ciclo. El índice de inserción se controla con el contador del while loop, y
los elementos a insertar son los contadores de igualdades y desigualdades respectivamente. De
esta manera se obtienen los dos arreglos de los cuales puede recuperarse la pareja de datos
igualdades-desigualdades para cada corrimiento del código original (ver Figura 2.6).
Figura 2.6: Tercera etapa del protocolo de verificación de autocorrelación
Fuente: Captura de pantalla del software LabVIEW®
47
En la cuarta etapa es donde se calculan los valores que se graficarán más adelante, al
sustituir cada pareja de datos obtenida en el paso anterior en el desarrollo de la Ecuación 1.6. Para
ello se emplea un for loop a cuyo terminal de selección del número de ciclos de ejecución se
conecta la salida de una función Index Array cuya entrada puede ser el arreglo de igualdades o
desigualdades obtenido en el paso tres, ya que son de la misma longitud. Esto es para asegurar
que se evalúan los arreglos de forma completa, en el caso en que se hayan realizado varias
corridas continuas. En la ejecución del for loop sistemáticamente se extrae cada pareja de datos
con la función Index Array y el índice de extracción conectado al contador interno del mismo.
Luego con cada pareja de datos se procede a restar el número de desigualdades al de igualdades,
y el resultado se divide entre el período, es decir, una constante de 32768. Este resultado se
conecta al terminal de inserción de una función Insert Into Array con el índice de inserción
conectado al contador de ciclos del for loop y cuya entrada y salida son la misma variable
configurada para leer y escribir respectivamente. De esta manera se obtiene un arreglo de todos
los resultados de la autocorrelación del código con versiones desplazadas de sí mismo (ver Figura
2.7).
Figura 2.7: Cuarta etapa del protocolo de verificación de autocorrelación
Fuente: Captura de pantalla del software LabVIEW®
48
Para finalizar, en la quinta etapa se realiza la presentación gráfica de los datos a través de
una función llamada XY Graph. Las entradas de esta función son únicamente los datos del eje de
las abscisas y del eje de las ordenadas, ya que la configuración de la presentación de estos datos
se realiza en las opciones del gráfico en el panel de control. Para el caso del eje de las abscisas, se
debe crear un arreglo de números consecutivos de la misma longitud que el de los resultados de la
autocorrelación, por lo que en la cuarta etapa debe incluirse esta generación en paralelo con la
formación del arreglo de resultados. Se utiliza la función Insert Into Array de la misma manera,
con la entrada y salida compartida por la misma variable y tanto su índice de inserción como el
dato a insertar se conectan al contador de ciclos del for loop (ver Figura 2.8). Una vez obtenidos
ambos ejes se conectan a los terminales de entrada de la función XY Graph y se observa el
resultado gráfico, el cual se asemeja al teórico esperado, descrito por la Ecuación 1.6 (ver Figuras
2.9 y 2.10).
Figura 2.8: Quinta etapa del protocolo de verificación de autocorrelación
Fuente: Captura de pantalla del software LabVIEW®
49
Figura 2.9: Gráfica de la autocorrelación del código PN-I para 3 detecciones
Fuente: Captura de pantalla del software LabVIEW®
50
Figura 2.10: Gráfica de la autocorrelación del código PN-Q para 3 detecciones
Fuente: Captura de pantalla del software LabVIEW®
CAPÍTULO 3
DISEÑO DEL GENERADOR Y DEL RECEPTOR
3.1. Resumen del procedimiento experimental
En principio sería deseable describir los procesos de diseño del generador y del receptor
en capítulos separados. Pero dada la manera como se abordó el proceso de diseño esto resultaría
imposible, ya que su desarrollo fue en paralelo. Esto se hizo con la intención de poder reportar
avances en cualquiera de los dos procesos, de acuerdo a los resultados obtenidos en cada etapa de
los mismos. En pocas palabas, no es posible poner a prueba los avances alcanzados en el
desarrollo de un receptor si no tenemos una señal qué recibir. De esta manera se pudo también
avanzar en el desarrollo del generador, adaptándolo cada vez más al tipo de señales con las que se
desea trabajar.
El proceso de diseño del generador está compuesto por varios acercamientos distintos al
problema. Esto es debido a que inicialmente se enfocó la investigación en la expansión del
espectro y la recuperación de los datos enviados, para luego dejar de lado esa línea de desarrollo
e incursionar en la modulación y demodulación de señales analógicas. Por último se tomó otra
línea de acción, fijando el nuevo enfoque en la generación de pilotos digitales de parámetros
configurables, dejando de lado la modulación y concentrando los esfuerzos en el desarrollo del
software de procesamiento como tal, más allá del proceso de transmisión analógico. Esto llevó a
la presentación del diseño final, con todas las funcionalidades de configuración necesarias para
poner a prueba las capacidades del receptor.
El receptor por su parte, evoluciona en diseño a la par del generador. Inicialmente se
enfocaba en la recuperación de los datos enviados en espectro expandido, para luego dar paso a la
52
demodulación de las señales análogas que emitía el generador. Llegado a este punto se presentó
un cambio radical en el enfoque del diseño del receptor, ya que el mismo no requiere la
funcionalidad de interpretación de datos de los usuarios. Esto debido al hecho de que como
detector e identificador de radiobases, el mismo no requiere la capacidad de recepción de
información de los usuarios en la señal, sino únicamente el desfasaje del código PN utilizado para
el canal piloto que identifica a la radiobase. Así, el nuevo enfoque de diseño se orientó a la
detección de estos desfasajes para realizar la identificación de las radiobases presentes. A
continuación se detallan todos los procedimientos seguidos en la evolución de ambos diseños. Se
seguirá un orden cronológico salvo en los casos que se requiera la explicación de varios avances
juntos para un mejor entendimiento.
3.2. Enfoque inicial, el espectro expandido
La primera aproximación al envío y recepción de señales vino de la mano con la prueba de
las funciones Spread Symbols y De-Spread Symbols explicadas en detalle en la sección 2.1 del
presente trabajo. Básicamente se buscaba comprobar el modo de operación de dichas funciones al
enviar y recibir un código binario de poca longitud. Es así como para ese momento tanto el
generador como el receptor constaban de una única función cada uno. Este enfoque es
rápidamente abandonado y es aquí cuando comienza el desarrollo de la conversión de formato
binario a formato bipolar con el fin de realizar la modulación y transmisión de señales analógicas,
para luego incluir la demodulación y reconversión a formato binario en la búsqueda de obtener
las señales enviadas.
3.3. Aplicando modulación y demodulación analógica
Como paso siguiente se incluyó en el modelo anterior la modulación analógica como
medio de transmisión de los datos, más específicamente la modulación QPSK. Para lograr esto se
utilizaron varias funciones pertenecientes al Modulation Toolkit. La primera de ellas, y con la
cual se inicia el proceso de conversión, es la llamada Modulate PSK (Modular PSK). Esta función
permite elegir entre distintos tipos de modulación PSK dependiendo de sus parámetros de
53
configuración. La función posee cuatro terminales de entrada y dos de salida. La primera entrada
viene a ser la de los bits que se desean transmitir; la segunda proporciona la información de
configuración; en la tercera se indica la tasa de símbolos y en la cuarta los coeficientes del filtro
de conformación de pulsos. La salida por su parte, se compone de un terminal para la forma de
onda compleja y otro que nos permite obtener los símbolos contenidos en dicha onda.
Para la obtención de los valores de entrada para el segundo y cuarto terminal de entrada de
la función Modulate PSK, es necesario utilizar las funciones Generate System Parameters
(generar parámetros del sistema) y Generate Filter Coefficients (generar coeficientes del filtro)
respectivamente. En la primera de ellas se configuran parámetros como el número de muestras
por símbolo, el tipo de modulación (binaria, cuaternaria, etc.), si la modulación será o no
diferencial, y si será normal, shifted (corrida) o con offset (desfasaje). Se implementaron los
valores adecuados para el caso, como lo es el tipo de modulación cuaternaria, normal, no
diferencial, con 16 muestras por símbolo. Para el caso del generador de coeficientes del filtro se
tienen entradas como el tipo de modulación, el tipo de filtro y el número de muestras por
símbolo, configuradas para modulación PSK con 16 muestras por símbolo. Una vez conectadas
estas dos funciones a la de modulación PSK, se procede con la demodulación de la señal
generada.
En el proceso de demodulación se utiliza la función Demodulate PSK (Demodular PSK), a
la cual se conectan en sus terminales de entrada la señal a demodular, los parámetros del sistema,
y los coeficientes del filtro. Para estos dos últimos se utilizó la misma salida de las funciones
Generate System Parameters y Generate Filter Coefficients implementadas para la modulación.
De esta manera se obtiene a la salida la señal expandida que se introdujo en la función Modulate
PSK, la cual se contrae de nuevo para conseguir los bits originales (ver Figuras 3.1 y 3.2). Sin
embargo, en la recepción se obtuvo siempre un bit menos de los enviados, por lo que se
experimentó con la inclusión de un header o cabecera en el mensaje a enviar, ya que al parecer
las funciones lo truncaban en cierta medida. Para ello se implementó la función Insert Into Array
con la intención de concatenar una trama de bits en el mensaje, previo a su expansión y
modulación. Esta acción no generó ningún resultado positivo en lo que a determinar las causas de
la supresión de un bit se refiere, por lo que se procedió a sustituir las funciones de modulación y
54
demodulación directa y se realizó un modelo paso a paso con las funciones que las constituyen,
para poder observar la señal en cada uno de los pasos internos del proceso.
Figura 3.1: Segmento de transmisión de la primera aproximación
Fuente: Captura de pantalla del software LabVIEW®
Figura 3.2: Segmento de recepción de la primera aproximación
Fuente: Captura de pantalla del software LabVIEW®
55
Para realizar el modelo detallado se sustituyeron las funciones Modulate PSK y
Demodulate PSK por una serie de funciones más específicas que realizan el mismo
procedimiento, sólo que permitiendo el seguimiento de la señal en cada una de las etapas. La
primera de estas funciones es la llamada Map Bits to Symbols (mapear los bits a símbolos) y se
encarga de generar los símbolos que van a ser transmitidos a partir de la trama de bits de datos.
Esta función tiene además un terminal de entrada para el tipo de PSK a usar y otro para ingresar
el mapa de símbolos a utilizar para llevar a cabo la conversión. Esto se obtiene de la función
Generate System Parameters explicada anteriormente. De esta manera se obtiene una trama de
símbolos a la salida de la función, la cual servirá de entrada a la siguiente. Esta viene a ser Apply
Pulse Shaping Filter (aplicar filtro de conformación de pulsos), la cual se encarga de aplicar el
filtro de acuerdo a los parámetros de entrada especificados por las funciones Generate System
Parameters y Generate Filter Coefficients ya mencionadas. A la salida tendremos la forma de
onda compleja que será transmitida.
En la rama de demodulación se tiene como primera etapa a la función Apply Matched
Filter (aplicar filtro emparejado), la cual toma como entradas a la forma de onda compleja, los
coeficientes del filtro y el número de muestras por símbolo y genera como salida una forma de
onda compleja filtrada que contiene los símbolos recibidos. Para obtener estos símbolos se utiliza
la función Decimate Oversampled Waveform (diezmar la forma de onda sobremuestreada), que
toma la forma de onda compleja y el número de muestras por símbolo y genera una forma de
onda compleja que alinea los símbolos para permitir su extracción mediante la función Unbundle
by Name (desagregar por nombre). Esta función permite obtener los componentes de la forma de
onda compleja, en este caso los símbolos recibidos. Estos símbolos se introducen en la función
Map Symbols to Bits (mapear símbolos a bits), la cual realiza la operación inversa a Map Bits to
Symbols valiéndose del mismo mapa de símbolos. Así se obtienen entonces los bits expandidos
que serán comprimidos para recuperar los datos (ver Figura 3.3 y 3.4).
56
Figura 3.3: Segmento de transmisión del segundo enfoque
Fuente: Captura de pantalla del software LabVIEW®
Figura 3.4: Segmento de recepción del segundo enfoque
Fuente: Captura de pantalla del software LabVIEW®
57
A pesar del éxito de esta prueba, y tal como se menciona en la introducción del capítulo,
esta manera de abordar el problema no provee de ningún tipo de generación como tal de pilotos,
así como tampoco busca su identificación. Es por esto que en este punto se realizó un cambio en
el enfoque del problema y se empieza a tratar con arreglos binarios y la búsqueda de patrones en
su interior, con miras a obtener un proceso de búsqueda y adquisición de desfasajes de los
códigos PN.
3.4. Búsqueda de patrones en arreglos binarios
Tomando en cuenta que la función más importante del proyecto es la de obtener los
desfasajes de los códigos PN, se procedió a diseñar un VI que explorara este procedimiento. Para
ello se generó un arreglo de una longitud manejable para realizar pruebas, en este caso 56 bits, y
se le introdujo un patrón reconocible justo en la mitad. El arreglo estaba compuesto de ceros y
unos intercalados, teniendo en el medio varios unos seguidos. Luego se creó otro arreglo de
longitud 10 y se le introdujo el patrón central del arreglo mayor. La idea era comparar este
arreglo menor con porciones de 10 bits del arreglo mayor, corriendo su contenido bit a bit hasta
llegar al punto en que ambos arreglos coincidieran. En este momento debería reportarse la
distancia recorrida en número de posiciones que le tomó en llegar a la coincidencia.
Para realizar esto, se dio uso a la función Array Subset, cuya salida como sabemos es una
porción del arreglo de entrada, a partir de una posición y con una longitud especificadas por el
usuario. La longitud del arreglo de salida se configuró en 10, para poder compararlo luego con la
porción que se tiene fija de antemano. El índice de extracción se configuró en modo de control,
de manera tal que el usuario pudiera realizar la exploración paso a paso. La salida generada se
compara luego con el arreglo prefabricado que contiene la porción central del arreglo mayor. Para
realizar esta comparación se utiliza la función XOR, que realiza la adición módulo 2 bit a bit de
las entradas y guarda los resultados en un arreglo de longitud igual, es decir, 10 elementos. De
esta manera tenemos entonces un arreglo que contiene las coincidencias y no coincidencias de
cada par de bits de la misma posición de los códigos de entrada.
58
La operación XOR da como resultado un 1 cuando los elementos no son iguales, y un 0
cuando sí lo son. Así, al momento de obtener una coincidencia perfecta el arreglo debería estar
compuesto únicamente de ceros. Y en el resto de los casos debe tener un número de unos igual al
número de no coincidencias. Inicialmente la detección de esta situación estaba a cargo del
usuario, quien debía observar continuamente el arreglo de salida para verificar cuándo se cumple
la condición de total igualdad. Es por esto que para facilitar el momento de la detección se aplicó
la función Add Array Elements (adición de los elementos del arreglo) al arreglo de salida de la
función XOR. Esta función daría como resultado cero al momento de la coincidencia y un número
distinto de cero en cualquier otro momento. Sabiendo esto, se utilizó un comparador con cero a la
salida de la función, el cual genera un resultado true o verdadero en caso de que la suma de los
elementos del arreglo sea cero, y un resultado false o falso en caso contrario. A este resultado se
le crea un indicador luminoso, de manera tal que el momento de la detección sea evidente para el
usuario sin tener que observar detalladamente el funcionamiento del programa (ver Figura 3.5).
El procedimiento fue exitoso ya que al ocurrir la coincidencia se encendía el indicador y podía
observarse entonces la distancia recorrida hasta el momento de la detección.
Figura 3.5: Primera detección de patrones binarios
Fuente: Captura de pantalla del software LabVIEW®
Para este momento el corrimiento del arreglo sigue en manos del usuario, por lo que el
paso lógico siguiente es automatizar el proceso. Esto se logra con el uso de una estructura while
59
loop, tomando como valor inicial un desfasaje introducido por el usuario el cual se incrementaría
con cada ciclo mediante la función increment. De esta manera el arreglo se correría
automáticamente una posición a cada ciclo del while loop, relegando al usuario de esta operación
pero permitiéndole configurar el desfasaje deseado al inicio de la ejecución. Al hacer esto se hace
necesario que el arreglo con el que se trabaja sea cíclico para que no se generen porciones de
arreglo vacías y se produzcan errores, pero este asunto se resolverá más adelante como veremos.
Por ahora el paso siguiente una vez que tenemos una trama de datos que se corre una posición por
ciclo, es hacer que el buscador no sea estático sino que por el contrario, se desplace al doble de la
velocidad mientras realiza la búsqueda.
Este aumento de la velocidad de desplazamiento se logra aplicando varios cambios al
diseño que se tiene hasta el momento. Primero debe cambiarse la entrada del comparador de una
porción fija del código mayor, a una porción que también se desplace por él. Esto se logra
utilizando una función Array Subset también para el buscador, mediante la conexión del índice de
extracción a un contador. Para lograr el doble de velocidad de desplazamiento, este contador debe
incrementarse dos veces por cada ciclo, por lo que se hace evidente la necesidad de la inclusión
de una estructura for loop con una constante de 2 conectada al terminal de número de ciclos. De
esta manera, al incluir todo el proceso de detección dentro del for loop se realiza la comparación
de dos porciones distintas del buscador, contra la misma porción del arreglo al cual desea
encontrársele el desfasaje, logrando entonces el desplazamiento del buscador al doble de la
velocidad de la del arreglo desfasado.
Luego de hacer esto se intentó erróneamente lograr que el buscador una vez conseguida la
coincidencia, se quedara “enganchado” con ella. Erróneamente porque a diferencia de un móvil,
que sí debe continuar en fase con el piloto detectado para poder acceder a los canales de tráfico,
un escáner debe seguir adelante con el fin de conseguir otros pilotos. Es por esto que hasta que no
se corrigió esta configuración más adelante, no se obtuvo un resultado óptimo.
Para lograr que el buscador siguiera en fase con el piloto se utilizó un case structure para
el contador que incrementa la variable que indica el índice de extracción del Array Subset, el cual
60
trabaja de la manera siguiente: mientras el detector no consiguiera una coincidencia, el resultado
de la función Add Array Elements sería siempre false, por ello el caso false del case structure
tiene una función de incremento para la variable del índice de extracción, con la intención de que
siga adelante en la búsqueda. Una vez conseguida la coincidencia, el resultado de la función Add
Array Elements sería true, por lo que el caso true del case structure mantenía la variable del
índice de extracción sin cambios. Esto hace que en el próximo ciclo cuando avance la trama
externa la coincidencia se pierda, activando el caso false e incrementando la variable del
buscador. En este momento se volvía a obtener una coincidencia, manteniendo sin cambios a la
variable del índice de extracción del buscador hasta el próximo ciclo, donde se repite este proceso
de nuevo. Esto genera una situación de coincidencia y no coincidencia alternante que no permite
determinar el desfasaje original, ya que constantemente se genera un nuevo valor para el mismo
en cada ciclo.
En un intento de solucionar esta situación, pero manteniendo aún el “enganche” con la
trama externa, se implementó una relación matemática que vinculara el desfasaje obtenido en
cada detección con el introducido a la trama externa al inicio de la simulación. Luego de un
proceso de observación del comportamiento del código en ejecución, se llegó a la conclusión de
que una vez hallada la coincidencia, esta mantiene una relación constante con el número de ciclos
que se han ejecutado, y que esta constante es efectivamente el desfasaje introducido por el
usuario a la trama externa. Llegado este momento parece que el problema de conseguir el
desfasaje está resuelto, por lo que se procede a probarlo con un código más largo, en este caso el
PN-I.
Para el momento en que se realizó esta introducción el código PN no se generaba de la
manera adecuada, ya que la salida se tomaba de la adición módulo 2 y no del elemento cero del
shift register. Pero esto no es lo relevante en este caso, lo que sí lo es, es el hecho de que el
mismo es generado al mismo tiempo que se ejecuta el resto del programa, con la intención de
hacerlo cíclico. No estaba aún siendo usado como una constante almacenada de la cual se toman
las porciones deseadas. El problema es que al ser generado de esta manera, el mismo incrementa
su longitud a la par del número de ciclos de la ejecución, por lo que la función Array Subset va a
obtener un arreglo vacío en el punto de su índice de extracción, ya que el mismo se encuentra
61
adelantado un número de posiciones igual al desfasaje introducido por el usuario. Al tener un
arreglo vacío, la operación del XOR va a generar un arreglo vacío como resultado, teniendo así
que la suma de sus elementos es siempre cero, por lo que se detecta como coincidencia válida
desde el inicio de la ejecución. Esto mantiene siempre el contador del índice de extracción del
buscador constante ya que al ser siempre true, no se incrementa la variable.
En un principio esta situación debería generar un error constante, eliminando toda
posibilidad de detección válida en el proceso. Por otro lado se tiene como resultado que el
programa realiza la detección correcta del desfasaje mientras el mismo sea menor o igual a 255.
Una inspección detallada del funcionamiento del programa revela que el contador que incrementa
la variable está configurado como tipo U8, es decir unsigned byte o byte sin signo. Esto hace que
una vez llegado a 255 el siguiente número sea 0 en lugar de 256, reiniciando el índice de
extracción de la trama externa. Sucede entonces que para este nuevo inicio ya los arreglos tienen
la longitud suficiente para realizar el proceso de manera correcta hasta conseguir el desfasaje. El
problema es que debido a la velocidad de la ejecución el ojo humano no se percata de los
cambios de la variable que guarda el resultado final, pero al ejecutar el programa en modo de
debugging o depuración es claramente notable el hecho de que la misma varía constantemente.
Además, la ejecución es incorrecta porque sólo se pueden utilizar desfasajes de valores hasta 255.
Esto no fue descubierto sino hasta más adelante, ya que las primeras pruebas se hicieron para
valores de desfasaje pequeños, obtenidos mediante un generador de números aleatorios cuyo
valor de salida se encuentra entre 0 y ,1 siendo multiplicado luego por una constante de 100 y
aproximado a entero con la función Round to Nearest o redondear hacia el más cercano, por lo
que inicialmente se continuó en esta línea de trabajo, la cual se explica en los párrafos siguientes.
Luego de verificar que para el momento el programa parecía estar funcionando bien, el
paso siguiente fue el de evitar el “enganche” que fue discutido previamente entre el buscador y la
trama externa. Para esto se implementó en primera instancia un aumento de dos unidades al
índice del buscador luego de que se detectara una coincidencia. Esto introdujo errores en la
detección ya que, aunque se seguía viendo el desfasaje introducido, se hacía evidente que el
mismo no era constante. Surgió entonces la necesidad de descubrir qué valores tomaba el
desfasaje, mediante su almacenamiento en un arreglo. Para ello se introdujo dentro del caso true
62
del detector, una estructura flat sequence o secuencia plana, la cual ejecuta cada una de sus
ventanas en serie luego de que la anterior finaliza totalmente. La intención de su uso es la de
permitir guardar el valor detectado en un arreglo que aumentaría su tamaño con cada detección.
Este arreglo se generaría con una función Insert Into Array de la misma forma que ya se ha
discutido en detalle con anterioridad. Un vez más, el uso de variables de tipo U8 generaba errores
que compensaban la detección del desfasaje durante una parte de la ejecución y la
descompensaban totalmente el resto de la misma.
Aún sin detectar el problema del tipo de variable se intentó resolver la que parecía ser la
causa del error, es decir, el hecho de que el arreglo de entrada del código PN estuviera vacío en la
primera ejecución. Para esto se introdujo un retraso en la activación del buscador de manera tal
que el arreglo tuviera una longitud que permitiera su correcto procesamiento desde la primera
ejecución. El retraso se implementó con un comparador de igualdad entre el número de ciclos de
la ejecución del while loop y una constante que se fijó en un valor de 1000 (ver Figura 3.6). De
esta manera el arreglo tendría una longitud de este valor antes de iniciarse el proceso de
búsqueda. Esto resolvió el problema de la primera ejecución, evitando la detección de valores
erróneos para el desfasaje. Llegado este punto el paso siguiente fue simular la situación en la que
se presentaran cambios en el desfasaje durante la ejecución, para determinar si el buscador podría
responder a los mismos y realizar el reporte.
Figura 3.6: Implementación de la espera de 1000 ciclos
Fuente: Captura de pantalla del software LabVIEW®
63
Se procedió a la implementación de un case structure que sería activado por el usuario
mediante un control en el panel frontal. Se hace pasar a través de la estructura al conector que
incrementa la variable del índice de extracción de la trama externa, haciendo que el caso por
defecto no realizara ningún cambio y el activado por el usuario ingresara un aumento repentino
en la variable. La configuración fue entonces tal que para el caso false, es decir, mientras el
usuario no activara el pulsador, el conector de la variable entra y sale de la estructura sin sufrir
modificación alguna. El caso true por su parte, toma la variable que entra a la estructura y le
suma un número que para el momento fue una constante de 10, y arroja este resultado a la salida
para tener así un nuevo índice de extracción de manera repentina (ver Figura 3.7). En las corridas
iniciales se obtuvieron resultados satisfactorios, debido a que el generador de desfasaje inicial
aleatorio no sobrepasa el valor de 100 y al subir de 10 en 10 se pueden hacer varias detecciones
sin que se presenten problemas evidentes, ya que no se utilizaron aún valores mayores a 255.
Figura 3.7: Ambos casos de la implementación del reset de desfasaje
Fuente: Captura de pantalla del software LabVIEW®
Asumiendo hasta el momento que todo funciona como debería, se desea guardar los
resultados del desfasaje a medida que se van obteniendo, con miras a generar un arreglo que
contenga los valores de cada trayecto detectado. Para esto se implementó dentro del buscador una
función Insert Into Array de la misma manera que se ha discutido anteriormente, incrementando
el valor del índice de inserción para cada nueva detección. Para evitar posibles repeticiones
64
consecutivas del mismo valor en el arreglo se aplicó un paso previo donde se compara el valor
detectado actualmente con el anterior, de manera tal que si son iguales no se realice su escritura
en el arreglo.
La manera de realizar esta comparación es mediante el uso de la estructura flat sequence,
en la que se divide por pasos el proceso de almacenamiento del desfasaje obtenido. Primero este
se guarda en una variable para evitar trabajar con la original y ocasionarle modificaciones que
pudieran afectar el normal desempeño del buscador. Seguidamente se procede a realizar la
comparación. La variable a usar para la comparación no toma su valor sino hasta el tercer paso,
por lo que en la primera corrida la misma se encuentra vacía, dando como resultado que no son
iguales y procediendo al almacenamiento del desfasaje. En el paso siguiente el proceso de
escritura se encuentra dentro de un case structure, por lo que el mismo sólo se activa si el
resultado del paso previo es false. Para el caso true no sucede nada en absoluto. Una vez en el
caso false, se realiza la escritura en el arreglo del desfasaje detectado, y se guarda su valor en la
variable de comparación. Así, en caso de haber detecciones sucesivas del mismo valor las
comparaciones siguientes arrojarán un resultado true, evitando su escritura en el arreglo.
Es en este momento cuando se hace evidente el error de la utilización de la variable tipo
U8, ya que introduciendo varios desfasajes en el proceso de prueba de la escritura en el arreglo de
los valores detectados, se sobrepasó el límite de 255 y se obtuvo que las coincidencias
empezaban desde cero de nuevo en lugar de incrementarse a razón de 10 unidades como estaba
estipulado. Una aproximación inicial al problema incluía llevar un contador que incrementara
cada vez que el valor obtenido sobrepasara 255 para luego compensarlo al sumarle la
multiplicación de 255 por el número de veces que se sobrepasó dicho valor. Esta línea de acción
fue rápidamente abandonada ya que luego de investigar un poco más sobre el tema en la ayuda
del software diseño se procedió a realizar el cambio de tipo de variable a I32, es decir, integer o
entero de 32 bits, lo cual permite introducir números de valor hasta 231-1 o 2.147.483.647, siendo
esto mucho más de lo necesario para esta aplicación.
65
Al hacer esto la relación entre el desfasaje y el número de corridas deja de ser la que se
emplea actualmente, y se requiere mantener un contador del número de coincidencias para
compensarla. De igual forma este enfoque no fue exitoso, ya que inicialmente se pensaba que era
determinante el hecho de que no se tomaba en cuenta la espera introducida al inicio que permite
obtener arreglos no vacíos. Al incluir el efecto de esta espera en la operación matemática
igualmente no se produjo ningún resultado favorable. Una revisión detallada de la ejecución
permitió entender que a pesar de que existía esta espera interna en el buscador, la trama externa
seguía entrando vacía debido a que el uso de la nueva variable tipo I32 prevenía el reinicio de la
misma que sucedía con la de tipo U8 al volver a empezar, y por lo tanto siempre el indicador de
extracción se encontraba adelantado en relación al tamaño real del arreglo. La solución que se
encontró en su momento para esta situación fue la de englobar todo el proceso en un case
structure para generar otra espera en un nivel superior de la ejecución, dejando por fuera
evidentemente la sección de generación del código.
Para mantener las relaciones matemáticas entre la detección y el desfasaje introducido en
la trama externa, fue necesario incluir el valor de esta nueva espera en la operación del buscador.
Haciendo esto se obtiene un resultado positivo una vez transcurrido el tiempo de espera e
iniciadas las funciones del buscador. Luego de varias corridas con distintos valores se producen
dos errores vinculados entre sí. El primero de ellos es la imposibilidad de introducir valores
elevados de desfasaje, ya que el valor máximo posible está limitado por el tiempo de espera
seleccionado. A mayor espera, mayor será la longitud del arreglo y por ende se podrá utilizar
valores de desfasaje mayores sin obtener un arreglo vacío a la salida. Esto hace impráctica la
ejecución del programa ya que se debe esperar un tiempo considerable para poder utilizar todos
los valores posibles de desfasaje a la trama externa. El segundo error está vinculado de igual
manera al tiempo de espera, ya que sin importar el valor de tiempo seleccionado, se obtendrá un
arreglo vacío a la salida del buscador una vez alcanzado el doble de este tiempo.
La explicación para este hecho puede entenderse fácilmente mediante un ejemplo.
Suponiendo que la espera es de 1000 ciclos, una vez pasado este tiempo el buscador se activa
desde cero y la trama externa tiene una longitud igual al número de ciclos. Como el buscador se
desplaza al doble de la velocidad de la trama externa, en 500 ciclos (es decir, para un total de
66
1500 en ejecución) ya ha recorrido las primeras 1000 posiciones de la trama externa que está
ahora a la par del total, en 1500. En los próximos 500 ciclos, la trama externa pasará de 1500 a
2000 elementos en longitud, y debido a la velocidad del buscador, el mismo pasará de tener un
índice de 1000 a 2000. Llegado a este punto ambos tienen el mismo índice, por lo que de ahora
en adelante el buscador estará siempre posicionado más adelante que el último elemento de la
trama externa, dando como resultado un arreglo vacío y un error en la ejecución.
La manera de resolver este inconveniente es haciendo que tanto la trama externa como el
buscador sean alimentados con un código de longitud constante y de salida cíclica, es decir, que
llegado el final del mismo la salida sea de nuevo el inicio. Así, el buscador nunca encontrará un
arreglo vacío para comparar. Esta solución no es encontrada sino hasta más adelante, por lo que
se seguirá en la misma línea de acción por los momentos.
3.5. Generación y detección de multitrayectos
3.5.1. Primera aproximación
Dado el hecho de que para una parte de la corrida se obtuvieron resultados positivos, se
decidió incluir otro trayecto para intentar detectar ambos. Para ello primero se convierte la trama
de entrada binaria al formato bipolar tal como se especifica en la sección 2.3.2, por lo que en el
detector se sustituye la función XOR por la de multiplicación y se suman todos los elementos de
este nuevo arreglo, para luego dividir este resultado entre el tamaño del arreglo y compararlo con
una constante de valor 1. Esto es equivalente a la función de autocorrelación expresada en la
Ecuacion 1.5, por lo que es de esta manera como se identificará la detección de un desfasaje
válido.
67
Figura 3.8: Primer esquema de la detección por correlación
Fuente: Captura de pantalla del software LabVIEW®
Para simular la presencia de otro trayecto se utiliza la función Array Subset de la misma
manera, sólo que el índice de extracción será obtenido de la salida de una función de adición del
desfasaje del primer trayecto con una distancia configurable por el usuario. Luego se suman
ambas porciones de salida y se alimentan al buscador. Como resultado se obtiene la detección del
primer trayecto mas no del segundo, por lo que se prueba agregando una variable auxiliar en el
proceso que se encargue de almacenar el valor del índice de extracción del primer piloto durante
cada ciclo de la ejecución. Esto es realizado con la intención de obtener una relación matemática
entre el desfasaje obtenido y el siguiente a obtener. El problema de este enfoque es que se tiene
dependencia de la configuración de los datos del generador, por lo que no lo hace aplicable en un
ambiente real, donde estos parámetros son totalmente desconocidos y son de hecho los que se
desean determinar.
3.5.2. Generación de trayectos cíclicos
En la búsqueda de obtener los desfasajes introducidos por el usuario, llama la atención el
hecho de que a pesar de que las tramas involucradas se desplazan como es debido durante la
68
ejecución del programa, las mismas no son realmente cíclicas. Se tenía la idea de que lo eran ya
que al tener el generador del código PN-I continuamente produciendo datos se podría simular el
hecho de que los códigos volvieran al inicio una vez alcanzado el final, dadas las características
de ejecución que se conocen de la teoría del shift register. Una observación detallada del proceso
demostró que esto era falso, ya que por un lado no se estaba incluyendo el dígito faltante al
código para completar su longitud de 215, y por otro, sin importar qué tan larga fuera la espera
para iniciar al buscador, el mismo siempre terminaba sobrepasando a la trama externa y
generando arreglos vacios que introducían errores al correcto desempeño del programa.
Es de esta manera como surge la idea de convertir tanto las entradas como el buscador, en
elementos totalmente cíclicos que no dependieran de un inicio o final para poder operar con ellos
libremente. Esto a su vez eliminaría la necesidad de introducir tiempos de espera para el inicio
del buscador, haciendo el proyecto mucho más viable según los objetivos del mismo. Para
lograrlo se implementó el procedimiento explicado detalladamente en la sección 2.3.3, teniendo
de esta manera porciones del código del tamaño que se deseen y que, una vez llegado el final, se
tomen los valores del inicio del arreglo (ver Figura 2.4).
Esta primera versión detectaba correctamente al primer trayecto, pero la detección del
segundo dependía mucho de los valores utilizados. Esto fue debido a que la operación interna del
buscador era heredada de versiones anteriores del programa en evolución, y la misma no se
correspondía con el nuevo modo de funcionamiento cíclico. Por lo tanto, los cálculos realizados
no siempre generaban una solución correcta al momento de detectar el segundo trayecto.
Igualmente la detección del desfasaje estaba aún vinculada a la variable auxiliar que genera
dependencia del generador, por lo que esta solución seguía sin ser viable.
3.5.3. Modelo de generación, modulación y demodulación de pilotos
Buscando adecuar los pilotos utilizados al modelo de generación de CDMA, se inició una
nueva línea de trabajo paralela a la del buscador de desfasajes. En este enfoque se toma un
arreglo binario constituido únicamente de ceros y se le aplican las etapas estipuladas en el
69
estándar. La primera de ellas es la expansión espectral mediante el código Walsh específico del
piloto, el cual se compone de 64 elementos, todos ellos de valor 0. Una vez obtenido el arreglo
expandido se procede a convertir todos los ceros en unos, ya que el paso siguiente de
enmascaramiento con códigos PN requiere que se trabaje en formato bipolar. Este nuevo arreglo
se multiplica por los códigos PN-I y PN-Q de forma independiente, ambos configurados con el
mismo índice de extracción. Luego se introdujo el modulador, tomando la rama I para el coseno y
la rama Q para el seno de acuerdo a la Figura 1.8 del presente trabajo.
Es importante destacar que debido a que el piloto se compone únicamente de ceros que
son expandidos con el W0 y luego convertidos a unos, todo este proceso podría intercambiarse
por un arreglo constante compuesto únicamente de unos. El motivo por el cual se realizan los
pasos teóricos es únicamente con el fin de darle posibilidades de escalabilidad al proyecto. Este
asunto se trata con más detalle en la sección “Conclusiones y Recomendaciones”.
Para poder modular los elementos del arreglo como amplitudes del seno y coseno es
necesario extraerlos uno a uno, con la intención de ensamblarlos de nuevo en el receptor. Una
primera aproximación al problema es la de aplicar la función FIFO (first in, first out o lo que es
igual a que el primero que llega es el primero que sale) del Modulation Toolkit. Esta función
permite obtener los elementos del arreglo uno a uno para que sirvan de amplitud a las señales
analógicas. Una vez realizada la modulación, las ramas I y Q se suman para la transmisión (ver
Figura 3.9). En el lado del demodulador se multiplica esta señal recibida en dos ramas paralelas,
una por el seno y otra por el coseno, obteniendo así una señal con una componente DC que
depende de la amplitud utilizada en la transmisión. De esta manera, en el caso inicial de un solo
piloto si la amplitud del transmisor era +1 la señal tendría valores positivos, y para el caso de
amplitud -1 valores negativos. Viendo esto se aplicó un proceso de decisión muy simplificado
que determinaba mediante la obtención de la sumatoria de todos los puntos de la señal si la
misma era positiva o negativa, lo cual activaba el escenario correspondiente del case structure,
generando entonces una salida de +1 o -1 según el caso.
70
Figura 3.9: Implementación de la función FIFO en el modulador
Fuente: Captura de pantalla del software LabVIEW®
Luego, estos valores eran ensamblados de nuevo en un arreglo, pudiéndose comparar con
el enviado y observándose que se recibía adecuadamente para proceder a la detección de su
desfasaje. El problema se presentó al momento de incorporar un segundo trayecto, ya que el
mismo nunca era detectado. Una inspección detallada del problema permitió determinar que la
causa de la falla estaba en el bloque de ensamblaje del arreglo recibido, ya que el bloque de
decisión implementado sólo podría funcionar para el caso de un trayecto. Revisando de nuevo la
teoría se pudo resolver este problema aplicando una amplitud de 2 al seno y coseno del receptor,
para luego obtener el valor DC de la onda mediante la implementación de la función Basic
DC/RMS, la cual obtiene como parámetro de entrada una forma de onda y genera en una de sus
salidas el valor DC de la misma. En este valor DC estaría comprendida la suma de las amplitudes
de las señales transmitidas, pudiendo así armar un arreglo que correspondiera a la suma digital de
ambas señales, el cual pudiera ser alimentado al buscador de desfasajes.
Al implementar este cambio se tuvo un resultado mejorado aunque aún con fallas. Los
desfasajes introducidos eran detectados, pero también se obtenían muchas detecciones falsas que
no habían sido configuradas en el transmisor. Además, la velocidad de la ejecución era muy lenta
ya que la función FIFO demoraba mucho el procesamiento de los datos. Buscando optimizar
primero la velocidad de ejecución se procedió a sustituirla por una versión adaptada
específicamente para la función que tendría en el proyecto, la cual se ejecutaría dentro del
programa en lugar de buscar el sub-VI en disco duro (ver Figura 3.10). Esto mejoró un poco la
71
respuesta del software en cuanto a velocidad, pero aun faltaba resolver el problema de la
detección excesiva de desfasajes no introducidos en la transmisión.
Figura 3.10: Modificación de la función FIFO
Fuente: Captura de pantalla del software LabVIEW®
Viendo que en ambas ramas se detectaban los valores introducidos pero luego cada una
hacia sus propias detecciones extra, se partió del principio de que al compararlas sólo los
desfasajes introducidos se encontrarían simultáneamente en ambas. Se procedió entonces a
diseñar una rutina que hiciera esta verificación. Para ello se hizo uso de la función Search 1D
Array (buscar en un arreglo de una dimensión) de la siguiente manera: una vez que finalizara la
corrida completa del buscador, en el último ciclo antes de iniciar una nueva vuelta al código PN,
los arreglos de desfasajes obtenidos se guardan en variables para poder reiniciar estos arreglos sin
perder sus datos para su procesamiento. Luego del buscador se tiene un case structure con el caso
false vacío y el caso true conteniendo la subrutina que opera con estas variables. Para el momento
este caso se activa cuando ambos buscadores llegan al final del recorrido y se produce un
resultado true de una función AND entre los booleanos de reinicio de los mismos.
72
Una vez dentro del caso activo, se realiza una nueva verificación con un case structure,
donde el caso que contiene la subrutina sólo es activado si ambos arreglos no están vacíos, en
versiones posteriores el caso externo es activado directamente de esta manera, eliminando la
necesidad de la doble verificación. Es en este momento, una vez iniciada la rutina interna, donde
se produce la comparación de los arreglos mediante un for loop que tendrá un número de ciclos
de ejecución igual a la longitud de uno de los arreglos de coincidencias, obtenida mediante la
función Array Size. Dentro del for loop se tiene una función Index Array cuya entrada es el
arreglo al que se le obtuvo el tamaño para ejecutar el for loop, y el índice de extracción de
elementos se conecta al contador interno del mismo. De esta manera se obtendrán elementos
consecutivos del arreglo para cada ciclo, habilitando así la comparación con los elementos del
otro arreglo. Es aquí donde se aplica la función Search 1D Array, la cual recibe como parámetros
de entrada el arreglo correspondiente a la otra rama y el elemento recién obtenido de la función
Index Array que será buscado (ver Figura 3.11).
La salida de la función es el valor del índice en el cual se encuentra el elemento de
búsqueda, en el caso de que en efecto se encuentre en el arreglo. En caso contrario la función
devuelve un valor de -1, para indicar que no existe ningún índice que contenga ese elemento. El
paso siguiente es el de generar un arreglo con las coincidencias entre ambas ramas, por lo que se
utiliza un case structure cuya activación dependerá del booleano obtenido de la función de
comparación entre el valor obtenido de la función Search 1D Array y una constante de valor -1.
Así, en los casos en que se obtenga -1 a la salida de la función, es decir, que no se encuentre
dicho elemento en el arreglo, el case structure no realiza ninguna acción al haber configurado el
caso true vacío. Para el caso en que se produzca una detección el valor no será igual a -1,
activando así el caso false que tomará este valor y lo insertará en un arreglo que en principio está
vacío pero se llena con cada detección a medida que estas se van generando.
73
Figura 3.11: Buscador de coincidencias
Fuente: Captura de pantalla del software LabVIEW®
74
Para asegurar el correcto funcionamiento de esta función, la misma debe incluirse dentro
de una estructura flat sequence como segundo paso a ejecutar. El primer paso se realiza con la
intención de inicializar los arreglos vacíos y el contador que incrementa el índice de inserción en
cero antes de pasar a la escritura. De no hacer esto se concatenarían los resultados de cada corrida
uno tras otro en el arreglo. Al implementar esta rutina en el programa principal se observa que
esta funciona correctamente pero los resultados obtenidos siguen sin ser los esperados, ya que se
detecta un número de coincidencias entre ambas ramas mayor al configurado en el transmisor.
En este momento surge la idea de la posibilidad de distinguir entre los desfasajes
configurados y los no deseados de acuerdo a su amplitud, asumiendo que los primeros podrían
tener una amplitud notablemente mayor. Para comprobar esta teoría, y también con miras a
cumplir el objetivo de determinar la potencia de recepción, se implementó como primera
aproximación una rutina que al momento de la detección guardara el valor obtenido en la
sumatoria de los elementos del arreglo antes de ser divididos entre el período. Este valor no es
exactamente el de la potencia sino el de la suma de las amplitudes del arreglo generado por la
proyección del segmento recibido sobre el código, pero permitió tener una aproximación inicial a
las relaciones de amplitud entre una detección y otra.
Para utilizar de manera correcta los valores de potencia se debe cambiar la manera en la
cual esta es calculada. Para ello se ubica en el arreglo obtenido en el buscador luego de detectar
una coincidencia la función Square, que calcula el cuadrado de cada elemento del arreglo uno a
uno. Seguido a esto se ubica una función Add Array Elements, obteniendo a su salida la suma de
los cuadrados de los elementos. Al dividir este resultado entre el tamaño total de la ventana de
correlación se obtiene la potencia del código detectado, la cual pasará luego a conformar parte de
la potencia total del piloto al ser sumada con los trayectos cercanos, si los hubiere.
El procedimiento de almacenamiento de estas potencias generadas en cada detección en
un arreglo se realiza de la misma manera que ya se ha discutido, implementando una función
Insert Into Array con un incremento del índice de inserción para cada detección. Luego de esto se
incluyó una nueva función Index Array en la rutina de detección de coincidencias entre las ramas
75
I y Q. Inicialmente sólo se tomaron en cuenta los valores de potencia extraídos del arreglo
generado para la rama Q, los cuales eran buscados entre los elementos del arreglo generado para
la rama I, ya que el índice de extracción es el mismo que se maneja dentro del case structure.
Esto excluía a las potencias obtenidas en la rama I de la sumatoria final, pero luego se
implementó una nueva función Index Array cuyo índice de extracción se tomaba de afuera del
case structure, es decir, del índice de la rama I que estaba siendo usado en ese momento para la
comparación, de manera de obtener el valor de potencia asociado en dicha rama. Las salidas de
estas dos funciones se sumaban para obtener la adición del par de potencias obtenidas para ese
desfasaje específico. Este resultado era entonces la nueva entrada para la función de armado del
arreglo de potencias para las detecciones.
Al observar las potencias obtenidas para los desfasajes introducidos y compararlas con
aquellas de las detecciones falsas, se notó que no existía un patrón claro de diferenciación. Esto
debido a que algunas de las potencias de las detecciones falsas se encontraban dentro del rango
de valores de las obtenidas para los desfasajes introducidos. De esta manera se eliminó la teoría
de diferenciación por potencia recibida.
En este momento se enfocaron los esfuerzos en el desarrollo de un generador más
completo, que permitiese la selección del número deseado de pilotos y sus trayectos, así como las
amplitudes de cada uno de ellos. Para esto se procedió a duplicar el generador y modulador
descrito al inicio de la presente sección, y organizar estos duplicados dentro de case structures
que permitan la selección adecuada de los mismos. El primer paso es implementar un case
structure principal, el cual permitirá elegir el número de pilotos de acuerdo al caso seleccionado.
Se inicia con el caso de un piloto, teniendo dentro del case structure el generador y modulador
mencionado, en el escenario denominado “1”. Luego se desea agregar los multitrayectos de este
piloto en particular, por lo que se implementa un case structure dentro del ya creado, cuyas
opciones de selección permitirán definir el numero de trayectos extra.
Para el caso de no desear ningún trayecto, la entrada (que viene a ser la salida del
generador del piloto) atraviesa sin cambios la estructura y sale intacta hacia la salida del case
76
structure principal. En el caso de seleccionar un trayecto, se incluye otro generador y modulador
dentro de esta estructura interna, y su salida se suma a la entrada proveniente del piloto, para así
tener a la salida la suma de ambos. Esto se repite para el caso del segundo trayecto duplicando el
caso de un solo trayecto y agregando otro generador y modulador a la suma interna de la
estructura. Lo mismo sucede al momento de incluir un tercer trayecto. Tenemos entonces a la
salida del case structure principal la generación de un piloto y la posibilidad de agregarle entre
cero y tres trayectos extra. Para aumentar el número de pilotos con sus respectivos multitrayectos
se procede a duplicar el caso, asignándole el valor de “2” en el indicador del nombre del mismo,
y a agregarle otro conjunto completo de piloto y case structure interno de multitrayectos. Las
salidas de ambos case structure internos se suman, para tener a la salida de la estructura principal
una señal compuesta por todos los elementos que se seleccionen en la configuración. Este
procedimiento de duplicación, agregación y suma se repite hasta alcanzar el objetivo de seis
pilotos, con hasta tres multitrayectos cada uno, para un total de 24 trayectos posibles a ser
detectados.
Habiendo obtenido un generador completo y funcional, se retoma la línea de trabajo de la
determinación del motivo por el cual se presentan detecciones falsas. Una aproximación a este
problema fue la inclusión de filtros pasabajo luego de la recepción, en un intento por depurar aún
más los valores digitales obtenidos. Esto no produjo ninguna diferencia ya que la función de
obtención de la componente DC ofrecía los mismos resultados que el filtro. Es en este punto
donde se cambia el enfoque del problema y se elimina el proceso de modulación y demodulación
QPSK, trabajando de esta manera con datos digitales en búsqueda de la solución del por qué de la
aparición de las detecciones falsas. Esta eliminación no influye en el objetivo general del
proyecto, ya que el mismo no está enfocado en la aplicación de modulación y demodulación de
señales, sino en el diseño de un detector de desfasajes.
3.6. Procesamiento digital y representación gráfica de resultados
El primer paso para llevar a cabo el procesamiento meramente digital es el de eliminar
todas las funciones de seno y coseno existentes en el generador, así como las implementadas en el
77
receptor. Inicialmente no fue retirado del diagrama de bloques el procedimiento análogo a la
función FIFO que estaba implementado para obtener las amplitudes de las señales analógicas.
Una inspección detallada del programa en ejecución reveló que no era necesario realizar este
proceso, ya que se estaba realizando la separación y unión de elementos de manera continua, sin
tener un motivo o función específica para obtener los elementos individuales del arreglo.
Para este momento se seguían obteniendo detecciones falsas en los resultados, pero de
igual forma se decidió proceder con la elaboración de la presentación final del proyecto, con
todas las operaciones y procesamiento de datos que esto conlleva. Así, al momento de probar un
nuevo enfoque que solucionara el problema, el resto del procesamiento estaría ya desarrollado.
El paso siguiente a la obtención de todos los trayectos es el de agruparlos por radiobase.
De esta manera se tendría que los trayectos provenientes de la misma radiobase se unen en el
receptor para obtener una señal de mayor potencia. La manera de lograr esto es mediante una
serie de case structures anidados, que permitan darle el seguimiento al desfasaje obtenido hasta
llegar a la última opción posible que lo acerque más al valor fijo que puede tener una radiobase.
Llegado este punto, el valor de la potencia se suma a una variable vacía en modo lectura, y se
almacena el resultado en la misma variable en modo escritura. Así, en el caso de obtener otro
trayecto para esta radiobase, su potencia se sumará a la obtenida de la detección anterior a través
de la variable en modo lectura, y así sucesivamente para el resto de las detecciones. Este
procedimiento es el cuarto paso del flat sequence, ya que el tercero consiste en inicializar todas
sus variables en cero para evitar que corridas siguientes aumenten de manera inadecuada sus
valores.
Todas las variables involucradas en el almacenamiento de las sumas de las potencias de
los trayectos se organizan luego en un arreglo, ordenado según el desfajase fijo posible de cada
radiobase. Esto se realiza como quinto paso del la estructura flat sequence, una vez que los
valores de potencia de cada uno sean definitivos. Tal como se explicó en la sección 1.5 del
presente trabajo, hay un total de 512 posibles desfasajes para asignación a las radiobases,
separados una distancia de 64 chips. En el caso específico de este proyecto, los case structures se
78
diseñaron para agrupar 64 posibles desfasajes, separados una distancia de 512 chips. Esta
inversión de valores se hizo con la intención de demostrar la operatividad del programa sin
necesidad de realizar 512 case structures. En la sección de recomendaciones se vuelve a
mencionar con más detalle este asunto.
Una vez obtenido el arreglo de potencias de las 64 posibles radiobases se procedió a
elaborar las gráficas que reportaran de una manera visual los datos obtenidos. Se realizó una
gráfica para el paso previo, donde se tienen los multitrayectos individuales, y una para la
presentación de las radiobases definitivas. Esto fue posible mediante el uso de la función XY
Graph, la cual recibe como parámetros de entrada los arreglos correspondientes a los valores de
ambos ejes, y genera una representación gráfica de los mismos. Esta función permite elegir el
tipo de gráfico a mostrar, siendo seleccionado para este proyecto el modo bar plot o gráfico de
barras.
El arreglo de potencias de los multitrayectos tiene al arreglo de índices de extracción
como complemento a la hora de ingresarlos en los ejes de las ordenadas y las abscisas
respectivamente. Por otra parte, el arreglo de las potencias por radiobase no cuenta con un arreglo
de valores que lo complemente en el eje de las abscisas, por lo que el mismo debe ser generado e
ingresado como un constante. Para generar este arreglo se procede de la misma forma que se ha
discutido con anterioridad, realimentando un mismo arreglo en modo de escritura y lectura con la
función Insert Into Array. Para esto se aumenta el índice de inserción con una variable que
incrementa por cada ciclo y un elemento de entrada que a su vez es realimentado en un sumador
que lo incrementa en 512 unidades por ciclo. Esto se realiza en un archivo aparte para generar
luego el arreglo final de 64 elementos que van del 0 al 32256, en pasos de 512. De este arreglo se
obtiene una constante que será usada en el programa principal, para evitar su generación a cada
ciclo de ejecución. Teniendo ambos pares de arreglos se procede a generar cada una de las
gráficas de interés, ambas en modo de gráfico de barras.
79
3.7. Detección de polución de pilotos
Para la detección de la polución de pilotos se partió inicialmente de una comparación
simple con un valor umbral, con el motivo de agregarlo a la presentación para ubicar la posición
del indicador. Más adelante se optimizó su funcionamiento para adecuarlo al que es ejecutado en
realidad de acuerdo a las bases teóricas del mismo. Para realizar la aproximación inicial
simplificada se insertó en la cuarta etapa del flat sequence encargado del procesamiento de datos
finales, una estructura for loop cuyo número de ciclos sería determinado por una función Array
Size a la que se conecta el arreglo final de potencias de radiobase.
Dentro de la estructura se obtienen cada uno de los elementos del arreglo mediante el uso
de una función Index Array con el índice de extracción conectado al contador de ciclos. Estos
elementos se comparan con el valor umbral determinado y se determina si el elemento es mayor o
igual a este, la salida booleana de esta función activa un case structure. Para el caso de no ser
igual o mayor, la salida false activará un escenario que no realiza ninguna acción. En caso
contrario se activa un flat sequence de dos pasos, donde el primero incrementa un contador y el
segundo verifica si el contador es mayor o igual a 4, que es el número de portadoras fuertes a
partir del cual se considera que hay polución de pilotos. Mientras esta situación no se presente, el
indicador del panel frontal será verde y tendrá la leyenda “SITUACIÓN NORMAL”. En caso
contrario se activará de color rojo intenso con la leyenda “POLUCIÓN DE PILOTOS”. En este
momento se tienen entonces todos los elementos necesarios para el ensamblaje de la interfaz
gráfica final de la herramienta, pero primero debe resolverse el problema de las detecciones
falsas.
La versión definitiva sustituye el valor umbral fijo por un valor 10dB menor a la potencia
máxima recibida entre todas las radiobases. De esta manera se adecúa a la definición teórica de
polución de pilotos. Para hacer esto se toma el arreglo antes de entrar al for loop y se hace pasar
por la función Array Max & Min, la cual devuelve los valores máximos y mínimos del arreglo y
sus índices. Al valor máximo se le divide entre 10, y la salida se alimenta al comparador de
umbral que se encuentra dentro del for loop. De esta manera se contabilizarán únicamente
80
aquellos pilotos cuya potencia esté en el rango entre 0 y 10 dB por debajo del piloto más potente
(ver Figura 3.12).
Figura 3.12: Detector de polución
Fuente: Captura de pantalla del software LabVIEW®
3.8. Solución al problema de las detecciones falsas
Una vez obtenidas las piezas que conformarían la totalidad de los objetivos del proyecto,
fue necesario resolver el problema de las detecciones falsas para obtener así la versión final
funcional del mismo. Para esto se realizó una inspección a detalle, paso a paso, de todas las
etapas del proceso. La causa del problema fue detectada en la generación de los trayectos, ya que
a pesar de que en versiones anteriores de prueba los trayectos generados eran cíclicos, sucedía
que en estas versiones más avanzadas del software eso no sucedía. Por el contrario, las porciones
de los códigos PN de cada trayecto eran siempre fijas.
El error fue causado al momento de incluir la generación completa del trayecto con la
expansión del código Walsh, ya que en esa primera etapa se instaló un generador cíclico para el
piloto constituido únicamente de ceros, lo que generó la confusión y asunción de que los
trayectos generados eran a su vez cíclicos. Esto no era así, ya que la característica de ser cíclicos
se le confiere en la etapa de enmascaramiento con el código PN, debido a que a pesar de que la
81
entrada a enmascarar sí era cíclica, el código PN era estático. Por ser el enmascaramiento del
piloto una multiplicación del código PN por un arreglo constituido únicamente de unos, la salida
era siempre el mismo código PN estático, perdiendo así todas las características de un código
cíclico.
La solución fue incluir en todos los escenarios del case structure del generador,
incluyendo los case structure internos, la rutina explicada en la sección 2.3.3 en la cual se corre
el índice de extracción de una función Array Subset con un contador y se toman elementos del
inicio del arreglo al llegar a los elementos finales, para completar la longitud adecuada. También
se debió modificar el tamaño de la ventana de correlación, ya que por tratarse de un escáner este
tamaño debe ampliarse para una mejor detección. Al realizar una investigación en internet sobre
especificaciones técnicas de escáneres profesionales multifuncionales, se averiguó que el tamaño
de la ventana de correlación implementada en algunos de estos dispositivos es de un tamaño igual
a 1024 chips [13]. Al implementar el proceso cíclico dentro de todos los casos del generador y
aumentar el tamaño de la ventana de correlación para igualar la del escáner profesional, se obtuvo
un resultado exitoso para la detección de cualquier número de trayectos que se configurara, sin
importar la distancia entre ellos o los valores elegidos para sus desfasajes siempre y cuando los
mismos estuvieran en la primera mitad del código PN.
Al realizar pruebas en modo de depuración surgió la causa de esta situación. El problema
se presentaba debido a que precisamente por la característica del buscador de poseer el doble de
la velocidad de la señal recibida, el proceso de búsqueda culminaba en la mitad de la misma,
reiniciando el detector de manera cíclica luego de haber recorrido las 32768 posiciones del
buscador para solo las primeras 16384 posiciones de la señal. Para resolver este problema y
garantizar el funcionamiento adecuado para cualquier valor del rango de posibles desfasajes, se
implementó una solución que permitiera el recorrido completo del detector sobre las 32768
posiciones de la señal recibida. Esto se logró con una simple concatenación de dos segmentos de
código PN completos a la entrada del buscador, de esta manera el mismo hace el recorrido
completo de la señal recibida con dos periodos del código, logrando así satisfacer los casos en
que el desfasaje estuviese en la segunda mitad del rango de posibles valores para el mismo.
82
3.9. Recorrido paso a paso del funcionamiento de la herramienta
La generación de la señal comienza con la creación de pilotos cíclicos. Su cantidad,
desfasajes, amplitudes y número de multitrayectos particulares son configurados en el panel
frontal. Dependiendo de la configuración seleccionada se activarán los case structure
correspondientes para la generación de la señal a transmitir. El receptor por su parte consta de dos
detectores en paralelo, uno para los desfasajes del código PN-I y otro para los del PN-Q. Cada
uno de ellos recorre la señal recibida y detecta los desfasajes donde consigue un valor de
correlación adecuado. Se almacenan los valores de los desfasajes encontrados y sus potencias de
recepción asociadas en dos arreglos. Luego, el arreglo de desfasajes de la rama PN-I se compara
término a término con el arreglo obtenido para la rama PN-Q. Para los casos en lo que se
consigan coincidencias se almacena tanto este valor, como la suma de las potencias asociadas al
mismo en ambas ramas, en la misma posición de dos nuevos arreglos. Estos arreglos componen
las parejas de datos que se grafican en la ventana de “MULTITRAYECTOS DETECTADOS”.
Seguidamente se toma el arreglo compuesto por los desfasajes detectados y se analiza
término a término para ubicar cada uno de ellos en un desfasaje estándar, es decir, el usado por la
radiobase que lo transmitió. Paralelamente a esto, se almacena el valor de su potencia en la
variable asignada a dicha radiobase para obtener la potencia total de la misma a partir de la
sumatoria de todos sus trayectos. Esto genera un nuevo arreglo de potencias definitivas para cada
radiobase detectada, el cual junto con un arreglo constante que contiene los desfasajes estándar
para cada radiobase pasan a ser los componentes que se grafican en la ventana de
“RADIOBASES DETECTADAS”.
Durante este procedimiento los valores de todos los arreglos de interés en cada rama, así
como los utilizados para realizar las gráficas, son almacenados en una hoja de cálculo en una
ubicación del disco duro seleccionada por el usuario, para su visualización en el programa
Microsoft Excel ®. De la misma manera, ambas gráficas son exportadas en formato BMP a una
ubicación especificada por el usuario, contando además con la posibilidad de sobrescribir las
83
imágenes generadas en simulaciones previas, o guardar cada imagen con un nuevo nombre. Esto
permite el post-procesamiento de los datos obtenidos durante la ejecución de la herramienta.
3.10. Diseño de la interfaz gráfica final
Para llevar a cabo la organización de los distintos elementos que debían ser controlados u
observados por el usuario final, se implementó la estructura Tab Control en el panel frontal, la
cual permite tener una organización por pestañas de las ventanas del programa. Luego sólo es
necesario arrastrar los indicadores y controladores hacia la ventana deseada y organizarlos de
manera estética y funcional. La pestaña principal, llamada CONFIGURACIÓN DEL
TRANSMISOR, es donde se incluyen todos los controladores de los parámetros del número de
pilotos, multitrayectos por piloto y amplitudes de los mismos (ver Figura 3.13). La segunda
ventana, llamada MULTITRAYECTOS DETECTADOS, presenta la gráfica de multitrayectos
sin agrupar (ver Figura 3.14). La tercera ventana, llamada RADIOBASES DETECTADAS,
presenta la gráfica de las radiobases que fueron identificadas luego de la agrupación de los
multitrayectos (ver Figura 3.15). La cuarta ventana, llamada DATOS DE CONTROL, permite
visualizar los arreglos de detección de cada rama, así como el arreglo final compuesto de las
coincidencias entre ambos, y el arreglo de agrupación por radiobases. Es aquí donde pueden
obtenerse los datos específicos de cada uno de los gráficos mostrados en las ventanas anteriores
(ver Figura 3.16). La quinta ventana, llamada INSTRUCCIONES, contiene los pasos a seguir
para la correcta utilización de la herramienta y el análisis de los datos obtenidos (ver Figura
3.17).
84
Figura 3.13: Ventana de configuración del transmisor
Fuente: Captura de pantalla del software LabVIEW®
85
Figura 3.14: Ventana de multitrayectos detectados
Fuente: Captura de pantalla del software LabVIEW®
86
Figura 3.15: Ventana de radiobases detectadas
Fuente: Captura de pantalla del software LabVIEW®
87
Figura 3.16: Ventana de datos de control
Fuente: Captura de pantalla del software LabVIEW®
88
Figura 3.17: Ventana de instrucciones
Fuente: Captura de pantalla del software LabVIEW®
CAPÍTULO 4
RESULTADOS Y DISCUSIÓN
4.1. Caso ideal: radiobases equidistantes
Inicialmente se realizaron pruebas para el caso ideal en que las radiobases se encontraran
todas equidistantes del punto de medición. Para simular esta situación se configuraron todas con
la misma potencia, asumiendo que la recepción es igualitaria para todas. Para poder reportar el
correcto funcionamiento de la herramienta se realizaron pruebas para todos los casos que
involucra una sola radiobase, así como el caso crítico de máximo nivel de trayecto para los casos
en los que existieran dos, tres, cuatro, cinco o seis radiobases.
4.1.1. Resultados para pruebas de una radiobase
Como primera prueba a la herramienta, se simuló el caso en el que existiera una sola
radiobase. Esta situación tiene varias ramificaciones dependiendo del número de multitrayectos
utilizados. A continuación los resultados para cada uno de ellos, mostrando en las tablas todos
aquellos valores no nulos que se obtuvieron en la simulación.
4.1.1.1.
Cero multitrayectos
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
90
Número de Pilotos: 1
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 0
Esto generó como resultado los valores mostrados a continuación en la Tabla 4.1, los
cuales generaron las gráficas de las figuras 4.1 y 4.2
Tabla 4.1: Resultados para el caso 4.1.1.1
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I
POTENCIA RAMA I
DESFASAJE RAMA Q
POTENCIA RAMA Q
DESFASAJES COINCIDENTES
SUMA DE POTENCIAS
DESFASAJES RADIOBASES
POTENCIAS RADIOBASES
512
4
512
4
512
8
512
8
91
Figura 4.1: Gráfica de trayectos para el caso 4.1.1.1
Fuente: Datos generados por la herramienta
92
Figura 4.2: Gráfica de radiobases para el caso 4.1.1.1
Fuente: Datos generados por la herramienta
93
4.1.1.2.
Un multitrayecto
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 1
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 1
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 600
Esto generó como resultado los valores mostrados a continuación en la Tabla 4.2, los
cuales generaron las gráficas de las figuras 4.3 y 4.4
Tabla 4.2: Resultados para el caso 4.1.1.2
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I
POTENCIA RAMA I
DESFASAJE RAMA Q
POTENCIA RAMA Q
DESFASAJES COINCIDENTES
SUMA DE POTENCIAS
DESFASAJES RADIOBASES
POTENCIAS RADIOBASES
512
8.031
512
7.609
512
15.641
512
31.266
600
7.922
600
7.703
600
15.625 94
Figura 4.3: Gráfica de trayectos para el caso 4.1.1.2
Fuente: Datos generados por la herramienta
95
Figura 4.4: Gráfica de radiobases para el caso 4.1.1.2
Fuente: Datos generados por la herramienta
96
4.1.1.3.
Dos multitrayectos
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 1
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 2
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 600
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 415
Esto generó como resultado los valores mostrados a continuación en la Tabla 4.3, los
cuales generaron las gráficas de las figuras 4.5 y 4.6
Tabla 4.3: Resultados para el caso 4.1.1.3
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I
POTENCIA RAMA I
DESFASAJE RAMA Q
POTENCIA RAMA Q
DESFASAJES COINCIDENTES
SUMA DE POTENCIAS
DESFASAJES RADIOBASES
POTENCIAS RADIOBASES
415
12.375
415
11.406
415
23.781
512
71.125
512
12.156
512
11.5
512
23.656
600 12.25 600 11.437 600 23.687 97
Figura 4.5: Gráfica de trayectos para el caso 4.1.1.3
Fuente: Datos generados por la herramienta
98
Figura 4.6: Gráfica de radiobases para el caso 4.1.1.3
Fuente: Datos generados por la herramienta
99
4.1.1.4.
Tres multitrayectos
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 1
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 600
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 415
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 745
Esto generó como resultado los valores mostrados a continuación en la Tabla 4.4, los
cuales generaron las gráficas de las figuras 4.7 y 4.8
Tabla 4.4: Resultados para el caso 4.1.1.4
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES
SUMA DE POTENCIAS DESFASAJES RADIOBASES
POTENCIAS RADIOBASES
415
16.312
415
15.344
415
31.656
512
126.484
512
16.109
512
15.547
512
31.656
600
16.234 600
15.297 600
31.531 745 16.141 745 15.5 745 31.641 100
Figura 4.7: Gráfica de trayectos para el caso 4.1.1.4
Fuente: Datos generados por la herramienta
101
Figura 4.8: Gráfica de radiobases para el caso 4.1.1.4
Fuente: Datos generados por la herramienta
102
4.1.2. Resultados para prueba de dos radiobases
Una vez comprobado el correcto funcionamiento de la herramienta para todos los posibles
casos de una sola radiobase, se simuló el escenario en el que existieran dos. Esta situación tiene
varias ramificaciones dependiendo del número de multitrayectos utilizados. De manera de
sintetizar la presentación de los resultados se reportará a continuación únicamente el caso crítico
en el que de ambas radiobases se recibe el máximo de trayectos configurables.
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 2
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 600
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 415
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 745
Amplitud: 2V
Desfasaje: 9216
Piloto 2:
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 9301
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 9173
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 9267
Esto generó como resultado los valores mostrados a continuación en la Tabla 4.5, los
cuales generaron las gráficas de las figuras 4.9 y 4.10
103
Tabla 4.5: Resultados para el caso 4.1.2
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I 415
512
600
745
9173
POTENCIA RAMA I 35.25 34.562 34.437 34.594 31.625
DESFASAJE RAMA Q 415
512
600
745
9173
POTENCIA RAMA Q 28.75 29.812 29.531 31.234 30.437
DESFASAJES COINCIDENTES 415
512
600
745
9173
SUMA DE POTENCIAS 64
64.375 63.969 65.828 62.062
DESFASAJES RADIOBASES 512
9216
POTENCIAS RADIOBASES 258.172
252.953 9216 32.125 9216 30.219 9216 62.344 9267 9301
32.812 32.656
9267 9301
31.453 31.625
9267 9301
64.266 64.281
104
Figura 4.9: Gráfica de trayectos para el caso 4.1.2
Fuente: Datos generados por la herramienta
105
Figura 4.10: Gráfica de radiobases para el caso 4.1.2
Fuente: Datos generados por la herramienta
106
4.1.3. Resultados para prueba de tres radiobases
Una vez comprobado el correcto funcionamiento de la herramienta para todos los posibles
casos de dos radiobases de las cuales se reciben tres multitrayectos para cada una, se simuló el
escenario en el que existieran tres. De nuevo, esta situación tiene varias ramificaciones
dependiendo del número de multitrayectos utilizados, por lo que a manera de síntesis la
presentación de los resultados se reportará a continuación únicamente el caso crítico en el que de
las tres radiobases se recibe el máximo de trayectos configurables.
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 3
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 600
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 415
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 745
Amplitud: 2V
Desfasaje: 9216
Piloto 2:
Número de Multitrayectos: 3
Piloto 3:
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 9301
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 9173
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 9267
Amplitud: 2V
Desfasaje: 4096
Número de Multitrayectos: 3
107
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 4100
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 4120
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 4000
Esto generó como resultado los valores mostrados a continuación en las Tablas 4.6 y 4.7,
los cuales generaron las gráficas de las figuras 4.11 y 4.12
Tabla 4.6: Resultados para el caso 4.1.3, primera mitad
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q
DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 415
512
600
745
4000
54.484 52.469 52.375 52.937 45.547
415
512
600
745
4000
44.969 46.672 46.437 47.734 49.875
415
512
600
745
4000
99.453 99.141 98.812 100.672 95.422
512
4096
398.078
380.953 4096 45.219 4096 50.062 4096 95.281 Tabla 4.7: Resultados para el caso 4.1.3, segunda mitad
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I
9173
9216 9267
9301 POTENCIA RAMA I
46.828 47.875 47.625 47.078 DESFASAJE RAMA Q
9173
9216 9267
9301 POTENCIA RAMA Q
45.812 45.406 47.375 47.578 DESFASAJES COINCIDENTES
9173
9216 9267
9301 SUMA DE POTENCIAS
92.641 93.281
95
94.656 DESFASAJES RADIOBASES
9216
POTENCIAS RADIOBASES
375.578
4100 4120
45.312 45.328
4100 4120
50.094 49.516
4100 4120
95.406 94.844
108
Figura 4.11: Gráfica de trayectos para el caso 4.1.3
Fuente: Datos generados por la herramienta
109
Figura 4.12: Gráfica de radiobases para el caso 4.1.3
Fuente: Datos generados por la herramienta
110
4.1.4. Resultados para prueba de cuatro radiobases
Una vez más, al comprobar el correcto funcionamiento de la herramienta para todos los
posibles casos de tres radiobases de las cuales se reciben tres multitrayectos para cada una, se
simuló el escenario en el que existieran cuatro. De nuevo, esta situación tiene varias
ramificaciones dependiendo del número de multitrayectos utilizados, por lo que a manera de
síntesis la presentación de los resultados se reportará a continuación únicamente el caso crítico en
el que de las cuatro radiobases se recibe el máximo de trayectos configurables.
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 4
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 600
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 415
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 745
Amplitud: 2V
Desfasaje: 9216
Piloto 2:
Número de Multitrayectos: 3
Piloto 3:
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 9301
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 9173
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 9267
Amplitud: 2V
Desfasaje: 4096
Número de Multitrayectos: 3
111
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 4100
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 4120
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 4000
Amplitud: 2V
Desfasaje: 29184
Piloto 4:
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 29196
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 29116
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 29083
Esto generó como resultado los valores mostrados a continuación en las Tabla 4.8 y 4.9,
los cuales generaron las gráficas de las figuras 4.13 y 4.14
Tabla 4.8: Resultados para el caso 4.1.4, primera mitad
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 415
512
600
745
4000 4096 4100 4120
70.656 69.234 68.75 68.719 62.297 61.625 61.937 62.156
415
512
600
745
4000 4096 4100 4120
61.531 64.5 63.609 64.094 65.297 65.469 65.422 65.297
415
512
600
745
4000 4096 4100 4120
132.19 133.73 132.36 132.81 127.59 127.09 127.36 127.45
512
4096
531.09
509.50
112
Tabla 4.9: Resultados para el caso 4.1.4, segunda mitad
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I 9173 9216 9267 9301 29083 29116 POTENCIA RAMA I 62.703 63.344 63.516 62.969 64.781 65.75 DESFASAJE RAMA Q 9173 9216 9267 9301 29083 29116 POTENCIA RAMA Q 63
62.969 64.656 64.953 59.953 60.75 DESFASAJES COINCIDENTES 9173 9216 9267 9301 29083 29116 SUMA DE POTENCIAS 125.70 126.31 128.17 127.92 124.73 126.50 DESFASAJES RADIOBASES 9216
29184
POTENCIAS RADIOBASES 508.11
507.55
29184
67 29184
60.875
29184
127.88
29196
67.516
29196
60.922
29196
128.44
113
Figura 4.13: Gráfica de trayectos para el caso 4.1.4
Fuente: Datos generados por la herramienta
114
Figura 4.14: Gráfica de radiobases para el caso 4.1.4
Fuente: Datos generados por la herramienta
115
4.1.5. Resultados para prueba de cinco radiobases
Habiendo obtenido los resultados para todos los posibles casos de cuatro radiobases de las
cuales se reciben tres multitrayectos para cada una, se simuló el escenario en el que existieran
cinco. De nuevo, esta situación tiene varias ramificaciones dependiendo del número de
multitrayectos utilizados, por lo que a manera de síntesis la presentación de los resultados se
reportará a continuación únicamente el caso crítico en el que de las cinco radiobases se recibe el
máximo de trayectos configurables.
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 5
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 600
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 415
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 745
Amplitud: 2V
Desfasaje: 9216
Piloto 2:
Número de Multitrayectos: 3
Piloto 3:
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 9301
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 9173
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 9267
Amplitud: 2V
Desfasaje: 4096
Número de Multitrayectos: 3
116
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 4100
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 4120
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 4000
Amplitud: 2V
Desfasaje: 29184
Piloto 4:
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 29196
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 29116
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 29083
Amplitud: 2V
Desfasaje: 22016
Piloto 5:
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 22101
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 21872
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 21946
Esto generó como resultado los valores mostrados a continuación en las Tabla 4.10, 4.11 y
4.12, los cuales generaron las gráficas de las figuras 4.15 y 4.16
117
Tabla 4.10: Resultados para el caso 4.1.5, primer tercio
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 415
512
600
745 4000 4096 4100 4120
84.031 82.687 82.125 82.719 79.125 78.391 78.719 78.125
415
512
600
745 4000 4096 4100 4120
78.656 81.578 79.812 80.234 85.031 85.516 85.625 86.047
415
512
600
745 4000 4096 4100 4120
162.69 164.27 161.94 162.95 164.16 163.91 164.34 164.17
512
4096
651.84
656.58
Tabla 4.11: Resultados para el caso 4.1.5, segundo tercio
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 7608 9173 9216 9267 9301 21872 21946 22016
81.406 78.25 79.859 79.703 79.984 86.75 87.156 85.531
9173 9216 9267 9301 11479 21872 21946 22016
81.594 81.625 82.484 82.953 80.687 81.359 82.359 81.969
9173 9216 9267 9301 21872 21946 22016 22101
159.84 161.48 162.19 162.94 168.11 169.52 167.50 166.30
9216
22016
646.45
671.42
Tabla 4.12: Resultados para el caso 4.1.5, tercer tercio
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES
SUMA DE POTENCIAS DESFASAJES RADIOBASES
POTENCIAS RADIOBASES
22101
83.516
22101
82.781
29083
155.47
29184
625.25
29083
79.156
29083
76.312
29116
155.36
29116
79.422
29116
75.937
29184
157.05
29184 29196 31102
80.469 80.625 81.984
29184 29196 31988
76.578 76.75 82.703
29196
157.38
118
Figura 4.15: Gráfica de trayectos para el caso 4.1.5
Fuente: Datos generados por la herramienta
119
Figura 4.16: Gráfica de radiobases para el caso 4.1.5
Fuente: Datos generados por la herramienta
120
4.1.6. Resultados para prueba de seis radiobases
Para finalizar, se simuló el escenario en el que existieran seis radiobases. De nuevo, esta
situación tiene varias ramificaciones dependiendo del número de multitrayectos utilizados, por lo
que a manera de síntesis se reportará a continuación únicamente el caso crítico en el que de las
seis radiobases se recibe el máximo de trayectos configurables.
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 6
Piloto 1:
Amplitud: 2V
Desfasaje: 512
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 600
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 415
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 745
Amplitud: 2V
Desfasaje: 9216
Piloto 2:
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 9301
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 9173
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 9267
Amplitud: 2V
Desfasaje: 4096
Piloto 3:
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 4100
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 4120
121
Trayecto N° 3:
Piloto 4:
Amplitud: 2V
Desfasaje: 4000
Amplitud: 2V
Desfasaje: 29184
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 29196
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 29116
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 29083
Amplitud: 2V
Desfasaje: 22016
Piloto 5:
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 22101
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 21872
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 21946
Amplitud: 2V
Desfasaje: 22016
Piloto 6:
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 2V
Desfasaje: 22101
Trayecto N° 2:
Amplitud: 2V
Desfasaje: 21872
Trayecto N° 3:
Amplitud: 2V
Desfasaje: 21946
Esto generó como resultado los valores mostrados a continuación en las Tablas 4.13, 4.14,
4.15 y 4.16, los cuales generaron las gráficas de las figuras 4.17 y 4.18
122
Tabla 4.13: Resultados para el caso 4.1.6, primer cuarto
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 415
512
600
745
2063 3407 102.81 99.36 99.58 99.13 93.66 98.03 415
512
600
745
1214 4000 92.56 94.27 92.80 93.55 104.69 101.31 415
512
600
745
4000 4096 195.38 193.63 192.38 192.67 194.52 194.19 512
4096
774.05
777.92
4000 4096
93.20 93.11
4096 4100
101.08 101.23
4100 4120
194.53 194.69
Tabla 4.14: Resultados para el caso 4.1.6, segundo cuarto
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I 4100 4120 7608 9173 9216 9267 9301
POTENCIA RAMA I 93.30 93.14 98.58 94.48 94.61 95.09 96.30
DESFASAJE RAMA Q 4120 6500 9173 9216 9267 9301 9974
POTENCIA RAMA Q 101.55 99.28 100.30 99.95 100.41 100.73 103.64
DESFASAJES COINCIDENTES 9173 9216 9267 9301 16279 16308 16384
SUMA DE POTENCIAS 194.78 194.56 195.50 197.03 187.47 187.25 188.83
DESFASAJES RADIOBASES 9216
16384
POTENCIAS RADIOBASES 781.88
750.63
10686
96.55
10715
100.55
16429
187.08
Tabla 4.15: Resultados para el caso 4.1.6, tercer cuarto
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 11477
98.39
11479
97.48
21872
200.91
22016
801.00
12066
101.59
12574
96.14
21946
200.64
14864
91.23
14183
99.17
22016
200.84
16279
96.47
16279
91.00
22101
198.61
16308
95.52
16308
91.73
29083
188.28
29184
757.61
16384 95.03 16384 93.80 29116 188.08 16429
96.25
16429
90.83
29184
190.27
21547
102.14
21601
99.17
29196
190.98
123
Tabla 4.16: Resultados para el caso 4.1.6, último cuarto
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I 21872 21946 22016 22101
POTENCIA RAMA I 103.19 101.81 102.27 99.27
DESFASAJE RAMA Q 21872 21946 22016 22101
POTENCIA RAMA Q 97.72 98.83 98.58 99.34
DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 24379
98.13
27703
95.55
24481 99.52 29083 93.25 29083 95.03 29116 92.53 29116
95.55
29184
92.39
29184
97.88
29196
92.55
124
Figura 4.17: Gráfica de trayectos para el caso 4.1.6
Fuente: Datos generados por la herramienta
125
Figura 4.18: Gráfica de radiobases para el caso 4.1.6
Fuente: Datos generados por la herramienta
126
4.2. Caso no ideal: radiobases a diferentes distancias
Para simular el efecto de recibir las señales provenientes de radiobases que están a
diferentes distancias, se modifica la amplitud de la transmisión para obtener pilotos de diferentes
potencias en el receptor. Se realizaron pruebas para todos los casos, pero a manera de síntesis se
muestra a continuación la más representativa, es decir, para el caso de tener las seis radiobases
activas y recibir el máximo de multitrayectos de cada una de ellas.
Para realizar esta prueba se configuró el transmisor con los siguientes parámetros:
Número de Pilotos: 6
Piloto 1:
Amplitud: 1,3V Desfasaje: 512
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 1,3V Desfasaje: 600
Trayecto N° 2:
Amplitud: 1,3V Desfasaje: 415
Trayecto N° 3:
Amplitud: 1,3V Desfasaje: 745
Piloto 2:
Amplitud: 1,8V Desfasaje: 9216
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 1,8V Desfasaje: 9301
Trayecto N° 2:
Amplitud: 1,8V Desfasaje: 9173
Trayecto N° 3:
Amplitud: 1,8V Desfasaje: 9267
Piloto 3:
Amplitud: 1,5V Desfasaje: 4096
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 1,5V Desfasaje: 4100
127
Trayecto N° 2:
Amplitud: 1,5V Desfasaje: 4120
Trayecto N° 3:
Amplitud: 1,5V Desfasaje: 4000
Piloto 4:
Amplitud: 1,9V Desfasaje: 29184
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 1,9V Desfasaje: 29196
Trayecto N° 2:
Amplitud: 1,9V Desfasaje: 29116
Trayecto N° 3:
Amplitud: 1,9V Desfasaje: 29083
Piloto 5:
Amplitud: 1,4V Desfasaje: 22016
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 1,4V Desfasaje: 22101
Trayecto N° 2:
Amplitud: 1,4V Desfasaje: 21872
Trayecto N° 3:
Amplitud: 1,4V Desfasaje: 21946
Piloto 6:
Amplitud: 1,6V Desfasaje: 22016
Número de Multitrayectos: 3
Trayecto N° 1:
Amplitud: 1,6V Desfasaje: 22101
Trayecto N° 2:
Amplitud: 1,6V Desfasaje: 21872
Trayecto N° 3:
Amplitud: 1,6V Desfasaje: 21946
Esto generó como resultado los valores mostrados a continuación en las Tablas 4.17, 4.18
y 4.19, los cuales generaron las gráficas de las figuras 4.19 y 4.20
128
Tabla 4.17: Resultados para el caso 4.2, primer tercio
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 415
512
600
745
2063 4000 65.21 63.15 63.19 63.01 59.84 59.81 415
512
600
745
4000 4096 59.71 60.80 59.56 60.17 63.96 63.70 415
512
600
745
4000 4096 124.92 123.95 122.74 123.17 123.78 123.54 512
4096
494.78
494.97
4096 4100
59.83 59.97
4100 4120
63.78 63.96
4100 4120
123.75 123.90
Tabla 4.18: Resultados para el caso 4.2, segundo tercio
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 4120 9173 9216 9267 9301
59.94 60.58 60.66 61.00 61.70
9173 9216 9267 9301 16279
63.60 63.44 63.69 63.87 57.80
9173 9216 9267 9301 16279
124.18 124.10 124.68 125.57 119.44
9216
16384
498.54
478.93
16279 61.65 16308 58.29 16308 119.44 16308
61.16
16384
59.97
16384
120.64
16384
60.67
16429
58.03
16429
119.40
Tabla 4.19: Resultados para el caso 4.2, último tercio
Fuente: Datos generados por la herramienta
DESFASAJE RAMA I POTENCIA RAMA I DESFASAJE RAMA Q POTENCIA RAMA Q DESFASAJES COINCIDENTES SUMA DE POTENCIAS DESFASAJES RADIOBASES POTENCIAS RADIOBASES 16429
61.37
21872
62.47
21872
128.19
22016
511.50
21872
65.72
21946
63.13
21946
128.00
21946
64.87
22016
63.34
22016
128.44
22016
65.11
22101
63.61
22101
126.87
22101
63.26
29083
59.34
29083
120.70
29184
486.17
29083 61.37 29116 58.91 29116 120.81 29116 61.90 29184 58.72 29184 122.12 29184 29196
63.40 63.82
29196
58.72
29196
122.54
129
Figura 4.19: Gráfica de trayectos para el caso 4.2
Fuente: Datos generados por la herramienta
130
Figura 4.20: Gráfica de radiobases para el caso 4.2
Fuente: Datos generados por la herramienta
131
4.3. Análisis de resultados y limitaciones del proyecto
En primera instancia se aprecia como en el caso ideal de un solo piloto sin multitrayectos
ilustrado en la sección 4.1.1.1, la amplitud de transmisión es recibida en cada una de las ramas
como potencia, para luego ser sumada en el trayecto y reportada como radiobase. Esto evidencia
el buen funcionamiento de la herramienta en cuanto a la correcta detección de los valores
transmitidos. Partiendo de este resultado se evalúan los siguientes casos en función de su
similitud al caso ideal.
En líneas generales, para el caso ideal de radiobases equidistantes se nota que a medida
que se incrementan los trayectos transmitidos, los mismos se reciben con mucha más potencia de
lo esperado. Tomando el resultado obtenido en la sección 4.1.1.4, donde se evalúa una sola
radiobase con el máximo de multitrayectos, se tiene que en cada rama se reciben potencias con
valores entre 15,29W y 16,31W. Esto da una potencia promedio de recepción para cada trayecto
de 15,82W. Habiendo transmitido 4 trayectos en total, con un valor de amplitud de 2V para cada
uno, es de esperarse que se reciba una potencia total de 16W al momento de hacer la detección.
Igualmente, en la sección 4.1.6 se transmiten 24 trayectos en total, por lo que en el caso de
estudio de un escenario ideal la potencia recibida en cada rama debería ser de 96W, tomando en
cuenta la amplitud de 2V al momento de la transmisión. En lugar de eso se tiene que el promedio
de todas las detecciones tomando en cuenta ambas ramas es de 97,23W. Al analizar en detalle las
causas de estos fenómenos, se tiene que los mismos son ocasionados por dos razones. La primera
de ellas es que a pesar de que el código entero cumple la condición de balance de sus elementos,
esto no necesariamente sucede en una ventana de correlación de posición aleatoria. Por lo tanto,
puede darse el caso de que para algunos trayectos la porción del código que se toma tiene mayor
número de unos que de ceros, representando esto un aumento en la potencia promedio de
recepción. De igual manera sucede en los casos en que la potencia recibida es menor de la
esperada, sólo que la predominancia de elementos en la ventana de correlación en esta situación
es del número de ceros.
132
La segunda causa de este fenómeno se le atribuye a la autointerferencia del código, ya que
a pesar de que el mismo tiene baja autocorrelación con versiones desplazadas de sí mismo, esto
no es necesariamente cierto para el caso de una sumatoria de señales. En este caso los valores de
autocorrelación de los códigos se pueden ver afectados en relación a los obtenidos para un único
código debido a las contribuciones de cada uno.
Otro resultado de interés es el obtenido para la sección 4.2, donde se simula un ambiente
en el que las radiobases se encuentran a diferentes distancias del punto de recepción y por ende se
detectan con distinta potencia. Se observa que los resultados de ambas ramas tienen todos
aproximadamente los mismos valores de potencia, sin importar la amplitud que se haya
configurado para cada una de las detecciones en el transmisor, lo cual contradice los resultados
esperados para este caso. La sumatoria de los valores de amplitud introducidos para cada
radiobase produce un total teórico de potencia de recepción de aproximadamente 60W por cada
rama, mientras que la potencia total recibida tiene un promedio de 61,69W. Este aumento es
causado por los mismos factores explicados para el caso anterior, es decir, por la
autointerferencia y el desbalance del código en la ventana de correlación. Es decir que para cada
detección el programa toma la potencia total recibida como la potencia del código, haciendo que
para todos los códigos se obtenga un valor promedio cercano entre uno y otro.
Con esto se evidencia que a pesar de que el software realiza la detección inequívoca de
todos los desfasajes introducidos en la transmisión, es incapaz de discernir entre la potencia total
recibida y la potencia individual de cada código. La causa de esta imposibilidad está en la
necesidad de implementar un algoritmo de filtrado de la señal, el cual permita separar por
completo la señal detectada en una coincidencia, del resto de la sumatoria total de la
transmisión[14]. Dicho algoritmo no se encuentra descrito en el estándar IS-95, siendo este
entonces propietario de cada fabricante de móviles o escáneres de señales DS-CDMA. Esta viene
a ser entonces la limitante de la herramienta.
CONCLUSIONES Y RECOMENDACIONES
En el presente proyecto de grado se comprobó inicialmente el procedimiento de
generación de códigos Walsh, así como los distintos protocolos de prueba de ortogonalidad de los
mismos, obteniendo como resultado la matriz descrita en el estándar IS-95, lo cual verifica su
validez. Igualmente se comprobó el procedimiento de generación de los códigos de ruido
pseudoaleatorio en fase y cuadratura por medio de registros de corrimiento. Se llevaron a cabo
los protocolos de prueba que garantizan su pseudoaleatoriedad, tales como la propiedad del
balance y la propiedad de la autocorrelación, obteniéndose que los mismos fueron generados
correctamente y de acuerdo al estándar.
Igualmente se comprobó que el proceso de detección de desfasajes de los códigos
pseudoaleatorios en fase y cuadratura para el canal piloto de un sistema DS-CDMA se basa en el
empleo de la propiedad de autocorrelación. Esto generó la correcta obtención de dichos
desfasajes, los cuales son propios para cada radiobase.
En general, la función principal de la herramienta de realizar la detección de la presencia
de radiobases de tecnología celular DS-CDMA y su posterior identificación de acuerdo al
desfasaje aplicado a su código de enmascaramiento fue alcanzado de manera exitosa. Así mismo,
pudo obtenerse una medición de la potencia total de recepción, mas no de la individual de cada
desfasaje por carecer de un algoritmo de filtraje de señales digitales.
Así mismo, se comprobó también el procedimiento para la determinación de la existencia
del fenómeno de polución de pilotos en el punto de estudio. Paralelamente a esto se cumplió
también el objetivo de diseñar un algoritmo que unificó los diversos trayectos detectados que
provenían de la misma radiobase, sumando sus potencias de recepción.
La generación de las señales emitidas por el transmisor se adecúa al estándar IS-95, al
haber seguido sus procedimientos al momento de elaborar las rutinas que las producen. Esto hace
factible el uso de la herramienta en casos reales de medición de parámetros en ambientes
134
urbanos. Para esto, se hará necesario implementar hardware de detección de señales de radio que
incluya componentes de demodulación y antenas que permitan la recepción y tratamiento de
señales a la frecuencia de transmisión de la tecnología DS-CDMA. Igualmente, se deberá adecuar
el algoritmo de unificación de trayectos al caso real de 512 posibles desfasajes con separación de
64 chips entre ellos, ya que en la herramienta se implementó el caso inverso, tal como fue
explicado en el Capítulo 3.
Con la intención de expandir las funcionalidades de la herramienta se recomienda el
desarrollo e inclusión del algoritmo de filtraje mencionado con anterioridad para lograr la
determinación de las potencias individuales de recepción de cada uno de los desfasajes
detectados. Así mismo, se recomienda también la inclusión de un módulo de GPS, ya que se hace
necesaria la sincronización de la marca de tiempo para la correcta detección de los desfasajes.
135
REFERENCIAS BIBLIOGRÁFICAS
[1] Schulze H. y Lüders C., “Theory and Applications of OFDM and CDMA”, John Wiley
& Sons Ltd, West Sussex (2005)
[2] Yang, S., “CDMA RF System Engineering”, Artech House, Massachusetts (1998)
[3] Sklar, B., “Digital Communications: Fundamentals and Applications”, Prentice-Hall,
Nueva Jersey (2001)
[4] Mandyam G. y Lai J., “Third-Generation CDMA Systems for Enhanced Data
Services”, Elsevier Science, Florida (2002)
[5] Ipatov, V., “Spread Spectrum and CDMA: Principles and Applications”, John Wiley &
Sons Ltd, West Sussex (2005)
[6] TIA/EIA-95-B, “Mobile Station-Base Station Compatibility Standard for Dual-Mode
Spread Spectrum Systems”, (1998)
[7] Byeong Gi, L. y Byoung-Hoon K., “Scrambling Techniques for CDMA
Communications”, Kluwer Academic Publishers, Boston (2002)
[8] Anderson J. y Svensson A., “Coded Modulation Systems”, Kluwer Academic
Publishers, Boston (2002)
[9] Rosenberg, A. y Kemp S., “CDMA Capacity and Quality Optimization”, McGrawHill, Nueva York (2004)
[10]
Walkowski,
B.,
Identifying
the
Culprits.
Disponible
en
Internet:
http://connectedplanetonline.com/wireless/mag/wireless_identifying_culprits/, consultado el 17
de Septiembre de 2010
[11] Sharma, Prateek. 2009. Impact of Pilot Channel Pollution in CDMA Systems.
Disponible en Internet: http://www.slideshare.net/thatsprateek/impact-of-pilot-channel-pollution,
consultado el 18 de Septiembre de 2010
[12] Proakis, J., “Digital Communications”. McGraw-Hill, Nueva York (1995)
136
[13] Berkeley Varitronics Systems, Dual Channel PN Scanner. Disponible en Internet:
http://www.bvsystems.com/Products/CDMA/Condor/Condor.pdf consultado el 18 de Septiembre
de 2010
[14] Lenardi, M. y Slock, D., “A Rake Receiver with Intracell Interference Cancellation
for a DS-CDMA Synchronous Downlink with Orthogonal Codes”, Vehicular Technology
Conference Proceedings, Vol. 1, Mayo 2000, pp. 430-434
137
APÉNDICES
138
APÉNDICE A:
Diagrama de bloques de las etapas del sistema
139
Ilustración 1.- Diagrama de bloques del generador de pilotos expandidos por el código Walsh
cero y convertidos a formato bipolar
140
Ilustración 2.- Diagrama de bloques del enmascarador cíclico del código PN
141
Ilustración 3.- Diagrama de bloques del case structure interno de selección de multitrayectos
142
Ilustración 4.- Diagrama de bloques del almacenador de coincidencias por cada rama
143
Ilustración 5.- Diagrama de bloques del detector de coincidencias entre las ramas I y Q
144
Ilustración 6.- Diagrama de bloques del detector de polución de pilotos
145
Ilustración 7.- Diagrama de bloques de la rutina de exportación de los datos a hoja de cálculo
146
Ilustración 8.- Diagrama de bloques del proceso de elaboración y exportación de la gráfica de
multitrayectos
Ilustración 9.- Diagrama de bloques del proceso de elaboración y exportación de la gráfica de
radiobases
147
Ilustración 10.- Diagrama de bloques de las opciones del usuario al finalizar la captura
Descargar