Ejercicio 14 - Serie de Fourier - Item a)

In [18]:
import numpy as np
import matplotlib.pyplot as plt

# desarrollo la seria de fourier de x[n] con periodo N = 12
k = np.array(range(12))
ak = (1/12) * (1 + 2 * np.cos((np.pi/6) * k))
plt.stem(k, ak)
Out[18]:
<StemContainer object of 3 artists>
No description has been provided for this image
In [23]:
# corroboramos que la serie de fourier esta bien calculada
# para eso vamos a definir una funcion que nos reconstruya la señal a partir de su serie de fourier

def reconstruir_senial(n, a) :
    x = np.zeros_like(n).astype(complex)
    N = len(a)
    for k in range(N) :
        x += a[k] * np.exp(1j * ((2*np.pi)/N) * k * n)
    return np.real(x)

# obtengo la señal x[n]

n = np.array(range(-20,20))
x = reconstruir_senial(n, ak)
plt.stem(n,x)  
        
Out[23]:
<StemContainer object of 3 artists>
No description has been provided for this image
In [25]:
# desarrollo la seria de fourier de y[n-3] con periodo N = 6 (version centrada en el origen)

k = np.array(range(6))
bk = (1/6) * (1 + 2 * np.cos((np.pi/3) * k))
plt.stem(k, bk)
Out[25]:
<StemContainer object of 3 artists>
No description has been provided for this image
In [29]:
# para calcular la serie de y[n] tengo que desplazar 3 a derecha, lo que implica multiplicar a los coeficientes
# por exp(-j * ((2*pi))/6 * k * 3)

ck = bk * np.exp(-1j * ((2*np.pi)/6) * k * 3)
plt.stem(k, ck)
Out[29]:
<StemContainer object of 3 artists>
No description has been provided for this image
In [30]:
# obtengo la señal y[n] a partir de su serie de fourier

y = reconstruir_senial(n, ck)
plt.stem(n,y)
Out[30]:
<StemContainer object of 3 artists>
No description has been provided for this image
In [31]:
# me interesa tener un desarrollo de y[n] con periodo N = 12 de modo de poder comparar coeficientes en la entrada vs coeficientes
# en la salida
# para pasar de un desarrollo en N = 6 a un desarrollo en N = 12 aparecen ceros en la serie de fourier

k = np.array(range(12))
dk = np.zeros_like(k).astype(complex)
for i in range(6) :
    dk[2*i] = ck[i]

plt.stem(k, dk)
Out[31]:
<StemContainer object of 3 artists>
No description has been provided for this image
In [33]:
# reconstruimos la señal corroborar que venimos bien

y = reconstruir_senial(n, dk)
plt.stem(n, y)
Out[33]:
<StemContainer object of 3 artists>
No description has been provided for this image
In [38]:
# muy bien!, ahora si podemos hacer una comparacion entre los coeficientes de x[n] e y[n]

plt.stem(k, ak, linefmt='b-', label='serie de x[n]', markerfmt='bo', basefmt='gray')
plt.stem(k, dk, linefmt='r-', label='serie de y[n]', markerfmt='ro', basefmt='gray')
plt.legend() 
plt.show()
No description has been provided for this image
In [ ]:
# notar que siempre que tenemos un armonico en la salida (rojo) hay un armonico asociado en la entrada, lo que quiere decir
# que el sistema no produjo nuevos componentes

Para el item b) hay que hacer lo mismo. Los desarrollos deben hacerse en N = 36 para permitir la comparacion de armonicos de entrada y salida