<jupyter_start><jupyter_text>Señales y Sistemas Discretos  Librerias<jupyter_code>import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")<jupyter_output><empty_output><jupyter_text>Señal Discreta Se tiene una señal x[n] = $5 \cdot \delta[n] + 8 \cdot \delta[n-1] - 4 \cdot \delta[n-2] - 2 \cdot \delta[n-3] + 4 \cdot \delta[n-4] + 1 \cdot \delta[n-6] - 3 \cdot \delta[n-7] + 1 \cdot \delta[n-8]$ . Se muestra a continuación una forma de graficar dicha señal.RECOMENDACIÓN: compruebe que el resultado es correcto realizando el gráfico de $x[n]$ a mano.<jupyter_code># Definición de la señal
x = np.array([5,8,-4,-2,4,0,1,-3,1])

#Grafico
plt.figure(figsize=(12,6))
(markersa, stemlinesa, baselinea) = plt.stem(x)
plt.setp(baselinea, color="blue")
plt.setp(stemlinesa, color="blue")
plt.setp(markersa, color="blue")
plt.grid()
plt.title("Señal $x[n]$")
plt.xlabel("n")
plt.legend(["x [n]"])
plt.show()<jupyter_output><empty_output><jupyter_text>Sistema Discreto Suponga que se tiene un Sistema Discreto promediador, cuya salida corresponde al promedio de la últimas N entradas (incluyendo la entrada actual).A continuación se implenta una función para replicar el comportamiento del sistema, sobre una señal $x[n]$ dada:<jupyter_code>def filtro_promediador(x,N):
    #x: señal de entrada
    #N: cantidad de entradas que se promedian para obtener la salida
  pre_x = np.zeros(N-1) #zero padding 
  x = np.concatenate((pre_x,x))
  y = []
  for i in range(N-1,len(x)):
    aux = 0
    for j in range(N):
      aux += x[i-j]/N
    y.append(aux)
  return np.array(y)<jupyter_output><empty_output><jupyter_text>Ejemplo 1Se aplica el sistema promediador con $N = 2$, se obtiene y grafica la salida.<jupyter_code># Se obtiene la salida y1[n]
N1 = 2
y1 = filtro_promediador(x,N1)

#Grafica
plt.figure(figsize=(12,6))
(markersa, stemlinesa, baselinea) = plt.stem(x)
plt.setp(baselinea, color="blue")
plt.setp(stemlinesa, color="blue")
plt.setp(markersa, color="blue")
(markersb, stemlinesb, baselineb) = plt.stem(y1)
plt.setp(baselineb, color="red")
plt.setp(stemlinesb, color="red")
plt.setp(markersb, color="red")
plt.title("Filtro promediador con N = "+str(N1))
plt.xlabel("n")
plt.legend(["x[n]","y1[n]"])
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>Ejemplo 2Se aplica el sistema com $N = 4$, se obtiene y grafica la salida.<jupyter_code># Se obtiene la salida y1[n]
N2 = 4
y2 = filtro_promediador(x,N2)

#Grafica
plt.figure(figsize=(12,6))
(markersa, stemlinesa, baselinea) = plt.stem(x)
plt.setp(baselinea, color="blue")
plt.setp(stemlinesa, color="blue")
plt.setp(markersa, color="blue")
(markersb, stemlinesb, baselineb) = plt.stem(y2)
plt.setp(baselineb, color="red")
plt.setp(stemlinesb, color="red")
plt.setp(markersb, color="red")
plt.title("Filtro promediador con N = "+str(N2))
plt.xlabel("n")
plt.legend(["x[n]","y2[n]"])
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>Ejemplo 3Evaluación del efecto de aplicar el sistema promediador sobre una señal real, como la obtenida al realizar un Electrocardiograma. Es la misa señal que se utilizó para estudiar [tipos de muestreo](https://agustinsolano.github.io/SyS_scriptsbook/md_scripts/tipos_de_muestreo.html) .RECOMENDACIÓN: pruebe que ocurre con la utilización de distintos valores de N<jupyter_code># Se lavanta senial de un archivo separado por comas (.csv)
path_ECG = './external_files/ECG.csv'
senal_ECG = np.genfromtxt(path_ECG, delimiter=',')
fs_ECG = 1000 # Hz: frecuencia  la cual fueron muestrados los datos originales, que se simulan como analogicos
t_ECG = np.arange(0,len(senal_ECG)/fs_ECG,1/fs_ECG)

# Se le agrega una senial paeriodica de baja amplitud
ruido = 0.05*np.sin(2 * np.pi * 50 * t_ECG) 
senal_ECG_wRuido = senal_ECG + ruido

#definimos N y aplicamos el filtro promediador
N3 = 25
y3 = filtro_promediador(senal_ECG_wRuido,N3)

#Grafico
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(16, 8))
ax1.plot(t_ECG,senal_ECG_wRuido)
ax1.set_ylim([-1.5,1.5])
ax1.set_title("Señal de ECG con ruido")
ax1.set_xlabel("Tiempo [seg]")
ax1.set_ylabel("Amplitud")
ax1.grid(linestyle='--')
ax2.plot(t_ECG,y3)
ax2.set_ylim([-1.3,1.3])
ax2.set_title("Salida del sistema promediador con N = "+str(N3))
ax2.set_xlabel("Tiempo [seg]")
ax2.set_ylabel("Amplitud")
ax2.grid(linestyle='--')
plt.tight_layout()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14867337602927722, 'fraction_numerical': 0.023559011893870083, 'mean_word_length': 5.886614173228346, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '545490', 'license': 'MIT', 'n_tokens_mistral': 1944, 'n_tokens_neox': 1851, 'n_words': 414, 'path': 'md_scripts/sistema_discreto.ipynb', 'repo_name': 'AgustinSolano/SyS_scriptsbook', 'size': '4372'}