Site menu Modulação digital banda-base, introdução

Modulação digital banda-base, introdução

A modulação digital banda-base codifica e transforma uma mensagem, de modo que ela seja transferida com sucesso através de um canal dedicado.

A característica distinta da modulação banda-base é que o sinal modulado pode fazer uso de toda a banda do canal (enquanto modulações como AM, QAM, etc. têm como principal objetivo confinar o sinal em uma banda estreita). Por isso mesmo, normalmente o canal que transmite o sinal banda-base é "dedicado", ou seja, atende aquele único sinal, que faz uso de toda a banda disponível.

Neste artigo, vamos nos concentrar em técnicas de modulação banda-base digital, ou seja, a transmissão de mensagens de natureza discreta (quase sempre, uma seqüência de bits 0 e 1). Tais técnicas também são conhecidas como códigos de linha.

Por exemplo, a conexão Ethernet (com o cabo azul, que o Wi-Fi tem colocado em desuso). Cada conexão Ethernet possui um cabo dedicado desde o computador até o switch, portanto o sinal de dados pode ser modulado em banda-base. Por outro lado, rádio, TV e telefones celulares precisam usar modulações que limitam a banda, porque todos os transmissores compartilham o mesmo espectro eletromagnético e não podem interferir.

Em alguns casos, a modulação digital banda-base é apenas um passo intermediário, cujo resultado alimenta um modulador convencional. Esse casamento permite que o modulador final, analógico, seja mais simples.

O problema

Uma seqüência de bits parece algo muito simples, mas não é. Vamos ver como um transmissor (TX) despretensioso enviaria a letra 'C' através de um canal:

01000011

A cor vermelha é o nível do sinal. Ele é "alto" para bits 1 e "baixo" para bits 0 — para qualquer definição de "nível alto" e "nivel baixo". Por exemplo, em circuitos de computador, "nível baixo" é 0 volts e "nível alto" pode ser 5 volts ou 3.3 volts. Poderíamos escolher quaisquer outras duas voltagens.

O formato acima é denominado NRZ (non-return to zero, sem retorno a zero), porque o sinal permanece alto entre dois bits 1 consecutivos. Um sinal "com retorno a zero" exibiria um padrão alto-baixo entre cada bit 1. A seqüência NRZ é simples de transmitir, porém muito difícil de interpretar do lado receptor. O receptor enxerga isto:

De modo a decodificar esta mensagem e encontrar os bits originais, o receptor (RX) tem de descobrir muitas coisas a respeito deste sinal:

O bitrate pode ser combinado com antecedência entre TX e RX, então na teoria ambos operam em concordância e não há necessidade de descobrir o bitrate. Porém... os relógios digitais (clocks) não são 100% precisos; haverá desvio em um dos lados, e o RX precisa compensar esse desvio, mesmo que o bitrate TX seja conhecido.

A fase do sinal, que determina as bordas dos bits, é difícil de descobrir no melhor dos cenários, e ainda mais difícil na presença de ruído. A largura de banda finita do canal também "arredonda" as ondas, deixando a fase ambígua.

Quantos bits 1 existem aqui? Oito? Sete? Talvez nove?
Há quantos bits 0 aqui?
Isto é uma seqüência de zeros, ou o transmissor está desligado?!

E finalmente, como saber se o TX está realmente transmitindo? Uma longa seqüência de zeros poderia ser uma mensagem verdadeira, mas talvez o TX esteja apenas desligado. De certa forma, podemos afirmar que os bits de dados podem ter três valores possíveis (1, 0 e "nada"), porém o receptor não é capaz de distinguir entre "0" e "nada".

Pior ainda, em algumas tecnologias o sinal recebido torna-se aleatório quando o transmissor está desligado. Nestes casos, RX não pode afirmar que TX está desligado só porque está recebendo longas seqüências de zeros.

Isto é ruído, ou é uma transmissão legítima?

Segue abaixo um exemplo real de recepção na modulação OOK 433MHz (tecnologia utilizada e.g. em controles de portões eletrônicos).

Figura 1: Recepção de sinal OOK 433MHz. Lado esquerdo é ruído, lado direito é sinal vindo de um controle remoto.

No exemplo acima, como é que se pode distinguir sinal (lado direito) de ruído (lado esquerdo), se um e outro não passa de uma seqüência de 1 e 0? Quem garante que, enquanto o receptor está ouvindo ruído, não vai aparecer uma seqüência que pareça um sinal legítimo?

Todas essas perguntas estão interligadas. A recuperação do clock é o problema subjacente a todas elas. Uma solução muito simples, e empregada esporadicamente na prática, é enviar um sinal de clock em paralelo com a mensagem. A decodificação torna-se trivial, assim como determinar se TX está ligado ou não.

Sinal
Clock
0111111110
Com o clock, o sinal pode ser interpretado sem ambiguidade.

Mas isto é muito ineficiente, porque agora precisamos de dois canais dedicados. E a recepção do próprio sinal de clock está sujeita aos mesmos problemas mencionados antes. Por exemplo, uma longa seqüência de zeros no canal de clock significa o quê? TX lento ou TX desligado? É a mesma ladainha.

Só faz sentido transmitir o clock em paralelo quando os cabos são bem curtos, o que elimina a possibilidade de interferência no sinal de clock. Um exemplo é a interface I2C, bem conhecida de quem mexe com Arduino.

De agora em diante, vamos assumir que não existe canal secundário para o sinal de clock; precisamos recuperar o clock e os dados a partir de um único canal.

O atalho assíncrono: RS-232

No século passado, as portas seriais RS-232 eram muito populares. Hoje em dia, quase toda comunicação serial usa USB ou Bluetooth. Geralmente RS-232 é operado em modo assíncrono, também chamado start-stop. Este modo adiciona bits de cabeçalho (start bit) e rodapé (stop bit) a cada byte.

1100100001111
Letra ASCII C enviada em RS-232, um start bit (verde), um stop bit (roxo), 8 bits por byte, sem paridade

O padrão RS-232 define as tensões absolutas de linha: 0 volts para bits "1", e -12 volts para bits "0". A tensão negativa tem raízes na telegrafia — linhas aéreas de telegrafia usavam tensões negativas para evitar corrosão. Cada byte é precedido por um start bit (sempre zero) e sufixado por um ou mais stop bits (sempre 1's).

A velocidade tem de ser combinada entre as partes, antes da comunicação. O clock do RX é sincronizado a cada start bit, e o desvio de clock no RX deve ser pequeno o suficiente para agüentar as pontas por pelo menos um byte (o start bit do próximo byte sincronizará novamente o clock).

Uma linha desconectada apresenta tensão zero, e é percebida pelo RX como uma longa seqüência de bits 1. Como o start bit é sempre zero (tensão -12V), a ocorrência do start bit sinaliza ao RX que o TX está ativo. Mesmo quando os bytes são mandados "back-to-back", ou seja, um atrás do outro sem pausa, o(s) stop bit(s) garantem que o próximo start bit é detectado como tal, e a fase do clock RX é atualizada a cada byte.

A interface RS-232 é muito simples; admite apenas cabos curtos e velocidades baixas. Não suporta ruído e exige muita largura de banda (cabos de boa qualidade, e nunca muito longos) em relação à velocidade que oferece. Qualquer velocidade acima de 112500bps (10 kBytes por segundo) é sujeita a não funcionar de forma confiável, embora algumas interfaces RS-232 aceitem configuração até 1Mbps.

O código start-stop tem uma longa história, que vem desde o tempo das teleimpressoras Baudot e do Telex. Naquele tempo, a comunicação digital era implementada usando componentes eletromecânicos, ou mesmo mecanismos de relojoaria. A simplicidade era um requisito muito mais premente do que alta velocidade. Telex operava a 50bps e era largamente utilizado até meados dos anos 1990.

Códigos síncronos

Códigos start-stop funcionam, porém desperdiçam banda com os bits adicionados no início e no final de cada byte. Já os códigos síncronos, que hoje em dia são dominantes, enviam longas seqüências de bits com praticamente nenhuma redundância. O receptor (RX) recebe apenas bits; é responsabilidade de alguma camada superior da pilha de recepção achar onde estão os bytes.

A primeira dificuldade com código síncrono é a inexistência de um método óbvio para sincronizar o clock RX, como é o start bit do RS-232. É preciso utilizar métodos mais sofisticados.

Muitas tecnologias enviam um longo preâmbulo, que de certa forma é análogo ao start bit. Por exemplo, Ethernet via cabo manda um preâmbulo de 7 bytes antes de cada pacote de 1500 bytes. O preâmbulo tem uma padronagem de bits fixa e simples, como 10101010101010... que é útil para calibrar o clock, e também serve para avisar ao RX que um pacote está chegando.

A Ethernet depende do preâmbulo e de bons códigos de linha para manter o clock sincronizado até o final de cada pacote. Uma vez recebido um pacote completo, é fácil separar os bytes.

Pão-e-manteiga: codificação Manchester

A codificação Manchester é talvez a mais simples modulação digital que se possa conceber e que realmente funciona no mundo real. Ela é utilizada no padrão Ethernet de 10 megabits. Clock e dados são misturados a fim de construir a mensagem codificada a ser transmitida.

01000011
Mensagem
1010101010101010
Clock
1001101010100101
Chirps da mensagem codificada em Manchester
Mensagem Manchester percebida pelo RX

O resultado da modulação é um sinal constituído de "chirps", não bits. "Chirp", cuja tradução é "gorjeio" ou "trinado" (de pássaro), é o sinal realmente transmitido pela linha. Cada bit da mensagem é correspondente a dois ou mais chirps de linha, dependendo da tecnologia. No caso do Manchester são dois chirps por bit, conforme ilustrado.

A decodificação Manchester baseia-se numa característica crucial: sempre há uma transição chirp dentro de um bit (ou seja, o chirp muda de 0 para 1, ou de 1 para 0). Por outro lado, chirps vizinhos de bits diferentes têm 50% de chance de serem iguais, sem transição. Isto é suficiente para recuperar o clock depois de analisar um certo número de chirps.

A taxa de bits deve ser previamente combinada entre TX e RX, mas há uma tolerância para acomodar diferenças de fase, em particular se os dados são enviados em pacotes e o preâmbulo de cada pacote "treina" o clock. Se não me falha a memória, em Ethernet os clocks TX e RX têm de ser ambos precisos o suficiente para que um pacote inteiro (1500 bytes) seja recebível sem ajuste intermediário.

10101010
Preâmbuo da seqüência de dados para treinar o clock RX
1010101010101010
Relógio TX
0110011001100110
Seqüência de treinamento codificada em Manchester
Seqüência de treinamento vista pelo RX. Todas as transições acontecem no meio dos bits.

Uma vez treinado o clock, é fácil mantê-lo em sincronismo, pois o sinal codificado tem pelo menos uma transição para cada bit de dados, então o clock pode ser corrigido a cada bit, pelo menos em tese. Essa tarefa é levada a cabo por um bloco denominado PLL (Phase-Locked Loop, ou laço controlado pela fase), que pode ser implementado tanto em hardware como em software.

Se o TX estiver desligado, não há chirps, e o RX "sabe" que não há transmissão em andamento. Muitos outros detalhes simplificam o trabalho do RX: Ethernet 10Mbps exige que os cabos sejam aterrados e blindados ou trançados; a tensão de linha é 9 volts, relativamente alta; e a distância máxima é limitada a 100m. Tudo isso garante que o RX não vai receber muito ruído que poderia ser confundido com um TX ativo.

Todos os chirps são 1, então não pode haver modulação Manchester aqui
Todos os chirps são 0, então tambem não há nada para se ver aqui

A codificação Manchester não é incrivelmente robusta contra ruídos. Ela funciona quando o meio é adequado: cabos com largura de banda suficiente, de boa qualidade, impedância casada, aterrados, de comprimento não excessivo, etc. Não é uma codificação boa para wireless, por exemplo.

DC Bias

A modulação de banda-base presume que possamos usar a largura de banda inteira do canal. Mas na prática ainda vamos querer, por um motivo ou por outro, "domar" essa banda.

O maior problema de uma banda sem controle é o chamado "DC bias". Imagine a seqüência de chirps 11111... enviada de TX para RX. Ela não é diferente de uma corrente contínua. Energia está fluindo continuamente do TX para o RX.

Agora, imagine que as fontes de alimentação do TX e do RX sejam ligeiramente diferentes. Como TX e RX são conectados por cabo, uma corrente fluirá continuamente entre os dois, devido à diferença de voltagem. Como o RX vai diferenciar uma seqüência 111111... da corrente parasita? Esse é um problema.

Outro problema é que essa corrente parasita pode ser alta, a ponto de danificar cabos e equipamentos. (Quem mexe com equipamentos de som conhece bem este problema e lida com ele diariamente.)

A solução é filtrar as freqüências muito baixas na saída TX, bem como na entrada RX, de modo que a corrente contínua (0Hz) não possa fluir. Apenas corrente alternada pode passar. Isto é denominado "isolação". O filtro pode ser algo tão simples quanto um capacitor em série (muito comum em equipamentos de áudio) ou um transformador (utilizado em Ethernet).

Em alguns casos nós queremos transmitir energia junto com os dados no mesmo fio para alimentar o dispositivo na outra ponta. Tecnologias como o telefone convencional, Power over Ethernet, alimentação de 48V para microfones de áudio, etc. fazem exatamente isso. A separação entre energia e dados também é feita por um filtro simples.

Mas, na presença desse filtro, o sinal precisa ser modulado de forma a evitar longas seqüências 0000000... ou 1111111.... porque elas se parecem com corrente contínua, e seriam distorcidas ou bloqueadas pelo filtro.

Mensagem enviada pelo TX, mal codificado e com DC Bias
Recebido pelo RX, mas distorcido pelo filtro de DC Bias

A codificação Manchester contorna esse problema sem esforço adicional, porque cada bit de dados é modulado por dois chirps diferentes (01 ou 10). Mesmo que a mensagem original seja uma longa seqüência de bits idênticos, a seqüência de chirps será corrente alternada, com a largura de banda centrada na "portadora" que é a freqüência de clock.

Espectro

Manter sob controle o espectro do sinal modulado também é importante, pois nenhum meio físico tem largura de banda infinita, e isto limita a máxima velocidade de transmissão possível.

Grosso modo, a banda necessária para enviar uma seqüência de bits "crua" (não modulada) é igual à sua velocidade. Por exemplo: se a velocidade for 1200bps, a banda necessária é de 0Hz a 1200Hz, no mínimo. Conforme mencionado antes, transmitir uma seqüência de bits "crua" teria problemas de DC bias, com muita energia concentrada em baixas freqüências, inclusive em 0Hz.

A modulação banda-base modifica a forma e a largura desse espectro. Por exemplo, a codificação Manchester precisa duas vezes mais banda, porque a taxa de chirps é o dobro da taxa de bits, e cada chirp precisa ser claramente "ouvido" pelo RX. Uma velocidade de 1200bps vira 2400cps e precisa de uma banda de 0-2400Hz. Por outro lado, o grosso da energia do espectro Manchester está concentrado em torno do clock (1200Hz), e quase nada de energia em 0Hz — ou seja, sem DC bias.

E agora?

Depois dessa introdução ao problema genérico da modulação banda-base, e a ilustração de algumas técnicas que respondem aos desafios da banda-base (na base da força bruta, mas funcionais), você pode voltar ao índice e ler os textos que tratam de técnicas mais avançadas de banda-base.