scieee AI-readable full text Open interactive document viewer

Digitalizadores basados en radio cognitiva para aplicaciones IoT/5G: Etapa transmisora

Varela Ferrando, Raúl

Full text

Facultad de física Universidad de Sevilla Trabajo de Fin de Grado (Grado en Física) Digitalizadores basados en radio cognitiva para aplicaciones IoT/5G: Etapa transmisora Autor: Raúl Varela Ferrando Tutores: Luis Alejandro Camuñas Mesa y Jose Manuel de la Rosa Utrera 17/11/2021 Agradecimientos En agradecimiento a mis padres, a mi familia y a todo aquél que estuvo ahí cuando faltaban las fuerzas y ahogaba la presión. Especial mención a mis tutores, Luis Alejandro Camuñas Mesa y Jose Manuel de la Rosa Utrera, por ayudarme a subir este último escalón. Mi presente es vuestro mérito, y mejorarlo mi responsabilidad. Índice 1. Introducción 1 2. Fundamentos teóricos 2 2.1. Modulacióndeunaonda................................. 2 2.2. Sistema SDR (ADALM-PLUTO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3. Transmisores. Tipos de transmisores. . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.1. Transmisor de banda lateral única (“Single-Sideband”) . . . . . . . . . . . . 8 2.3.2. Transmisor de conversión directa. . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.3. Transmisores Superheterodinos . . . . . . . . . . . . . . . . . . . . . . . . . 11 3. Implementación del sistema SDR en MATLAB. 11 3.1. Transmisor ADALM-PLUTO de modulación QPSK . . . . . . . . . . . . . . . . . 20 3.2. Receptor ADALM-PLUTO de modulación QPSK . . . . . . . . . . . . . . . . . . . 22 4. Implementación del receptor en Universal Radio Hacker 25 5. Resultados 26 5.1. Estudio del espectro a través del software Universal Radio Hacker . . . . . . . . . . 26 5.2. Estudio de la variación de los parámetros en el entorno SIMULINK de MATLAB . 30 6. Conclusiones 41 A. Apéndice 42 A.1. Código de inicialización del transmisor . . . . . . . . . . . . . . . . . . . . . . . . . 42 A.2. Código de inicialización del receptor . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Bibliografía 47 4 1. Introducción A día de hoy, uno de los problemas más significativos asociado a los sistemas de comunicaciones inalámbricos es el deficiente aprovechamiento del espectro electromagnético debido a las políticas de asignación fija de las bandas de frecuencia, lo que nos lleva a tener ciertas bandas totalmente congestinadas y muchas otras parcial o totalmente inutilizadas la mayor parte del tiempo. Sumando a esto la gran demanda que sufre el sector en estos últimos años debido a la digitalización de nuestro entorno, y el éxito de los servicios de las bandas de acceso libre, se ha motivado a desarrollar novedosas tecnologías que posibilitan el uso del espectro de forma inteligente, coordinada y oportunista sin perjudicar a los servicios restantes. La radio cognitiva (RC) es una tecnología basada en cambiar la forma en que el espectro es utilizado actualmente, a la vez que incrementa su disponibilidad para otros sistemas de comunicaciones inalámbricos. Podemos interpretarla de distintas maneras, en un inicio se pensó como una ampliación del Radio Definido por Software (SDR), aunque después observaron que podía basarse en aplicaciones del SDR. Estas interpretaciones no son erróneas ya que partiendo del SDR podemos evolucionarla a una Radio Cognitiva, y por tanto basarse en sus aplicaciones. Esta idea se hizo pública oficialmente por primera vez en el artículo Joseph Mitola III y Gerald Q. Maguire, Jr. donde la definieron como “el punto en el cual las PDAs inalámbricas y las redes relacionadas son, en términos computacionales, lo suficientemente inteligentes con respecto a los recursos de radio y las correspondientes comunicaciones de terminal a terminal como para detectar las necesidades eventuales de comunicación del ususario como una función del contexto de uso y proporcionarle los recursos de radio y servicios inalámbricos más adecuados a sus necesidades”, donde el concep- to PDA hace referencia a un asistente digital personal, es decir, teléfonos móviles u ordenadores personales por ejemplo. Como hemos mencionado anteriormente, una forma de implementar este paradigma sería a través del concepto SDR. Este concepto se resume en un sistema de radiocomunicaciones donde los componentes que antes eran normalmente implementados en hardware, como filtros, moduladores/demoduladores y demás; son ahora implementados vía software a través de computadoras u otros dispositivos. Dentro de la SDR tenemos que al utilizar procesadores no especializados para gran parte del procesamiento de la señal, valga la redundancia, en lugar de un hardware de propósito específico, podemos cambiar los protocolos de transmisión y emisión de nuestras señales en tiempo real a través de los parámetros definidos en nuestro software. Un ejemplo de sistema de SDR serían las placas ADALM-PLUTO del fabricante Analog Devices, ilustradas en la Fig. 1, con las cuáles se realizarán los experimentos del proyecto. 1 Figura 1: Placa ADALM-PLUTO de SDR. Usando dos de estas placas ADALM-PLUTO, Javier Soler Medina y yo en colaboración, implementaremos un sistema de comunicaciones inalámbrico y demostraremos la capacidad de ajustar los parámetros de transmisión y recepción usando un esquema de modulación QPSK, el cual describiremos en detalle a continuación. 2. Fundamentos teóricos 2.1. Modulación de una onda La modulación engloba todo el conjunto de procesos utilizados con el fin de introducir información en una onda portadora, lo que nos permite poder transmitir más información simultáneamente a la vez que nos protegemos contra posibles ruidos e interferencias. En resumen, consiste en hacer que un parámetro de la onda portadora varíe de acuerdo a las propiedades de la señal moduladora, siendo esta última la que contiene la información que queremos transmitir, obteniendo como resultado una onda modulada que es la que transmitimos. Figura 2: Ejemplos de modulacion en amplitud (AM) y en frecuencia (FM). Dentro del concepto de modulacion, podemos encontrar varios tipos, como ya hemos podido intuir a través de la Fig. 2. A continuación enumeraremos algunos de estos tipos: 1. Modulación en amplitud: Consiste en cambiar la amplitud de la onda portadora en función 2 de las variaciones de la señal moduladora, como se muestra en la Fig. 2. 2. Modulación en frecuencia: Consiste en cambiar la frecuencia de la onda portadora en función de las variaciones de la señal moduladora, como también se muestra en la Fig. 2. 3. Modulación en fase: Es un tipo de modulación que se caracteriza porque la variación de la fase de la onda portadora es directamente proporcional a la señal moduladora. Dentro de estos tipos, nos centraremos en un subtipo de modulación en fase llamado modulación por desplazamiento de fase o PSK. Esta es una forma de modulacion angular que consiste en hacer variar la fase de la portadora entre un número finito de valores. La gran diferencia de este tipo de modulación comparada con la modulación en fase convencional es que en este caso la señal moduladora es digital, por lo que el número de estados es finito. Este tipo de modulación se resume en que la fase de la señal portadora representa cada símbolo de información de la señal moduladora, cuyo valor angular se elige entre un conjunto discreto de N valores posibes con la ayuda del modulador. Dado que estamos tratando señales digitales, el número de fases a tomar será potencia de dos ya que se suelen utilizar números enteros de bits. Partiendo de dos fases nos vamos encontrado los distintos tipos de modulación PSK, con dos fases sería la BPSK (Binary Phase-Shift Keying), con cuatro fases sería la QPSK (Quadrature Phase-Shift Keying), y así sucesivamente. Nosotros en este caso nos centraremos en la modulación QPSK. En este tipo de modulación tenemos que las cuatro fases equiespaciadas representan los dígitos 00, 01, 10 y 11, transmitiendo dos bits en cada fase. Este tipo de modulación nos divide la señal en dos BPSK, una en fase (I) y otra en cuadratura (Q). VQP SK (t) = I·cos(ωt) + Q·sin(ωt)(1) Donde si los datos no cambian de un periodo al siguiente, la fase de la portadora permanece inalterada. Mientras que en el caso de que cambie un bit, la portadora es desfasada 90º, y si cambian ambos bits es desfasada 180º. A través del gráfico de constelaciones (Fig. 3) podemos visualizar fácilmente los diferentes estados posibles, clasificando cada bit de la señal en uno de ellos, dependiendo del offset en fase asignado. 3 Figura 3: Gráfico de contelación para la modulación QPSK con desfase de π/4. 2.2. Sistema SDR (ADALM-PLUTO) Como hemos dicho antes, un aparato SDR básico puede estar conformado por un conversor analógico-digital seguido de algún tipo de adaptador de radiofrecuencia (RF) y capacitado para cambiar en tiempo real los parámetros de transmisión y recepción de datos. En la Fig. 4 tenemos el esquema de un equipo SDR básico, donde se pueden diferenciar tres secciones elementales: RF, FI y Banda-Base. Cada bloque cumplirá una función u otra dependiendo de si nuestro sistema se trata de un emisor o un receptor, siendo el emisor representado por la flecha que se dirige hacia la antena y el receptor por la flecha en sentido contrario. Figura 4: Esquema de un sistema SDR básico. Tomada de Implementación de Software Defined Radio en sistemas de comunicaciones actuales, Gutiérrez A. 2020, https://idus.us.es/bitstream/handle/11441/109235/ TFG-3378-GUTIERREZ\%20RIVERA.pdf?sequence=1&isAllowed=y La sección Banda-Base contiene un procesador que se encarga de tratar/extraer nuestra información, pudiendo ser una o varias señales compuestas permitiendo la transmisión/recepción simultánea de varios modos. 4 La sección FI es en la que se sitúa el filtrado, modulación/demodulación y la conversión analógicodigital o digital-analógico. Por último, la sección RF en la transmisión es la responsable de convertir la señal a nuestra frecuencia de envío, para después amplificarla y aplicarla a la antena, mientras que en la recepción primero se amplifica para después convertirla a la frecuencia intermedia, aunque en algunas aplicaciones esto último no es necesario. Como hemos mencionado anteriormente, el sistema SDR que utilizaremos en este proyecto es ADALM-PLUTO, ilustrado en la Fig. 1. Este sistema del fabricante Analog Devices es un transceptor, es decir, está formado por un transmisor y un receptor, y sus especificaciones se muestran a continuación: Cobertura RF: 325MHz - 3.8GHz Ancho de banda: 20MHz Convertidores ADC/DCA: 12 bits Interfaz USB: USB 2.0 Frecuencia de muestreo: 61.44 Mbps Velocidad de muestreo: 65.1kSps - 61.44 MSps Salida de potencia Tx: 7dBm Figura de Ruido Rx: < 3.5dBm Precisión de Modulación de Rx y Tx: -34dB Núcleo: ARM®Cortex-A9™MPCore de 667MHz Celdas lógicas FPGA: 28000 Módulos DSP: 80 DDR3L: 4GB (512MB) QSPI Flash: 256MB (32MB) 5 Figura 11: Bloque ADALM-PLUTO Radio transmitter. Figura 12: Bloque ADALM-PLUTO Radio receiver. Como se puede observar, el bloque “ADALM-PLUTO Radio transmitter” tiene una entrada, “data”, por la cuál enviaremos nuestra señal, que debe ser un vector columna de longitud fija, y una salida llamada “underflow”, la cual a través de un scope nos permite visualizar en tiempo real los samples que se han perdido en la transmisión del mensaje, mostrándonos un 1 cuando estos se están perdiendo y 0 en caso contrario. Por otra parte, el bloque “ADALM-PLUTO Radio receiver” solo consta de dos salidas,“overflow”, cuya función es la misma que la salida “underflow” del bloque transmisor, y “data”, por donde se transmiten las señales recibidas a través de la placa a los demoduladores y demás componentes. Estos bloques se comunican con la placa ADALM-PLUTO de la siguiente manera: Figura 13: Esquema de funcionamiento de los bloques. Tomada de Pluto transmitter, Mathworks®, (s.f.), https://es.mathworks.com/help/supportpkg/plutoradio/ref/plutotransmitter.html 12 Como muestra la figura, partimos de la generación de una señal en el entorno de SIMULINK, la cuál introducimos en el bloque “ADALM-PLUTO Radio Transmitter” a través del puerto de entrada, “data”. Esta señal viaja a través de la conexión USB a la placa y se transmite a través del aire con la ayuda de la antena transmisora Tx, como se muestra en la Fig. 13. Esta señal es percibida por la antena receptora Rx, la cual de nuevo a través de la conexión USB se transmite al bloque receptor permitiéndonos así decodificar nuestro mensaje en este entorno SIMULINK. La ventana de diálogo de ambos bloques es muy parecida como se muestra en las siguientes figuras: Figura 14: Ventana de diálogo del transmisor. Figura 15: Ventana de diálogo del receptor. A continuación enumeraremos los distintos parámetros que aparecen en estas ventanas de diálogo: Radio ID: Es el identificador del radio hardware especificado, es decir, el identificador de nuestra placa. Por defecto se usa “usb:0”. Center Frequency Source: Nos permite especificar el modo de elección de la frecuencia de envío, ya mencionada anteriormente. Podemos elegir entre “Dialog”, la cuál nos permite introducir el valor deseado directamente en la ventana de diálogo, o “Input Port”, la cuál nos crea una nueva entrada, permitiendo así la elección del valor deseado a través de otro bloque conectado esta. Center Frequency: Este parámetro es la frecuencia de envío utilizada en la transmisión y recepción del mensaje, siendo un valor escalar desde 70MHz hasta 6GHz. Como podemos 13 observar es un rango mayor al establecido anteriormente para la placa, esto es debido a que el soporte en este entorno nos permite configurar el ADALM-PLUTO para usar el “AD9364 firmware” ampliando así el rango de frecuencias. Gain Source: Al igual que la “Center Frequency Source”, nos permite especificar el modo de elección de nuestra ganancia con las mismas dos posibilidades, “Dialog” o “Input Port”. Gain: Es la ganancia en dB aplicada a nuestra señal. En el caso del bloque transmisor el valor de esta debe estar comprendido entre -50 y 0, dando a entender así que en la transmisión sólo nos es posible atenuar la señal, mientras que en el bloque receptor debe estar comprendido entre -4 y 50, dándonos la posibilidad de amplificar la señal en caso de que sea demasiado débil o atenuarla un poco en caso contrario. Channel Mapping: Este parámetro siempre tiene un valor especificado de 1. Baseband Sample Rate: Es el ratio de sampleo en banda-base en Hz, es decir, el ritmo al que sampleamos la señal en el rango de banda-base (bajas frecuencias). Underflow/Overflow Port: Nos permite elegir si queremos tener la salida “underflow” u “overflow” en nuestros bloque transmisor y receptor respectivamente. Output Data Type: Nos permite elegir entre int16 (16-bit), double o single. Samples per frame: Es el número de samples efectuados por frame, cuyo valor debe ser un número par entero comprendido entre 2 y 16.777216·109. Como se puede observar, estos dos últimos parámetros son exclusivos del bloque receptor. Dado que en este proyecto usaremos dos placas ADALM-PLUTO, las cuales se comunicarán entre ellas, es necesario que el parámetro “Center Frequency” tenga el mismo valor tanto en el transmisor como en el receptor, ya que determina la frecuencia central de nuestro ancho de banda, en caso de que no sea así, el receptor no percibirá al completo la señal que le enviamos desde el emisor. Otros de los bloques que vamos a utilizar en la implementación de este sistema SDR en el entorno de SIMULINK de MATLAB será el modulador y el demodulador QPSK en bandabase. Empezando por el modulador tenemos las siguientes figuras: Figura 16: Bloque de SIMULINK del modulador QPSK en bandabase. 14 Figura 17: Ventana de diálogo del modulador QPSK en bandabase. Para este bloque tenemos los siguientes parámetros: Input Type: Indica qué tipo de dígitos conforman la entrada, podemos elegir entre enteros (“Integers”) o pares de bits (“Bit”). Constellation Ordering: Determina la forma en la que el bloque nos mapea cada dígito, entero o par de bits, en el diagrama de constelaciones. Phase Offset (rad): La fase asignada al primer dígito de la constelación. Su función, como su propio nombre indica, es modular nuestra señal usando el método “quadrature phase shift keying” obteniendo como salida una representación en bandabase de nuestra señal moduladora. Podemos elegir entre dos posibilidades del parámetro “Input Type”, como hemos comentado anteriormente; la primera es que la entrada sean enteros, dandola por válida sólo si los valores son 0, 1, 2 o 3. Si a su vez elegimos la opción “Binary” del parámetro “Constellation Ordering” para una entrada m, obtenemos como salida una exponencial compleja del siguiente tipo: ej(θ+mπ 2)(2) donde θrepresenta el parámetro “Phase Offset”. En este caso el bloque acepta como entrada un vector columna o un escalar. Sin embargo, si cambiamos el parámetro “Input Type” a “Bit”, le estamos diciendo al bloque que la entrada estará formada por parejas de valores binarios (bits). En esta configuración el bloque acepta como entrada un vector columna de longitud par. Dando un valor para el “Phase Offset”, π/4 por ejemplo, que será el valor que utilizaremos en nuestros 15 experimentos, el bloque nos mapea los dígitos de la señal según elijamos “Binary” o “Gray” para el parámetro “Contellation Ordering”, como se muestra a continuación: Figura 18: Diagrama de contelaciones. Tomada de QPSK Modulator Baseband, Mathworks®, (s.f.), https://es.mathworks.com/help/comm/ref/qpskmodulatorbaseband.html Para el caso del demodulador, el bloque de SIMULINK y la ventana de diálogo son prácticamente iguales: Figura 19: Bloque de SIMULINK del demodulador QPSK en bandabase. Figura 20: Ventana de diálogo del demodulador QPSK en bandabase. Como se puede observar, en la ventana de diálogo sólo nos cambian dos parámetros con respecto al modulador, el parámetro “Input Type” es ahora “Output Type”, con el que elegimos el tipo de 16 salida que queremos obtener, enteros o parejas de bits, y el parámetro “Decision Type”, el cuál no aparecía en el modulador. Con este parámetro elegimos el algoritmo utilizado en la demodulación de la señal entre “Hard decision”, “LLR” o “Approximate LLR”. Básicamente, este bloque realiza la operación inversa del modulador, obteniendo así de nuevo una señal digital como salida. No entraremos en más detalle dado que este proyecto se enfoca en la etapa emisora del sistema. También pondremos en uso los bloques “Raised Cosine Transmit Filter” y “Raised Cosine Receive Filter” en el transmisor y en el receptor respectivamente. Ambos están representados por bloques similares, aunque no tienen la misma ventana de diálogo. Figura 21: Bloque de SIMULINK del filtro. Para el caso del filtro utilizado en el transmisor tenemos la siguiente ventana de diálogo: Figura 22: Ventana de diálogo del filtro del transmisor. Este bloque sobremuestrea y filtra nuestra señal de entrada usando un filtro “raised cosine FIR” ilustrándose en el propio bloque la forma de la señal de salida. Podemos diferenciar los siguientes parámetros: 17 Filter Shape: Especifica la forma del filtro aplicado como cuadrático (“Square Root”) o normal (“Normal”). Rolloff Factor: Determina el exceso de ancho de banda del filtro. Debe ser un número real entre 0 y 1. Filter span in symbols: Define el número de dígitos que abarca el filtro. Debe ser un número entero par y positivo. Output samples per symbol: Especifica el número de samples por cada dígito de la señal de salida (8 por defecto). Su valor debe ser entero y positivo. Linear amplitude filter gain: Establece un valor escalar positivo que se utiliza para escalar, valga la redundancia, los coeficientes del filtro. Input Processing: Especifica la manera en la que nuestro bloque procesa la señal de entrada. Se puede elegir entre “Columns as channels (frame based)” o “Elements as channels (sample based)”. Rate options: Determina el método que utilizará el bloque para sobremuestrear y filtrar nuestra señal de entrada. Podemos elegir entre “Enforce single-rate processing” o “Allow multirate processing”. Usando la opción “Normal” para el parámetro “Filter Shape”, con Rcomo “Rolloff Factor” y T como periodo, obedece la siguiente ecuación: h(t) = sin(πt/T ) πt/T · cos(πRt/T ) (1 −4R2t2/T2)(3) Mientras que si elegimos “Square root” obedecerá esta otra: h(t)=4R· cos((1 + R)πt/T) + sin((1−R)πt/T ) 4Rt/T π√T(1 −(4Rt/T)2)(4) Dado que para un filtro ideal tenemos una respuesta impulso infinita, el bloque trunca la respuesta impulso hasta un número de dígitos que se especifica en el parámetro “Filter span in symbols”, N. Este parámetro junto al “Output samples per symbol”, L, determina la longitud de la respuesta impulso. El parámetro “Rolloff factor” determina el exceso de ancho de banda de nuestro filtro, como se dijo anteriormente; para el caso de un valor de 0.5, por ejemplo, que a su vez será el que utilicemos en el experimento, nos dice que el ancho de banda de nuestro filtro será 1.5 veces mayor que la frecuencia de muestreo de nuestra señal de entrada. 18 Para el caso del filtro usado en el receptor tenemos que el bloque es exactamente igual al utilizado en el transmisor, a diferencia del nombre como se expuso anteriormente. Sin embargo la ventana de diálogo asociada a este filtro es algo diferente: Figura 23: Ventana de diálogo del filtro del receptor. Como se puede observar, la ventana de diálogo es muy parecida a la asociada al bloque usado en el transmisor pero con algunos parámetros diferentes. Los parámetros “Filter Shape”, “Rolloff Factor”, “Filter span in symbols”, “Linear amplitude filter gain”, “Input processing” y “Rate options” tienen las mismas funciones, pero además de estos, tenemos otros que no hemos definido anteriormente: Input samples per symbol: Especifica el número de samples por cada dígito de la señal de entrada (8 por defecto). Su valor debe ser entero y positivo. Decimation factor: Especifica el valor que el bloque aplicará a la señal. El valor del del parámetro “Output samples per symbol” de la señal de salida es el valor dado al parámetro “Input samples per symbol” dividido por este factor. Si el “Decimation factor” es igual a uno, sólo se aplica el filtrado y no la diezmación. Decimation offset: Especifica el offset en samples de la diezmación. Debe ser un valor entre cero y el valor del factor de diezmación menos uno. 19 3.1. Transmisor ADALM-PLUTO de modulación QPSK En la siguiente figura puede visualizarse nuestro diagrama de bloques del emisor: Figura 24: Modelo de SIMULINK del emisor (Sistema SDR). Este modelo es un ejemplo expuesto en la página web de MathWorks al que se puede acceder escribiendo “plutoradioQPSKTransmitterSimulinkExample” en la ventana de comandos de MATLAB. Hemos introducido algunos bloques como pueden ser los diagramas de constelación, para visualizar el mensaje que estamos generando, el “Time Scope” y el “Spectrum Analyzer”, para ilustrar la señal en el dominio del tiempo y de la frecuencia respectivamente, y los bloques “Constant” y “Slider Gain”, los cuales nos permiten controlar en tiempo real los valores asignados a la frecuencia central y a la ganancia de nuestro bloque transmisor del ADALM-PLUTO. Los tres primeros bloques que aparecen (“Bits Generation”, “QPSK Modulator Baseband” y “Raised Cosine Transmit Filter”) son los que nos generan, modulan y dan forma respectivamente a la onda que contiene nuestro mensaje. El bloque “Bits Generation” es un subsistema cuya estructura se muestra en la Fig. 25. Este subsistema utiliza las variables definidas en el “workspace” de MATLAB como soporte de cada frame, que contienen una serie de cien “Hello world ###” y un encabezado, esto último por motivos de sincronización. Este encabezado está formado por 26 bits, creados a partir de un código Barker de 13 bits sobremuestreado por dos con la finalidad de tener 13 símbolos QPSK (una serie de 13 bits para cada BPSK, en fase y en cuadratura). Los demás bits corresponden a nuestro mensaje, el cual no es más que una representación ASCII de “Hello world ###” donde las almohadillas representan la secuencia ‘001’, ‘002’,...,‘099’. Este código se introduce en el bloque 20 Figura 25: Subsistema “Bits Generation”. “Scrambler” para asegurarnos una distribución equilibrada de unos y ceros con la intención de dar margen al receptor dado de tiene un tiempo de recuperación (“time recovering”) asociado. La salida es modulada en banda-base por el modulador QPSK en código Gray (“Gray mapping”), el cuál viene representado en el diagrama de constelaciones de la Fig. 18, cuyo offset en fase es de π/4. Esta onda ya modulada, es sobremuestreada por el bloque “Raised Cosine Transmit Filter” con un valor para el factor roll-off de 0.5. El output rate de este bloque es aumentado hasta 400k samples por segundo con un ratio de 200k símbolos por segundo, el cual debe ser el mismo que utilicemos en el receptor. Por último, esta señal es introducida en el bloque transmisor de nuestro ADALM-PLUTO aumentando la frencuencia hasta el valor elegido para el envío con una ganancia determinada, siendo transmitida a través de la antena ‘Tx’ de nuestra placa. Para iniciar la transmisión hacemos uso del script que se muestra en el apéndice A.1. Este script genera una estructura a la que le ponemos el nombre “prmQPSKTransmitter”, que contiene los parámetros utilizados en todos los bloques de nuestro modelo. Para generar esta estructura hace llamamiento a la función “SimParams”, la cual está dividida en varias partes. En primer lugar nos encontramos con los parámetros generales de simulación, como el orden de modulación (en nuestro caso es de orden 4 ya que estamos utilizando modulación QPSK), la frecuencia de muestreo o el tiempo entre símbolos. A continuación tenemos las especificaciones de nuestros frames, donde generamos el código Barker que usaremos como encabezado de nuestro mensaje y especificamos el contenido de nuestro mensaje, el número de mensajes que contiene cada frame y el número de bits que definen cada dígito de nuestro mensaje entre otros. El apartado “Tx parameters” hace referencia a todos los parámetros necesarios para el bloque “Scrambler” y para el filtro que hemos utilizado en el modelo (Raised Cosine Transmit Filter). Justo después encontramos la parte donde generamos nuestro mensaje (“Message generation”), es decir, la secuencia ‘Hello world ###’ donde las almohadillas son tres números que van desde 000 21 (a) Espectro de frecuencias. (b) Diagrama de potencia. Figura 33: Banda de uso libre (1663MHz). (a) Espectro de frecuencias. (b) Diagrama de potencia. Figura 34: Banda de uso libre (1670MHz). En este caso vemos como al elegir bandas de frecuencia que están mayormente desocupadas, nuestra señal destaca en el espectro distinguiéndose bien del ruido, de forma que no perderemos parte de nuestro mensaje dado que apenas hay efecto de apantallamiento, aunque siempre exista un ruido residual. Estos canales corresponden a la banda de frecuencia de uso libre asignada por el gobierno la cual comprende desde 1660.5MHz hasta 1670MHz (Subdirección General de Planificación y Gestión del Espectro Radioeléctrico. Secretaría de Estado de Telecomunicaciones e Infraestructuras Digitales. Ministerio de Asuntos Económicos y Transformación Digital. Abril, 2011), y donde se puede visualizar en los diagramas a color que la señal recibida en esta banda tiene mayor potencia, esto es debido a que la banda de 915MHz aunque aparece mayormente desocupada también está destinada a usos industriales, por lo que podemos ver que el color rojo es algo más débil debido al apantallamiento con otras señales. En las siguientes figuras se muestran los espectros y los diagramas de potencia asociados a bandas 28 (a) Espectro de frecuencias. (b) Diagrama de potencia. Figura 35: KISS FM (100.3MHz). (a) Espectro de frecuencias. (b) Diagrama de potencia. Figura 36: Antena 3 HD (634MHz). de frecuencia que sí están ocupadas, concretamente a las frecuencias asignadas en Sevilla a la cadena de radio KISS FM (100.3MHz) y al canal de televisión Antena 3 HD (634MHz). Como se puede observar, aunque reconozcamos la forma de nuestra onda en el espectro de frecuencias (Fig. 35.a y 36.a), si nos fijamos en los diagramas de potencia que tenemos a la derecha (Fig. 35.b y 36.b) la señal es casi indistinguible del ruido (peor relación señal-ruido), debido a al ampantallamiento que resulta por la emisión de estas empresas en esta banda de frecuencias. En este caso parte de nuestro mensaje se está perdiendo, lo que nos llevará a errores de decodificación del mensaje que obtendremos posteriormente en MATLAB. Además, es conveniente señalar que hemos tenido que aumentar el valor de la ganancia aplicada a la señal recibida en el caso de 634MHz porque ni siquiera llegábamos a visualizar la potencia de la señal en el diagrama. 29 5.2. Estudio de la variación de los parámetros en el entorno SIMULINK de MATLAB Iniciamos la transmisión del mensaje a través del script que hemos expuesto en el apéndice A.1, y utilizando los distintos diagramas de constelaciones y los bloques “Time Scope” y “Spectrum Analyzer” observamos las propiedades de nuestra onda en las distintas etapas de nuestro transmisor. En las siguientes figuras se muestran las distintas representaciones obtenidas a través de estos bloques para una frecuencia de transmisión de 915MHz. Figura 37: Diagrama de constelaciones después del modulador QPSK (915MHz). En primer lugar tenemos el diagrama de constelaciones que como habíamos explicado anteriormente, representan los distintos dígitos posibles, esto es, 00, 01, 10 y 11 en las fases π/4, 3π/4, 5π/4 y 7π/4 respectivamente, aunque no se distingan del todo en la figura. En nuestro eje de abcisas tenemos nuestras componentes en fase y en el eje de ordenadas nuestras componentes en cuadratura, de forma que tenemos una superposición de puntos de las diferentes combinaciones de bits. No observamos ningún tipo de distorsión debido a que todavía no ha tenido lugar la transmisión a través del aire del mensaje. Tras pasar por el filtro podemos visualizar nuestra señal en el dominio de la frecuencia y del tiempo (Fig. 38 y 39). Con esta representación ya tenemos una idea de la forma de nuestra onda en el dominio de la frecuencia, esto nos servirá de guía a la hora de comparar la distorsión producida en la onda durante la transmisión y recepción de la onda. 30 Figura 38: Representación de la señal en el dominio de la frecuencia. (a) Escala normal. (b) Ampliada. Figura 39: Representación de la señal en el dominio del tiempo. Por último mostraremos los valores que nos da el puerto “underflow” para visualizar que no se está perdiendo parte de los samples que contienen el mensaje (Fig. 40). Como se puede observar, en determinadas ocasiones obtenemos el valor unidad como muestra de que en ese momento se han perdido samples del mensaje, aunque dado que en comparación con el total son muy pocos los samples perdidos podemos achacarlo a la propia electrónica del sistema. Una vez en este punto, sabemos la forma que tiene nuestra onda y que la transmisión se está realizando correctamente, por lo que iniciaremos nuestro modelo del receptor para ver las propiedades de la onda recibida y la decodificación del mensaje. A continuación ejecutamos el script que contiene los valores de las variables de simulación para el receptor, de forma que mediante la placa ADALM-PLUTO recibimos la onda y la decodificamos siguiendo el modelo anteriormente expuesto (Fig. 26), obteniendo los diagramas de coonstelaciones ilustrados en la Fig. 41. 31 Figura 40: Representación del puerto “underflow”. (a) Después del “Carrier Symchronizer” (b) Antes del demodulador QPSK Figura 41: Diagramas de constelaciones del receptor (915MHz). El primero lo obtenemos una vez se ha llevado a acabo la corrección del offset en frecuencia asociado a la transmisión como habíamos comentado anteriormente, de forma que se visualizan fácilmente los cuatro grupos asociados a cada combinación de los bits, y el segundo es justo antes de pasar por el demodulador QPSK, donde también podemos diferenciar estos grupos. Es conveniente señalar que estos gráficos van cambiando a lo largo de la realización del experimento por lo que nos ha sido dificil capturarlos en el momento que el mensaje se estaba transmitiendo y así ver los cuatro grupos perfectamente separados los unos de los otros, debido a esto el último diagrama se ve algo más difuso. 32 También podemos visualizar nuestra onda en el dominio de la frecuencia con la ayuda de analizador de espectro que hemos colocado en el modelo. Este nos permite visualizar la onda tanto tras la operación de recuperación (“timing recovery”) como tras la compensación del offset en frecuencia, como se muestra en la Fig. 42. Comparando este espectro con el obtenido en el transmisor podemos decir que ambas operaciones se están realizando correctamente y nuestra onda recibida tiene una gran similitud con la generada. Figura 42: Espectro de frecuencias para la señal recibida. Una vez terminada la simulación se imprime el mensaje obtenido en la ventana de comandos de MATLAB junto a los valores que contiene la estructura BER, que como hemos dicho antes coinciden con el ratio de errores, el número errores detectados y el número total de samples comparados. Esto se ilustra en la siguiente figura: Figura 43: Mensaje decodificado y valores de la estructura BER. 33 (a) 915.0008MHz-915MHz (b) 915.00095MHz-915MHz (c) 915.001MHz-915MHz Figura 44: Decodificación del mensaje para valores diferentes de la frecuencia central en el transmisor y en el receptor. Como se puede observar, tenemos un 0 % de errores en la recepción del mensaje, por lo que está completamente decodificado y no se ha perdido parte de él durante el proceso de transmisiónrecepción (Fig. 43). Sabiendo que nuestro sistema funciona correctamente, empezamos a variar los distintos parámetros de nuestro sistema con la intención de visualizar los límites de este. En primer lugar variamos lentamente el valor asignado a la frecuencia central del transmisor dejando fijo el del receptor en 915MHz, y así ver el efecto del ancho de banda en nuestro sistema, ilustrado en la Fig. 44. Se observa que a medida que distanciamos más el valor de la frecuencia central en el transmisor con respecto al receptor vamos obteniendo un ratio de errores cada vez mayor, partiendo de un 6 % aproximadamente en el primer caso, hasta prácticamente un 34 % en el último. De esta forma reafirmamos la necesidad de sincronización en términos de frecuencia central entre transmisor y receptor para que podamos decodificar íntegramente nuestro mensaje. 34 (a) Ganancia de -15dB. (b) Ganancia de -30dB. (c) Ganancia de -50dB. Figura 45: Decodificación del mensaje para 915MHz. A continuación variamos el otro parámetro dentro del bloque transmisor dejando fija la frecuencia central en 915MHz, que no es más que la ganancia en decibelios aplicada. La intención de este experimento fue visualizar el efecto que tiene la atenuación de la señal en la decodificación de esta, de modo que se espera que a mayor atenuación tendremos un efecto de apantallamiento más notable, por lo que se obtiene un mayor ratio de errores. Partiendo del valor nulo de la ganancia (no hay atenuación) con el que hemos obtenido un ratio de errores de 0 %, como se ilustraba en la Fig. 43, aumentamos su valor, concretamente hemos elegido los valores -15dB, -30dB y -50dB de forma que veamos el comportamiento de la señal a lo largo del intervalo permitido por el bloque transmisor. En la (Fig. 45) se ilustran los resultados. 35 (a) Ganancia de 0dB. (b) Ganancia de -25dB. (c) Ganancia de -50dB. Figura 46: Espectros de frecuencia para 915MHz. Como se puede observar a medida que aumentamos la atenuación se cumple lo esperado, en el primer caso obtenemos un ratio de errores de 1.6 %, en el segundo 2.6 % y en el tercero 4 % aproximadamente (Fig. 45) confirmando así lo dicho anteriormente. Aun así, como se puede comprobar no son valores demasiado altos y aunque en las Fig. 45.b y 45.c no se vea reflejado dado que los fallos solían ser al final de la simulación, la mayor parte del mensaje se decodifica correctamente, por lo que podemos concluir que la ganancia no es un factor demasiado influyente aunque tiene su efecto al reducir el ratio señal-ruido. También hemos visualizado el efecto de la atenuación por parte del transmisor en el espectro de frecuencias (Fig. 46), aunque en este caso hemos elegido valores de la ganancia de 0dB, -25dB y -50dB para observarlo sólo de forma cualitativa. Es fácil observar cómo el máximo va disminuyendo a medida que aumenta la atenuación como es lógico. 36 (a) Después del “Carrier Symchronizer” (b) Antes del demodulador QPSK Figura 47: Diagramas de constelaciones para 1.6631GHz (canal libre). Una vez visto el efecto de la ganancia en nuestro sistema, estudiaremos a través de los diagramas de constelaciones la distribución de bits del mensaje recibido dependiendo del canal que utilicemos, de forma que se espera obtener una distribución más difusa para los canales que están ocupados y otra más definida para los canales desocupados. Hemos elegido los mismos valores para la frecuencia central que habíamos elegido anteriormente, es decir, la banda de uso libre según el Gobierno de España (1660.5MHz - 1670MHz), el canal correspondiente a KISS FM y el correspodiente a Antena 3 HD ya que el diagrama de constelaciones asociado a la frecuencia 915MHz se había mostrado anteriormente. Como se puede observar obtenemos unos diagramas bastante definidos cuando emitimos en la banda de uso libre (Fig. 47), más definidos aún que en el caso de 915MHz debido a que esta banda también se utiliza con fines industriales como habíamos comentado anteriormente. Sin embargo, para los canales ocupados (KISS FM y Antena 3 HD) obtenemos un espectro bastante más difuso (Fig. 48 y 49), resultando en más errores a la hora de decodificar el mensaje debido a las interferencias con las demás ondas. Es conveniente comentar que para el caso de los canales libres sólo ilustraremos un caso (1.6631GHz) ya que son similares para toda la banda, por lo que a efectos prácticos toda la información útil se encuentra en estas capturas. Para el caso de los canales ocupados sí hemos visto necesario mostrar ambos casos ya que los diagramas obtenidos no son exactamente iguales. 37 % Simulation Parameters SimParams.FrameTime = SimParams.PlutoFrameLength ... /SimParams.PlutoFrontEndSampleRate; SimParams.StopTime = 1000; A.2. Código de inicialización del receptor printReceivedData = true; % true if the received data is to be printed BER = runPlutoradioQPSKReceiver(prmQPSKReceiver, printReceivedData); fprintf(’Error rate is = %f.\n’,BER(1)); fprintf(’Number of detected errors = %d.\n’,BER(2)); fprintf(’Total number of compared samples = %d.\n’,BER(3)); function SimParams = plutoradioqpskreceiver_init %% General simulation parameters SimParams.Rsym = 0.2e6; % Symbol rate in Hertz SimParams.ModulationOrder = 4; % QPSK alphabet size SimParams.Interpolation = 2; % Interpolation factor SimParams.Decimation = 1; % Decimation factor SimParams.Tsym = 1/SimParams.Rsym; % Symbol time in sec SimParams.Fs = SimParams.Rsym * SimParams.Interpolation; % Sample rate %% Frame Specifications % [BarkerCode*2 | ’Hello world 000\n’ ... | ’Hello world 099\n’]; % Bipolar Barker Code SimParams.BarkerCode = [+1 +1 +1 +1 +1 -1 -1 +1 +1 -1 +1 -1 +1]; SimParams.BarkerLength = length(SimParams.BarkerCode); % Duplicate 2 Barker codes to be as a header SimParams.HeaderLength = SimParams.BarkerLength * 2; SimParams.Message = ’Hello world’; 44 % ’Hello world 000\n’... SimParams.MessageLength = length(SimParams.Message) + 5; % Number of messages in a frame SimParams.NumberOfMessage = 100; % 7 bits per characters SimParams.PayloadLength = SimParams.NumberOfMessage ... * SimParams.MessageLength * 7; % Frame size in symbols SimParams.FrameSize = (SimParams.HeaderLength ... + SimParams.PayloadLength) / log2(SimParams.ModulationOrder); SimParams.FrameTime = SimParams.Tsym*SimParams.FrameSize; %% Rx parameters % Rolloff Factor of Raised Cosine Filter SimParams.RolloffFactor = 0.5; SimParams.ScramblerBase = 2; SimParams.ScramblerPolynomial = [1 1 1 0 1]; SimParams.ScramblerInitialConditions = [0 0 0 0]; % Filter span of Raised Cosine Tx Rx filters (in symbols) SimParams.RaisedCosineFilterSpan = 10; % AGC desired output power (in watts) SimParams.DesiredPower = 2; % AGC averaging length SimParams.AveragingLength = 50; % AGC maximum output power gain SimParams.MaxPowerGain = 60; SimParams.MaximumFrequencyOffset = 6e3; % Look into model for details for details of PLL parameter choice. % Refer equation 7.30 of % "Digital Communications - A Discrete-Time Approach" by Michael Rice. K = 1; A = 1/sqrt(2); % Normalized loop bandwidth for fine frequency compensation SimParams.PhaseRecoveryLoopBandwidth = 0.01; % Damping Factor for fine frequency compensation SimParams.PhaseRecoveryDampingFactor = 1; 45 % Normalized loop bandwidth for timing recovery SimParams.TimingRecoveryLoopBandwidth = 0.01; % Damping Factor for timing recovery SimParams.TimingRecoveryDampingFactor = 1; % K_p for Timing Recovery PLL, determined by 2KA^2*2.7 (for binary PAM), % QPSK could be treated as two individual binary PAM, % 2.7 is for raised cosine filter with roll-off factor 0.5 SimParams.TimingErrorDetectorGain = 2.7*2*K*A^2+2.7*2*K*A^2; SimParams.PreambleDetectorThreshold = 0.8; %% Message generation and BER calculation parameters msgSet = zeros(100 * SimParams.MessageLength, 1); for msgCnt = 0 : 99 msgSet(msgCnt * SimParams.MessageLength + ... (1 : SimParams.MessageLength)) = ... sprintf(’%s %03d\n’, SimParams.Message, msgCnt); end integerToBit = comm.IntegerToBit(7, ’OutputDataType’, ’double’); SimParams.MessageBits = integerToBit(msgSet); % For BER calculation masks SimParams.BerMask = zeros(SimParams.NumberOfMessage ... * length(SimParams.Message) * 7, 1); for i = 1 : SimParams.NumberOfMessage SimParams.BerMask( (i-1) * length(SimParams.Message) * 7 ... + ( 1: length(SimParams.Message) * 7) ) ... = (i-1) * SimParams.MessageLength * 7 + (1: length(SimParams.Message) * 7); end % Pluto receiver parameters SimParams.PlutoCenterFrequency = 915e6; SimParams.PlutoGain = 50; SimParams.PlutoFrontEndSampleRate = SimParams.Fs; SimParams.PlutoFrameLength = SimParams.Interpolation ... 46 * SimParams.FrameSize; % Experiment parameters SimParams.PlutoFrameTime = SimParams.PlutoFrameLength ... / SimParams.PlutoFrontEndSampleRate; SimParams.StopTime = 10; Bibliografía Mitola J. (8 de Mayo del 2000) Cognitive Radio: An Integrated Agent Architecture for Software Defined Radio. Stockholm, Sweden: Royal Institute of Technology (KTH). ISSN 1403 - 5286. Frenzel L. (2016). Fundamentals of Frequency Modulation. Principles of electronic communication systems (4 edición). Nueva York, EE.UU.: McGraw Hill. p. 159. ISBN 978-0-07-337385-0. Tomasi W. (2003). Transmisión por modulación angular. En Guillermo Trujano Mendoza, ed. Sistemas de Comunicaciones Electrónicas. Naucalpan de Juárez, Edo. de México, México: Pearson Educación de México, S.A. de C.V. pp. 228-237. ISBN 970-26-0316-1. Perrins E., Schober R., Rice M., Simon M. (junio de 2006). Shaped-Offset QPSK with Multiple-Bit Differential Detection [QPSK de compensación continua con detección diferencial de varios bits.] 3. pp. 1212 - 1218. ISBN 1-4244-0355-3. Borwein P. Mossinghoff M. J. (2008). Barker sequences and flat polynomials. James McKee; Chris Smyth (eds.). Number Theory and Polynomials. LMS Lecture Notes. 352. Cambridge University Press. pp. 71–88. ISBN 978-0-521-71467-9. Subdirección General de Planificación y Gestión del Espectro Radioeléctrico. Secretaría de Estado de Telecomunicaciones e Infraestructuras Digitales. Ministerio de Asuntos Económicos y Transformación Digital. (Abril, 2011). Bandas y canalizaciones disponibles en el Servicio Fijo de banda ancha.https://avancedigital.mineco.gob.es/espectro/Documents/SF-Banda-Ancha/ SF-banda-ancha.pdf Gonzalez S., Montes M. (Junio de 2009). Medios de comunicación: Modulación de una onda. http://recursostic.educacion.es/eda/web/eda2009/newton/galicia/materiales/gonzalez _esantiago_p3/EGMiramontes_p3_v3/tecnologias_comunicacion/Ondas.html 47 Zapata M. Recuperado el 28 de Octubre del 2021. Modulación QAM.https://soporte.syscom .mx/es/articles/2334170-modulacion-qam Universitat de València. (s.f.). Sistemas de Telecomunicación: Modulación Digital.https://www .uv.es/~hertz/hertz/Docencia/teoria/Trasmdigital.pdf Lupera P., Solano N. (10 de Noviembre del 2019). Diseño e implementación de un demodulador QPSK utilizando una técnica de tendencia central.http://scielo.senescyt.gob.ec/scielo.php ?script=sci_arttext&pid=S1390-67122019000200051 Progamador Clic. (s.f.) Universal Radio Hacker. https://programmerclick.com/article/55471064267/ The Weekly Geekly. (s.f.). Universal Radio Hacker: una forma fácil de explorar los protocolos de radio digital.https://weekly-geekly-es.imtqy.com/articles/es434634/index.html Phl J., Adamski K. (4 de Octubre del 2021). Universal Radio Hacker: Investigate Wireless Protocols Like a Boss.https://github.com/jopohl/urh#Installation Demartino C. (s.f.). The Differences Between Transmitter Types. https://www.mwrf.com/technologies/ systems/article/21848235/the-differences-between-transmitter-types-part-2 Arif Sobhan M., Islam Badal T. (Enero de 2019). Design Architectures of the 2.4GHz CMOS Transmitters for RF Devices. https://www.researchgate.net/publication/330061993_CMOS _Transmitters_for_24-GHz_RF_Devices_Design_Architectures_of_the_24-GHz_CMOS_Transmitter _for_RF_Devices Huidobro J. M. (20 de Abril de 2011). Radio Cognitiva. La radio se vuelve inteligente.https:// www2.coitt.es/res/revistas/04d%20Radio%20cognitiva.pdf Weisstein E. (Septiembre de 2018). Barker Code.https://mathworld.wolfram.com/BarkerCode .html MathWorks®. (s.f.). MATLAB. https://es.mathworks.com/products/matlab.html MathWorks®. (s.f.). Generate bipolar Barker Code. https://es.mathworks.com/help/comm/ref/ comm.barkercode-system-object.html MathWorks®. (s.f.). Scramble input signal. https://es.mathworks.com/help/comm/ref/scrambler .html MathWorks®. (s.f.). QPSK Demodulator Baseband. https://es.mathworks.com/help/comm/ref/ qpskdemodulatorbaseband.html 48 MathWorks®. (s.f.). QPSK Modulator Baseband. https://es.mathworks.com/help/comm/ref/ qpskmodulatorbaseband.html MathWorks®. (s.f.). Raised Cosine Filtering. https://es.mathworks.com/help/comm/ug/raised -cosine-filtering.html#:~:text=A%20typical%20use%20of%20raised%20cosine%20filtering% 20is,raised%20cosine%20filter%2C%20which%20results%20in%20minimum%20ISI. MathWorks®. (s.f.). Raised Cosine Transmit Filter. https://es.mathworks.com/help/comm/ref/ raisedcosinetransmitfilter.html MathWorks®. (s.f.). Raised Cosine Receive Filter. https://es.mathworks.com/help/comm/ref/ raisedcosinereceivefilter.html MathWorks®. (s.f.). Pluto Transmitter. https://es.mathworks.com/help//supportpkg/plutoradio/ ref/plutotransmitter.html MathWorks®. (s.f.). Pluto Receiver. https://es.mathworks.com/help/supportpkg/plutoradio/ ref/plutoreceiver.html MathWorks®. (s.f.). QPSK Transmitter with ADALM-PLUTO Radio. https://es.mathworks .com/help/supportpkg/plutoradio/ug/qpsk-transmitter-with-adalm-pluto-radio.html MathWorks®. (s.f.). QPSK Receiver with ADALM-PLUTO Radio. https://es.mathworks.com/ help/supportpkg/plutoradio/ug/qpsk-receiver-with-adalm-pluto-radio.html 49