Buscar

Transmissão Banda Base e Passa Banda utilizado Python

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 58 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 58 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 58 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

INSTITUTO POLITECNICO CASTELO BRANCO 
 
ESCOLA SUPERIOR DE TECNOLOGIA 
 
DISCIPLINA DE Comunicações Digital 
Curso Engenharia Eletrotécnica e Telecomunicações 
TRABALHO Nº 1 
 Transmissão Banda Base e 
 Passa-Banda 
 
Aluno: 
Leandro Tito Manjate 
Brawlin Pires 
 
 
Professor: 
 Paulo Torres 
 
 
Castelo Branco, ao 31 de outubro 
2 
 
Índice 
1 Introdução ............................................................................................................................................. 4 
2 Objetivos ............................................................................................................................................... 5 
3 Resumo Teórico .................................................................................................................................... 5 
3.1 Banda base .................................................................................................................................... 5 
3.2 Modulações de Portadora Digital ................................................................................................. 5 
3.2.1 PAM ....................................................................................................................................... 5 
3.2.2 PWM...................................................................................................................................... 6 
3.2.3 PPM ....................................................................................................................................... 6 
3.3 Código de Linha ............................................................................................................................. 7 
3.3.1 Tipos de código de linha ....................................................................................................... 7 
3.3.2 Códigos de linha: onde se usam? ........................................................................................ 10 
3.4 Recetor ótico ............................................................................................................................... 11 
3.4.1 Desempenho do Código NRZ .............................................................................................. 11 
3.4.2 Desempenho do Código Unipolar ....................................................................................... 13 
3.4.3 Desempenho do Código AMI .............................................................................................. 14 
4 Resultado e Discussão ......................................................................................................................... 14 
4.1 Impulsos retangulares ................................................................................................................. 14 
4.1.1 Tau=1s e Ts=2s .................................................................................................................... 15 
4.1.2 Tau=1s e Ts=4s .................................................................................................................... 17 
4.2 Ilustração de modulação ............................................................................................................. 19 
4.2.1 PAM ..................................................................................................................................... 19 
4.2.2 PWM.................................................................................................................................... 21 
4.3 Ilustração para código de Linha .................................................................................................. 23 
4.3.1 NRZ ...................................................................................................................................... 23 
4.3.2 Diferencial ........................................................................................................................... 24 
4.3.3 Manchester ......................................................................................................................... 26 
4.3.4 RZ unipolar .......................................................................................................................... 27 
4.3.5 RZ bipolar ............................................................................................................................ 29 
4.4 Desempenho para probabilidade de erro ................................................................................... 30 
4.4.1 NRZ ...................................................................................................................................... 30 
4.4.2 AMI ...................................................................................................................................... 33 
3 
 
4.4.3 Diferencial ........................................................................................................................... 36 
4.4.4 Unipolar ............................................................................................................................... 40 
4.4.5 Manchester ......................................................................................................................... 42 
4.4.6 RZ polar ............................................................................................................................... 45 
4.5 Desempenho de probabilidade de erro transmissão passa banda. ........................................... 48 
4.5.1 ASK ...................................................................................................................................... 48 
4.5.2 FSK ....................................................................................................................................... 49 
4.5.3 4PSK..................................................................................................................................... 50 
4.5.4 4QAM .................................................................................................................................. 54 
5 Conclusões .......................................................................................................................................... 57 
6 Bibliografia .......................................................................................................................................... 58 
 
 
4 
 
1 Introdução 
No presente relatório será abortado o tema de Transmissão banda base onde o mesmo será 
implementado através de uma linguagem de Programação denominada Python e utilizaremos 
uma IDE recomenda pelo professor que possui o nome de Anaconda. 
O trabalho é constituído pelas seguintes partes. As partes são resumo teórico, a modulação de 
impulsos, a ilustração das modulações digitais com sinal modulante analógico, códigos de linha e 
o desempenho da probabilidade de erro de código de linha. 
5 
 
2 Objetivos 
• Aplicar os conhecimentos adquiridos na aula; 
• Adquir conhecimento critico; 
• Implementação da linguagem de programação python. 
3 Resumo Teórico 
Nessa parte será abortado o resumo teórico sobre a matérias que será implementada com a 
linguagem de programação em python 
3.1 Banda base 
Em telecomunicações, designamos por o sinal original que pretendemos transmitir. A voz ao 
telefone (áudio) é um sinal de banda base. O vídeo filmado por uma câmara, é também um sinal 
de banda base. 
3.2 Modulações de Portadora Digital 
A modulação analógica podem ser de três tipos PAM (Pulse Amplitude Modulation),PWM(Pulse 
Width Modulation),PPM(Pulse Position Modulation). 
3.2.1 PAM 
O sistema PAM é aquele onde se aplica diretamente o conceito de um sinal amostrado, pois o 
sinal modulado pode sercompreendido como o produto do sinal modulante pelo trem-de-pulsos 
da portadora. Na modulação PAM a amplitude dos pulsos, regularmente espaçados, é variada 
proporcionalmente aos valores amostrados do sinal contínuo de mensagem. Na amostragem 
natural, o topo de cada pulso retangular modulador pode variar com o sinal de mensagem. 
 
Figura 1 Modulação de PAM 
6 
 
3.2.2 PWM 
A modulação por largura de pulso (MLP) - mais conhecida pela sigla em inglês PWM (Pulse-
Width Modulation) - de um sinal ou em fontes de alimentação envolve a modulação de sua razão 
cíclica (duty cycle) para transportar qualquer informação sobre um canal de comunicação ou 
controlar o valor da alimentação entregue à carga. 
 
 
Figura 2 Modulação PWM 
 
3.2.3 PPM 
A modulação da posição de pulsos (PPM - pulse position modulation) consiste em posicionar 
um pulso retangular de amplitude e duração fixas dentro do intervalo de amostragem, de forma 
que a posição relativa seja proporcional ao sinal analógico. A vantagem desta modulação sobre 
as anteriores reside no fato de que o formato de pulso é sempre o mesmo, facilitando a 
regeneração do sinal. 
 
O sinal PPM é gerado a partir do PWM, bastante utilizar um circuito mono estável gatinhado na 
transição de descida dos pulsos do sinal PWM. A duração dos pulsos será determinada pela 
constante R.C 
 
7 
 
 
Figura 3 Modulação PPM, 
 
 
3.3 Código de Linha 
Códigos de linha código de transmissão em Banda Base são utilizados na transmissão digital, 
através do sinal digital original é gerado um sinal digital codificado, que é mais adequado ás 
condições às condições à transmissão no meio de comunicação. Como estes códigos são simples 
e eficientes eles são amplamente utilizados em transmissões com distâncias limitas. 
3.3.1 Tipos de código de linha 
Os principais códigos de linha são: NRZ, RZ unipolar e polar, Manchester, AMI e Diferencial. 
3.3.1.1 NRZ 
O código NRZ pode ser classificado em dois tipos: 
• NRZ (que contém os valores de “0” ou “1”) ou; 
• NRZ-BIP (que contém os valores de “1” ou “-1”). 
A codificação NRZ-BIP é obtida através da troca do nível do sinal a ser codificado, onde se tem 
o nível “0” passará a ter “-1”. 
O código NRZ BIP é utilizado na comunicação RS-232 que é a interface utilizada na transmissão 
entre o computador e outros periféricos via porta serial. 
 
8 
 
 
Figure 4 Códigos de Linha NRZ 
 
3.3.1.2 RZ 
Assim como o código NRZ o código RZ, pode ser classificado de dois tipos: 
• RZ (que contém os valores de “0” ou “1”)ou; 
• RZ-BIP (que contém os valores de “1” ou “-1”). 
O código RZ se assemelha muito ao código NRZ,a diferença está no tempo de duração do bit, no 
código NRZ o tempo de duração do bit codificado é o mesmo tempo de duração do bit do sinal 
de informação, já no RZ o tempo de duração é de apenas metade do tempo do bit do sinal de 
informação. 
 
Figure 5 Código de Linha RZ 
3.3.1.3 Manchester 
O código Manchester é um código de dois níveis de tensão:”0” e “1”. 
Quando se codifica um bit de nível alto tem-se um nível alto na primeira metade do tempo de bit 
e um nível baixo na segunda metade do tempo de bit, e quando se codifica um nível baixo, temos 
na primeira metade do tempo de bit um nível baixo, e na segunda metade do tempo de bit um 
nível alto, esta explicação está detalhada. 
9 
 
 
Figure 6 Código de Linha Manchester 
 
3.3.1.4 AMI 
Código AMI (Alternate mark inversion) também conhecida como código bipolar, associa a cada 
bit “1” um bit com nível de tensão alternado entre “1” e “-1” e com de duração de meio tempo 
de bit. Esse código foi desenvolvido originalmente na década de 60 pela empresa americana Bell, 
para sistemas PCM(Pulse Code Modulation) 
 
Figure 7 Código de Linha AMI 
 
3.3.1.5 Código Diferencial 
 
No código diferencial a informação é codificada em termos da transirão do sinal. O sinal pode 
ser invertido sem afetar a sua interpretação, sendo a informação original recuperada por 
comparação da polaridade dos símbolos adjacentes, para saber se existiram, ou não, transições. 
 
10 
 
 
Figure 8 Sequência ”1011010010” em código ”Unipolar” convertida em ”AMI”. 
 
 
 
 
Figure 9 Comparação do Código Unipolar (A) com o Diferencial (B) dos bits ”01101001”. 
 
3.3.2 Códigos de linha: onde se usam? 
 
• AMI 
Primeiro a ser usado nos sistemas de pares simétricos de cobre. Substituído por códigos AMI 
modificados. 
11 
 
• HDB3 
Norma G.703 da ITU-T para sistemas PCM multiplexados a 2, 8 e 34 Mbit/s. 
• CMI 
Norma G.703 da ITU-T para PCM multiplexado a 140 Mbit/s. 
• Código bifásico (Manchester) 
Distribuição de sinais de relógio em circuitos VLSI. Gravação magnética. Redes locais Ethernet. 
Sistema RDS (“Radio Data System”) em radiodifusão FM. 
• 4B3T 
Sistemas de alta capacidade (sistemas de longa distância em cabo coaxial a 34 e 140 Mbit/s). • 
2B1Q Acesso básico da RDIS (160 kbit/s) . 
 
• nBmB (5B6B, etc.) 
 Sistemas de alta capacidade com grande largura de banda (fibras óticas). 
 
3.4 Recetor ótico 
3.4.1 Desempenho do Código NRZ 
Ao código NRZ, com amplitude ´ ±A e uma duração de impulso ˜ τ”, aplica-se um circuito de 
decisão do sinal recebido ˜ x(t) cuja referencia e a amplitude nula ( ´ λ = 0). 
 
Figura 10 Diagrama de blocos de um recetor em banda base com código de linha NRZ 
 
12 
 
 
Figura 11 Analise do efeito do ruído em constelação BNRZ 
 
Na Fig. 11 pode-se observar a probabilidade de ocorrência de erro no caso de ser enviado o bit 
”0” 
(A =−1) e ser descodificado como A = 1 em que com λ =( a1+a2)/2 . 
A probabilidade de erro e a soma das probabilidades de todas as formas de um erro poder 
ocorrer, ou seja, 
 
porque 
A probabilidade de erro para BNRZ e dada por 
 
 
13 
 
 
 
 
Para Códigos QNRZ 
 
com Ed = 4A2 τ , logo 
 
logo a probabilidade de erro e dada por 
 
 
3.4.2 Desempenho do Código Unipolar 
 
O desempenho do código unipolar em presença do ruído gaussiano pode ser deduzido a partir do 
desempenho do código bipolar, em que o limiar passa a ser ´ λ = A/2, passando a probabilidade 
de erro a ser 
 
14 
 
 
Figura 13 Comparação do desempenho para códigos multinível 
 
3.4.3 Desempenho do Código AMI 
No código AMI devem ser considerados dois limiares de decis ´ ao com amplitudes iguais a ˜ 
metade da amplitude do impulso da polaridade respetiva (A/2). A diferença no desempenho entre 
os código AMI e Unipolar ´ e devida ao facto de um ”1” ´ transmitido no código AMI tanto 
poder ser afetado por ruido positivo como negativo, enquanto que o mesmo ”1” no código 
unipolar s ´ o pode ser afetado por ruido positivo. 
Como os símbolos são equiparáveis ( p0 = p1 = 1/2) e existem duas situações em que pode ˜ 
ocorrer erro no bit ”1” enquanto ocorre apenas uma no caso do bit ”1”. 
 
4 Resultado e Discussão 
Em seguida será discutido os resultados obtidos nas implementações dos códigos feitos. 
4.1 Impulsos retangulares 
Nesta primeira parte será executada dois impulsos retangular um que possui um ducty cyle de 
50% e outro com duty cyle de 25%. 
15 
 
4.1.1 Tau=1s e Ts=2s 
Nesse programa será executado um código que possui o perdido de 2s e a duração de 1s,assim 
formado um sinal retangular com 50% de duty cicly. 
Para executar o programa foi implementado o seguinte código. 
# -*- coding: utf-8 -*- 
""" 
Created on Tue Oct 24 22:28:05 2017 
 
@author: Leandro 
""" 
import matplotlib.pyplot as plt 
from scipy import signal 
#from numpy import * 
import numpy as np 
from numpy.fft import fft, fftshift 
 
namostras_simb= 2**8 # numero de amostras por simbolo 2**5 
t_lim = 2**3 # 2**2 
N = t_lim*namostras_simb; 
f_lim = N/t_lim 
t = np.linspace(0,t_lim-1/namostras_simb,N) 
f = np.linspace(-f_lim/2,f_lim/2-f_lim/N,N) 
 
 
 
App = 1 
Ts = 2 
tau=1 
fs = 1/Ts 
ductie=tau/Ts 
sc = App*signal.square(2 * np.pi * fs * t,ductie)/2+.5 
 
Sc_f = fftshift(fft(sc))/N # fft computing and normalization 
 
ax1 = plt.subplot(211) 
ax1.plot(t,sc) 
ax1.set_xticks(np.arange(0,t_lim+.1,1)) 
#ax1.set_xticklabels(arange(0,2,.5)) 
plt.xlim(0, 5) 
ax1.set_xlabel('t (seg.)') 
ax1.set_ylabel('Amplitude') 
plt.grid(True) 
plt.show() 
 
plt.stem(f, abs(Sc_f)) 
plt.xlim(-7.01, 7.01) 
16 
 
plt.grid(True) 
plt.show() 
 
Nesse código foi utilizado as bibliotecas numpy ,scipy , matplotlib.pyplot pelo qual essas 
bibliotecas são usadas para criar gráficos de forma similar como o matlab.Onde o numpy é o 
que permite trabalhar com arranjos, vetores e matrizes de N dimensões. O Scipy é o que permite 
transmitir sinal que podem ser retangulares, triangular e etc. O matplotlib.pyplot é o que permite 
configurar e mostrar os gráficos. 
4.1.1.1 Analise no domínio do tempo 
 
Com a implementação do código acima foi obtido como o resultado o gráfico abaixo. Porém o 
gráfico esta no domino do tempo. 
 
 
Figure 14 Sinal Retangular no domino do tempo 
Podemos observar no gráfico que o sinal possui ducty cyle de 50% porque a duração do sinal é 
igual a metade do período. 
 
17 
 
4.1.1.2 Analise no domínio da frequência 
Em seguida com o mesmo código verificamos o sinal obtido no gráfico acima, porém no domino 
da frequência e foi obtido o gráfico abaixo. 
 
 
Figure 15 Espectro no domínio da frequência 
 
4.1.2 Tau=1s e Ts=4s 
Nesse programa será executado um código que possui o perdido de 4s e a duração de 1s, assim 
formado um sinal retangular com 25% de duty ciclye. 
Para executar o programa foi implementado o seguinte código. 
# -*- coding: utf-8 -*- 
""" 
Created on Tue Oct 24 23:02:09 2017 
 
@author: Leandro 
""" 
 
import matplotlib.pyplot as plt 
from scipy import signal 
#from numpy import * 
import numpy as np 
from numpy.fft import fft, fftshift 
 
namostras_simb = 2**8 # numero de amostras por simbolo 2**5 
t_lim = 2**3 # 2**2 
N = t_lim*namostras_simb; 
f_lim = N/t_lim 
t = np.linspace(0,t_lim-1/namostras_simb,N) 
f = np.linspace(-f_lim/2,f_lim/2-f_lim/N,N) 
 
 
18 
 
 
App = 1 
Ts = 4 
tau=1 
fs = 1/Ts 
ductie=tau/Ts 
sc = App*signal.square(2 * np.pi * fs * t,ductie)/2+.5 
 
Sc_f = fftshift(fft(sc))/N # fft computing and normalization 
 
ax1 = plt.subplot(211) 
ax1.plot(t,sc) 
ax1.set_xticks(np.arange(0,t_lim+.1,1)) 
#ax1.set_xticklabels(arange(0,2,.5)) 
plt.xlim(0, 5) 
ax1.set_xlabel('t (seg.)') 
ax1.set_ylabel('Amplitude') 
plt.grid(True) 
plt.show() 
 
plt.stem(f, abs(Sc_f)) 
ax2.set_xlabel('f (Hz)') 
ax2.set_ylabel('|Espetro|') 
plt.xlim(-4, 4) 
plt.grid(True) 
plt.show() 
 
4.1.2.1 Analise no domínio do tempo 
Com a implementação do código acima foi obtido como o resultado o gráfico abaixo. Porém o 
gráfico esta no domino do tempo. 
 
Figure 16 Sinal Retangular no domino do tempo 
 
Podemos observar o sinal e notar que o duty cycle é de 25% isso porque a duração do sinal é 
igual há ¼ do período do sinal. 
19 
 
4.1.2.2 Analise no domínio da frequência 
Em seguida com o mesmo código verificamos o sinal obtido no gráfico acima, porém no domino 
da frequência e foi obtido o gráfico abaixo. 
 
 
Figure 17 Espectro no domínio da frequência 
 
4.2 Ilustração de modulação 
Nessa parte será ilustrada a implementação dos seguintes códigos PAM, PWM e PPM. 
4.2.1 PAM 
Será apresentada a modulação de impulsos com amplitude onde a amplitude é que varia. Para 
implementação dessa modulação foi utilizado o código abaixo. 
# -*- coding: utf-8 -*- 
""" 
Created on Tue Oct 24 23:08:36 2017 
 
@author: Leandro 
""" 
 
import matplotlib.pyplot as plt 
from scipy import signal 
#from numpy import * 
import numpy as np 
from numpy import * 
from numpy.fft import fft, ifft, fftshift 
from numpy.fft import fft, fftshift 
 
 
20 
 
 
 
namostras_simb = 2**7 # numero de amostras por simbolo 2**5 
t_lim = 2**3 # 2**2 
N = t_lim*namostras_simb; 
f_lim = N/t_lim 
t = linspace(0,t_lim-1/namostras_simb,N) 
f = linspace(-f_lim/2,f_lim/2-f_lim/N,N) 
 
App = 1 
Ts = 1/2 
fs = 1/Ts 
tau = Ts/2 
scR = App*signal.square(2 * np.pi * fs * t)/2+.5 
 
Tm=Ts*7 
fm=1/Tm 
scA = cos(2*pi*fm*t) 
 
pam=scA*scR 
Sc_f = fftshift(fft(pam))/N 
 
plt.subplot(211) 
plt.plot(t, pam) 
plt.ylim(-1.5, 1.5) 
 
 
plt.subplot(212) 
plt.stem(f, abs(Sc_f)) 
 
plt.xlim(-1, 1) 
plt.grid(True) 
plt.show() 
 
 
 
 
 
 
21 
 
4.2.1.1 Analise no domínio do tempo 
Depois da implementação do código acima foi obtido o gráfico abaixo. 
 
Figura 18 Modulação PAM no domínio do tempo 
 
Podemos verificar que a amplitude varia ao longo do tempo e se tivéssemos um sinal sinusoidal, 
podia se verificar que quando a amplitude é máxima no sinal resultante a amplitude é máxima e 
vice-versa. 
4.2.1.2 Analise no domínio da frequência 
Em seguida analisamos o sinal no domino da frequência e obtivemos o gráfico abaixo. 
 
 
Figure 19 Modulação PAM no domínio da frequência 
 
4.2.2 PWM 
Será apresentada a modulação de impulsos com largura e onde a duração do impulso é que varia. 
Para implementação dessa modulação foi utilizado o código abaixo. 
# -*- coding: utf-8 -*- 
""" 
Created on Wed Oct 25 01:17:08 2017 
 
@author: Leandro 
""" 
 
from scipy import signal 
import matplotlib.pyplot as plt 
import numpy as np 
22 
 
 
 
namostras_simb = 2**8 # numero de amostras por simbolo 2**5 
t_lim = 2**3 # 2**2 
N = t_lim*namostras_simb; 
f_lim = N/t_lim 
t = np.linspace(0,t_lim-1/namostras_simb,N) 
f = np.linspace(-f_lim/2,f_lim/2-f_lim/N,N) 
 
 
 
App = 1 
Ts = 1/2 
fs = 1/Ts 
tau = Ts/2 
Tm=Ts*15 
fm=1/Tm 
 
 
 
plt.figure() 
sig = np.sin(2 * np.pi * t*fm) 
pwm = signal.square(2 * np.pi * fs * t, duty=(sig + 1)/2) 
 
Sc_f = fftshift(fft(pwm))/N 
 
plt.subplot(211) 
plt.plot(t, pwm) 
plt.ylim(-1.5, 1.5) 
 
plt.subplot(212) 
plt.stem(f, abs(Sc_f)) 
 
plt.xlim(-1, 1) 
plt.grid(True) 
plt.show() 
 
 
 
 
4.2.2.1 Analise no domínio do tempo 
Podemos verificar que o PWM no domínio da frequência varia a largura da duração do sinal 
onde quando o sinal modulante da sinusoide esta no máximo o sinal modulado fica com uma 
largura máxima e quando o sinal modulante está no mínimo o sinal modulado fica com a largura 
máxima. 
23 
 
 
Figura 20 Modulação PWM no domínio do tempo 
4.2.2.2 Analise no domínio da frequência 
No domino da frequência podemos observar que o espectro nas frequência bem próxima de zero 
possui um amplitude alta e ao longo das frequências positivas ou negativas a amplitude do 
espectro é próximo de zero. 
 
Figura 20 Modulação PWM no domínio da frequência 
 
4.3 Ilustração para código de Linha 
Em seguida será executados códigos de linha relacionados com NRZ, AMI e Manchester,RZ 
polar,RZ unipolar. 
4.3.1 NRZ 
Primeiramente será executado o NRZ que consistir em transformar o 1 em +1 e o 0 em -1. 
Para implementar a explicação em cima foi usado o código abaixo. 
import numpy as np 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
 
N=1*10**6 
sn=randint(0,2,size = N) 
 
NRZ=-((-1)**sn) 
print('sinal ',sn) 
24 
 
print('NRZ ',NRZ)Através do código a cima obtivemos como resultado abaixo. 
 
Figure 21 Código de Linha NRZ 
Podemos verificar no código que quando o sinal é 0 no NRZ o valor é 1 e quando o sinal é 1 o valor no 
NRZ é -1. 
4.3.2 Diferencial 
Em seguida foi feita a codificação diferencial que no xor negado entre o sinal transmitido com o sinal 
resultado do xor.Na implementação abaixo foi feita a codificação e a descodificação. 
# -*- coding: utf-8 -*- 
""" 
Created on Fri Oct 27 19:19:09 2017 
 
@author: Leandro 
""" 
print('Codificacao') 
print('') 
N=8 
dk_1=randint(0,1,size = N) 
dk_1[0]=1 
memoria=randint(0,1,size = N) 
memoria[0]=1 
mk=[1,0,0,1,0,1,1,0] 
dk=randint(0,1,size = N) 
dkAux=randint(0,1,size = N) 
mkDescodificado=randint(0,1,size = N) 
## Codificador 
for i in range(0, len(dk)): 
 dk_1[i]=memoria[i] 
 dkAux[i]=dk_1[i]^mk[i] 
 if(dkAux[i]==1): 
 dk[i]=0 
 # print(dk[i]) 
 if(dkAux[i]==0): 
 dk[i]=1 
 
 if(i<(N-1)): 
25 
 
 memoria[i+1]=dk[i] 
 
 
print('mk ',mk) 
print('dk_1 ',dk_1) 
print('dk ',dk) 
 
#Descodificador 
print('') 
print('Descodificacao') 
dkNot=randint(0,1,size = N) 
memoria[0]=1 
for i in range(0, len(dk)): 
 dk_1[i]=memoria[i] 
 if(i<(N-1)): 
 memoria[i+1]=dk[i] 
 
 if(dk[i]==1): 
 dkNot[i]=0 
 
 if(dk[i]==0): 
 dkNot[i]=1 
 
 mkDescodificado[i]=dkNot[i]^dk_1[i] 
 
print('dk ',dk) 
print('dkNot ',dkNot) 
print('dk_1 ',dk_1) 
print('mkDescodificado ',mkDescodificado) 
 
 
 
 
A partir do código acima foi obtido como o resultado a figura abaixo. 
26 
 
 
Figure 22 Código de linha diferencial 
 
 
 
4.3.3 Manchester 
Despois foi feito código Manchéster que consiste em 1 em Manchéster ser representado por 
V-V+, e o 0 ser representado por +-. Para implementação da explicação foi feito o código abaixo. 
# -*- coding: utf-8 -*- 
""" 
Created on Thu Oct 26 16:22:16 2017 
 
@author: Leandro 
""" 
 
import numpy as np 
from numpy import* 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
from scipy import signal 
 
N=1*10**6 
sn=[1,1,1,1] 
sd=randint(0,2,size = N) 
manchester=[0,0,0,0,0,0,0,0] 
 
 
j=0 
27 
 
for i in range(0, 4,): 
 if(sn[i]==1): 
 manchester[i+j]=0 
 manchester[i+j+1]=1 
 j=j+1 
 m=signal.square(2 * np.pi * t,1) 
 
 if(sn[i]==0): 
 manchester[i+j]=1 
 manchester[i+j+1]=0 
 j=j+1 
 m=0 
 
 
 
print('sinal ', sn) 
print('manchester ',manchester) 
Com a implementação do código acima foi obtido a figura em baixo. 
 
Figure 23 Código de linha Manchester 
No resultado do Manchester o 0 representa o V- e o 1 representa o V+. Então sinal 1 no Manchester é 
representado por 0 1 e o sinal 0 é representado no Manchester por 1 0. 
4.3.4 RZ unipolar 
Depois foi escrito o código RZ Unipolar que consiste em transformar o sinal 1 no RZ unipolar que seria 
V+ e 0, e o sinal 0 é representado no RZ unipolar por 0. Em seguida segue o código. 
 
# -*- coding: utf-8 -*- 
""" 
Created on Fri Oct 27 18:35:28 2017 
 
@author: Leandro 
""" 
 
# -*- coding: utf-8 -*- 
""" 
Created on Fri Oct 27 18:29:38 2017 
 
@author: Leandro 
""" 
28 
 
 
# -*- coding: utf-8 -*- 
""" 
Created on Thu Oct 26 16:22:16 2017 
 
@author: Leandro 
""" 
 
import numpy as np 
from numpy import* 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
from scipy import signal 
 
N=1*10**6 
sn=[1,1,0,0] 
sd=randint(0,2,size = N) 
nrzuniPolar=[0,0,0,0,0,0,0,0] 
 
 
j=0 
for i in range(0, 4,): 
 if(sn[i]==1): 
 nrzuniPolar[i+j]=1 
 nrzuniPolar[i+j+1]=0 
 j=j+1 
 
 
 if(sn[i]==0): 
 nrzuniPolar[i+j]=-0 
 nrzuniPolar[i+j+1]=0 
 j=j+1 
 
 
 
 
print('sinal ', sn) 
print('RZunipolar ',nrzuniPolar) 
 
Em seguida será apresentado o resultado do código implementado. 
29 
 
 
Figure 24 Código de linha RZ unipolar 
Podemos observar o resultado e notar que quando o sinal é 1 no RZunipolar é representado por 10 e o 
sinal 0 no RZunipolar é representado por 0. 
4.3.5 RZ bipolar 
Em seguida foi implementado o código RZ bipolar que consisti que o sinal 1 é representado no RZ 
bipolar com V+ e 0 e o sinal 0 é representado no RZ bipolar por V- e 0. 
""" 
Created on Thu Oct 26 16:22:16 2017 
 
@author: Leandro 
""" 
 
import numpy as np 
from numpy import* 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
from scipy import signal 
 
N=1*10**6 
sn=[1,0,0,0] 
sd=randint(0,2,size = N) 
nrzPolar=[0,0,0,0,0,0,0,0] 
 
 
j=0 
for i in range(0, 4,): 
 if(sn[i]==1): 
 nrzPolar[i+j]=1 
 nrzPolar[i+j+1]=0 
 j=j+1 
 
 
 if(sn[i]==0): 
 nrzPolar[i+j]=-1 
 nrzPolar[i+j+1]=0 
 j=j+1 
30 
 
 
 
 
 
print('sinal ', sn) 
print('RZpolar ',nrzPolar) 
 
Depois como resultado foi obtido a figura abaixo. 
 
Figure 25 RZ bipolar 
Podes observar que o sinal 1 no RZ polar é representado por 1 e 0 e o sinal 0 é representado por -1 e 0. 
4.4 Desempenho para probabilidade de erro 
Nessa parte será implementada a simulação de transmissão e receção dos códigos de linha e será 
analisado a probabilidade de erros ocorrer. 
4.4.1 NRZ 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
#################################################### 
############Importação de Bibliotecas############### 
#################################################### 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
#################################################### 
#####################Código NRZ #################### 
#################################################### 
qfunc = lambda x: (1/2)*(scipy.special.erfc(x/np.sqrt(2))) 
 
EbNodB=np.arange(0,11,2) 
ebno=10.0**(EbNodB/10.0) 
print ('EbNo:', EbNodB) 
 
M=2 
k=int(np.log2(M)) 
print("M = {a:2d} simbolos -->> {b:1d} bit/simbolo".format(a=M,b=k)) 
 
31 
 
eb=1 
N=1*10**6 
 
SIMS=10 
print('SIMS = ', SIMS) 
##################### DATA ############################## 
sn=randint(0,2,size = N) 
print('sn',sn) 
##################### MODULATOR ######################### 
sm=-((-1)**sn) 
print('sm:',sm) 
########################################################## 
itr = len(EbNodB) 
ber = [None]*itr 
ber_t = [None]*itr 
########################################################## 
###################### Simulação ######################### 
print("") 
for n in range(0,len(EbNodB)): 
 erros=0 
# print('EbNo ', EbNodB[n],' -->>Erros = ', erros) 
 
 sigma = np.sqrt(eb/(2*ebno[n])) 
 
 for sims in range(1,SIMS+1,1): 
 yn=sm +sigma*randn(1, N) 
##################### DEMODULATOR ######################## 
 sm_hat=yn>0 
########################################################## 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################ 
##################### Teórica############################## 
ber_t = qfunc(np.sqrt(ebno*2)) 
############################################################# 
print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
################## Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
plt.axis([0, 10, 1e-6, 0.1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('Eb/No(dB)') 
plt.ylabel('BER') 
plt.grid(True) 
plt.title('NRZ') 
32 
 
plt.show() 
############################################################### 
 for sims in range(1,SIMS+1,1): 
 yn=sm +sigma*randn(1, N) 
##################### DEMODULATOR ######################## 
 sm_hat=yn>0 
########################################################## 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################ 
##################### Teórica ############################## 
ber_t = qfunc(np.sqrt(ebno*2)) 
############################################################# 
print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
################## Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
plt.axis([0, 10, 1e-6, 0.1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('Eb/No(dB)') 
plt.ylabel('BER') 
plt.grid(True) 
plt.title('NRZ') 
plt.show() 
############################################################### 
 
Executado o código acima foi obtido o resultado mostrado abaixo. 
 
Figura 24 Probabilidade de erro de NRZ 
O código acima podemos verificar os erros detetado nos diferentes Eb/No e a teoria de ber. 
33 
 
Em seguida veremos o gráfico da probabilidade de erro teórico e simulado. 
 
Figure 25 Gráfico da probabilidade de erro 
4.4.2 AMI 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
#################################################### 
############Importação de Bibliotecas############### 
#################################################### 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
import array 
 
#################################################### 
#####################Código AMI #################### 
#################################################### 
qfunc = lambda x: (1/2)*(scipy.special.erfc(x/np.sqrt(2))) 
 
EbNodB=np.arange(0,11,2) 
 
ebno=10.0**(EbNodB/10.0) 
print ('EbNo:', ebno) 
 
M=2 
k=int(np.log2(M)) 
print("M = {a:2d} simbolos -->> {b:1d} bit/simbolo".format(a=M,b=k)) 
 
eb=1 
N=1*10**6 
34 
 
 
SIMS=10 
print('SIMS = ', SIMS) 
##################### DATA ############################## 
#sn=randint(0,2,size = N) 
sn=[1,1,0,0] 
print('DATA',sn) 
##################### MODULATOR ######################### 
somaEntrada=0 
#ami=randint(0,1,size = N) 
ami=randint(0,1,size = 4) 
somaEntrada=0 
for i in range(0, len(sn)): 
 if(sn[i]==1): 
 somaEntrada=somaEntrada+1 
 if(somaEntrada%2==1): 
 ami[i]=1 
 else: 
 ami[i]=-1 
 
 else: 
 ami[i]=0 
 
 
sm=ami 
 
print('sm:',sm) 
########################################################## 
itr = len(EbNodB) 
ber = [None]*itr 
ber_t = [None]*itr 
########################################################## 
###################### Simulação ######################### 
print("") 
for n in range(0,len(EbNodB)): 
 erros=0 
# print('EbNo ', EbNodB[n],' -->>Erros = ', erros) 
 
 sigma = np.sqrt(eb/(2*ebno[n])) 
 
 for sims in range(1,SIMS+1,1): 
 #yn=sm +sigma*randn(1, N)*0 
 yn=sm+sigma*randn(1,4) 
 
 print('yn ',yn) 
##################### DEMODULATOR ######################## 
 yn=np.abs(yn) 
 sm_hat=yn>0 
35 
 
########################################################### 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
# 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################# 
###################### Teórica ############################## 
ber_t = 3/2*qfunc(np.sqrt(ebno)) 
############################################################## 
print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
################### Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
##plt.axis([0, 10, 1e-6, 0.1]) 
#plt.xscale('linear') 
#plt.yscale('log') 
#plt.xlabel('Eb/No(dB)') 
#plt.ylabel('BER') 
#plt.grid(True) 
#plt.title('AMI') 
#plt.show() 
################################################################ 
 
Executado o código acima foi obtido o resultado mostrado abaixo. 
 
Figure 26 Probabilidade de erros 
No código acima podemos verificar os erros detetado nos diferentes Eb/No e a teoria de ber. 
Em seguida veremos o gráfico da probabilidade de erro teórico e simulado. 
 
36 
 
 
Figure 27 Gráfico de probabilidade de erro. 
4.4.3 Diferencial 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
#################################################### 
############Importação de Bibliotecas############### 
#################################################### 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
#################################################### 
#####################Código Diferencial #################### 
#################################################### 
qfunc = lambda x: (1/2)*(scipy.special.erfc(x/np.sqrt(2))) 
 
EbNodB=np.arange(0,11,2) 
ebno=10.0**(EbNodB/10.0) 
print ('EbNo:', EbNodB) 
 
M=2 
k=int(np.log2(M)) 
print("M = {a:2d} simbolos -->> {b:1d} bit/simbolo".format(a=M,b=k)) 
 
eb=1 
N=1*10**6 
 
SIMS=10 
print('SIMS = ', SIMS) 
##################### DATA ############################## 
sn=randint(0,2,size = N) 
print('DATA',sn) 
##################### MODULATOR ######################### 
37 
 
 
dk_1=randint(0,1,size = N) 
dk_1[0]=1 
memoria=randint(0,1,size = N) 
memoria[0]=1 
mk=randint(0,2,size = N) 
dk=randint(0,1,size = N) 
yn==randint(0,1,size = N) 
dkAux=randint(0,1,size = N) 
mkDescodificado=randint(0,1,size = N) 
## Codificador 
for i in range(0, len(dk)): 
 dk_1[i]=memoria[i] 
 dkAux[i]=dk_1[i]^mk[i] 
 if(dkAux[i]==1): 
 dk[i]=0 
 # print(dk[i]) 
 if(dkAux[i]==0): 
 dk[i]=1 
 
 if(i<(N-1)): 
 memoria[i+1]=dk[i] 
 
 
print('mk ',mk) 
print('dk_1 ',dk_1) 
print('dk ',dk) 
 
 
sm=dk 
print('sm:',sm) 
########################################################## 
itr = len(EbNodB) 
ber = [None]*itr 
ber_t = [None]*itr 
########################################################## 
###################### Simulação ######################### 
print("") 
dkNot=randint(0,1,size = N) 
memoria[0]=1 
for n in range(0,len(EbNodB)): 
 erros=0 
# print('EbNo ', EbNodB[n],' -->>Erros = ', erros) 
 
 sigma = np.sqrt(eb/(2*ebno[n])) 
 
 for sims in range(1,SIMS+1,1): 
 yn=sm +sigma*randn(1, N) 
38 
 
##################### DEMODULATOR ######################## 
# dkNot=randint(0,1,size = N) 
# memoria[0]=1 
# 
# for i in range(0, N): 
# dk_1[i]=memoria[i] 
# if(i<(N-1)): 
# memoria[i+1]=dk[i] 
# 
# if(dk[i]==1): 
# dkNot[i]=0 
# 
# if(dk[i]==0): 
#dkNot[i]=1 
# 
# mkDescodificado[i]=dkNot[i]^dk_1[i] 
# print(mkDescodificado) 
 sm_hat=yn>0.5 
 
########################################################### 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################# 
###################### Teórica ############################## 
ber_t = 2*qfunc(np.sqrt(2*ebno)) 
############################################################## 
print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
print('yn',yn) 
################### Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
plt.axis([0, 10, 1e-6, 0.1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('Eb/No(dB)') 
plt.ylabel('BER') 
plt.grid(True) 
plt.title('Diferencial') 
plt.show() 
################################################################ 
 
39 
 
Executado o código acima foi obtido o resultado mostrado abaixo. 
 
Figura 28 Probabilidade de erros 
No código acima podemos verificar os erros detetado nos diferentes Eb/No e a teoria de ber. 
Em seguida veremos o gráfico da probabilidade de erro teórico e simulado. 
 
 
 
40 
 
 
4.4.4 Unipolar 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
#################################################### 
############Importação de Bibliotecas############### 
#################################################### 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
#################################################### 
#####################Código Unipolar #################### 
#################################################### 
qfunc = lambda x: (1/2)*(scipy.special.erfc(x/np.sqrt(2))) 
 
EbNodB=np.arange(0,11,2) 
ebno=10.0**(EbNodB/10.0) 
print ('EbNo:', EbNodB) 
 
M=2 
k=int(np.log2(M)) 
print("M = {a:2d} simbolos -->> {b:1d} bit/simbolo".format(a=M,b=k)) 
 
eb=.5 
N=1*10**6 
 
SIMS=10 
print('SIMS = ', SIMS) 
##################### DATA ############################## 
sn=randint(0,2,size = N) 
print('sn',sn) 
##################### MODULATOR ######################### 
sm=sn 
print('sm:',sm) 
########################################################## 
itr = len(EbNodB) 
ber = [None]*itr 
ber_t = [None]*itr 
########################################################## 
###################### Simulação ######################### 
print("") 
for n in range(0,len(EbNodB)): 
 erros=0 
# print('EbNo ', EbNodB[n],' -->>Erros = ', erros) 
 
41 
 
 sigma = np.sqrt(eb/(2*ebno[n])) 
 
 for sims in range(1,SIMS+1,1): 
 yn=sm +sigma*randn(1, N) 
 print('yn',yn) 
##################### DEMODULATOR ######################## 
 sm_hat=yn>0.5 
 
########################################################## 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################ 
##################### Teórica ############################## 
ber_t = qfunc(np.sqrt(ebno)) 
############################################################# 
print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
################## Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
plt.axis([0, 10, 1e-6, 0.1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('Eb/No(dB)') 
plt.ylabel('BER') 
plt.grid(True) 
plt.title('Codigo Unipolar') 
plt.show() 
############################################################### 
 
Executado o código acima foi obtido o resultado mostrado abaixo. 
 
42 
 
 
 
4.4.5 Manchester 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo 
#################################################### 
############Importação de Bibliotecas############### 
from IPython import get_ipython 
get_ipython().magic('reset -sf') 
import pdb 
#################################################### 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
#################################################### 
#####################Código Manchester #################### 
#################################################### 
qfunc = lambda x: (1/2)*(scipy.special.erfc(x/np.sqrt(2))) 
 
EbNodB=np.arange(0,11,2) 
ebno=10.0**(EbNodB/10.0) 
print ('EbNo:', EbNodB) 
 
M=2 
k=int(np.log2(M)) 
print("M = {a:2d} simbolos -->> {b:1d} bit/simbolo".format(a=M,b=k)) 
 
eb=1 
N=1*10**6 
 
SIMS=10 
print('SIMS = ', SIMS) 
##################### DATA ############################## 
#sn=randint(0,2,size = N) 
 
##################### MODULATOR ######################### 
#sn=np.array([1,1,0,0],dtype=int)a = np.array([[1, 2], [3, 4]]) 
#>>> b = np.array([[5, 6]]) 
#manchester=randint(0,2,size = 2*N) 
#sm=randint(0,2,size = N) 
 
#sn=[1,1,0,0] 
sn=randint(0,2,size = 4) 
manchester=randint(0,1,size = 8) 
43 
 
yn=randint(0,1,size = 4) 
yn1=randint(0,1,size = 8) 
#manchester=[0,0,0,0,0,0,0,0] 
 
 
j=0 
for i in range(0, 4): 
 if(sn[i]==1): 
 manchester[i+j]=-1 
 manchester[i+j+1]=1 
 j=j+1 
 
 
 if(sn[i]==0): 
 manchester[i+j]=1 
 manchester[i+j+1]=-1 
 j=j+1 
 m=0 
 
 
print('sinal ', sn) 
print('manchester ',manchester) 
sm=manchester 
 
 
 
########################################################## 
itr = len(EbNodB) 
ber = [None]*itr 
ber_t = [None]*itr 
########################################################## 
####################### Simulação ######################### 
print("") 
j=0 
for n in range(0,len(EbNodB)): 
 erros=0 
 print('EbNo ', EbNodB[n],' -->>Erros = ', erros) 
 sigma = np.sqrt(eb/(2*ebno[n])) 
 
 for sims in range(1,SIMS+1,1): 
 yn1=sm +sigma*randn(1,8) 
 print(yn1) 
 
 for i in range(0,3): 
 j=i+1 
 yn[i]=yn1[0,i]+yn1[0,j] 
##################### DEMODULATOR ######################## 
 # pdb.set_trace() 
44 
 
############################################################ 
 sm_hat=yn>0 
 print(yn) 
########################################################## 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################ 
##################### Teórica ############################## 
ber_t = qfunc(np.sqrt(ebno*2)) 
############################################################# 
print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
################## Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
plt.axis([0, 10, 1e-6, 0.1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('Eb/No(dB)') 
plt.ylabel('BER') 
plt.grid(True) 
plt.title('Manchester') 
plt.show() 
############################################################### 
 
Executado o código acima foi obtido o resultado mostrado abaixo. 
 
 
 
45 
 
4.4.6 RZ polar 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
################################################################Importação de Bibliotecas############### 
from IPython import get_ipython 
get_ipython().magic('reset -sf') 
import pdb 
#################################################### 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
#################################################### 
#####################Código Manchester #################### 
#################################################### 
qfunc = lambda x: (1/2)*(scipy.special.erfc(x/np.sqrt(2))) 
 
EbNodB=np.arange(0,11,2) 
ebno=10.0**(EbNodB/10.0) 
print ('EbNo:', EbNodB) 
 
M=2 
k=int(np.log2(M)) 
print("M = {a:2d} simbolos -->> {b:1d} bit/simbolo".format(a=M,b=k)) 
 
eb=1 
N=1*10**6 
 
SIMS=10 
print('SIMS = ', SIMS) 
##################### DATA ############################## 
#sn=randint(0,2,size = N) 
 
##################### MODULATOR ######################### 
#sn=np.array([1,1,0,0],dtype=int)a = np.array([[1, 2], [3, 4]]) 
#>>> b = np.array([[5, 6]]) 
#manchester=randint(0,2,size = 2*N) 
#sm=randint(0,2,size = N) 
 
#sn=[1,1,0,0] 
sn=randint(0,2,size = 4) 
rzBipolar=randint(0,1,size = 8) 
yn=randint(0,1,size = 4) 
yn1=randint(0,1,size = 8) 
#manchester=[0,0,0,0,0,0,0,0] 
 
46 
 
 
j=0 
for i in range(0, 4): 
 if(sn[i]==1): 
 rzBipolar[i+j]=1 
 rzBipolar[i+j+1]=0 
 j=j+1 
 
 
 if(sn[i]==0): 
 rzBipolar[i+j]=-1 
 rzBipolar[i+j+1]=0 
 j=j+1 
 m=0 
 
 
print('sinal ', sn) 
print('manchester ',rzBipolar) 
sm=rzBipolar 
 
 
 
########################################################## 
itr = len(EbNodB) 
ber = [None]*itr 
ber_t = [None]*itr 
########################################################## 
####################### Simulação ######################### 
print("") 
j=0 
for n in range(0,len(EbNodB)): 
 erros=0 
 print('EbNo ', EbNodB[n],' -->>Erros = ', erros) 
 sigma = np.sqrt(eb/(2*ebno[n])) 
 
 for sims in range(1,SIMS+1,1): 
 yn1=sm +sigma*randn(1,8) 
 print(yn1) 
 
 for i in range(0,3): 
 j=i+1 
 yn[i]=yn1[0,i]+yn1[0,j] 
##################### DEMODULATOR ######################## 
 # pdb.set_trace() 
############################################################ 
 sm_hat=yn>0 
 print(yn) 
########################################################## 
47 
 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################ 
##################### Teórica ############################## 
ber_t = 2*qfunc(np.sqrt(ebno*2)) 
############################################################# 
print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
################## Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
plt.axis([0, 10, 1e-6, 0.1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('Eb/No(dB)') 
plt.ylabel('BER') 
plt.grid(True) 
plt.title('RZ Bipolar') 
plt.show() 
############################################################### 
 
Executado o código acima foi obtido o resultado mostrado abaixo. 
 
 
 
 
 
 
48 
 
4.5 Desempenho de probabilidade de erro transmissão passa banda. 
Nessa secção será avaliado a probabilidade de erro da transmissão passa banda de entre quais entra o 
ASK,FSK,PSK,4QAM,4PSK. 
4.5.1 ASK 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
# -*- coding: utf-8 -*- 
""" 
Created on Tue Dec 19 23:47:17 2017 
 
@author: Leandro 
""" 
from numpy import sqrt 
from numpy.random import rand, randn 
import matplotlib.pyplot as plt 
N = 5000000 
EbNodB_range = range(0,14) 
itr = len(EbNodB_range) 
ber = [None]*itr 
for n in range (0, itr): 
 EbNodB = EbNodB_range[n] 
 EbNo=10.0**(EbNodB/10.0) 
 x = 2 * (rand(N) >= 0.5)-1 
 noise_std = 1/sqrt(EbNo) 
 y = x + noise_std * randn(N) 
 y_d = 2 * (y >= 0) - 1 
 errors = (x != y_d).sum() 
 ber[n] = 2 * errors / N 
 
plt.plot(EbNodB_range, ber, 'bo', EbNodB_range, ber, 'k') 
plt.axis([0, 13, 1e-6, 1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('EbNo(dB)') 
plt.ylabel('Erros') 
plt.grid(True) 
plt.title('Modelação ASK') 
plt.show() 
 
 
~ 
 
49 
 
Com a base do código acima obtivemos o gráfico abaixo. 
 
 
4.5.2 FSK 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
# -*- coding: utf-8 -*- 
""" 
Created on Tue Dec 19 23:50:02 2017 
 
@author: Leandro 
""" 
 
from numpy import sqrt 
from numpy.random import rand, randn 
import matplotlib.pyplot as plt 
N = 5000000 
EbNodB_range = range(0,11) 
itr = len(EbNodB_range) 
ber = [None]*itr 
for n in range (0, itr): 
 EbNodB = EbNodB_range[n] 
 EbNo=10.0**(EbNodB/10.0) 
 x = 2 * (rand(N) >= 0.5) -1 
 noise_std = 1/sqrt(EbNo) 
 y = x + noise_std * randn(N) 
 y_d = 2 * (y >= 0) - 1 
 errors = (x != y_d).sum() 
 ber[n] = 1.0 * errors / N 
 
plt.plot(EbNodB_range, ber, 'bo', EbNodB_range, ber, 'k') 
50 
 
plt.axis([0, 10, 6e-4, 0.2]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('EbNo(dB)') 
plt.ylabel('Erros') 
plt.grid(True) 
plt.title('Modelação FSK') 
plt.show() 
 
Com a base do código acima obtivemos o gráfico abaixo. 
 
4.5.3 4PSK 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
#################################################### 
############Importação de Bibliotecas############### 
from IPython import get_ipython 
get_ipython().magic('reset -sf') 
import pdb 
#################################################### 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
import math 
from math import exp 
from math import pi 
#################################################### 
#####################Código Manchester #################### 
#################################################### 
qfunc = lambda x: (1/2)*(scipy.special.erfc(x/np.sqrt(2))) 
51 
 
 
EbNodB=np.arange(0,11,2) 
ebno=10.0**(EbNodB/10.0) 
print ('EbNo:', EbNodB) 
 
M=2 
k=int(np.log2(M)) 
print("M = {a:2d} simbolos -->> {b:1d} bit/simbolo".format(a=M,b=k)) 
 
eb=1 
N=1*10**6 
 
SIMS=10 
print('SIMS = ', SIMS) 
##################### DATA ############################## 
#sn=randint(0,2,size = N) 
 
##################### MODULATOR ######################### 
#sn=np.array([1,1,0,0],dtype=int)a = np.array([[1, 2], [3, 4]]) 
#>>> b = np.array([[5, 6]]) 
#manchester=randint(0,2,size = 2*N) 
#sm=randint(0,2,size = N) 
 
#sn=[1,1,0,0] 
sn=randint(0,1,size = 4) 
psk=[0,0,0,0] 
yn=randint(0,1,size = 8) 
yn1=randint(0,1,size = 4) 
sn=[0,0,0,1,1,0,1,1] 
 
j=0 
for i in range(0, 3): 
 if sn[i+j]==0 and sn[i+j+1]==0 : 
 psk[i]=np.angle(0.707+0.707*1.j) 
 j=j+1 
 if sn[i+j]==1 and sn[i+j+1]==1 : 
 psk[i]=np.angle(0.707-0.707*1.j) 
 j=j+1 
 if sn[i+j]==1 and sn[i+j+1]==0 : 
 psk[i]=np.angle(-0.707-0.707*1.j) 
 j=j+1 
 if sn[i+j]==0 and sn[i+j+1]==1 : 
 psk[i]=np.angle(-0.707+0.707*1.j) 
 j=j+1 
# j=j+1 
# 
print('sinal ', sn) 
print('psk ',psk) 
52 
 
sm=psk 
## 
## 
## 
############################################################ 
itr = len(EbNodB) 
ber = [None]*itr 
ber_t = [None]*itr 
##################################################################################### Simulação ######################### 
print("") 
j=0 
for n in range(0,len(EbNodB)): 
 erros=0 
 print('EbNo ', EbNodB[n],' -->>Erros = ', erros) 
 sigma = np.sqrt(eb/(2*ebno[n])) 
 
 for sims in range(1,SIMS+1,1): 
 yn1=sm +sigma*randn(1,4)*0 
 print(yn1) 
# 
# for i in range(0,3): 
# if yn1[i]==(-1-1.j): 
## yn[i+j+1]=0 
## yn[i+1]=0 
## if yn1[i]==1+1.j: 
## yn[i+j+1]=1 
## yn[i+1]=1 
## if yn1[i]==1-1.j: 
## yn[i+j+1]=1 
## yn[i+1]=0 
## if yn1[i]==-1+1.j : 
## yn[i+j+1]=0 
## yn[i+1]=1 
# 
####################### DEMODULATOR ######################## 
## # pdb.set_trace() 
############################################################## 
 sm_hat=yn>0*1 
 print(yn) 
############################################################ 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################## 
####################### Teórica ############################## 
ber_t = qfunc(np.sqrt(ebno*2)) 
53 
 
############################################################### 
print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
#################### Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
plt.axis([0, 10, 1e-6, 0.1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('Eb/No(dB)') 
plt.ylabel('BER') 
plt.grid(True) 
plt.title('PSK') 
plt.show() 
################################################################# 
 
Com a base do código acima obtivemos o gráfico abaixo. 
 
 
54 
 
4.5.4 4QAM 
Para a simulação e transmissão, receção e a probabilidade de erro no desempenho foi desenvolvido o 
código abaixo. 
#################################################### 
############Importação de Bibliotecas############### 
from IPython import get_ipython 
get_ipython().magic('reset -sf') 
import pdb 
#################################################### 
import numpy as np 
import matplotlib.pyplot as plt 
from numpy.random import randn, randint 
import scipy.special 
#################################################### 
#####################Código Manchester #################### 
#################################################### 
qfunc = lambda x: (1/2)*(scipy.special.erfc(x/np.sqrt(2))) 
 
EbNodB=np.arange(0,11,2) 
ebno=10.0**(EbNodB/10.0) 
print ('EbNo:', EbNodB) 
 
M=2 
k=int(np.log2(M)) 
print("M = {a:2d} simbolos -->> {b:1d} bit/simbolo".format(a=M,b=k)) 
 
eb=1 
N=1*10**6 
 
SIMS=10 
print('SIMS = ', SIMS) 
##################### DATA ############################## 
#sn=randint(0,2,size = N) 
 
##################### MODULATOR ######################### 
#sn=np.array([1,1,0,0],dtype=int)a = np.array([[1, 2], [3, 4]]) 
#>>> b = np.array([[5, 6]]) 
#manchester=randint(0,2,size = 2*N) 
#sm=randint(0,2,size = N) 
 
#sn=[1,1,0,0] 
sn=randint(0,1,size = 4) 
qAM=[0,0,0,0] 
yn=randint(0,1,size = 8) 
yn1=randint(0,1,size = 4) 
sn=[0,0,0,1,1,0,1,1] 
 
55 
 
#j=0 
for i in range(0, 3): 
 if sn[i]==0 and sn[i+1]==0 : 
 qAM[i]=-1-1.j 
 if sn[i]==1 and sn[i+1]==1 : 
 qAM[i]=1+1.j 
 if sn[i]==1 and sn[i+1]==0 : 
 qAM[i]=1-1.j 
 if sn[i]==0 and sn[i+1]==1 : 
 qAM[i]=-1+1.j 
# j=j+1 
# 
# 
print('sinal ', sn) 
print('4QAM ',qAM) 
sm=qAM 
# 
# 
# 
########################################################### 
itr = len(EbNodB) 
ber = [None]*itr 
ber_t = [None]*itr 
########################################################### 
######################## Simulação ######################### 
print("") 
j=0 
for n in range(0,len(EbNodB)): 
 erros=0 
 print('EbNo ', EbNodB[n],' -->>Erros = ', erros) 
 sigma = np.sqrt(eb/(2*ebno[n])) 
 
 for sims in range(1,SIMS+1,1): 
 yn1=sm +sigma*randn(1,4)*0 
 print(yn1) 
 
# for i in range(0,3): 
# if yn1[i]==(-1-1.j): 
# yn[i+j+1]=0 
# yn[i+1]=0 
# if yn1[i]==1+1.j: 
# yn[i+j+1]=1 
# yn[i+1]=1 
# if yn1[i]==1-1.j: 
# yn[i+j+1]=1 
# yn[i+1]=0 
# if yn1[i]==-1+1.j : 
# yn[i+j+1]=0 
56 
 
# yn[i+1]=1 
 
###################### DEMODULATOR ######################## 
# # pdb.set_trace() 
############################################################# 
 sm_hat=yn>0*1 
# print(yn) 
########################################################### 
 erros= erros + (sn != sm_hat).sum() 
 print("Eb/No = {a:2d} dB -->> {b:8d} erros".format(a=EbNodB[n],b=erros)) 
 
 ber[n] = 1.0*erros/(N*SIMS) 
############################################################# 
###################### Teórica ############################## 
ber_t = qfunc(np.sqrt(ebno*2)) 
############################################################## 
#print("") 
print("ber_theory = [",', '.join('{:.2e}'.format(x) for x in ber_t),"]") 
################### Gráfico ################################## 
plt.plot(EbNodB, ber, 'r',EbNodB, ber_t, 'bo') 
plt.axis([0, 10, 1e-6, 0.1]) 
plt.xscale('linear') 
plt.yscale('log') 
plt.xlabel('Eb/No(dB)') 
plt.ylabel('BER') 
plt.grid(True) 
plt.title('4QAM') 
plt.show() 
################################################################ 
 
Com a base do código acima obtivemos o gráfico abaixo. 
 
57 
 
5 Conclusões 
No trabalho foi tirado como conclusão que nos impulsos retangulares quando menor for a duração do 
impulso maior numero de espectro terá o sinal. Foi verificado que na ilustração de modulação que a 
PAM modifica a amplitude de acordo com o sinal senoidal. Quando o senoidal está no pico o sinal 
modulado possui uma amplitude alta. Notou se que o PWM modifica a largura da duração do pulso de 
acordo com o sinal modulante. Notou-se que os códigos de linhas são completamente diferentes uma 
da outra 
Desempenho da probabilidade de erro no simulador e teoricamente são diferentes para AMI e 
diferencial, porém para NRZ são iguais. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58 
 
6 Bibliografia 
Non Return Zero. (s.d.). Obtido de Wikipedia: https://en.wikipedia.org/wiki/Non-return-to-zero 
Sicipy.org. (s.d.). Obtido de https://docs.scipy.org/doc/scipy-
0.15.1/reference/generated/scipy.signal.square.html 
Torres, P. (2017). Apontamentos de Comunicação digital. Castelo Branco.

Continue navegando