Serie de Fourier en Python

La serie de Fourier es una serie infinita convergente que converge a una función periódica de periodo T en un determinado intervalo. La serie de Fourier es utilizada para resolver ecuaciones diferenciales parciales como la ecuación de calor y analizar el espectro de frecuencias de una función periódica. La serie de Fourier puede también extenderse al espacio de los números complejos. 

Coeficientes de la serie de Fourier:
  • $${\large \begin{equation*} c_0 = \frac{2}{T} \int_{-T/2}^{T/2} \left ( f(t) \right) \mathrm{d}t \end{equation*} }$$
  • $${\large \begin{equation*} a_n = \frac{2}{T} \int_{-T/2}^{T/2} \left( f(t)\cos\left( \frac{2n\pi t}{T} \right) \right) \mathrm{d}t \end{equation*}}$$
  • $${\large \begin{equation*} b_n = \frac{2}{T} \int_{-T/2}^{T/2} \left( f(t) \sin\left( \frac{2n\pi t}{T} \right) \right) \mathrm{d}t \end{equation*}}$$
La serie de Fourier de f(t) es igual a :

$${\large \begin{equation*} f(t) = \frac{c_0}{2} + \sum_{n=1}^{\infty} \left[ a_n \cos\left( \frac{2n\pi t}{T} \right) + b_n \sin\left( \frac{2n\pi t}{T} \right) \right] \end{equation*}}$$


Gif de la serie de Fourier de una función a trozos hecho en Python.


Ahora procederemos a implementar el código Python correspondiente para realizar la serie de Fourier de una función periódica. El código Python que se muestra a continuación solo es válido para funciones periódicas que tengan función primitiva respectivamente.


Código Fuente de la Serie de Fourier en Python

import numpy as np
import sympy as sym
from sympy.abc import t,j
import matplotlib.pyplot as plt

def fourier(ft, n):
    
    fig = plt.figure(figsize=(14,8))
    a = -T/2
    b = T/2
    w = 2*np.pi/T
    
    c0 = (2/T)*sym.integrate(ft,(t,a,b))
    aj = (2/T)*sym.integrate(ft*sym.cos(j*w*t),(t,a,b))
    bj = (2/T)*sym.integrate(ft*sym.sin(j*w*t),(t,a,b))
    
    Serie = c0/2
    for i in range(1, n+1):
        Serie += (aj*sym.cos(j*w*t) + bj*sym.sin(j*w*t)).subs(j, i)
        
    SerieF = sym.lambdify(t, Serie)
    F = sym.lambdify(t, ft)
    tiempo = np.linspace(a,b,10000)
    Fourier = SerieF(tiempo) 
    Ft = F(tiempo)
    
    plt.title('Serie de Fourier de f(t) con n={} terminos'.format(n), fontsize=30)
    plt.plot(tiempo, Ft, color = 'k', lw=6, label = 'f(t)')
    plt.plot(tiempo, Fourier, color = 'b', lw=3, label = 'Fourier')
    plt.xlabel('tiempo', fontsize=20)
    plt.ylabel('f(t)', rotation=0, fontsize=20)
    plt.legend(loc='best', fontsize = 15)
    
    return fourier


Aplicación del Código Fuente de la Serie de Fourier para un periodo T = $2\pi$

$${\large \begin{equation*} f(t) = \left\{ \begin{array}{lcc}  t &   si  & -\pi/2 < t < -\pi/4 \\ |\sin{t}| &  si & -\pi/4 < t < \pi/4 \\  -t &  si  & \pi/4 < t < \pi/2 \end{array}  \right.     \end{equation*} }$$



$${\large \begin{equation*} f(t) = \left\{ \begin{array}{lcc} t &   si  & -\pi < t < -\pi  \end{array} \right. \end{equation*} }$$



$${\large \begin{equation*} f(t) = \left\{ \begin{array}{lcc} \sin{(2t)}  &   si  & -\pi/2 < t < -\pi/4 \\ |t| &  si & -\pi/4 < t < \pi/4 \\  \sin{(2t)} &  si  & \pi/4 < t < \pi/2 \end{array}  \right. \end{equation*} }$$



$${\large \begin{equation*} f(t) = \left\{ \begin{array}{lcc} t^{3} - 4t^{2} + 5t - 2 &   si  & -\pi < t < -\pi  \end{array} \right. \end{equation*} }$$



$${\large \begin{equation*} f(t) = \left\{ \begin{array}{lcc} \sin{(2t)}  &   si  & -\pi/2 < t < -\pi/4 \\ e^{t} &  si & -\pi/4 < t < \pi/4 \\  -t &  si  & \pi/4 < t < \pi/2 \end{array} \right. \end{equation*} }$$



Comentarios