-
Notifications
You must be signed in to change notification settings - Fork 0
/
AMDSB.py
116 lines (98 loc) · 3.2 KB
/
AMDSB.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
"""
Autor: Bruno Rovea
Universidade Estadual do Oeste do Paraná - UNIOESTE
Disciplina: Comunicação Analógica e Digital, 5° ano de Engenharia Elétrica
Professor Maurício Menon
Foz do Iguaçú, 28/Abril/2022
V1.0
Referências:
Principles of Eletronic Communication System, by Louis E. Frenzel Jr., Fourth Editi
"""
# Importação de bibliotecas
import numpy as np
from scipy.fft import fft, fftfreq, fftshift
import matplotlib.pyplot as plt
import os
# Cria a pasta onde serão salvos os gráficos
script_dir = os.path.dirname(__file__)
results_dir = os.path.join(script_dir, 'Resultados/Gráficos AMDSB/')
if not os.path.isdir(results_dir):
os.makedirs(results_dir)
# Número de pontos no qual o sinal será amostrado
N = 100000
# Tempo de simulação
T = 1/(2*N)
# Vetor tempo
t = np.linspace(0, N*T, N, endpoint=False)
# Índice modulante que define a amplitude do sinal modulador
m = 0.6
# Frequência do sinal modulador [Hz]
fm = 440
# Frequência da portadora [Hz]
fc = 6000
# Definição do sinal modulante
M0 = 5
Em = m*M0
wm = 2*np.pi*fm
em = Em*np.sin(wm*t)+M0
# Definição da portadora
E0 = 1
wc = 2*np.pi*fc
ec = E0*np.sin(wc*t)
# Sinal modulado
e = em*ec
# Definição da FFT (Análise espectral)
yf = fft(e[:N])
xf = fftfreq(N, T)
xf = fftshift(xf)
yplot = fftshift(yf)
# Curvas no tempo
plt.figure(figsize = (10, 5))
plt.title('Sinal modulante ($fm=%d$ Hz)' %fm)
plt.xlabel('Tempo [s]')
plt.ylabel('Sinal modulante [V]')
plt.plot(t, em,'r')
plt.xlim(0, 3*(1/fm))
plt.grid(True, axis = 'both')
plt.tight_layout(pad=4.0)
plt.savefig('Resultados/Gráficos AMDSB/AMDSB_Sinal_Modulante.png', dpi=300)
plt.figure(figsize = (10, 5))
plt.title('Sinal da onda portadora ($fc=%d$ Hz)' %fc)
plt.xlabel('Tempo [s]')
plt.ylabel('Portadora [V]')
plt.plot(t, ec,'b')
plt.xlim(0, 3*(1/fc))
plt.grid(True, axis = 'both')
plt.tight_layout(pad=4.0)
plt.savefig('Resultados/Gráficos AMDSB/AMDSB_Portadora.png', dpi=300)
plt.figure(figsize = (10, 5))
plt.title('Sinal modulado ($m=%f$)' %m)
plt.xlabel('Tempo [s]')
plt.ylabel('Sinal modulado [V]')
plt.plot(t, e,'y')
plt.xlim(0, 3*(1/fm))
plt.grid(True, axis = 'both')
plt.tight_layout(pad=4.0)
plt.savefig('Resultados/Gráficos AMDSB/AMDSB_Sinal_Modulado.png', dpi=300)
plt.figure(figsize = (10, 5))
plt.title('AM-DSB - Sinais Modulante, Portadora e Modulado')
plt.xlabel('Tempo [s]')
plt.ylabel('Sinal modulado [V]')
plt.plot(t, em,'r', label='Sinal Modulante')
plt.plot(t, ec,'b', label='Portadora')
plt.plot(t, e,'y', label='Sinal Modulado')
plt.legend(loc='upper right', shadow=True)
plt.xlim(0, 3*(1/fm))
plt.grid(True, axis = 'both')
plt.tight_layout(pad=4.0)
plt.savefig('Resultados/Gráficos AMDSB/AMDSB_Sobreposição_Sinais.png', dpi=300)
# Análise espectral do sinal modulado
plt.figure(figsize=(12,4))
plt.title('Análise espectral do sinal modulado')
plt.xlabel('Frequência [Hz]')
plt.ylabel('sinal modulado [V]')
plt.plot(xf, 1.0/N * np.abs(yplot))
plt.xlim(0, (fc+fm)*1.5)
plt.savefig('Resultados/Gráficos AMDSB/AMDSB_Analise_espectral.png', dpi=300)
plt.grid()
plt.show()