Transformada de Fourier com Python
Bem, pra quem estuda engenharia elétrica é bem comum falar de série e transformada de Fourier. Para o meu curso deste semestre de Sinais e Sistemas, o meu professor disponibilizou para a turma um programa, feito no MATLAB, que faz o cálculo da transformada e mostra os gráficos da magnitude e fase do sinal. Bem, eu não uso este programa e nem a plataforma que ele é usado mais comumente(existe MATLAB para Linux, mas não é open source, então…), na minha pressa em saber como ficam os gráficos das Transformadas de Fourier na plataforma que tenho no meu pc, procurei um jeito de fazer isso. O SCILAB resolve, mas o exemplo que tem no help não funcionou(primeira vez que peguei um exemplo do help). Daí então eu parti para Python, que entre suas várias possibilidades de resolver praticamente qualquer coisa, tem bibliotecas para se fazer cálculos numéricos e gráficos 2 e 3 D.
Primeiro tive que instalar o pylab e o scipy, você pode instalar via synaptic ou no terminal. Depois de instalados os pacotes, é só abrir um editor de texto que tenha suporte para python e digitar o código:
#!/usr/bin/env python
'''
Programa para calcular a transformada de Fourier
da forma mais simples que achei.
Por: Felipe Sampaio
'''
from scipy import *
from pylab import *
import pylab
import numpy
t = numpy.arange(-300, 300,0.1)
#Funcao para a transformada, pode ser
#qualquer sinal em funcao de t.
f=cos(t)
#Fazendo a transformada da funcao com o
#comando fft()
Fw = fft(f)
'''
Agora vou plotar 3 graficos, o primeiro
vai ser do sinal que eu quero encontrar
a transformada, e os outros dois serao
da magnitude e fase
'''
pylab.subplot(311)
pylab.title('Sinal Original')
pylab.plot(t,f)
pylab.grid(True)
pylab.subplot(312)
pylab.title('Modulo')
pylab.plot(t,abs(Fw))
pylab.grid(True)
pylab.subplot(313)
pylab.title('Fase')
pylab.plot(t,angle(Fw))
pylab.grid(True)
pylab.show()
Esse código plota a função original(a que se quer obter a transformada) e os gráficos de módulo e fase. Há um exemplo de resolver a transformada no site do scipy, mas achei complicado e pesquisei mais um pouco(pra aprender mais funções do scipy) e fiz desta forma como descrevi acima, que acho que seja a mais fácil. Segue elguns links que podem ajudar a estudar sobre isso:
- Página principal do scipy: http://www.scipy.org/
- Um site com muitos(bons) exemplos: http://www.uncg.edu/phy/hellen/Python_Instructions.html
- Tutorial básico para plotagem de gráficos: http://www.scipy.org/Plotting_Tutorial
- Tutorial do scipy: http://www.scipy.org/SciPy_Tutorial
Noh, uma coisa e programar, outra e reiventar a roda.
Essa biblioteca facilitou muito minha vida!
Obrigado Felipe por ter colocado isso em seu site!
Oi Felipe, você já trabalhou com Glade e/ou GTK em Python?
Eu estava procurando algo que fosse multiplataforma (Linux e Ruindow$) para fazer umas aplicações.
Grato pela atenção.
Não desenvolvi nenhum programa usando GTK/Glade. Mas acho uma boa desenvolver aplicações em python com GTK por ter o Glade pra se construir as interfaces. Eu gosto mais do wxpython, achei melhor pra mim, mas algo que acho ruim em desenvolver como wxpython é não ter um construtor de interfaces tão bom quanto o Glade(tem o wxGlade, mas não tem nem metade dos componentes da biblioteca wx). Ambas(GTK e WxPython) são multiplataforma e considero ambas muito boas, é bom você testar as duas e ver qual você acha melhor pra você. Espero ter ajudado.