Como realizar processamento de sinais usando o SciPy.
Aqui está um tutorial passo a passo sobre como realizar processamento de sinais usando o SciPy.
Passo 1: Importando as bibliotecas necessárias
Para começar, você precisa importar as bibliotecas necessárias. Neste caso, usaremos scipy.signal para operações de processamento de sinais e numpy para manipulação de arrays.
import numpy as np
from scipy import signal
Passo 2: Criando um sinal
Em seguida, vamos criar um sinal simples para trabalhar. Para este tutorial, geraremos um sinal senoidal.
# Defina os parâmetros do sinal
frequencia = 10 # Frequência do sinal em Hz
amplitude = 1 # Amplitude do sinal
taxa_amostragem = 100 # Número de amostras por segundo
duração = 1 # Duração do sinal em segundos
# Gere o eixo do tempo
t = np.linspace(0, duração, int(taxa_amostragem * duração), endpoint=False)
# Gere o sinal senoidal
dados_do_sinal = amplitude * np.sin(2 * np.pi * frequencia * t)
Passo 3: Plotando o sinal
Antes de começarmos a processar o sinal, vamos visualizá-lo usando o matplotlib.
import matplotlib.pyplot as plt
plt.plot(t, dados_do_sinal)
plt.xlabel('Tempo (s)')
plt.ylabel('Amplitude')
plt.title('Sinal')
plt.show()
Passo 4: Aplicando um filtro
Agora, vamos aplicar um filtro passa-baixa ao sinal usando a biblioteca scipy.signal. Usaremos um filtro Butterworth como exemplo.
# Defina os parâmetros do filtro
frequencia_de_corte = 5 # Frequência de corte em Hz
ordem_do_filtro = 4 # Ordem do filtro
# Crie o filtro Butterworth
b, a = signal.butter(ordem_do_filtro, frequencia_de_corte / (taxa_amostragem / 2), 'low')
# Aplique o filtro ao sinal
sinal_filtrado = signal.lfilter(b, a, dados_do_sinal)
Passo 5: Plotando o sinal filtrado
Vamos plotar o sinal filtrado para visualizar o efeito do filtro passa-baixa.
plt.plot(t, dados_do_sinal, label='Sinal Original')
plt.plot(t, sinal_filtrado, label='Sinal Filtrado')
plt.xlabel('Tempo (s)')
plt.ylabel('Amplitude')
plt.title('Sinal com Filtro Passa-baixa')
plt.legend()
plt.show()
Passo 6: Realizando a Transformada de Fourier
Para analisar o conteúdo de frequência do sinal, podemos realizar uma Transformada de Fourier usando o módulo scipy.fft.
# Realize a Transformada de Fourier
espectro_do_sinal = np.fft.fft(dados_do_sinal)
# Gere o eixo de frequência
frequencias = np.fft.fftfreq(len(dados_do_sinal), 1 / taxa_amostragem)
# Plote o espectro
plt.plot(frequencias, np.abs(espectro_do_sinal))
plt.xlabel('Frequência (Hz)')
plt.ylabel('Magnitude')
plt.title('Espectro do Sinal')
plt.show()
Passo 7: Realizando um Espectrograma
Por último, vamos gerar um espectrograma do sinal usando o módulo scipy.signal.
# Defina os parâmetros do espectrograma
tamanho_da_janela = 256
sobreposição = int(tamanho_da_janela * 0.75)
# Calcule o espectrograma
frequências, tempos, espectrograma = signal.spectrogram(dados_do_sinal, fs=taxa_amostragem, window='hann',
nperseg=tamanho_da_janela, noverlap=sobreposição)
# Plote o espectrograma
plt.pcolormesh(tempos, frequências, 10 * np.log10(espectrograma), shading='auto')
plt.colorbar(label='Densidade Espectral de Potência (dB/Hz)')
plt.xlabel('Tempo (s)')
plt.ylabel('Frequência (Hz)')
plt.title('Espectrograma')
plt.show()
É isso! Você realizou com sucesso o processamento de sinais usando o SciPy. Sinta-se à vontade para explorar mais funções e técnicas fornecidas pela biblioteca SciPy para suas necessidades específicas de processamento de sinais.