Professional Documents
Culture Documents
OBJETIVO:
- El objetivo de este laboratorio es aprender sobre la modulación digital e
implementar un transmisor inalámbrico para un enlace USRP a
USRP. Concretamente estaremos implementando el filtro de formación de pulso
(raíz del coseno elevado) y el modulador (BPSK, QPSK).
1 FUNDAMENTOS
(1) Modulación
La modulación es el proceso de variar una señal basada en un flujo de bits. En este caso,
modulamos los componentes en fase y en cuadratura de una sinusoide para representar
la información que deseamos enviar. Utilizaremos una técnica llamada Phase Shift
Keying (PSK). En PSK, el transmisor no varía la amplitud o la frecuencia de la
sinusoide transmitida. En cambio, varía la fase según la secuencia de bits de entrada.
Por ejemplo, BPSK representa cada bit como un símbolo, es decir, transmite una de dos
fases posibles correspondientes al valor del bit. Para esta asignación, el binario 0 es
asignado a un desplazamiento de fase de π / 2, es decir, 1j en notación compleja. El
binario 1 está mapeado a un desplazamiento de fase de 3π / 2, es decir, −1j en notación
compleja. Este mapeo de símbolos se muestra en la figura 1.
0 cos(2𝜋𝑓𝑚 𝑡) + 𝑗 sin(2𝜋𝑓𝑚 𝑡) ; 𝑠𝑖 𝑏 = 0
𝑠𝑏 (𝑡) = {
0 cos(2𝜋𝑓𝑚 𝑡) − 𝑗 sin(2𝜋𝑓𝑚 𝑡) ; 𝑠𝑖 𝑏 = 1
¿Puede ver cómo esta notación encaja con el mapa de símbolos BPSK que se muestra
arriba?
Si quisiéramos enviar el binario '101' utilizando la asignación especificada
anteriormente, y el tiempo de símbolo para cada bit es igual a un período completo de
una sinusoide, la señal asociada es la que se muestra en la figura 2.
Figura 2 – Flujo de bits en BPSK
Asegúrese de estar cómodo con esta idea antes de continuar. Usted podría intentar
generar un breve flujo BPSK utilizando Matlab.
(4) Filtrado
Recuerde de clases anteriores, que pasar una señal a través de un canal era equivalente
a convolucionar la señal con la "Respuesta de Impulso" del canal. Del mismo modo, el
pasar una señal a través de un filtro es equivalente a convolucionar la señal con la
representación en dominio del tiempo del filtro. Sin embargo, a diferencia del canal,
aquí los coeficientes de los taps (denotado por h[n]) están bajo nuestro control. Estos
coeficientes son elegidos para restringir las componentes de frecuencia de la señal a una
banda especificada. Los coeficientes de los taps para un filtro de la "Raíz del Coseno
Elevado" se ven como en la figura 4. Este filtro del lado del transmisor también puede
ser referido como un “Filtro de Formación de Pulso” o “Filtro Formador de pulso”
porque le da una forma particular a la representación en el dominio del tiempo de la
señal que transmitimos.
Figura 4 – Respuesta en el dominio del tiempo del filtro de raíz de coseno alzado
2. INTRODUCCIÓN
Abra TX.vi, que consiste en el código del transmisor básico. La estructura básica del
código está en su lugar, su trabajo es completar los componentes
faltantes. Esencialmente, el flujo del código es el siguiente:
1. Aceptar los parámetros de transmisión (TX) del usuario a través del panel
frontal. Estas entradas incluyen el tipo de modulación (BPSK o QPSK), el número de
muestras por símbolo, y los parámetros del filtro de la raíz cuadrada del coseno elevado.
2. Basado en los parámetros de entrada de TX, el subVI "Generate System Parameters"
genera el mapa de símbolos que se utilizará para mapear el flujo de bits de entrada a los
símbolos modulados a ser transmitidos. Esto genera a la salida un clúster llamado "PSK
system parameters" que tiene 2 entradas:
Tenga en cuenta que, en este subVI, solo se genera un arreglo finito de bits aleatorios
y, por lo tanto, la "forma de onda compleja de salida" solo consiste en un arreglo finito
de números complejos, este tipo de arreglo es conocido como “trama”. Esta trama es
repetida una y otra vez durante las transmisiones por el canal inalámbrico como puede
ser visto en el lazo while en TX.vi. Note aquí que el subVI "niUSRP Write Tx data.vi"
(que se usa dentro del lazo while) es parte de la librería de LabVIEW que se usa para
controlar el USRP y éste es el que interconecta las muestras generadas en nuestro
ordenador con el USRP.
• "TX Parameters:" Este es un controlador que establece los parámetros del USRP.
Primero abra el subVI "generate system parameters. Aparte del manejo de errores, este
subVI llama a otro subVI "generate PSK symbol map”. Este bloque solo necesita
formar los parámetros del sistema PSK, el cluster “PSK system parameters” tal como
se describe en la Introducción.
Finalice el bloque para generar el mapa de símbolos PSK “generate PSK symbol
map” formando el mapa de símbolos de acuerdo al valor de M-PSK, es decir,
dependiendo de si necesitamos el mapa de símbolos para BPSK o QPSK. Los mapas de
símbolos de estas dos constelaciones han sido descritos anteriormente.
• Entradas para generar el mapa de símbolos PSK “generate PSK symbol map”
- "M-PSK", que es un número entero que corresponde al número de puntos en el
mapa de símbolos. Por lo tanto, "M-PSK" sería 2 para BPSK y 4 para QPSK.
Esta trama se repite una y otra vez por el canal inalámbrico. Digamos que consiste de
1000 símbolos la trama que queremos. Se ha realizado un cálculo para evaluar la
cantidad de bits que deseamos transmitir al utilizar una trama de 1000 símbolos. Este
cálculo se explicará en parte más adelante pero no es esencial para comprender el flujo
general del código.
El subVI "random bit generator" genera un arreglo de n bits aleatorios. La longitud del
arreglo se introduce en el subVI como entrada. Implemente la generación de bits
aleatoria en "random bit generator.vi". Asegúrese de generar un bit 0 y un bit 1con
casi la misma probabilidad.
- “output bit stream” debe ser un arreglo de longitud "total bits" que consiste en 1s
/ 0s que representa el flujo de bits aleatorio generado.
El subVI "validate and generate filter" primero verifica si las entradas tienen o no
sentido. Posteriormente, genera los coeficientes para el filtro raíz de coseno
elevado. No es necesario que modifique este subVI. Sin embargo, puede ver su salida
y confirmar que se parece a la figura 4. Aquí, el arreglo de salida de coeficientes del
filtro formador de pulsos “pulse shaping filter coefficients” es un arreglo con los valores
de h[n] correspondientes a los coeficientes del filtro de la raíz del coseno elevado.
Abra "modulate PSK" y échale un vistazo. Esto tiene 2 subVIs principales. El primero
es "PSK Map symbols". En este subVI, al arreglo de bits entrantes se asigna a símbolos
como se describe en el manual usando el mapa de símbolos generado en "generate
system parameters ", esta etapa se llama mapeo de símbolos. Implemente este mapeo
en el subVI "PSK map symbols".
Es decir, si por ejemplo, estamos usando una modulación QPSK y tenemos una
secuencia binaria de entrada de100 bits. Elija los primeros 2 bits y forme el "símbolo"
complejo según el mapa símbolos que usted ha armado. Repita este procedimiento hasta
que genere 50 símbolos de los 100 bits. Tenga cuidado con los casos en que puede
terminar con un número impar de bits (ignore el último bit en este caso).
Eventualmente, estos símbolos se filtran en el subVI "filter PSK symbols". Abra este
SubVI y eche un vistazo. Hay mucho control de tráfico relacionado a lo que se quiere
cuando se "reinicia" el USRP. Todo esto se ha hecho para usted. Adicional a eso,
también la mayoría de los componentes de este subVI son "Upsampling.vi" y "perform
convolution.vi". Tenga en cuenta que los coeficientes del filtro generados en "validate
and generate filter” se pasan a este subVI como una entrada llamada "Pulse Shaping
Filter Coefficients" y el flujo de símbolos generado en "PSK map symbols.vi" se pasa
a este subVI como una entrada llamada "Symbols".
Recuerde que la entrada "Symbols" es un arreglo de todos los símbolos después del
mapeo. Sin embargo, deseamos transmitir múltiples muestras por símbolo y luego el
receptor decodifica el símbolo de estas múltiples muestras. Recordemos que en clase y
en lab2, si (muestras por símbolo) se pusieran a 4, repetiríamos el símbolo 4 veces, es
decir, si deseamos transmitir el flujo de bits 101, transmitiríamos 4 muestras de 5
Voltios cada uno para denotar el primer bit 1, luego transmitir 4 muestras de 0 Voltios
cada uno para denotar el segundo bit 0 y finalmente transmite 4 muestras de 5 Voltios
cada una para denotar el último bit 1.
Aquí vamos a hacer algo diferente. Primero vamos a "sobremuestrear" los símbolos, lo
que significa que insertamos (“muestras por símbolo” - 1) ceros entre cada dos símbolos
en la secuencia de símbolos. Por ejemplo, para el flujo de bits 101, el flujo de símbolos
sería '5volts 0volts 5volts' y el flujo muestreado con (muestras por símbolo) establecido
en 4 sería '5'000'0'000'5'000 donde las muestras entre comillas son los símbolos reales.
Lleve a cabo este sobremuestreo en el subVI "upsampling.vi"
- "y" debe ser un arreglo de muestras complejas que representa la muestra “x”
sobremuestreada.
Nota: En los bloques de sobremuestreo y convolución, tenga en cuenta que está tratando
con números complejos y por lo tanto asegúrese que todas las constantes y variables
que se introducen se definan como complejas. Puede cambiar la "Representación" de
una constante / variable haciendo clic derecho sobre ella.