import matplotlib.pyplot as plt
import numpy as np
# Parâmetros do sinal
N = 128 # Número total de amostras
n = np.arange(N) # Geração de n
# Sinal x(n)
x = np.cos(2 * np.pi * n / 21)
# Sinal de interferência eta(n)
eta = 0.2 * (-1) ** n
# Sinal r(n) - soma de x(n) e η(n)
r = x + eta
# Configuração do tamanho das plotagens
plt.figure(figsize = (10, 8))
# Reprentação do sinal x(n) graficamente
plt.subplot(2, 1, 1)
plt.plot(x, label = 'x(n)')
plt.title('Sinal x(n)')
plt.xlabel('n')
plt.ylabel('Amplitude')
plt.legend()
plt.grid(True)
# Representação do sinal r(n) graficamente
plt.subplot(2, 1, 2)
plt.plot(r, label = 'r(n)')
plt.title('Sinal r(n)')
plt.xlabel('n')
plt.ylabel('Amplitude')
plt.legend()
plt.grid(True)
# Configurando o título geral e os layouts do gráfico
plt.suptitle('Representação dos sinais x(n) e r(n) = x(n) + η(n)')
plt.tight_layout()
plt.show()
# Definindo o filtro h(n), representando o filtro da média móvel
h = np.array([0.5, 0.5])
# Realizando a convolução do sinal de entrada ruidoso com o filtro da média móvel
convolucao = np.convolve(r, h, mode = 'same')
# Configuração do tamanho das plotagens
plt.figure(figsize = (10, 4))
# Reprentação do sinal x(n) graficamente
plt.plot(r, label = 'r(n)')
plt.plot(convolucao, label = 'r(n) convoluido com h(n)')
plt.title('Sinal de entrada r(n) convoluido com h(n)')
plt.xlabel('n')
plt.ylabel('Amplitude')
plt.legend()
plt.grid(True)
# Configurando o título geral e os layouts do gráfico
plt.tight_layout()
plt.show()
Esse filtro funciona como um filtro de média móvel, que é uma técnica usada para destacar padrões e tendências em sinais de longo prazo. Além disso, pode ser utilizada para suavizar um sinal removendo flutuações de ruídos.
O filtro da média móvel foi definido como uma janela de dois pontos, significando que ele vai calcular a média dos dois pontos adjacentes do sinal de entrada.
No nosso exemplo, quando a convolução desse filtro foi feito com o sinal r(n), houve uma redução nas flutuações de ruído.