Você está na página 1de 12

Universidade Federal do Tringulo Mineiro- UFTM

Instituto de Cincias Tecnolgicas e Exatas- ICTE

Projeto Telecomunicaes 2- Partes 2 e 3


Codificao, Decodificao e Reconstruo do Sinal

Bruno Praa Lacerda- 201210489


Caroline Kinchin- 201310888
Gabriela Jamel Schffer- 201310445

Professor Doutor: Clriton Bernadelli

Uberaba - MG

2 ETAPA: CODIFICAO E DECODIFICAO


Para a codificao do sinal recebido pelo fototransistor fora utilizado o
embaralhamento de bits. O qual se baseia em deslocamentos de bits para a
direita para deix-los o mais diferente possvel. Para desembaralh-los tambm
utiliza-se rotaes de bits para a direita.
A diferena entre o embaralhamento e o desembaralhamento est no
fato de que para embaralhar usa-se realimentao do sinal, enquanto que ao
desembaralhar utiliza-se apenas uma etapa de somas.
Testou-se alguns tipos de embaralhamentos, e na prtica, percebeu-se
que a melhor alternativa para este caso era utilizar o embaralhamento em trs
estgios, sendo um deles de um deslocamento, outro de trs delocamentos e
outro de quatro, o qual est representado pela Figura 1 e seus clculos esto a
seguir.

Figura 1 - Embaralhamento e Desembaralhamento.

1 ETAPA:
2 ETAPA: ( 3 4 )
3 ETAPA: (2 6 8 )
4 ETAPA: (3 5 6 7 )
5 ETAPA: (4 )
6 ETAPA: (5 7 8 )

7 ETAPA: (6 )
8 ETAPA: (7 9 )
9 ETAPA: 8
10 ETAPA: 9
Sendo S o sinal de entrada e D deslocamento de 1 bit direita, 2
deslocamento de 2 bits direita e assim sucessivamente. Sendo assim, o sinal
embaralhado T a soma exclusiva (ou exclusivo) de todos estes, devido
realimentao, sendo assim:
= 1 2 6 7 8
Para o desembaralhamento, por se tratar de apenas uma etapa, a saida
R fica:
= 1 3 4
Com o embaralhamento e o desembaralhamento em mos, bastou-se
implement-los nas linhas de cdigo do arduino, as quais ficaram da seguinte
forma:
#define entrada A0
#define saida A1
int

outPin = 9;

int

leitura = 0;

double

ultimo_tempo = 0;

double

intervalo = 0;

int

cod, decod;

int

cont=0, sendon=0, pwm;

float

out;

void setFrequency(char option);


PWM

//Seleciona a frequncia de operao do

void setup() {
// put your setup code here, to run once:
pinMode (outPin, OUTPUT);
pinMode (entrada, INPUT);
pinMode (saida, INPUT);
Serial.begin (9600);
}

void loop() {
// put your main code here, to run repeatedly:
if (Serial.available()){
char received=Serial.read();
if (received == 'a')
{
sendon = 1;
}
if (received == 'b')
{
sendon = 0;
}
}
if (sendon == 1){
leitura = analogRead(entrada);

intervalo = millis() - ultimo_tempo;

if ( intervalo >= 100)


{

cont++;
ultimo_tempo = millis();
intervalo = 0;
//IMPRIME O VALOR LIDO
Serial.println(leitura, BIN);
Serial.println(leitura, DEC);

//CODIFICAO
cod = leitura^(leitura>>1);
cod = cod^(leitura>>2);
cod = cod^(leitura>>6);
cod = cod^(leitura>>7);
cod = cod^(leitura>>8);
//IMPRIME O VALOR CODIFICADO
Serial.println(cod, BIN);
Serial.println(cod,DEC);

//DECODIFICAO
decod = cod^(cod>>1);
decod = decod^(cod>>3);
decod = decod^(cod>>4);
//IMPRIME O VALOR DECODIFICADO
Serial.println(decod, BIN);
Serial.println(decod, DEC);
}
}
}

Assim, foi implementado no software Visual Studio de forma a facilitar a


visualizao da codificao, abaixo, na Figura 2 tem-se o resultado dessa
interface grfica.

Figura 2- Embaralhamento 1.

Desta imagem, pode-se perceber que o objetivo do projeto foi alcanado


com sucesso, porm existem outras formas de codificar podendo melhorar a
codificao, uma feita e demonstrada abaixo na Figura 3, na qual fez-se o
mesmo embaralhamento e no final multiplicou-se por -1, assim invertendo a
forma de onda.

Figura 3- Embaralhamento 2.

Desta forma, fica claro que a codificao pode ser melhorada, basta

pensar-se em uma maneira de deixar os dados mais embaralhados.

3 ETAPA: RECONSTRUO DA FORMA DE ONDA


Para a terceira etapa, fora reconstrudo o sinal de entrada, para insto,
utilizou-se o gerador de PWM do arduino. Vale ressaltar que este trabalha com
8 bits, enquanto o conversor AD trabalhava com 10 bits, assim, para fazer uma
converso dos valores faz-se necessrio dividir o valor de entrada por 4, de
forma a coloc-lo na escala de 0 a 255 (8 bits). Porm, com isso tem-se
algumas perdas, podendo assim, no gerar um sinal completamente fiel ao de
entrada.
Um impecilho encontrado com o sinal gerado do PWM que este possui
mdia igual ao valor de entrada, e no o valor em si, fazendo assim necessrio
tirar a mdia deste sinal PWM de forma a possuir o valor correto naquele exato
instante. Para tirar a mdia deste sinal, fora usado um filtro passivo de quarta
ordem, o qual dimensionado utilizando-se a seguinte equao:
<

1
<<
2

Assim, para garantir esta equao foram escolhidos os seguintes


valores:

B= 1,6 kHz (sinal em banda base, sinal j conhecido);

= 62,5 kHz (mltiplo inteiro da frequencia de amostragem);

R = 39 k;

C = 1nF;
Obteve-se uma frequncia de corte 4. Vale ressaltar tambm,

que a frequncia do PWM deve ser um mltiplo inteiro da frequncia de


amostragem para que dados no sobrem para o proximo pulso do PWM, nem
para o pulso anterior, o que pode causar distoro no resultado final, assim, a
frequncia de amostragem usada fora = 10,5.
Para demonstrar a funcionalidade do sistema de filtragem, o qual tira a
mdia do sinal, implementou-se uma simulao no software PSIM, atravs do
seguinte circuito.

Figura 4- Circuito de simulao filtragem do sinal PWM.

Obtendo assim, as formas de onda representadas na Figura 5, nela


pode-se observar que o filtro possui atenuao de aproximadamente 75%,
devido a 4 filtros passivos em cascata, uma soluo para este problema
utilizar filtros ativos os quais pode-se ter o controle do ganho do mesmo, ou
ento dar um ganho ao fim do filtro passivo de 4 ordem.

Figura 5- Forma de onda da simulao.

Sendo que a forma de onda azul retrata o sinal de entrada, a onda


vermelha o sinal amostrado, a onda verde o sinal do PWM e a onda rosa o
sinal reconstrudo.
Pode-se perceber tambm que o sinal reconstrudo est atrasado em
relao ao sinal de entrada, isso se d devido ao filtro. Porm no algo que
afete o resultado.
Depois de simulado, implementou-se o cdigo para a gerao do PWM,
representado abaixo:

#include <TimerOne.h>
#define entrada A0
#define saida A1
int

outPin = 3;

int

leitura = 0;

double

ultimo_tempo = 0;

double

intervalo = 0;

int

cod, decod;

int

cont=0, sendon=0, pwm;

float

out, outpwm;

void setFrequency(char option);


PWM
void setDuty_pin03(float value);

//Seleciona a frequncia de operao do

//Seleciona o duty cycle na sada digital 3

void tempo(){// executado de 0.1 em 0.1 segundo para calcular o consumo


nesse periodo
leitura = analogRead(entrada);
out = (leitura*100)/1023;
setDuty_pin03(out);

//Sada 3 com duty de 80%

void setup() {
// put your setup code here, to run once:
TCCR2A = 0xA3;
//Configura operao em fast PWM, utilizando
registradores OCR2x para comparao

setFrequency(1);
7.8kHz)

//Seleciona opo 4 para frequncia PWM (aprox

Timer1.initialize(95.238); // set a timer of length 100000 microseconds (or 0.1


sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
Timer1.attachInterrupt( tempo ); // attach the service routine here
pinMode (outPin, OUTPUT);
pinMode (entrada, INPUT);
pinMode (saida, INPUT);
setDuty_pin03(80);
}

void loop() {
// put your main code here, to run repeatedly:

void setFrequency(char option)


{
/*
TABLE:

option frequency

62.5 kHz

7.81 kHz

1.95 kHz

976.56 Hz

488.28 Hz

244.14 Hz

61.03 Hz

*/
TCCR2B = option;

} //end setFrequency

void setDuty_pin03(float value)


{
int duty;

value = value/100;

duty = (value * 256) - 1;

OCR2B = duty;

} //end setDuty_pin3

Por fim, na prtica, o projeto fora realizado com sucesso, obtendo o


seguinte resultado:

Figura 6- Forma de onda sinal reconstruido (prtica).

Sendo que a onda 2 o sinal de entrada (onda de baixo), e a onda 1 o


sinal reconstruido (onda de cima). Nota-se que tanto a amplitude quanto a
frequncia da onda reconstruda aproxima-se da forma de onda de onda da
entrada, assim percebe-se a boa eficincia da executao do projeto.

Você também pode gostar