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. """