Buscar

Constelção 16 QAM e correção de erros considerando ruido branco

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Estudo da Constelação 16-QAM
Luciano Leonel Mendes – Aluno do INATEL – Santa Rita do Sapucaí - MG
Prof. Geraldo Gil Ramundo Gomes – Professor do INATEL – Santa Rita do Sapucaí - MG
Resumo
O tutorial aqui apresentado tem como objetivo principal demonstrar as técnicas utili-
zadas para a formação de uma constelação 16-QAM, além de apresentar um estudo sobre as
influências do ruído branco aditivo de natureza gaussiana nesta constelação [1]. Também de-
monstra-se o princípio de funcionamento dos códigos corretores cíclicos [2]. Para melhor
estudarmos os temas citados, foram desenvolvidas uma série de programas com fins didáticos
que são de grande ajuda tanto na observação quanto na conclusão de diversos fenômenos si-
mulados por esses programas. Todas as ferramentas computacionais apresentadas neste tutori-
al foram desenvolvidas sobre o MATLAB 5.3, que é um programa matemático muito efici-
ente e que traz uma apresentação gráfica muito amigável para o usuário, tornando essas fer-
ramentas ainda mais didáticas.
1. Introdução
Atualmente a comunidade global tem uma grande necessidade de se comunicar e com
isso o volume de informação que trafega nos canais de comunicações crescem a cada dia.
Com o advento da telefonia móvel celular, com o crescimento e popularização dos computa-
dores portáteis e com o aparecimento da televisão digital de alta definição (HDTV), há uma
grande necessidade de se transmitir informações a uma elevada taxa de bits por um meio li-
mitado e extremamente concorrido, que é o ar. Isso nos obriga a desenvolver métodos de mo-
dulação eficazes para que possamos aproveitar ao máximo esse recurso natural limitado, que é
o espectro de freqüências.
A busca por novos métodos de modulação nos leva cada vez mais próximo do limite
teórico de eficiência de largura de faixa imposto por Shannon [2] na década de 40 e uma das
modulações de maior eficiência é a modulação QAM (“Quadrature Amplitude Modulation” –
Modulação em Amplitude e Quadratura) e por isso este tipo de modulação vem sendo cada
vez mais explorado. A modulação QAM é mais complexa que a PSK [1] (“Phase Shifting
Keying”) e ASK [1] (“Amplitude Shifting Keying”), mas a eficácia do QAM se torna muito
superior a medida em que o número de símbolos da constelação aumenta. A complexidade do
sistema QAM tem sido contornada com o uso de DSP’s (“Digital Signal Processors”) [3],
que estão cada vez menores, mais rápidos e mais baratos, diminuindo assim o custo do mo-
dulador e demodulador QAM.
Este tutorial irá demonstrar os princípios da formação da constelação 16-QAM, atra-
vés dos aplicativos desenvolvidos para fins didáticos.
2. Modulação QAM
A modulação QAM combina a modulação PSK, onde a informação digital é transmiti-
da através da variação de fase da portadora analógica e da modulação ASK, onde a informa-
ção digital é transmitida através da variação de amplitude da portadora analógica. Desta for-
ma, na modulação QAM, tanto a fase como a amplitude da portadora variam de acordo com a
informação digital a ser transmitida. 
Para se obter uma modulação eficiente, é importante distribuir os pontos da constela-
ção de uma maneira adequada. As constelações mais utilizadas são as constelações retangula-
res [2], pois este tipo de constelação apresenta uma boa relação entre energia média de sím-
bolo e a complexidade de formação da constelação. É importante citar que há estudos e pro-
postas de constelações que possuem geometrias não retangulares que otimizam a energia mé-
dia de símbolo [2], porém a complexidade destas constelações não justificam os ganhos obti-
dos com relação as constelações retangulares. 
Genericamente, a lei de formação dos símbolos de uma constelação QAM quadrada é
dada por:
)](cos[*)()( tottAts iii φϖ += (1)
Tt
Mi
≤≤
=
0
...3,2,1
onde M é o número total de símbolos da constelação e T é o tempo de duração de cada sím-
bolo. 
Também podemos representar a constelação QAM utilizando um plano cartesiano
baseado em dois sinais ortogonais. Normalmente, as bases deste plano ortogonal são cos(ωt) e
sen(ωt) [2], onde ω é a velocidade angular da portadora analógica. Assim, podemos repre-
sentar a constelação QAM retangular conforme a figura 1.
Figura 1
Exemplo de uma constelação QAM retangular
Agora podemos utilizar o plano descrito acima para representar qualquer símbolo no domínio
temporal, de forma que passamos a ter a lei de formação da constelação QAM retangular des-
crita abaixo:
)(*)cos(*)( tsinAtAts jii ϖϖ += (2) 
Tt
Ayj
Axi
≤≤
=
=
0
,...,3,2,1
,...,3,2,1
max
max
onde Axmax é a maior amplitude permitida no eixo X e Aymax é a maior amplitude permitida
no eixo y. 
cos(ωt)
-A1
A1
A2
-A2
A2A1-A1-A2
sen(ωt)
Para o caso do símbolo demarcado na figura 1, teremos:
)()cos()( tsintts ϖϖ −= ; para 0≤ t ≤ T. (3)
Esta representação cartesiana facilita muito a visualização da constelação QAM e tam-
bém simplifica sua formação.
A largura de faixa mínima [2] utilizada por um sistema QAM pode ser expressa por:
)(log2
min M
RBW = (4)
onde R é a taxa de transmissão de bits e M é o número de símbolos da constelação QAM.
Podemos expressar a eficiência de largura de faixa [2] para um sistema QAM por:
min
2 )(log BW
RM ==β (5)
3. A Constelação 16-QAM
Em um sistema 16-QAM cada símbolo da constelação é formado a partir de 4 bits de
informação [1]. Assumindo que a distância entre dois símbolos adjacentes seja 2, a constela-
ção fica:
Figura 2
Constelação 16-QAM
Uma vez atribuida a posição dos pontos na constelação, devemos mapear estes
símboos, de modo que a combinação de 4 bits represente um e somente um símbolo. O código
mais utilizado neste tipo de mapeamento é o código Gray [1], pois neste código apenas um bit
muda entre os símbolos adjacentes. Isto minimiza a probabilidade de erros do sistema.
O programa qam_clean_gui.m foi criado para demostrar este tipo de mapeamento. A figura 3
mostra o resultado de uma simulação onde a seqüência de bits (0 0 0 0) foi transmitida e o
símbolo )(*3)cos(*3)(0 tsintts ϖϖ −−= foi gerado.
-1
1
3
-3
31-1-3
sen(ωt)
cos(ωt)
Figura 3
Símbolo gerado a partir do program qam_clean_gui.m
O objetivo deste programa é fazer com que o usuário entre com as 16 combinações
possíveis e observe a posição de cada símbolo, anotando quais foram as seqüências de bits
utilizadas na formação de cada símbolo. A constelação 16_QAM já mapeada fica conforme
mostrado na figura 4.
Figura 4
Constelação 16-QAM mapeada com código Gray.
Conforme já mencionado, com a utilização do código Gray na formação da
constelação QAM, há a mudança de apenas um bit entre símbolos adjacentes. Podemos
observar também que os dois bits mais significativos definem a amplitude no eixo y (sen(ωt)),
enquanto que os bits menos significativos definem a amplitude no eixo x (cos(ωt)). Com isso
podemos afirmar que a modulação 16-QAM é formada por dois sinais 4-ASK ortogonais [1].
4. Influência do AWGN na constelação 16-QAM.
Uma vez determinado como se obtem os símbolos de uma constelação 16-QAM, é
necessário estudar os efeitos que o ruído branco aditivo de natureza gaussiana causa a esta
constelação. O programa qam_gui foi desenvolvido com o objetivo de demostrar a influência
do AWGN [1] na constelação QAM de uma maneira clara e simples. A figura 5 mostra o
resultado de uma simulação onde o símbolo formado pelos bits (1 1 1 1) foi transmitido mil
vezes consecutivas com uma relação Eb/No de 6dB.
cos(ωt)
-1
1
3
-3
31-1-3
sen(ωt)
0000 0001 0011 0010
0100 0101 0111 0110
1100 1101 1111 1110
1000 1001 1011 1010
Figura 5
Influência do Ruído Branco na Constelação 16-QAM
Observando a constelação 16 QAM apresentada na figura 4, podemos concluir que as
coordenadas para o símbolo formado pelos bits (1 1 1 1) são X=1e Y=1. Na figura 5 vemos
uma nuvem de pontos em torno dessas coordenadas, que são os símbolos transmitidos em um
meio perturbado pelo ruído branco. Analisando a figura podemos observar que os pontos es-
tão distribuídos em torno de uma média, que é a coordenada do símbolo formado pelos bits (1
1 1 1). Uma vez que o ruído possui uma distribuição gaussiana [1], a função densidade de
probabilidade que descreve a probabilidade de ocorrência de um evento pode ser descrita por:
( ) 


 

 −−⋅=
2
2
1exp
2
1
σ
µ
σπ
xxp (6)
onde
p(x) é a função que demonstra como a probabilidade do ruído assumir valores x está distribuí-
da em torno da média.
µ é a média.
σ é o desvio padrão.
O valor de σ está relacionado com a potência do ruído presente no canal, de forma que
aumentando o valor de σ, a probabilidade do ruído assumir amplitudes maiores aumenta e
assim a potência do ruído é maior. No caso da simulação apresentada, o valor de σ é forneci-
do indiretamente através do campo Eb/No. A relação Eb/No denota a relação entre a energia
de bit pela densidade espectral de ruído. Se a relação Eb/No for conhecida e adotarmos a
energia de bit (Eb) como sendo constante, podemos determinar a densidade espectral de po-
tência (No). Sabemos que 2/No=σ , portanto podemos determinar o valor de σ e utilizá-lo
para determinar como o ruído irá influenciar os símbolos transmitidos. O símbolo recebido
será a soma vetorial do símbolo transmitido com o ruído de média nula e σ=No/2. Observe
que o valor absoluto do ruído é aleatório e é por isso que ao transmitirmos N vezes, os sím-
bolos recebidos formam uma nuvem em torno do símbolo originalmente transmitido. Quanto
maior a relação Eb/No, menor é o valor de σ e portanto a probabilidade do ruído assumir
grandes amplitudes diminui de forma que a nuvem de pontos se concentre mais em torno do
símbolo transmitido. A figura abaixo demonstra o resultado de uma simulação com
Eb/No=15db.
 Figura 6
Influência do Ruído Branco na Constelação 16-QAM
Uma vez determinado qual é a influência do ruído em um símbolo da constelação é
necessário analisarmos se esse ruído introduzido causa erro de símbolo na recepção. Voltando
a observar a figura 4, vemos que todos os símbolos estão igualmente espaçados entre si de
uma distância igual a 2. Com isso as coordenadas que os símbolos podem assumir em ambos
os eixos são: -3, -1, 1 e 3. Isso implica que os limiares de decisão [1], que são as linhas que
separam dois símbolos adjacentes, assumam as coordenadas –2, 0 e 2 para ambos os eixos.
Por exemplo, se o símbolo em questão for o símbolo de coordenadas X=1, Y=1, os limiares
de decisão serão:
Eixo X: Esquerda = 0 e Direita = 2 
Eixo Y: Inferior = 0 e Superior = 2
Esses limiares definem uma área e se a coordenada do símbolo recebido estiver dentro dessa
área, o mesmo será interpretado como sendo o símbolo formado pelos bits (1 1 1 1).
Ainda observando a figura 4, podemos verificar que nem todos os símbolos possuem a mesma
probabilidade de erro, pois o número de vizinhos que os símbolos possuem variam de acordo
com a sua posição no constelação. Segundo a figura 4 fica claro que os quatro símbolos inter-
nos (observe também a figura 7 abaixo) possuem uma maior probabilidade de erro do que os
símbolos externos da constelação.
Figura 7
Símbolos com maior probabilidade de erro.
5. Códigos Corretores de Erro.
Agora que já compreendemos qual é a influência do ruído branco de distribuição gaus-
siana em uma constelação 16-QAM, e como esta influência pode gerar erros na recepção,
iremos estudar uma medida preventiva que nos permita detectar e/ou corrigir um possível
erro. A medida utilizada na apresentação deste trabalho é chamada de códigos corretores de
erro cíclicos [2].
Os códigos cíclicos são códigos de blocos que podem ser conseguidos a partir de uma
máquina de estado, mas respeitam todas as leis de formação de um código de blocos. O prin-
cípio da codificação de canal é adicionar bits de paridade (redundância) a informação afim de
permitir definir através da análise desta paridade se a informação recebida está certa ou não e
em alguns casos, informar aonde ocorreu o erro. Ao adicionarmos os bits de paridade estamos
aumentando o número de bits que deve trafegar pelo canal. Isso irá provocar um aumento na
taxa de sinalização ou um aumento na banda ocupada, assumindo que a taxa de bits de infor-
mação foi mantida. Obviamente isso consiste em uma desvantagem que devemos pagar para
proporcionar uma maior confiabilidade na transmissão da informação.
Em um código de bloco onde a informação é segmentada em k bits de informação e
são adicionados (n-k) bits de paridade de tal forma que o bloco resultante possui n bits é de-
nominado de Código (n, k) [2]. A partir dessa explanação podemos definir alguns parâmetros
utilizados para caracterizar um código de bloco. O primeiro deles é redundância do código
dada por:
( )
k
knaredundânci −= (7)
Outro parâmetro importante é a taxa de código, dada pela seguinte relação:
n
ktaxa = (8)
Neste estudo, iremos apresentar o Código C(7,4), ou seja, um código que a partir de 4
bits de informação gera um vetor válido de 7 bits. Assim temos 3 bits de paridade para cada
bloco de 4 bits de informação. Observe que com 4 bits de informação é possível obtermos 16
combinações diferentes, mas o espaço vetorial disponível possui 12827 = combinações, pois
transmitimos blocos com 7 bits (4 de informação e 3 de paridade). Assim, de 128 combina-
ções possíveis somente 16 serão utilizadas. As combinações não utilizadas são denominadas
de vetores códigos não válidos, enquanto que as 16 combinações possíveis são denominadas
de vetores códigos válidos [2].
O conjunto de vetores válidos deve ser um subconjunto do espaço vetorial, ou seja, o
vetor todo nulo deve ser um vetor código válido e a soma (módulo dois) de quaisquer dois
vetores códigos válidos deve gerar um vetor código válido. Portanto, a idéia da codificação é
a partir de um bloco de k bits deve-se gerar um bloco de n bits que seja um vetor código váli-
do. Esse vetor é transmitido e pode ou não ser alterado no canal devido ao ruído presente no
mesmo. Ao decodificador cabe verificar se o vetor recebido é ou não um vetor código válido.
Se for um vetor código válido, então o decodificador retira os bits de paridade e entrega os
bits de informação na saída. Se o vetor recebido não for um vetor código válido o decodifica-
dor aproxima o vetor recebido para o vetor código válido mais próximo e então retira a pari-
dade e entrega os bits informação na saída. Vale a pena frisar que o decodificador sempre
retira a informação de um vetor código válido.
Ao escolhermos um código de bloco, devemos ter dois pontos chaves em vista. O pri-
meiro é escolher um código que possua vetores códigos mais distantes possíveis, pois assim o
código irá apresentar uma menor probabilidade de ocorrer um erro não detectável e aumentará
a capacidade de correção do código [2]. O segundo é fazer com que o número de vetores váli-
dos seja próximo do número total de vetores possíveis. Assim a redundância é menor e gasta-
se menos banda na transmissão da informação. 
Há duas maneiras de implementar um código de bloco. A primeira é definindo os ve-
tores códigos e armazená-los em um tabela que é consultada a cada bloco de k bits de infor-
mação. O grande problema dessa técnica é que para extensos blocos de bits de informação o
número de vetores códigos válidos se torna muito extenso, inviabilizando o armazenamento
destes vetores em uma memória. Imagine um código C(192,97) . Teríamos que armazenar
972 vetores em uma memória, o que é extremamente inviável. 
A outra maneira de realizarmos a codificação é lançando mão de uma Matriz Geradora [2].
Neste conceito, utilizamos um conjunto de k vetores códigos linearmenteindependentes para
formar uma matriz de k linhas e n colunas. Esses vetores formam o conjunto base do código,
de modo que qualquer vetor código pode ser gerado a partir da combinação linear dos vetores
que compõe esta base. 
No caso em estudo, temos um código C(7,4), de forma que sua matriz geradora possui
o seguinte formato:








=
47464544434241
37363534333231
27262524232221
17161514131211
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
G (9)
Os vetores códigos válidos são obtidos multiplicando os bits de informação pela Ma-
triz Geradora, da seguinte forma:
[ ] GmmmmU ⋅= 4321 (10)
GmU ⋅= (11)
A Matriz Geradora define complemente o código corretor, de forma que o codificador
precisa armazenar somente os k vetores códigos válidos que formam a base do espaço vetorial
válido.
É comum encontrarmos as matrizes geradoras em sua forma sistemática [2], ou seja,
em uma forma em os bits de informação estão explícitos no vetor código válido. Essas matri-
zes possuem o seguinte aspecto:
[ ]kIPG := (12)
P é a matriz paridade com k linhas e (n-k) colunas e Ik é a matriz identidade de dimensão k.
O decodificador utiliza a matriz H, obtida a partir da Matriz Geradora (G), para deco-
dificar o vetor recebido. A matriz H é ortogonal a matriz G, de forma que:
0=⋅GH T (13)
Para que o requisito acima seja cumprindo é necessário que a matriz H tenha a se-
guinte disposição.
[ ]Tkn PIH :−= (14) 


= −
P
I
H knT (15)
O decodificador realiza o produto entre o vetor recebido e a matriz HT obtendo como
resultado um vetor de dimensão (n-k) que é chamado de síndrome [2]. Caso a síndrome seja
um vetor todo nulo significa que o vetor recebido é um vetor código válido. Caso a síndrome
não seja um vetor nulo, isso significa que o vetor recebido não é um vetor código válido e
portanto deve ser corrigido. Para cada síndrome possível (existem 2(n-k) síndromes possíveis)
existe associado a ela um vetor erro padrão que somado ao vetor recebido irá gerar um vetor
código válido.
Nenhum código é perfeito, ou seja, nem sempre o código é capaz de corrigir ou detec-
tar um erro introduzido pelo canal. Para podermos quantificar a capacidade de correção e de-
tecção de um código devemos antes definir distância mínima de um código (dmin) [2]. A
distância mínima de um código de blocos é a menor quantidade de bits que devem ser muda-
dos afim de obtermos um outro vetor código válido.
Uma vez conhecido o dmin do código, podemos determinar sua capacidade de corre-
ção como sendo:


 −=
2
1mindt bits (15)
Já a capacidade de detecção é dada por:
 1min−= dcd (16)
Como já podíamos esperar, a capacidade de correção de um código é menor do que
sua capacidade de detecção. Assim, um código pode operar como corretor de erro em condi-
ções em que a média do número de bits errados por bloco de n bits seja menor do que sua
capacidade de correção. Se por algum motivo, a média do número de bits errados aumenta e
passa a ser maior do que a capacidade de correção do código, o mesmo código ainda pode ser
utilizado para a detecção de erro.
Os códigos cíclicos formam uma subclasse dos códigos de bloco que podem ser implementa-
do por registradores de deslocamento. A principal caraterística de um código cíclico é que se
temos um vetor código válido U pertencente ao subespaço vetorial do código cíclico, então
todos os demais códigos podem ser obtidos pelo deslocamento sucessivo de U. O vetor U
pode ser descrito como:( )1210 −= nU µµµµ L (17)
Assim podemos expressar qualquer vetor código como sendo:
( )1011)( −−−+−−= innininiU µµµµµ L (18)
Para uma representação algébrica, podemos considerar os elementos do vetor U como
sendo coeficientes de um polinômio U(x), conforme demonstrado abaixo:
1
1
2
210)(
−
−++++= nn XXXxU µµµµ L (19)
A presença ou ausência de um termo do polinômio indica que o índice que multiplica
esse termo é “1” ou “0” respectivamente.
Da mesma forma, podemos representar o vetor mensagem como um polinômio:
1
1
2
210)(
−
−++++= kk XmXmXmmxm L (20)
O polinômio U(x) pode ser chamado de polinômio gerador [2] uma vez que todos os
vetores códigos válidos podem ser obtidos através dele utilizando registradores de desloca-
mento. 
A obtenção da síndrome também é realizada através de registradores de deslocamento
cujo os braços de realimentação seguem o polinômio gerador do código.
O programa apresentado a seguir utiliza essa técnica para codificar a seqüência de bits forne-
cida pelo o usuário. Fazendo um estudo específico para o caso apresentado, temos um código
cíclico C(7,4) formado pelo seguinte polinômio gerador:
31)( XXxg ++= (21)
Assim podemos determinar um vetor código válido dado pelo polinômio gerador des-
crito acima:
( )00001011=U (22)
Utilizando a propriedade dos códigos cíclicos podemos definir a matriz geradora G.








=
1011000
0101100
0010110
0001011
G (23)
Sabemos que os vetores códigos que compõe a matriz geradora são componentes de
um subespaço vetorial e portanto a soma desses vetores irá gerar outro componente desse
mesmo subespaço vetorial. Podemos utilizar essa afirmação para obtermos a matriz geradora
na forma sistemática apresentada a seguir:








=
1000101
0100111
0010110
0001011
G (24)
Uma vez conhecida a matriz geradora podemos determinar a matriz decodificadora H,
da seguinte forma:
[ ]Tkn PIH :−= (25)








=
1110100
0111010
1101001
H (26)
Uma vez conhecidas, a matriz geradora e a matriz decodificadora podem ser usadas
para codificação e decodificação de uma mensagem, mas é mais prático realizarmos essa tare-
fa utilizando máquinas de estado, uma vez que estamos utilizando um código cíclico. Para a
codificação, utilizamos o circuito a seguir:
Figura 7
Codificador C(7,4)
Inicialmente, a chave 1 se encontra fechada e a chave 2 na posição a. Nesta condição,
a medida em que o vetor m(x) é carregado na máquina de estado, o mesmo é entregue na saí-
da do codificador. Assim que todos os bits que compõe o vetor m(x) são carregados na má-
quina de estado, a paridade já está calculada e armazenada nos registros R0, R1 e R2. Basta
agora descarregar o valor de cada registro na saída. Para isso abrimos a chave 1 (para que o
valor da paridade não se altere mais) e passamos a chave 2 para a posição b. Uma vez que
todos os bits de paridade foram descarregados, a máquina de estado volta para o estado inicial
e está pronta para receber mais um bloco de k bits para a codificação.
Para a decodificação, utilizamos a máquina de estado a seguir:
Figura 8
Decodificador C(7,4)
R0 R1 R2
Chave 2
a b
Saída
U(x)
m(x)
Chave 1
R0 R1 R2
Chave 1
U(x)
S(x)
Síndrome
Chave 2
O funcionamento do decodificar é muito semelhante ao funcionamento do codificador.
A princípio, a chave 1 é fechada e a chave 2 é aberta. Carregamos a máquina de estado com
os n bits que compõe o vetor código U(x). Depois que todos os n bits são carregados, o conte-
údo dos registradores corresponde a síndrome do vetor U(x), que deve ser descarregada na
saída. Para isso abrimos a chave 1 e fechamos a chave 2. Depois que os (n-k) bits da síndrome
são descarregados, a máquina de estado está pronta para receber o próximo vetor código.
A seguir apresentamos alguns resultados obtidos pelo programa code74_gui.m, gerado
para simular esse tipo de codificador.
Figura 9
Resultado da Simulação
Nesta simulação, os bits a serem transmitidos são (1 1 1 1). O codificador entregou o
vetor código:
 U(x) = (1 1 1 1 1 1 1) (27)
Esse vetor foi transmitidopor um canal AWGN, e o vetor na entrada do receptor é o
vetor:
Un(x) = (1.2 1.7 0.8 1.3 1.4 1.5 0.5) (28)
O limiar de decisão neste caso é 0.5, ou seja, o receptor entende como sendo 1 todo e
qualquer valor maior ou igual a 0.5 e entende como sendo 0 todo e qualquer valor menor do
que 0.5. Assim o vetor Urx(x) é igual a U(x).
A síndrome gerada pelo decodificador a partir desse vetor é S = (0 0 0), o que indica que o
vetor recebido é um vetor código válido. O receptor então considera o vetor recebido como
sendo o vetor transmitido e o entrega em sua saída. Note que nesse caso, o erro padrão soma-
do ao vetor recebido para gerar o vetor corrigido é o vetor todo nulo, uma vez que o vetor
recebido é um vetor código válido.
No próximo exemplo apresentamos o resultado de uma simulação onde ocorre um erro
na transmissão.
Figura 10
Resultado da Simulação
Neste caso observamos que quando ocorre um erro na transmissão a síndrome não é
mais m vetor todo nulo, o que significa que o vetor recebido não é um vetor código válido.
Associado a essa síndrome existe um vetor erro padrão que aproxima o vetor recebido para o
vetor código válido mais próximo. Como houve erro de apenas um bit, o vetor código mais
próximo é o próprio vetor transmitido. Então o decodificador soma o erro padrão ao vetor
recebido e entrega o vetor corrigido na sua saída.
Agora iremos demonstrar o que ocorre quando dois erros são introduzido pelo canal em um
vetor código transmitido.
Figura 11
Resultado da Simulação
Agora, o vetor recebido também não é um vetor código válido, mas o vetor código vá-
lido mais próximo deste vetor recebido não é o vetor transmitido. Perceba que a síndrome é
diferente de zero e o erro padrão ao ser somado ao vetor recebido gera um vetor código válido
mas que não foi o vetor código transmitido. Assim o codificador ao tentar corrigir o erro in-
troduzido no canal, aumentou o número de bits errados. 
Observando o código em questão podemos determinar que o dmin deste código é 3 e
sua capacidade de correção e detecção de erro podem ser obtidas, como já demonstrado ante-
riormente:
1
2
13
2
1min =

 −=

 −= dt bit (29)
  2131min =−=−= dcc bits (30)
Isso significa que este código é capaz de corrigir todo e qualquer erro de 1 bit e é ca-
paz de detectar todo e qualquer erro de 2 bits.
Erros de 3 ou mais bits pode ou não vir a ser detectado.
A opção Code74B nos permite perceber melhor a atuação desse código quando erros
ocorrem na transmissão. Observe a figura abaixo:
Figura 12
Erros corrigidos e erros detectados.
O gráfico acima mostra o número de bits errados em cada símbolo (foram transmitidos
20 símbolos) antes da atuação do código e após a atuação do código. Observe que todos os
símbolos que apresentavam um erro de bit foram detectados e corrigidos e passaram a não
mais apresentar erros. Todos os símbolos que apresentavam erros de dois bits foram detecta-
dos, mas ao serem corrigidos passaram a apresentar três erros de bit. Desta forma, o decodifi-
cador nunca entregará na recepção vetores que apresentem um ou dois erros de bit, uma vez
que o vetor entregue pelo decodificador é um vetor código válido e o número mínimo de bits
diferentes entre dois vetores códigos válidos é 3 (dmin=3).
6. Conclusões
A interatividade que os programas aqui demonstrados apresentam faz com que essas ferra-
mentas sejam e grande ajuda na formação do aluno, de forma que o mesmo possa interpretar e
fixar melhor os resultados obtidos pelo estudo teórico e simulados aqui por estes programas.
Todo o desenvolvimento dessas ferramentas visa a fácil compreensão de como os fenômenos
ocorrem e quais as causas e variáveis que influenciam esse fenômeno de modo com que os
alunos possam concluir quais são as leis que regem os princípios básicos de um sistema de
comunicação digital que utiliza modulação 16 QAM e códigos cíclicos para correção e/ou
detecção de erros.
7. Referências Bibliográficas
[1] Simon Haykin, “Communication System” 3rd edition, Prentice Hall.
[2] Bernad Sklar, “ Digital Communications – Fundamentals and Applications”, John Wiley
and Sons INC.
[3] Sophocles J. Orfanidis, “Introduction to Signal Processing”, Prentice Hall. 
	Luciano Leonel Mendes – Aluno do INATEL – Santa R
	Prof. Geraldo Gil Ramundo Gomes – Professor do IN
	Resumo
	1.Introdução
	Figura 2

Outros materiais