xxii curso de especialização em teleinformática e redes de...

23
1 XXII Curso de Especialização em Teleinformática e Redes de Computadores Linguagem C e MATLAB Simulação de sistemas de comunicação digital www.teleinfo.ct.utfpr.edu.br Prof. Gustavo B. Borba

Upload: trinhthu

Post on 18-Jan-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

1

XXII Curso de Especialização em Teleinformática e Redes de Computadores

Linguagem C e MATLAB

Simulação de sistemas de comunicação digital

www.teleinfo.ct.utfpr.edu.br

Prof. Gustavo B. Borba

2

Simulação de sistemas de comunicação digital

Sistema 1 (sem codificação):

Fonte binária equiprovável.

Mensagens de 4 bits.

Modulação binária antipodal (bipolar).

Canal AWGN (additive white Gaussian noise).

Demodulação por decisão abrupta.

Implementar em MATLAB a simulação dos seguintes sistemas de comunicação digital:

Sistema 2 (com codificação):

Fonte binária equiprovável.

Mensagens de 4 bits.

Codificação: código de bloco linear [LBC] C(7,4) [Hamming].

Modulação binária antipodal (bipolar).

Canal AWGN (additive white Gaussian noise).

Demodulação por decisão abrupta.

Decodificação: por síndrome.

3

Objetivos

Avaliação de desempenho:

Curva da taxa de erro de bit (BER)

em função da

relação sinal ruído (SNR em dB).

Para o sistema 1 e sistema 2:

Implementar um script Matlab que recebe como parâmetro uma SNR em dB máxima (SNRdbMax), calcula a BER(k) para as SNRs em dB (SNRdb) de 0 até SNRdbMax com passo igual a 1 e, finalmente, plota a curva BER x SNR [dB].

Plotar as duas curvas no mesmo gráfico e comparar o desempenho dos sitemas.

4

Curva BER x SNR [dB] típica:

número de bits errados recebidos

número total de bits transmitidos

BER =

Interpretação: Uma BER de 10-4, por exemplo, indica que em 10.000 bits transmitidos, 1 bit poderá ser recebido errado.

5

Sistema 1: Diagrama em blocos e implementação

6

Sistema 1: Diagrama em blocos e implementação

A simulação consite em calcular a BER(k) para diferentes SNRdb(k), onde k = 0,1,2,...,SNRdbMax. Com isso é possível plotar a curva BER x SNR[db]. Para cada SNRdb(k), o critério de parada é um número de erros limite (neLim).

7

Sistema 1: Código MATLAB

Script (criar arquivo sim_sistema1.m):

% sim_sistema1 [script]

%-------------------------------------------------------------- USUÁRIO

SNRdbMax = 8; %SNR[db] máxima a ser simulada

neLim = 300; %número de erros limite para parar cálculo de cada BER

%----------------------------------------------------------------------

SNRdb = 0:SNRdbMax; %SNRdb de 0 até SNRdbMax

%mostra progresso e calcula BER para cada SNRdb

for k=1:length(SNRdb)

disp(['Calculando BER para SNR[dB] = ' num2str(SNRdb(k))])

BER(k) = sistema1(SNRdb(k), neLim);

end

figure %nova figura

semilogy(SNRdb, BER, 'r-d'); %eixo y em escala logarítmica

xlabel(gca, 'SNR [dB]'); %nome do eixo x

ylabel(gca, 'BER'); %nome do eixo y

title('Desempenho do sistema'); %título

8

Sistema 1: Código MATLAB

Função sistema1() (criar arquivo sistema1.m):

function [ber] = sistema1(snrdb, nelim)

nmsg = 0; %inicializa contador do número de mensagens

ne = 0; %inicializa contador do número de erros

sgma = 1/sqrt(2*10^(snrdb/10)); %variância do ruído Gaussiano

%em função da snrdb

while(ne < nelim)

%FONTE (binária equiprovável, mensagens de 4 bits)

... código nos próximos slides

%MODULADOR (modulação binária antipodal)

... código nos próximos slides

%CANAL (AWGN)

... código nos próximos slides

%DEMODULADOR (demodulação por decisão abrupta)

... código nos próximos slides

%COMPARADOR

... código nos próximos slides

%CONTADOR DE ERROS

... código nos próximos slides

%CONTADOR DE MENSAGENS

... código nos próximos slides

end

ber = ne/(nmsg*4);

9

Sistema 1: Código MATLAB

%FONTE (binária equiprovável, mensagens de 4 bits)*

un = rand(1, 4); %vetor com 4 números aleatórios entre 0 e 1

%de distribuição uniforme

mt = double(un > 0.5); %transforma em binário

%*

%Outra possibilidade: função randint() da Communication Toolbox;

%m = randint(1,4,[0,1]);

%MODULADOR (modulação binária antipodal)

%se m = 0 -> sinal = -1

%se m = 1 -> sinal = +1

sinal = mt*2 - 1; %sinal (mensagem modulada)

%CANAL (AWGN)

%ruído Gaussiano com média 0 e variância sgma

sinal = sinal + randn(1, 4)*sgma; %sinal com ruído

Continuação função sistema1():

10

Sistema 1: Código MATLAB

%DEMODULADOR (demodulação por decisão abrupta)

%se sinal(i) positivo -> mr(i) = 1

%se sinal(i) negativo -> mr(i) = 0

mr = double(sinal > 0);

%COMPARADOR

pe = bitxor(mt, mr); %vetor 4 posicoes; 1 significa erro

%naquela posição de mr

%CONTADOR DE ERROS

ne = ne + sum(pe); %acumula o número de erros

%CONTADOR DE MENSAGENS

nmsg = nmsg + 1; %acumula o número de mensagens

Continuação função sistema1():

11

Sistema 1: Resultado

12

Sistema 2: Diagrama em blocos

Sistema 2 (com codificação):

Fonte binária equiprovável.

Mensagens de 4 bits.

Codificação: código de bloco linear [LBC] C(7,4) [Hamming].

Modulação binária antipodal (bipolar).

Canal AWGN (additive white Gaussian noise).

Demodulação por decisão abrupta.

Decodificação: por síndrome.

13

Código de bloco linear

Detecta e corrige erros.

C(n,k) exemplo: C(7,4) (C(7,4) é um código de Hamming).

C(7,4) detecta 2 erros e corrige 1 erro.

C(7,4) é um código perfeito: corrige todos os padrões cheios

de erro (neste caso 1 erro) e nada mais.

Mapeia um bloco de k bits na entrada para uma palavra de código de n bits na saída.

14

Código de bloco linear

A codificação é feita através de uma matriz geradora G. A matriz geradora tem o seguinte formato:

Esta matriz geradora é sistemática à direita. Assim, as palavras codificadas possuem o seguinte formato:

15

Código de bloco linear

A decodificação envolve:

Passo 1. Cálculo da síndrome

Passo 2. Localização do erro

Passo 3. Correção do erro

Para a decodificação, utiliza-se uma matriz de verificação de paridade H. A matriz de verificação de paridade tem o

seguinte formato:

16

Codificação

A matriz geradora é dada:

Multiplica-se a mensagem m

(palavra a ser transmitida) pela matriz geradora:

ex.: C(7,4)

17

Codificação

Exemplo de uma operação de multiplicação da mensagem e da matriz geradora

ex.: C(7,4)

18

Decodificação

A matriz de verificação de paridade H, definida por

H = [I(n-k)x(n-k)|PT ] é:

ex.: C(7,4)

Passo 1. Cálculo da síndrome

Para obter a síndrome S, multiplica-se a palavra de código recebida r pela matriz H transposta:

S = r HT

A síndrome é o resultado da verificação da paridade. Pode-se fazer uma analogia com o cenário médico: a identificação da enfermidade (síndrome) é o resultado de um teste diagnóstico (verificação de paridade).

19

Decodificação

Para localizar o erro é necessário consultar uma tabela, chamada de lookup table da síndrome:

ex.: C(7,4)

Passo 2. Localização do erro

A coluna síndrome S dessa tabela

foi obtida multiplicando-se cada padrão de erro pela matriz HT:

Não há erro

Todos os padrões de erro corrigíveis. Obs.: esta é a coluna do arranjo padrão

(standard array) chamada de líder de classe lateral (coset leader).

20

Decodificação

Para corrigir o erro e obter a mensagem corrigida estimada U, basta inverter o bit b da palavra de código recebida r. b é o bit indicado pelo padrão de erro e obtido

na lookup table da síndrome.

Para inverter apenas o bit a ser corrigido:

U = r e

ex.: C(7,4)

Passo 3. Correção do erro

21

Exemplo ex.: C(7,4)

22

Sistema 2: Implementação

Inserir o codificador e o decodificador.

Atenção no cálculo do desvio padrão do ruído do canal. Agora há a constante Rc=k/n.

Os outros blocos e o cálculo da BER(k) para diferentes SNRdb(k) são similares aos do sistema 1.

Pode-se utilizar uma condição extra para a parada da simulação: while((ne < nelim) && (nmsg < 200000))

23

Sistema 2: Código Matlab

Sugestões para a continuação

Para o sistema 2, mesma estrutura do sistema 1:

sim_sistema2.m [script]

sistema2.m [função]

Para a comparação dos dois sistemas:

cmp_sistemas_12.m [script]

Este script chama as funções ‘sistema1’ e ‘sistema2’ e plota as duas curvas em um mesmo gráfico.

syndtable( )

encode( )

decode( )

2. Usar as seguintes funções do Communication Toolbox do MATLAB:

1. Criar os seguintes arquivos: