xxiii curso de especialização em teleinformática e redes...
Post on 04-Nov-2018
219 Views
Preview:
TRANSCRIPT
1
XXIII Curso de Especialização em Teleinformática e Redes de Computadores
Linguagem C e MATLAB
Simulação de sistemas de comunicação digital
abr-mai/2013
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.
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():
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
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:
top related