O que significa Ortogonal em redes sem fio?

Postado por leopedrini sexta-feira, 31 de outubro de 2014 09:35:00 Categories: Curso
Rate this Content 5 Votes

O conceito de ortogonalidade é um dos mais importantes e cruciais mecanismos que permitem a existência de modernos sistemas wireless como WCDMA e LTE.

Porém nem sempre tal conceito é entendido com a devida clareza, e acaba sendo simplesmente ‘aceito’.

 

 

Um exemplo disso são os códigos ortogonais – quando falamos de CDMA e UMTS (WCDMA) já estamos nos referindo a eles no próprio nome dessas tecnologias de acesso.

No LTE também temos o papel fundamental da ortogonalidade, só que neste caso se trata de uma outra tecnologia de acesso, a transmissão OFDM, que embora seja bastante diferente do esquema de códigos do CDMA e WCDMA, depende totalmente do princípio da ortogonalidade.

E é isso o que vamos estudar hoje, tentar entender com clareza este princípio, a Ortogonalidade.

E para isso vamos demonstrar sua aplicação prática em um sistema CDMA. Essa analogia poderá ser posteriormente estendida por você no entendimento de qualquer sistema que utilize tal princípio.

 

Exemplo CDMA

Como vamos demonstrar utilizando a tecnologia CDMA, é importante inicialmente fazermos uma pequena consideração sobre as três mais básicas (FDM, TDM e CDM) em relação à alocação de banda e ocupação do canal por parte de seus usuários.

  • No acesso FDM (divisão por frequência): cada usuário tem uma pequena PARTE DO ESPECTRO alocado durante TODO O TEMPO;
  • No Acesso TDM (divisão por tempo): cada usuário tem TODO O ESPECTRO - ou quase todo - alocado durante uma pequena PARTE DO TEMPO;
  • No Acesso CDM (divisão por códigos): cada usuário vai ocupar TODO O ESPECTRO, durante TODO O TEMPO.

Nesse último caso, as múltiplas transmissões são identificadas utilizando a teoria de códigos. E é aí que se encontra o grande desafio do CDMA: conseguir extrair os dados desejados, ao mesmo tempo em que excluímos todo o restante - as interferências e tudo que for indesejado.

Esses códigos CDMA são ortogonais, então vamos começar vendo o significado básico dessa palavra.

 

O que significa Ortogonal

Buscando a origem da palavra, encontramos que a mesma vem do grego, com a primeira parte – ‘orthos’ – significando justo, reto, e a segunda parte – ‘gonia’ – significando ângulo.

Em outras palavras, a definição mais comum é: perpendicular, formando um ângulo reto de 90 graus entre as referências.

Ortogonal é um termo bastante utilizado na Matemática (da mesma forma que o termo Perpendicular). Mas existe uma regra ‘informal’: quando falamos de triângulos, usamos o termo Perpendicular, e quando nos referimos a Vetores ou Coordenadas Geométricas, utilizamos o termo Ortogonal.

 

Então, de acordo com a Matemática: se dois vetores são perpendiculares (o ângulo entre eles é de 90 graus) na verdade dizemos que eles são ortogonais.

Certo. Mas e como saber, através de nossos cálculos, que dois vetores são ortogonais?

Vamos falar um pouquinho de matemática, mas não se preocupe, seremos breves.

Quando falamos de cálculos com vetores, uma das operações mais conhecidas é o Produto Escalar. De forma simples, é uma operação que resulta em um Escalar (um número) obtidos através da ‘multiplicação’ de dois vetores. Lembre-se que estamos falando de vetores. O Produto Escalar multiplica cada uma das posições em um vetor pela posição correspondente no outro vetor, e soma todos os resultados.

Para exemplificar de forma simples, consideremos dois vetores u e v, com apenas duas dimensões.

Vetor u = < -3 , 2 > e Vetor v = < 1, 5 >

O Produto Escalar dos mesmos é igual a +7 (o equivalente a -3*1 + 2*5).

Esse número positivo, embora não pareça, já nos dá bastante informação: não vamos demonstrar aqui, mas o Produto Escalar positivo indica que o ângulo entre esses vetores é Agudo (menor que 90 graus!). Da mesma forma, se o Produto Escalar é negativo, o ângulo entre esses vetores é Obtuso (maior que 90 graus).

Estamos quase lá, e você já pode estar ‘ligando os pontos’...

Na Matemática, uma outra forma de se escrever o produto escalar entre dois vetores u e v é a seguinte:

u.v = |u| |v| cos(x)

Veja que agora temos na fórmula a informação do ângulo entre os dois vetores (ângulo x). E sabemos que vetores ortogonais tem um ângulo de 90 graus entre si. E também sabemos que o coseno de 90 graus é igual a 0 (zero).

Ou seja, podemos concluir: se dois vetores tem um ângulo x de 90 graus entre si, ou seja, são ortogonais, o seu Produto Escalar é igual a zero!

u.v = 0

E é daí que surge uma definição famosa que você encontra em diversas literaturas: ‘Dois vetores quaisquer são ortogonais se (e somente se) o produto escalar dos mesmos é igual a zero’.

Se você conseguiu entender ou relembrar os conceitos básicos que vimos há muito tempo na escola, agora entende então que a operação algébrica que nos permite fazer a verificação da ortogonalidade entre vetores é chamada de Produto Escalar. É uma operação entre duas sequências de números de igual comprimento, retornando um único número (a soma dos produtos das entradas correspondentes entre duas sequências de números quaisquer).

Mas chega de Matemática por hoje! Não estamos aqui para deduzir ou fazer definições algébricas ou geométricas, e sim entender o que é um ‘sinal ortogonal’ – mas a introdução que acabamos de ver foi necessária. (Nota: como sempre não vamos nos preocupar com definições e derivações mais complexas envolvidas nesse assunto: você pode ficar à vontade para estender seus estudos).

Vamos prosseguir, e tentar aplicar esse conceito de ortogonalidade à nossa prática de redes wireless. Nesse caso, tentar entender como podemos transmitir múltiplos sinais em uma única banda de frequência, e depois recuperá-los.

O essencial aqui é que cada um desses códigos não interfira uns com os outros. Ou seja: esses códigos devem ser ortogonais.

Dizemos que dois códigos são ortogonais quando o resultado da multiplicação dos dois, bit a bit, ao longo de um período de tempo, somado é igual a zero.

Suponha dois vetores como mostrado na figura a seguir (1,1) e (1,-1). É fácil de ver que os mesmos são ortogonais não?

 

Eles possuem um ângulo reto entre si, e o produto escalar é igual a zero. Fica fácil de perceber que eles não interferem entre si.

Mas e se precisamos de mais códigos ortogonais (mutuamente exclusivos, que não interfiram entre si)?

Nesse caso, precisamos criar um conjunto de códigos (sequência de números) cujo produto escalar seja igual a zero. Ou seja, generalizar essa relação para ‘n’ dimensões onde possamos aplicar a mesma regra matemática simples e verificar a ortogonalidade.

Para nossa sorte, um matemático já fez todo esse trabalho. O francês Jacques Hadamard criou uma regra simples para obtenção de um conjunto de códigos que fossem ortogonais – mutuamente exclusivos.

 

Matriz de ?Hadamard

Para gerar nossa sequências de números mutualmente exclusivas, podemos seguir a regra básica que o Hadamard definiu em sua 'Matriz Hadamard'. Nessa matriz, cujas entradas são ou +1 ou -1, todas as linhas são mutualmente ortogonais.

A regra da Matriz de Hadamard é usada por exemplo no CDMA pela Matriz que cria os códigos Walsh. Vamos então ver como seria essa geração, em um Excel simples.

Consideramos a menor e mais simples matriz existente, a matriz 1x1.

 

Aplicamos a regra de criação da Matriz: replicar (copiar a matriz) para a direita, replicar (copiar a matriz) para baixo, e inverter (copiar o inverso da matriz, multiplicado por -1) na diagonal.

 

Como resultado, temos uma matriz 2x2.

 

Nota: veja que neste caso, ainda é fácil de se perceber a ortogonalidade nos vetores que representam estes 2 códigos.

 

Seguindo a mesma linha, geramos agora uma matriz 4x4, com códigos ortogonais.

 

Mais uma vez, repetimos a ação, e agora obtemos uma matriz 8x8.

 

Nesse ponto, já dispomos de uma matriz de 8 códigos (sequência de números) ortogonais entre si.

Podemos comprovar que o produto escalar de qualquer (código) linha por qualquer outra (código) linha é sempre igual a zero. Como exemplo, escolhemos o código ‘2’ e o código ‘5’. Multiplicando cada uma das entradas correspondentes em cada um deles, temos uma outra sequência como resultado. A soma das entradas dessa nova sequência resultante é sempre igual a zero! (Faça você mesmo o teste: escolha quaisquer dois códigos, e faça a multiplicação das entradas correspondentes, e depois some: o resultado final é zero! Interessante, não?).

 

Tudo bem. Já entendemos que podemos - e também como podemos - gerar um conjunto de códigos (sequência de números) ortogonais. Mas na prática, como tudo isso é feito?

Vamos continuar.

 

Espalhamento e (Desespalhamento) por Códigos

Para aplicar esse conceito à pratica, precisamos tentar enxergar o que acontece na transmissão de um sinal espalhado no tempo: vejamos como funciona a transmissão de dados espalhados. Em outras palavras: como é possível vários usuários simultâneos utilizarem exatamente a mesma frequência, transmitindo todos ao mesmo tempo, e não haver um colapso total no sistema?

Novamente, a melhor maneira de demonstrar é utilizando exemplos e analogias simples.

Vamos começar considerando um sinal de um determinado usuário, com seus bits de informação, conforme mostrado na figura a seguir.

 

Consideremos ainda outro sinal, com 8 ‘portadoras’ ou ‘bits’.

 

Se multiplicamos cada um dos bits de informação de usuário, por esses 8 bits, temos um sinal composto resultante.

 

Esse sinal resultante carrega a mesma ‘informação’ que o sinal dos bits de usuário. Só que de uma maneira mais ‘espalhada’.

Quando o receptor recebe esse sinal resultante, ele sabe que uma determinada sequência representa certa informação de um bit de usuário.

De forma análoga, ao receber outra sequência, o receptor é capaz de determinar que representa informação de outro bit de usuário!

 

Perceba que para bit original de usuário, temos agora 8 bits de informação correspondentes chegando no receptor. Em outras palavras: espalhamos 1 bit em 8 ‘chips’*!

Importante: *na verdade, quando o sinal é espalhado, não chamamos mais de bits, e sim chips, porém esse é um outro conceito que explicaremos oportunamente. Esse stream de chips, quando chega no receptor, é compreendido corretamente pelo mesmo. Infelizmente a transmissão em sistemas como o CDMA é muito mais complexa do que isso. Por isso precisamos continuar, e tentar trazer esse cenário prático para o nosso estudo.

A informação do usuário, que representamos acima por bits genéricos, pode ser voz e/ou dados. Vamos representá-la já como um sinal digitalizado puro, e ‘acompanhar’ a transmissão dos bits de usuário, desde sua geração até sua recuperação no receptor.

 

Transmitindo (e recebendo) dados de um usuário

Começamos considerando um bit de usuário, primeiro como tendo o valor igual a ‘1’.

 

Nota: a cor vermelha nesse caso está identificando o usuário 1 (e não se o bit é igual a +1 ou -1). Considere como o valor do bit o valor que está dentro do mesmo, nesse caso, igual a 1.

E agora vamos relembrar o que vimos anteriormente, sobre matriz de códigos ortogonais. Vamos usar como exemplo uma matriz com 8 códigos (ou seja, temos 8 códigos disponíveis para usar, com garantia de ortogonalidade entre eles – um não interfere no outro).

 

Apenas para que fique mais simples o acompanhamento, vamos escolher o ‘código 1’ para usar com o ‘usuário 1’ (podemos escolher qualquer um dos códigos, não precisaria ser o código 1).

 

Fazemos então o espalhamento: multiplicamos o bit do usuário 1 por cada um dos bits do código 1 que escolhemos. Esse sinal então pode ser transmitido, e considerando a princípio um cenário ideal, essa mesma sequência chega ao receptor.

 

Atenção que agora nossa demonstração começa a ficar ‘interessante’: ‘Como o receptor pode recuperar a informação desse usuário 1 (no caso, saber que o valor do bit é igual a 1?)’

A resposta é simples: fazendo o desespalhamento desse sinal recebido, utilizando exatamente o mesmo código que foi utilizado para espalhar o sinal!

Tudo bem, ainda não conseguiu enxergar como? Então vamos seguir em frente.

Multiplique o sinal recebido (usuário 1) pelo mesmo código utilizado para o espalhamento (código 1). Como pode ver, o resultado é uma sequência de 1’s.

 

Mas esse resultado é o conteúdo que foi espalhado em 8 partes. Precisamos somar todas as informações, e dividir pelo total de partes. Nesse caso, a soma é igual a 8, para um total de 8 bits. Ou a informação é igual a 8/8=1.

 

Certo, talvez você ainda não tenha entendido bem, e pode achar que talvez tenha sido coincidência. Tudo bem, vamos continuar.

Repita o mesmo processo, só que agora com o bit igual a 0. E aí, surpresa?

 

Mesmo assim, você talvez ainda não esteja convencido.

Vamos então agora transmitir novos dados, mas agora de um usuário 2 (vamos usar a cor azul escuro para nos referirmos aos dados desse usuário nas figuras). Pela teoria que vimos, para que os códigos/sinais não interfiram uns nos outros, eles precisam ser ortogonais. Assim, escolhemos um dos 8 códigos da nossa matriz de códigos ortogonais que estamos utilizando como exemplo (vamos escolher um outro código que não o código 1, que já usamos para o usuário 1 – logo mais você entenderá porque).

Diferente do usuário 1, que transmitiu ‘10’, vamos agora supor que o usuário tenha a informação em 2 bits igual a ‘11’. Repetindo os mesmos cálculos, temos o resultado para o usuário 2. Interessante, não?

 

Mesmo com as demonstrações acima, se você ainda não está convencido que a divisão por código pode ser feita, veja um exemplo para um terceiro usuário (cor verde), transmitindo ‘01’.

 

Poderíamos continuar aqui com demonstrações infinitas, mas acreditamos que você já entendeu a ideia, não é mesmo?

Certo. Então aproveite para respirar um pouco, porque o melhor ainda está por vir.

Como estamos querendo fixar hoje, uma das principais funções desses tipos de códigos que usamos acima é preservar a ortogonalidade entre diferentes canais de comunicação.

A partir do conjunto de códigos ortogonais que obtivemos da Matriz Hadamard, podemos fazer o espalhamento nos sistemas de comunicação na qual o receptor é perfeitamente sincronizado com o transmissor, gerando códigos de acordo com a característica de cada sistema.

Até aqui tudo bem. No exemplo acima, espalhamos os dados dos usuários, transmitimos, e recuperamos. Mas individualmente! Na prática, os dados de cada um usuário não são transmitidos separadamente, e sim todos ao mesmo tempo!

O grande destaque, a grande vantagem da transmissão por códigos é justamente a habilidade de se transmitir vários usuários espalhados ao mesmo tempo (utilizando os códigos ortogonais) e extrair os dados de cada usuário separadamente!

Novamente, através de exemplos fica mais fácil de visualizar como isso funciona. Então, vamos continuar?

 

Transmitindo (e recebendo) dados de vários usuários

Suponha então todos os sinais espalhados anteriormente que cheguem ao receptor.

      

Podemos representar esses sinais como formas de onda, pois assim fica mais fácil visualizá-los.

 

E o sinal composto pode ser representado da mesma forma (O sinal que chega é sempre a somatória de todos os sinais de cada um dos usuários).

 

Pare um pouquinho aqui: o sinal composto (mostra acima) resultante da soma de todos os sinais espalhados de todos os usuários aparentemente não nos dá nenhuma informação interessante, correto?

Errado. Realmente, a afirmação acima é só aparente: na verdade, temos bastante informação ‘carregada’ nesse único sinal.

Vamos lá. Olhando apenas para o sinal composto, não conseguimos ter nenhuma ideia do que está ‘agrupado’. Isso é normal, e realmente é o que parece.

Mas agora vamos voltar à teoria que aprendemos, de códigos ortogonais: quando multiplicamos um código por outro, tudo aquilo que não é ortogonal é interferência, deve ser desprezada.

Ou seja, se multiplicamos um código ortogonal, por esse conjunto de códigos, temos como ‘separar’ essa informação de volta.

Então, se multiplicamos o código ortogonal que usamos para espalhar o sinal do usuário 1, obtemos o sinal original do usuário 1!

 

Mágica? Não: simplesmente Engenharia, Matemática e Física!

Podemos fazer o mesmo com o usuário 2: utilizamos mesmo código original de espalhamento, e obtemos o sinal original!

 

Analogamente, o mesmo com o usuário 3.

 

E não importa quantos usuários sejam: se eles foram espalhados utilizando códigos ortogonais, podem ser desespalhados do modo inverso, com o mesmo código exclusivo de cada um!

A figura a seguir ilustra de forma geral tudo o que vimos hoje (mesmo que a fonte esteja muito pequena, serve para mostrar o cenário genérico).

 

Parabéns! Você acabou de comprovar que a divisão por códigos é realmente possível, e que o CDMA funciona!

 

Ortogonalidade em GSM e LTE

Conseguimos entender bem como se aplica o conceito de ortogonalidade nos códigos ortogonais utilizados nos sistemas CDMA e WCDMA.

Mas e em outros sistemas, como funciona?

Na verdade, e como já mencionamos antes, todos os sistemas dependem de algum tipo de ortogonalidade para funcionarem, ou seja, alguma forma de transmitir a informação de forma que a mesma possa ser recuperada (como mostramos hoje).

Entretanto, devido às próprias características de cada sistema, esse conceito também se aplica de forma diferente.

Como o nosso tutorial já está bastante extenso por hoje, não vamos nos estender mais, e cobriremos esse tema futuramente, em tutoriais que necessitem esse entendimento prévio.

 

Mundo Ideal x Mundo Real

É claro também que nem tudo é perfeito: no exemplo apresentado, consideramos um mundo ideal, sem interferências ou qualquer outro tipo de problema que pudesse afetar a nossa comunicação. Infelizmente, eles existem, e bastante!

Por exemplo os códigos somente são ortogonais - não interferem uns nos outros - se eles estiverem perfeitamente sincronizados. No nosso exemplo, não consideramos diferença de fase entre eles - em outras palavras, consideramos a velocidade da luz como sendo infinita.

Existe ainda o efeito das componentes de multipercurso, o que torna essa recuperação do sinal bem mais complexa do que a simplificação demonstrada hoje.

Mas todos eles têm uma correção. A maioria refere-se a problemas comuns, agrupados como problemas de 'Detecção de Multi-Usuário', que por sua vez possuem um conjunto de técnicas para minimizar cada um desses efeitos. O Rake Receiver, já explicado em outro tutorial é um deles.

Temos ainda fatores como Controle de Potência, onde teríamos ‘pesos’ diferentes para cada usuário. E uma série de outros fatores e limitações de todos os tipos para complicar ainda mais essa comunicação.

Naturalmente que todas essas complicações possuem suas soluções, e essa é a fantástica tarefa de cada profissional de Telecom enfrenta no seu dia-a-dia.

Mas por hoje, acreditamos que o que foi visto já é suficiente, pelo menos para o entendimento claro do princípio básico da ortogonalidade – o que era o nosso único objetivo, se lembra?

 

Mapeamento Físico x Lógico

Para concluir, nas demonstrações utilizamos como exemplo códigos de 8 bits (lembrando que na verdade, quando o sinal é espalhado, não chamamos de bits, e sim de chips; mas esse é assunto de um outro tutorial, para não perdermos o nosso objetivo hoje), quando na realidade são utilizados muito maiores, como 64 códigos Walsh no CDMA.

Utilizamos operação de soma e multiplicação, porque consideramos os sinais físicos em sua camada física: quando os sinais são mapeados no meio físico, atribuimos aos mesmos valores bipolares – no nosso caso, +1 e -1.

Mas nas operações lógicas temos 0’s e 1’s. E nesse caso, utilizamos a operação binária XOR. (Já estamos bem avançados por hoje, e não vamos nos ater muito a esse tema – que já demandaria um outro tutorial apenas para explicar de maneira simplificada).

Apenas entenda que os códigos utilizados pelos sistemas como CDMA e WCDMA também são do tipo 0’s e 1’s. Na operação XOR, se os bits são iguais, o resultado é 0. Se os bits são diferentes, o resultado é 1.

 

Quando aplicamos XOR a quaisquer Walsh Code diferentes (ou qualquer outro conjunto de códigos ortogonais), o resultado é sempre metade 0 e metade 1 (na matriz de Hadamard, para que a soma seja 0, metade é igual a +1 e metade é igual a -1).

E quando aplicamos XOR a códigos iguais, o resultado são apenas 0’s!

Embora pareça simples, essa operação permite que o sistema funcione perfeitamente.

A seguir, temos um exemplo de uma matriz de código Walsh, com 64 códigos ortogonais utilizados no CDMA.

 

Como exemplo para o UMTS, podemos citar os códigos OVSF (Orthogonal Variable Spreading Factor), praticamente idênticos aos códigos Walsh (CDMA IS-95) – somente a sua geração que é diferente.

Também falaremos sobre esses códigos específicos em outros tutoriais, explicando como os mesmos são usados para diferentes canalizações.

E agora chega por hoje, concorda?

Como você pode notar, temos bastante temas ou assuntos para explorar, e explicar de uma maneira simplificada para fazer com que você extraia o máximo possível em sua apredizagem e também quando aplicar ao seu trabalho. Só que já vimos muitos conceitos por hoje!

Se você conseguiu entender bem pelo menos o conceito da ortogonalidade, e como ela torna possível que aconteça a divisão por código, já é suficiente. Em tutoriais posteriores continuaremos abordando outros conceitos, e tentando demonstrá-los da maneira mais simplificada possível.

Importante: Praticamente não falamos hoje sobre chips e símbolos, diretamente ligados ao tema, mas que também não eram essencialmente o assunto de hoje.

Mais uma vez: como sempre, todos estes conceitos não abordados serão detalhados em outros tutoriais.

 

Conclusão

Hoje conhecemos um dos conceitos mais básicos, mas também um dos mais importantes, que torna possível a existência de modernas redes wireless: o conceito de ortogonalidade.

Como exemplo, vimos como o conceito se aplica à pratica de sistemas CDMA e WCDMA, mais especificamente na forma de códigos ortogonais aplicados ao sistema físico, permitindo que a divisão de acesso por códigos aconteça, e conseguindo assim multiplexar diferentes streams de chips de usuários em uma mesma portadora, sem inserir interferência entre os mesmos.

O conceito é bem mais amplo do que o que tentamos demonstrar aqui hoje, e se estende a diversas outras áreas e tecnologias. De qualquer forma, esperamos que tenha sido proveitoso para o seu aprofundamento no assunto.

Esperamos contar com a sua companhia muito em breve, em mais um tutorial. Sua opinião é muito importante para definição de novos temas que você gostaria de ver detalhados aqui, e o compartilhamento deste artigo com sua rede de amigos, caso tenha gostado, é agradecido antecipadamente.