Está en la página 1de 14

UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

Maestría en Ciencias y tecnologías de la Computación


Comunicaciones Inalámbricas e IoT

Nombre: Dalton Gallegos Mendoza.


Fecha: 29 de Abril de 2019

Práctica 1: BER de modulaciones BPSK y 16-QAM en canal AWGN


Objetivos

El objetivo final de esta práctica es implementar el transmisor y el receptor discreto equivalente


16-QAM rectangular y comprobar cómo se ve afectado su rendimiento por el ruido y el canal. En
concreto se estudiará la probabilidad de error de bit (BER: Bit error rate) en canales de tipo AWGN
mediante simulaciones de Montecarlo.

Desarrollo

Sistema básico de comunicaciones digitales usando BPSK Como preparación para realizar el
sistema 16-QAM usted debe realizar un sistema básico BPSK con ruido gaussiano blanco (AWGN),
como se muestra en la Figura 1. Para esto, debe considerar el siguiente procedimiento:

1. Genere por lo menos 1000 datos (binarios) aleatorios. Puede emplear la función randi de
Matlab o la función randint de Octave.

Fig. 1 Datos binarios aleatorios función randi de Matlab

2. Module en BPSK. Transforme los datos binarios a cadenas de −1s y 1s. No emplee
funciones propias de Matlab u Octave para este paso.
Fig. 2 Conversión de datos Modulación en BPSK

3. Grafique los 50 primeros símbolos luego de modular. Puede emplear la función stem.

Fig. 3 Sistema BPSK

Fig. 4 Primeros símbolos (50)

4. Grafique el diagrama de constelación de la señal a enviar.


Fig. 5 Diagrama de constelación

5. Adicione ruido gaussiano blanco a la señal modulada considerando relación señal a ruido
igual a: SNR = 5, 10, 15 y 20. En esta ocasión no emplee funciones de matlab u octave para
el efecto. Describa el método empleado para generarlo.

Para agregar ruido se utilizo la potencia de señal en banda base para luego calcular la
varianza de ruido, en dicha varianza se establece la diferencia entre la potencia de la señal
y el nivel de señal a ruido.

Luego de tener la varianza obtenemos el numero complejo que representa al ruido, el


mismo que será adicionado a la señal modulada.
%SNR en dB
SNRdB = 5; %se debe dar valor SNR de 5 a 20 conforme lo solicitado
SNR = 10.^(SNRdB/10);
sigPow = 10*log10(var(s)); % Potencia de la señal en banda base
nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Varianza de ruido
N0 = mean(nVarUL);
noise = N0*complex(randn(size(s)),randn(size(s)));
y = s + noise; % Add noise to the received time domain waveform

6. Grafique el diagrama de constelación, luego de agregar el ruido, para cada uno de los
valores establecidos de SNR.
Fig. 6 Diagrama de constelación con ruido para valores de SNR=5, 10, 15, 20 dB

7. Demodule, detecte la señal enviada y convierta la información estimada a bits.

Fig. 7 Demulación BPSK

8. Grafique los 50 primeros símbolos estimados en el receptor.

Fig. 8 Primeros símbolos recibidos (50)

9. Calcule el BER para los cuatro casos propuestos en relación al valor del SNR.
SNR BER Bits
(dB) errados
0 0.1610 161
5 0.0020 2
10 0 0
15 0 0
20 0 0
Tabla 1. BER para valores de SNR: 0, 5, 10, 15, 20 dB

10. Concluya respecto al procedimiento realizado y la influencia del ruido en la transmisión de


la información.

En la realización de la práctica se puede apreciar el sistema BPSK es un sistema confiable, pues como se
observa en la Tabla 1., el BER es prácticamente 0 a partir de valores de SNR igual a 10 dB, el valor mayor
de bits errados está dado cuando el nivel de potencia de la señal es igual al nivel del SNR o sea en 0dB;
es decir en un sistema BPSK mientras mayor es el nivel de SNR menor será el nivel de ruido en la
transmisión (Ver Figura 6).

Sistema de comunicaciones digitales usando 16-QAM rectangular


Ahora, se propone la implementación de un sistema 16-QAM (ver Figura 12) y su evaluación a
través de su curva de desempeño, es decir, el BER respecto a E b /No . Para esto, puede seguir los
siguientes pasos sugeridos:

1. Genere bits aleatorios para ser transmitidos.

Fig. 9 Cadena de bits aleatorios

2. Convierta la cadena de bits a símbolos. Para esto, puede usar la función bi2de en Matlab u
Octave.

3. Module los símbolos usando 16-QAM rectangular. Puede emplear la función qammod
para realizarlo.
Fig. 10 Modulación función Modulator

4. Grafique la constelación de la señal a enviar (una muestra).

Fig. 11 Diagrama de constelación

5. Adicione ruido blanco gaussiano. Use la función awgn, si cree pertinente.

Fig. 12 Sistema 16-QAM

6. Demodule la señal recibida. Podría usar la función qamdemod.


Fig. 13 Demodulación 16-QAM

7. Grafique el diagrama de constelación de la señal recibida (cuatro muestras a diferente


nivel de SNR).

Fig. 14 Diagrama de constelación cuatros muestras diferentes de SNR


8. Transforme los símbolos a bits por medio de la función de2bi.
9. Compare los bits enviados y los bits recibidos y calcule el BER.

SNR BER Bits


(dB) errados
5 0.152 152
10 0.069 69
15 0.0050 5
20 0 0
Tabla 2. BER para valores de SNR: 5, 10, 15, 20 dB

En este sistema se requiere una relación señal a ruido igual o superior a 20 para que el BER sea
igual a cero, esto se debe a que en este se transmiten más bits por símbolo, en este caso de
16QAM 4 bits por símbolo.

10. Grafique una curva de desempeño para el sistema relacionando el BER y E b /No. Emplee
valores de Eb /No entre 0 y 16 dB y la cantidad de símbolos necesaria para obtener curvas
de desempeño precisas para probabilidad de error de 10 -3 (voz) y 10-6 (datos).

Fig. 15 Curva de desempeño


ANEXO 1
Código Sistema BPSK Matlab
close all
clear all
clc

set(0,'defaultTextFontSize', 18) % Default Font Size


set(0,'defaultAxesFontSize', 18) % Default Font Size
set(0,'defaultAxesFontName','Times') % Default Font Type
set(0,'defaultTextFontName','Times') % Default Font Type
set(0,'defaultFigurePaperPositionMode','auto') % Default Plot position
set(0,'DefaultFigurePaperType','<custom>') % Default Paper Type
set(0,'DefaultFigurePaperSize',[14.5 7.3]) % Default Paper Size

M = 1; % BPSK
K = 1000; % Datos binarios

inputBits = randi([0 1], K,1);

num_bit = K; %número de bit


data = inputBits;

s = 2*data-1; %conversion of data for BPSK modulation

% Pregunta 3
stem(s(1:50,1)); title('50 primeros símbolos')
axis([-Inf Inf -2 2])
grid on

% Pregunta 4
scatterplot(s,1,0,'r*')
title('Diagrama de constelación');
axis ([-1.5 1.5 -1.5 1.5]);
grid on

% Pregunta 5 y 6
% SNR in dB
SNRdB = 10; %se dar valor SNR de 5 a 20 conforme lo solicitado
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(s)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Varianza de ruido
N0 = mean(nVarUL);

noise = N0*complex(randn(size(s)),randn(size(s)));

y = s + noise; % Add noise to the received time domain waveform

% Pregunta 6

% SNR in dB
SNRdB = 5;
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(s)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Varianza de ruido
N0 = mean(nVarUL);

noise = N0*complex(randn(size(s)),randn(size(s)));

y5 = s + noise; % Add noise to the received time domain waveform


sPlotFig1 = scatterplot(y5,1,0,'g.');
title ('SNR 5 dB');
hold on
scatterplot(s,1,0,'r*',sPlotFig1);
grid on;

% SNR in dB
SNRdB = 10;
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(s)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Varianza de ruido
N0 = mean(nVarUL);

noise = N0*complex(randn(size(s)),randn(size(s)));

y10 = s + noise; % Add noise to the received time domain waveform


sPlotFig2 = scatterplot(y10,1,0,'b.');
title ('SNR 10 dB');
hold on
scatterplot(s,1,0,'r*',sPlotFig2);
grid on;

% SNR in dB
SNRdB = 15;
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(s)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Varianza de ruido
N0 = mean(nVarUL);

noise = N0*complex(randn(size(s)),randn(size(s)));

y15 = s + noise; % Add noise to the received time domain waveform


sPlotFig3 = scatterplot(y15,1,0,'y.');
title ('SNR 15 dB');
hold on
scatterplot(s,1,0,'r*',sPlotFig3);
grid on;

% SNR in dB
SNRdB = 20;
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(s)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Varianza de ruido
N0 = mean(nVarUL);

noise = N0*complex(randn(size(s)),randn(size(s)));

y20 = s + noise; % Add noise to the received time domain waveform


sPlotFig4 = scatterplot(y20,1,0,'g.');
title ('SNR 20 dB');
hold on
scatterplot(s,1,0,'r*',sPlotFig4);
grid on;
scatterplot(y, 1)
title('SNR 0 dB');
grid on

% Pregunta 7

r = zeros(K,1);

for i = 1:K
if y(i,1) > 0
r(i,1) = 1;
else
r(i,1) = 0;
end
end

rs = 2*r-1; %conversion of data for BPSK modulation

% Pregunta 8
stem(rs(1:50,1)); title('50 primeros símbolos recibidos')
axis([-Inf Inf -2 2])
grid on

% Pregunta 9
% Bit error rate
numBits = length(inputBits);
nErrors = biterr(inputBits,r);

% Estimate the BER


ber = nErrors/numBits;

fprintf('Bit Error Rate de la señal recibida: %d\n', ... ber);


ANEXO 2
Código Sistema 16-QAM Matlab

close all
clear all
clc

set(0,'defaultTextFontSize', 18) % Default Font Size


set(0,'defaultAxesFontSize', 18) % Default Font Size
set(0,'defaultAxesFontName','Times') % Default Font Type
set(0,'defaultTextFontName','Times') % Default Font Type
set(0,'defaultFigurePaperPositionMode','auto') % Default Plot position
set(0,'DefaultFigurePaperType','<custom>') % Default Paper Type
set(0,'DefaultFigurePaperSize',[14.5 7.3]) % Default Paper Size

M = 16; % 16-QAM

K = 1000; % Datos binarios

inputBits = randi([0 1], K,1);

qam = Modulator(inputBits, M); % Demodulation reference symbols (QPSK)

% Pregunta 4
scatterplot(qam, log2(M))
title('Diagrama de constelación');
grid on

% Pregunta 5
SNRdB = 10;
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(qam)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Noise variance
N0 = mean(nVarUL);

rx = AWGNChannel(qam, N0);

sPlotFig1 = scatterplot(rx,1,0,'b.');
hold on
scatterplot(qam,1,0,'r*',sPlotFig1);
grid on;

SNRdB = 10;
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(qam)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Noise variance
N0 = mean(nVarUL);
rx10 = AWGNChannel(qam, N0);

sPlotFig1 = scatterplot(rx10,1,0,'b.');
hold on
scatterplot(qam,1,0,'r*',sPlotFig1);
grid on;

SNRdB = 15;
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(qam)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Noise variance
N0 = mean(nVarUL);

rx15 = AWGNChannel(qam, N0);

sPlotFig1 = scatterplot(rx15,1,0,'b.');
hold on
scatterplot(qam,1,0,'r*',sPlotFig1);
grid on;

SNRdB = 10;
SNR = 10.^(SNRdB/10);

sigPow = 10*log10(var(qam)); % Potencia de la señal en banda base


nVarUL = 10.^(.1.*(sigPow - SNRdB)); % Noise variance
N0 = mean(nVarUL);

rx10 = AWGNChannel(qam, N0);

sPlotFig1 = scatterplot(rx10,1,0,'b.');
hold on
scatterplot(qam,1,0,'r*',sPlotFig1);
grid on;

% Pregunta 6 & 8
yd = DemodulatorHard(rx, M);

N0dB = 0:23;
N0 = db2pow(-N0dB);

ber = zeros(size(N0));

for i = 1:size(N0,2)

rx = AWGNChannel(qam, N0(1,i));
yd = DemodulatorHard(rx, M);

% Pregunta 9
% Bit error rate
numBits = length(inputBits);
nErrors = biterr(inputBits,yd);

% Estimate the BER


ber(1,i) = nErrors/numBits;

end

M = 16; % Modulation order


k = log2(M); % Bits per symbol
EbNoVec = (1:20)'; % Eb/No values (dB)
berTheory = berawgn(EbNoVec,'qam',M);

figure
semilogy(EbNoVec,berTheory)
hold on
plot(1:length(ber), ber, 'r-*');
hold on
set(gca, 'YScale', 'log')
legend('Teorico','Simulado')
ylabel('BER');
xlabel('E_b/N_0 (dBm)');
grid on

También podría gustarte