```python
!pip install pandas
import sympy as sym
import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt

sym.init_printing()
```

    Requirement already satisfied: pandas in c:\users\usuario\.conda\envs\sys\lib\site-packages (1.1.2)
    Requirement already satisfied: pytz>=2017.2 in c:\users\usuario\.conda\envs\sys\lib\site-packages (from pandas) (2020.1)
    Requirement already satisfied: numpy>=1.15.4 in c:\users\usuario\.conda\envs\sys\lib\site-packages (from pandas) (1.19.1)
    Requirement already satisfied: python-dateutil>=2.7.3 in c:\users\usuario\.conda\envs\sys\lib\site-packages (from pandas) (2.8.1)
    Requirement already satisfied: six>=1.5 in c:\users\usuario\.conda\envs\sys\lib\site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0)


## Correlación


La correlación entre las señales $f(t)$ y $g(t)$ es una operación que indica cuán parecidas son las dos señales entre sí.

\begin{equation}
(f \; \circ \; g)(\tau) = h(\tau) = \int_{-\infty}^{\infty} f(t) \cdot g(t + \tau) \; dt
\end{equation}

Observe que la correlación y la convolución tienen estructura similares.

\begin{equation}
f(t) * g(t) = \int_{-\infty}^{\infty} f(\tau) \cdot g(t - \tau) \; d\tau
\end{equation}

## Señales periódicas

La señal $y(t)$ es periódica si cumple con la condición $y(t+nT)=y(t)$ para todo $n$ entero. En este caso, $T$ es el periodo de la señal.
 


La señal seno es la oscilación más pura que se puede expresar matemáticamente. Esta señal surge al considerar la proyección de un movimiento circular uniforme.



## Serie de Fourier


Si se combinan apropiadamente un conjunto de oscilaciones puras, como combinaciones lineales de señales desplazadas y escaladas en tiempo y amplitud, podría recrearse cualquiér señal periódica. Esta idea da lugar a las series de Fourier.

\begin{equation}
y(t) = \sum_{n=0}^{\infty} C_n \cdot cos(n \omega_0 t - \phi_n)
\end{equation}

La señal $y(t)$ es igual a una combinación de infinitas señales coseno, cada una con una amplitud $C_n$, una frecuencia $n \omega_0$ y un desfase $\phi_n$.


También puede expresarse como:

\begin{equation}
y(t) = \sum_{n=0}^{\infty} A_n \cdot cos(n \omega_0 t) + B_n \cdot sin(n \omega_0 t)  
\end{equation}

La serie queda definida si se encuentran los valores apropiados de $A_n$ y $B_n$ para todos los valores de $n$.

Observe que:
- $A_n$ debe ser más grande si $y(t)$ se "parece" más a un cos.
- $B_n$ debe ser más grande si $y(t)$ se "parece" más a un sin.

\begin{equation}
y(t) = \sum_{n=0}^{\infty} A_n \cdot cos(n \omega_0 t) + B_n \cdot sin(n \omega_0 t)  
\end{equation}

\begin{equation}
(f \; \circ \; g)(\tau) = \int_{-\infty}^{\infty} f(t) \cdot g(t + \tau) \; dt
\end{equation}

\begin{equation}
(y \; \circ \; sin_n)(\tau) = \int_{-\infty}^{\infty} y(t) \cdot sin(n \omega_0(t + \tau)) \; dt
\end{equation}



Considerando:
- $\tau=0$ para no incluir desfases.
- la señal $y(t)$ es periódica con periodo $T$.

\begin{equation}
(y \; \circ \; sin_n)(0) = \frac{1}{T} \int_{0}^{T} y(t) \cdot sin(n \omega_0 t) \; dt
\end{equation}

Esta expresión puede interpretarse como el parecido de una señal $y(t)$ a la señal $sin$ con crecuencia $n \omega_0$ promediado a lo largo de un periodo sin desfase del seno.

Retomando la idea inicial

\begin{equation}
y(t) = \sum_{n=0}^{\infty} A_n \cdot cos(n \omega_0 t) + B_n \cdot sin(n \omega_0 t)  
\end{equation}

donde
\begin{equation}
A_n = \frac{1}{T} \int_{0}^{T} y(t) \cdot cos(n \omega_0 t) \; dt
\end{equation}

\begin{equation}
B_n = \frac{1}{T} \int_{0}^{T} y(t) \cdot sin(n \omega_0 t) \; dt
\end{equation}

Se recomienda al estudiante que encuentre la relación entre las Series anteriores y la siguiente alternativa para representar la Series de Fourier.

\begin{equation}
y(t) = \sum_{n=-\infty}^{\infty} C_n \cdot e^{j n \omega_0 t}
\end{equation}

donde 

\begin{equation}
C_n = \frac{1}{T} \int_{0}^{T} y(t) \cdot e^{j n \omega_0 t} \; dt
\end{equation}

Los valores $C_n$ son el espectro de la señal periódica $y(t)$ y son una representación en el dominio de la frecuencia.

**Ejemplo # 1**

La señal $y(t) = sin(2 \pi t)$ es en sí misma una oscilación pura de periodo $T=1$. 


```python
# Se define y como el seno de t
t = sym.symbols('t', real=True)
#T = sym.symbols('T', real=True)
T = 1
nw = sym.symbols('n', real=True)
delta = sym.DiracDelta(nw)
w0 = 2 * sym.pi / T


y = 1*sym.sin(w0*t) + 0.5
# y = sym.sin(w0*t)
# y = (t-0.5)*(t-0.5)
y

```

Aunque la sumatoria de las series de Fourier incluye infinitos términos, solamente se tomaran las primeras 3 componentes.


```python
n_max = 5

y_ser = 0
C = 0
ns = range(-n_max,n_max+1)
espectro = pd.DataFrame(index = ns,
                        columns= ['C','C_np','C_real','C_imag','C_mag','C_ang'])

for n in espectro.index:
    C_n = (1/T)*sym.integrate(y*sym.exp(-1j*n*w0*t), (t,0,T)).evalf()
    C = C + C_n*delta.subs(nw,nw-n)
    y_ser = y_ser + C_n*sym.exp(1j*n*w0*t)
    espectro['C'][n]=C_n
    C_r = float(sym.re(C_n))
    C_i = float(sym.im(C_n))
    espectro['C_real'][n] = C_r
    espectro['C_imag'][n] = C_i
    espectro['C_np'][n] = complex(C_r + 1j*C_i)
    espectro['C_mag'][n] = np.absolute(espectro['C_np'][n])
    espectro['C_ang'][n] = np.angle(espectro['C_np'][n])
espectro
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>C</th>
      <th>C_np</th>
      <th>C_real</th>
      <th>C_imag</th>
      <th>C_mag</th>
      <th>C_ang</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>-5</th>
      <td>-1.44265290902902e-129 + 3.60663227257255e-130*I</td>
      <td>(-1.4426529090290212e-129+3.606632272572553e-1...</td>
      <td>-1.44265e-129</td>
      <td>3.60663e-130</td>
      <td>1.48705e-129</td>
      <td>2.89661</td>
    </tr>
    <tr>
      <th>-4</th>
      <td>5.77061163611608e-129 + 1.15412232722322e-128*I</td>
      <td>(5.770611636116085e-129+1.154122327223217e-128j)</td>
      <td>5.77061e-129</td>
      <td>1.15412e-128</td>
      <td>1.29035e-128</td>
      <td>1.10715</td>
    </tr>
    <tr>
      <th>-3</th>
      <td>-4.61648930889287e-128 - 4.61648930889287e-128*I</td>
      <td>(-4.616489308892868e-128-4.616489308892868e-128j)</td>
      <td>-4.61649e-128</td>
      <td>-4.61649e-128</td>
      <td>6.5287e-128</td>
      <td>-2.35619</td>
    </tr>
    <tr>
      <th>-2</th>
      <td>9.23297861778574e-128 + 9.23297861778574e-128*I</td>
      <td>(9.232978617785736e-128+9.232978617785736e-128j)</td>
      <td>9.23298e-128</td>
      <td>9.23298e-128</td>
      <td>1.30574e-127</td>
      <td>0.785398</td>
    </tr>
    <tr>
      <th>-1</th>
      <td>1.05879118406788e-22 + 0.5*I</td>
      <td>(1.0587911840678754e-22+0.5j)</td>
      <td>1.05879e-22</td>
      <td>0.5</td>
      <td>0.5</td>
      <td>1.5708</td>
    </tr>
    <tr>
      <th>0</th>
      <td>0.500000000000000</td>
      <td>(0.5+0j)</td>
      <td>0.5</td>
      <td>0</td>
      <td>0.5</td>
      <td>0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>3.58856254064475e-26 - 0.5*I</td>
      <td>(3.5885625406447527e-26-0.5j)</td>
      <td>3.58856e-26</td>
      <td>-0.5</td>
      <td>0.5</td>
      <td>-1.5708</td>
    </tr>
    <tr>
      <th>2</th>
      <td>9.23297861778574e-128 - 9.23297861778574e-128*I</td>
      <td>(9.232978617785736e-128-9.232978617785736e-128j)</td>
      <td>9.23298e-128</td>
      <td>-9.23298e-128</td>
      <td>1.30574e-127</td>
      <td>-0.785398</td>
    </tr>
    <tr>
      <th>3</th>
      <td>-4.61648930889287e-128 + 4.61648930889287e-128*I</td>
      <td>(-4.616489308892868e-128+4.616489308892868e-128j)</td>
      <td>-4.61649e-128</td>
      <td>4.61649e-128</td>
      <td>6.5287e-128</td>
      <td>2.35619</td>
    </tr>
    <tr>
      <th>4</th>
      <td>5.77061163611608e-129 - 1.15412232722322e-128*I</td>
      <td>(5.770611636116085e-129-1.154122327223217e-128j)</td>
      <td>5.77061e-129</td>
      <td>-1.15412e-128</td>
      <td>1.29035e-128</td>
      <td>-1.10715</td>
    </tr>
    <tr>
      <th>5</th>
      <td>-1.44265290902902e-129 - 3.60663227257255e-130*I</td>
      <td>(-1.4426529090290212e-129-3.606632272572553e-1...</td>
      <td>-1.44265e-129</td>
      <td>-3.60663e-130</td>
      <td>1.48705e-129</td>
      <td>-2.89661</td>
    </tr>
  </tbody>
</table>
</div>



La señal reconstruida con un **n_max** componentes


```python
y_ser
```


```python
plt.rcParams['figure.figsize'] = 7, 2
g1 = sym.plot(y, (t,0,1), ylabel=r'Amp',show=False,line_color='blue',legend=True, label = 'y(t) original')
g2 = sym.plot(sym.re(y_ser), (t,-1,2), ylabel=r'Amp',show=False,line_color='red',legend=True, label = 'y(t) reconstruida')
g1.extend(g2)
g1.show()
```


    

    



```python
C
```


```python
plt.rcParams['figure.figsize'] = 7, 2
plt.stem(espectro.index,espectro['C_mag'])

```




    <StemContainer object of 3 artists>




    

    


**Ejercicio para entregar 02-Octubre-2020**

Use las siguientes funciones para definir un periodo de una señal periódica con periodo $T=1$:

\begin{equation}
y_1(t) = \begin{cases}
-1 &  0 \leq t < 0.5 \\
1 &  0.5 \leq t < 1 
\end{cases}
\end{equation}


\begin{equation}
y_2(t) = t
\end{equation}

\begin{equation}
y_3(t) = 3 sin(2 \pi t)
\end{equation}

Varíe la cantidad de componentes que reconstruyen cada función y analice la reconstrucción obtenida y los valores de $C_n$


```python

```

d128ac18a21059fd9a2a7284a255d06e59cab6d8
ipynb
Jupyter Notebook
.ipynb_checkpoints/4_Series_de_Fourier-checkpoint.ipynb
pierrediazp/Se-ales_y_Sistemas
b14bdaf814b0643589660078ddd39b5cdf86b659
MIT
.ipynb_checkpoints/4_Series_de_Fourier-checkpoint.ipynb
pierrediazp/Se-ales_y_Sistemas
b14bdaf814b0643589660078ddd39b5cdf86b659
MIT
.ipynb_checkpoints/4_Series_de_Fourier-checkpoint.ipynb
pierrediazp/Se-ales_y_Sistemas
b14bdaf814b0643589660078ddd39b5cdf86b659
MIT
Qwen/Qwen-72B
1. YES
2. YES