Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

# -*- coding: utf-8 -*-
"""Lab1_ComDigi.ipynb
Automatically generated by Colab.
Original file is located at
 https://colab.research.google.com/drive/1rrVRhw_PoWBIxlH6ypeS8dUAedvyHAzb
# FormataГ§ГЈo de Pulso
Este experimento computacional tem como objetivo compreender o funcionamento da transmissГЈo banda base usando o pulso do coseno levantado, comparando as larguras de banda dos sinais gerados por diferentes formatos de pulsos e, por fim, observar os efeitos do ruГ­do de de canais que possam inserir distorГ§Гµes ao sinal que nГЈo podem ser combatidas diretamente pela formataГ§ГЈo de pulso.
## InstruГ§Гµes para elaboraГ§ГЈo do relatГіrio
- FaГ§am o experimento computacional em grupos de 3 a 5 pessoas (o Google Colab permite compartilhar o notebook).
- Somente um integrante de cada grupo deve submeter os arquivos do relatГіrio no moodle.
- NГЈo Г© necessГЎrio escrever introduГ§ГЈo, objetivos e metodologia.
- Escreva de forma clara e objetiva, justificando os cГЎlculos, anГЎlises e conclusГµes.
- Escreva um texto. NГЈo escreva um relatГіrio em forma de tГіpicos.
- Referencie as figuras e tabelas que incluir no relatГіrio.
- NГЈo coloque cГіdigo no relatГіrio.
- As perguntas colocadas neste roteiro são apenas um guia para ajudar a analisar os resultados obtidos. Embora as respostas para estas perguntas devem estar de alguma forma no relatório, não elabore o seu relatório no formato “pergunta e resposta”.
- Submeta o relatГіrio em formato PDF.
- Submeta juntamente o arquivo notebook utilizado para as anГЎlises realizadas, contendo todos os cГіdigos necessГЎrios para chegar aos resultados apresentados.
- Garanta que todo o cГіdigo esteja rodando no Google Colab, sem usar pacotes alГ©m dos que jГЎ estГЈo sendo utilizados. Se o cГіdigo nГЈo rodar ou apresentar errors, seu relatГіrio nГЈo serГЎ avaliado.
## Roteiro do Experimento
1. Execute a cГ©lula abaixo para importar os pacotes necessГЎrios
"""
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import welch
from scipy.signal import lfilter
"""2. FunГ§Гµes auxiliares: rode a cГ©lula abaixo
**AtenГ§ГЈo: Estas funГ§Гµes sГЈo essenciais para a realizaГ§ГЈo correta do experimento. NГЈo altere estas funГ§Гµes!!!!**
"""
def psinc(Rb, t_start, t_end, fs):
t_sinc = np.arange(t_start * fs, t_end * fs) / fs
p_sinc = np.sinc(Rb * t_sinc)
return t_sinc, p_sinc
def polar_symb(Nb, Tb, fs):
os = np.concatenate([[1], np.zeros(int(fs*Tb - 1))]) # Vetor de oversampling
ak = np.random.choice([-1, 1], Nb)
a = np.kron(ak, os) # Realiza o oversampling
t_a = np.arange(0, Tb*Nb*fs)/fs
return t_a, a
# Pulso do cosseno levantado
def prcos(Rb, r, t_start, t_end, fs):
# Exemplos: Rb = 1, t_start = -10, t_end = 100, fs = 100*Rb.
t_rc = np.arange(t_start * fs, t_end * fs) / fs
p_rc = np.zeros_like(t_rc)
if r == 0:
# Caso especial para roll-off = 0 (sinc puro)
p_rc = np.sinc(Rb * t_rc)
else:
for i, ti in enumerate(t_rc):
den = 1 - (2 * r * Rb * ti)**2
if np.abs(den)plt.tight_layout()
"""17. A cГ©lula abaixo gera e exibe a forma de onda final usando o pulso sinc.
18. **Pergunta:** O que Г© possГ­vel observar do sinal gerado? (Dica: novamente, compare o que acontece nos instantes de tempo mГєltiplos de $T_b$ e fora deles)
19. Gere o pulso para 3 valores diferentes de roll-off e explique as diferenГ§as.
20. Altere o fator de roll-off para 0.1 e observe o diagrama resultante.
21. **Pergunta:** Ainda Г© possГ­vel recuperar os sГ­mbolos transmitidos?
"""
# Gera a forma de onda
st = np.convolve(p_rc, a)
t_st = np.linspace(np.min(t_sinc) + np.min(t_a),
np.max(t_sinc) + np.max(t_a),
t_sinc.size + t_a.size - 1)
plt.figure(figsize=(6, 4))
plt.plot(t_st, st, label=f'Forma de onda')
plt.plot(t_a, a, label=f'SГ­mbolos polares')
plt.legend()
plt.grid()
plt.xlim([-Tb/2, Tb*Nb])
plt.xlabel('Tempo [s]')
plt.ylabel('Amplitude')
plt.tight_layout()
"""### Diagrama de olho e PSD de um sinal com pulsos de cosseno levantado
22. A cГ©lula abaixo gera e exibe o diagrama de olho do sinal com pulsos do conseno levantado.
23. **Pergunta:** Onde, na figura, Г© o instante de amostragem ideal?
24. **Pergunta:** Da figura, Г© possГ­vel observar a ocorrГЄncia de interferГЄncia intersimbГіlica? Justifique e, caso nГЈo, explique o porquГЄ.
25. Altere o fator de roll-off para 0.1 e observe o diagrama resultante. Ainda Г© possГ­vel recuperar o sinal final?
"""
# Diagrama de Olho
Rb = 10 # Taxa de bit em bps
Tb = 1/Rb # Tempo de bit
fs = 10*Rb # FrequГЄncia de amostragem do sinal sobreamostrado
Nb = 200 # NГєmero de bits simulados
r = 0.8 # Fator de roll-off
# Gera sГ­mbolos polares
t_a, a = polar_symb(Nb, Tb, fs)
# Gera o pulso do cosseno levantado
t_start = -10*Tb # Instante do inГ­cio do pulso
t_end = 10*Tb # Instante do fim do pulso
t_sinc, p_rc = prcos(Rb, r, t_start, t_end, fs)
# Gera a forma de onda final
st = np.convolve(p_rc, a)
# Gera o diagrama de olho
t_start_a = 0;
diagram_olho(st, t_start_a, t_start, Tb, fs)
"""26. A cГ©lula abaixo realiza a estimativa da densidade espectral de potГЄncia.
27. Gere a densidade expectral de potГЄncia para $r =$ 0, 0.5 e 1.
28. **Pergunta:** Qual a largura de banda ocupada pelos sinais com diferentes valores de roll-off? Compare com a largura de banda teГіrica deste pulso para cada fator de roll-off e justifique possГ­veis diferenГ§as.
"""
# Densidade espectral de potГЄncia
f_values, Ss = welch(st, fs, nperseg=256, noverlap=128, window='hann')
# Plota a PSD
plt.figure(figsize=(6, 4))
plt.plot(f_values, Ss)
plt.xlim([0, 2*Rb])
plt.xlabel('$f$ (Hz)')
plt.ylabel('$S_s(f)$ [W/Hz]')
plt.grid(True)
plt.tight_layout()
"""## Efeitos do RuГ­do
30. A cГ©lula abaixo gera um sinal bipolar com pulso do cosseno levantado.
"""
Nb = 10 # NГєmero de bits simulados
Rb = 10 # Taxa de bits em bps
Tb = 1 / Rb # Tempo de bit
fs = 100 * Rb # FrequГЄncia de amostragem do sinal sobreamostrado (para esta etapa Г© interessante uma sobreamostragem maior)
r = 0.8 # Fator de roll-off
# Gera sГ­mbolos polares
Nb = 10
t_a, a = polar_symb(Nb, Tb, fs)
# Gera o pulso do cosseno levantado
t_start = -10*Tb # Instante do inГ­cio do pulso
t_end = 10*Tb # Instante do fim do pulso
t_sinc, p_rc = prcos(Rb, r, t_start, t_end, fs)
# Gera a forma de onda final
st = np.convolve(p_rc, a)
t_st = np.linspace(np.min(t_sinc) + np.min(t_a),
np.max(t_sinc) + np.max(t_a),
t_sinc.size + t_a.size - 1)
"""31. A cГ©lula abaixo gera um ruГ­do com determinada variГўncia dada por n_var e o soma ao sinal gerado acima."""
# Gera ruГ­do e soma ao sinal
n_var = 0.1; # VariГўncia do ruГ­do
Ns_st = (t_end - t_start) * fs + Tb * Nb * fs - 1 # NГєmero de amostras de ruГ­do necessГЎrias
n = n_var * np.random.randn(int(Ns_st)) # Gera ruГ­do Gaussiano branco
st_rx = st + n # Soma o ruГ­do ao sinal
"""32. A cГ©lula abaixo exibe o sinal sem ruГ­do, o com ruГ­do, e os sГ­mbolos polares.
33. **Pergunta:** O que pode ser observado nos instantes de amostragem do sinal ruidoso? Para variГўncia de 0.1, serГЎ possГ­vel recuperar os sГ­mbolos transmitidos? E para uma variГўncia de 0.9?
"""
plt.figure(figsize=(6, 4))
plt.plot(t_st, st_rx, label=f'Forma de onda com ruГ­do')
plt.plot(t_st, st, label=f'Forma de onda original')
plt.plot(t_a, a, label=f'SГ­mbolos polares')
plt.legend()
plt.grid()
plt.xlim([-Tb/2, Tb*Nb])
plt.xlabel('Tempo [s]')
plt.ylabel('Amplitude')
plt.tight_layout()
"""34. A cГ©lula abaixo gera e exibe o diagrama de olho do sinal com pulsos do conseno levantado e ruidoso.
35. **Pergunta:** Para a variГўncia de 0.1, o que aconteceu com o olho em relaГ§ГЈo ao olho do sinal sem ruГ­do visto anteriormente?
36. **Pergunta:** E para variГўncia de 0.9?
"""
# Diagrama de Olho
Rb = 10 # Taxa de bit em bps
Tb = 1/Rb # Tempo de bit
fs = 1000*Rb # FrequГЄncia de amostragem do sinal sobreamostrado (para esta etapa Г© interessante uma sobreamostragem maior)
Nb = 100 # NГєmero de bits simulados (pode reduzir um pouco para processar mais rГЎpido)
r = 0.8 # Fator de roll-off
# Gera sГ­mbolos polares
t_a, a = polar_symb(Nb, Tb, fs)
# Gera o pulso do cosseno levantado
t_start = -10*Tb # Instante do inГ­cio do pulso
t_end = 10*Tb # Instante do fim do pulso
t_sinc, p_rc = prcos(Rb, r, t_start, t_end, fs)
# Gera a forma de onda final
st = np.convolve(p_rc, a)
t_st = np.linspace(np.min(t_sinc) + np.min(t_a),
np.max(t_sinc) + np.max(t_a),
t_sinc.size + t_a.size - 1)
# Gera ruГ­do e soma ao sinal
n_var = 0.1;
Ns_st = (t_end - t_start) * fs + Tb * Nb * fs - 1
n = n_var * np.random.randn(int(Ns_st))
st_rx = st + n
# Gera o diagrama de olho
t_start_a = 0;
diagram_olho(st_rx, t_start_a, t_start, Tb, fs)
"""## Efeitos de um canal limitado em banda
37. A cГ©lula abaixo gera um sinal bipolar com pulso do cosseno levantado.
"""
Nb = 10 # NГєmero de bits simulados
Rb = 10 # Taxa de bits em bps
Tb = 1 / Rb # Tempo de bit
fs = 10 * Rb # FrequГЄncia de amostragem do sinal sobreamostrado (para esta etapa Г© interessante uma sobreamostragem maior)
r = 0.8 # Fator de roll-off
# Gera sГ­mbolos polares
t_a, a = polar_symb(Nb, Tb, fs)
# Gera o pulso do cosseno levantado
t_start = -10*Tb # Instante do inГ­cio do pulso
t_end = 10*Tb # Instante do fim do pulso
t_sinc, p_rc = prcos(Rb, r, t_start, t_end, fs)
# Gera a forma de onda final
st = np.convolve(p_rc, a)
t_st = np.linspace(np.min(t_sinc) + np.min(t_a),
np.max(t_sinc) + np.max(t_a),
t_sinc.size + t_a.size - 1)
"""38. A cГ©lula abaixo gera um canal com banda menor que a do sinal e passa o sinal por este canal."""
# Canal como filtro FIR
T_canal = 5 # Tempo do canal em mГєltiplos de Tb
Nch = T_canal*Tb*fs
h = np.arange(Nch, 0, -1)
h = h / np.sum(h)
st_rx = lfilter(h, 1, st) # Passa o sinal pelo canal
"""39. A cГ©lula abaixo exibe o sinal sem ruГ­do, o com ruГ­do, e os sГ­mbolos polares.
40. **Pergunta:** O que pode ser observado nos instantes de amostragem do sinal na saГ­da do canal? SerГЎ possГ­vel recuperar todos os sГ­mbolos transmitidos?
"""
plt.figure(figsize=(6, 4))
plt.plot(t_st, st, label=f'Forma de onda original')
plt.plot(t_st, st_rx, label=f'Forma de onda apГіs o canal')
plt.plot(t_a, a, label=f'SГ­mbolos polares')
plt.grid()
plt.xlim([-Tb/2, Tb*Nb])
plt.xlabel('Tempo [s]')
plt.ylabel('Amplitude')
plt.tight_layout()
"""40. A cГ©lula abaixo gera e exibe o diagrama de olho do sinal com pulsos do conseno levantado apГіs passar pelo canal.
41. **Pergunta:** SerГЎ possГ­vel recuperar os sГ­mbolos transmitidos?
42. **Pergunta:** E se o tempo do canal for 1?
"""
# Diagrama de Olho
Rb = 10 # Taxa de bit em bps
Tb = 1/Rb # Tempo de bit
fs = 1000*Rb # FrequГЄncia de amostragem do sinal sobreamostrado (para esta etapa Г© interessante uma sobreamostragem maior)
Nb = 100 # NГєmero de bits simulados (pode reduzir um pouco para processar mais rГЎpido)
r = 0.5 # Fator de roll-off
T_canal = 5 # Tempo do canal em mГєltiplos de Tb
# Gera sГ­mbolos polares
t_a, a = polar_symb(Nb, Tb, fs)
# Gera o pulso do cosseno levantado
t_start = -10*Tbt_end = 10*Tb
t_sinc, p_rc = prcos(Rb, r, t_start, t_end, fs)
# Gera a forma de onda final
st = np.convolve(p_rc, a)
t_st = np.linspace(np.min(t_sinc) + np.min(t_a),
np.max(t_sinc) + np.max(t_a),
t_sinc.size + t_a.size - 1)
# Gera canal
Nch = T_canal*Tb*fs
h = np.arange(Nch, 0, -1)
h = h / np.sum(h)
# Passa o sinal pelo canal
st_rx = lfilter(h, 1, st)
# Gera o diagrama de olho
t_start_a = 0;
diagram_olho(st_rx, t_start_a, t_start, Tb, fs)
"""## InstruГ§Гµes para elaboraГ§ГЈo do relatГіrio
- FaГ§am o experimento computacional em grupos de 3 a 5 pessoas (o Google Colab permite compartilhar o notebook).
- Somente um integrante de cada grupo deve submeter os arquivos do relatГіrio no moodle.
- NГЈo Г© necessГЎrio escrever introduГ§ГЈo, objetivos e metodologia.
- Escreva de forma clara e objetiva, justificando os cГЎlculos, anГЎlises, mostrando as figuras e conclusГµes.
- Escreva um texto. NГЈo escreva um relatГіrio em forma de tГіpicos.
- Referencie as figuras e tabelas que incluir no relatГіrio. NГЈo as coloque apenas por colocar.
- NГЈo coloque cГіdigo no relatГіrio.
- As perguntas colocadas neste roteiro são apenas um guia para ajudar a analisar os resultados obtidos. Embora as respostas para estas perguntas devem estar de alguma forma no relatório, não elabore o seu relatório no formato “pergunta e resposta”.
- Submeta o relatГіrio em formato PDF.
- Submeta juntamente o arquivo notebook utilizado para as anГЎlises realizadas, contendo todos os cГіdigos necessГЎrios para chegar aos resultados apresentados.
- Garanta que todo o cГіdigo esteja rodando no Google Colab, sem usar pacotes alГ©m dos que jГЎ estГЈo sendo utilizados. Se o cГіdigo nГЈo rodar ou apresentar errors, seu relatГіrio nГЈo serГЎ avaliado.
# Task
Generate a PDF report based on the analysis performed in the notebook, incorporating the figures and answering the questions as instructed in the markdown cells. The report should be a continuous text, not bullet points, and should reference the figures and tables appropriately.
## Extract and organize results
### Subtask:
Go through the notebook cells, collect the figures generated and the answers to the questions posed in the markdown cells.
## Summary:
### Data Analysis Key Findings
* The user's plan was to extract figures and answers from a notebook to generate a PDF report.
* The user was unable to access the notebook environment to perform the extraction.
### Insights or Next Steps
* The user requires access to the notebook content to proceed with the task.
* Provide the notebook content or a method to access it to enable the user to complete the analysis and report generation.
"""

Mais conteúdos dessa disciplina