Trabalho Pratico 2 de Telecomunicaçoes (Codificador/Descodificador 2B1Q)
Ao desenvolvermos o nosso trabalho sobre o codificador/descodificador 2B1Q, tivemos que ter em atenção que neste código cada símbolo de saída vai depender dos símbolos anteriormente gerados e transmitidos, bem como do conjunto de dígitos binários presentes para codificação, pertencendo portanto, aos modos de transmissão com memória.Um dos nossos auxílios, e muito importante, pois sem ele não seríamos capazes de realizar tal trabalho é a tabela de codificação e de descodificação para o código de linha 2B1Q.
Teoricamente o codificador faz o seguinte, analisa o sinal de entrada (figura 1), de 2 em 2 bits e codifica-o da seguinte maneira (figura 2).
Em primeiro ele tem que saber qual o símbolo 2B1Q imediatamente antes da codificação do primeiro conjunto de 2 bits, por regra é arbitrado sempre um símbolo positivo. De seguida ele irá ver qual o próximo par de 2 bits, no nosso caso é o 00, como inicialmente é arbitrado um símbolo positivo vamos a tabela 1 e verificamos que para um símbolo positivo 00 teremos uma saída no codificador de +1. De seguida como sabemos que a nossa saída presente é de +1 e que o nosso próximo par de 2 bits é 11,
É um processo que à primeira vista parece um pouco complicado, mas que na realidade se torna bastante simples.
Conclusão:
Software desenvolvido em MatLab:
Codificador 2B1Q
%
%[sinal]=codificador(vector,tb,amplitude,resolucao)
%
%Implementa um codifcador do tipo 2B1Q, "vector" representa o conjunto
%de simbolos binarios a serem codificados; "tb" e a duracao de cada símbolo (em ms);
%"amplitude" e o modulo da amplitude de cada simbolo correspondente ao bit 1 (em V);
%"resolucao" e o numero de pontos por cada unidade de tempo; sinal representa
%o sinal (continuo) devidamente codificado.
%
aux1=1; %Variavel auxiliar que guarda o valor a imprimir
j = 1; %contador que incrementa as posiçoes do vector a imprimir
vect2=[]; %vector auxiliar
if mod(length(vector),2)==0 %testa se o numero de bits do vector e par ou impar
for n=1:2:length(vector) %Percore todas as posicoes do vector
if aux1<0 style="">
if vector(n)==0 & vector(n+1)==0 %verifica a primeira e a segunda posicao do vector de entrada
aux1=-1;
vect(j)=aux1; %Guarda o valor -1 no vector a imprimir caso a entrada seja 0 0
else
if vector(n)==0 & vector(n+1)==1 %verifica o valor das posicoes do vector de entrada
aux1=-3;
vect(j)=aux1; %Guarda o valor -3 no vector a imprimir caso a entrada seja 0 1
else
if vector(n)==1 & vector(n+1)==0 %verifica o valor das posicoes do vector de entrada
aux1=1;
vect(j)=aux1; %Guarda o valor 1 no vector a imprimir caso a entrada seja 1 0
else
if vector(n)==1 & vector(n+1)==1 %verifica o valor das posicoes do vector de entrada
aux1=3;
vect(j)=aux1; %Guarda o valor 3 no vector a imprimir caso a entrada seja 1 1
end
end
end
end
else
if vector(n)==0 & vector(n+1)==0 %verifica o valor das posicoes do vector de entrada
aux1=1;
vect(j)=aux1; %Guarda o valor 1 no vector a imprimir caso a entrada seja 0 0
else
if vector(n)==0 & vector(n+1)==1 %verifica o valor das posicoes do vector de entrada
aux1=3;
vect(j)=aux1; %Guarda o valor 3 no vector a imprimir caso a entrada seja 0 1
else
if vector(n)==1 & vector(n+1)==0 %verifica o valor das posicoes do vector de entrada
aux1=-1;
vect(j)=aux1; %Guarda o valor -1 no vector a imprimir caso a entrada seja 1 0
else
if vector(n)==1 & vector(n+1)==1 %verifica o valor das posicoes do vector de entrada
aux1=-3;
vect(j)=aux1; %Guarda o valor -3 no vector a imprimir caso a entrada seja 1 1
end
end
end
end
end
j = j+1; %incrementa o contador das posiçoes do vector a imprimir
%ciclos de resoluçao
for i = 1:length(vect)
for k = 1:resolucao
aux(k) = vect(i);
end
vect2 = [vect2 aux];
end
plot (vect2),AXIS([1 ((length(vect2)+1)*tb) -(amplitude+1) amplitude+1]); %Imprime o Vector de saida ja codificado
title (num2str(vector));
ylabel('Tensao Saida');
xlabel('Tempo');
grid on;
disp('numero de bits do vector impar'); %resultado do teste de paridade do vector de entrada caso seja impar o nº de bits
end
%
%[saida]=descodificador(vector,resolucao)
%Implementa um descodifcador do tipo 2B1Q, "vector" representa o conjunto
%de simbolos "numericos" a serem codificados;
%"resolucao" e o numero de pontos por cada unidade de tempo;
%[saida] representa o vector descodificado
%
aux1=1; %Variavel auxiliar (representa o sinal do bit da posiçao do vector)
j = 1;
vect2=[]; %vector auxiliar
if mod(length(vect),2)==0 %testa se o numero de bits do vector e par ou impar
for n=1:length(vect) %Percore todas as posicoes do vector
if aux1<0>
if vect(n)==1 %verifica a primeira posicao do vector de entrada
aux2=1; %guarda o valor 1 na variavel auxiliar "aux2"
aux3=0; %guarda o valor 0 na variavel auxiliar "aux3"
vect1(j)=aux2; %preenche a primeira posiçao do vector auxiliar com o valor guardado no em "aux2"
vect1(j+1)=aux3; %preenche a primeira segunda do vector auxiliar com o valor guardado no em "aux3"
else
if vect(n)==3
aux2=1;
aux3=1;
vect1(j)=aux2;
vect1(j+1)=aux3;
else
if vect(n)==-1
aux2=0;
aux3=0;
vect1(j)=aux2;
vect1(j+1)=aux3;
else
if vect(n)==-3
aux2=0;
aux3=1;
vect1(j)=aux2;
vect1(j+1)=aux3;
end
end
end
end
else
if vect(n)==-1
aux2=1;
aux3=0;
vect1(j)=aux2;
vect1(j+1)=aux3;
else
if vect(n)==-3
aux2=1;
aux3=1;
vect1(j)=aux2;
vect1(j+1)=aux3;
else
if vect(n)==1
aux2=0;
aux3=0;
vect1(j)=aux2;
vect1(j+1)=aux3;
else
if vect(n)==3
aux2=0;
aux3=1;
vect1(j)=aux2;
vect1(j+1)=aux3;
end
end
end
end
end
aux1 = vect(n); %actualiza a variavel auxiliar
j=j+2;
%ciclo de resoluçao
for i = 1:length(vect1)
for k = 1:resolucao
aux(k) = vect1(i);
end
vect2 = [vect2 aux];
end
disp('numero de bits do vector impar'); %resultado do teste de paridade do vector de entrada caso seja impar o nº de bits
end
Autores: Nuno Santos
Nelson Louçano
David Silva e Pinto
Ricardo Valente
1 Comments:
Hello, I'm from Ecuador don't speak portuguese but i understand, i'm writing because the program in matlab, codificador y descodificador doesn't run, there is a message of arguments, please help me.muito obrigado
By ANDRÉS MOSCOSO, at 2:25 da manhã
Enviar um comentário
<< Home