Pular para o conteúdo principal

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.