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>
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>
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>
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>
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>
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>
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>
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()
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