<jupyter_start><jupyter_text>Tipos de Muestreo<jupyter_code>import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as signal

import warnings
warnings.filterwarnings("ignore")<jupyter_output><empty_output><jupyter_text>Funciones para el Muestreo<jupyter_code>def mIdeal(senal,t_senal,Ts,Fs_orig):
    #tomo una muestra cada Ts y guardo en un vector
    senal_mues1 = senal[np.arange(0,len(senal),int(np.round(Ts*Fs_orig)))]
    #creo un vector de tiempos asociado a la muestras
    t_ideal = t_senal[np.arange(0,len(senal),int(np.round(Ts*Fs_orig)))]
    #t_ideal = np.arange(0,len(senal_mues1)*Ts,Ts)
    return t_ideal, senal_mues1<jupyter_output><empty_output><jupyter_text>Funcion para la Transformada de Fourier<jupyter_code>def TFourier(signal,fs,unidadesx):#unidadesx = 0 en Hz, 1 rad/s
    FFT = abs(np.fft.fftshift(np.fft.fft(signal)))
    nFFT = len(FFT)
    fFFT = np.arange(-nFFT/2,nFFT/2)*(fs/nFFT)
    if unidadesx == 1:
        fFFT= fFFT*2*np.pi
    return fFFT,FFT<jupyter_output><empty_output><jupyter_text>Señales<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)

# Calculo de la T.Fourier
fFFT_ECG,FFT_ECG = TFourier(senal_ECG,fs_ECG,0)
# Graficacion de la senial y su espectro
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(16, 8))
ax1.plot(t_ECG,senal_ECG)
ax1.set_title("Señal Original de ECG")
ax1.set_xlabel("Tiempo [s]")
ax1.set_ylabel("Amplitud")
ax1.grid(linestyle='--')
ax2.plot(fFFT_ECG,FFT_ECG)
ax2.set_xlim([-60,60])
ax2.set_title("Transformada de Fourier de señal de ECG")
ax2.set_xlabel("Frecuencia [Hz]")
ax2.set_ylabel("Amplitud")
ax2.grid(linestyle='--')
plt.tight_layout()<jupyter_output><empty_output><jupyter_text>Muestreo Ideal<jupyter_code># Identifico la frecuencia maxima de la 
fmax_ECG = 60 #a partir del espectro veo que la frecuencia 
fs_muest_ECG = 2*fmax_ECG*1.25
Ts_ECG = 1/fs_muest_ECG
# Se realiza el muestreo ideal
t_ideal, sign_ideal = mIdeal(senal_ECG,t_ECG,Ts_ECG,fs_ECG)

t_min = -0.1
t_max = 3.0

# Graficacion
fig, (ax1,ax2) = plt.subplots(2, 1, figsize=(16, 12))
ax1.stem(t_ideal,sign_ideal)
ax1.set_xlim(t_min,t_max)
ax1.set_title("Señal muestreada idealmente")
ax1.set_xlabel("Tiempo [s]")
ax1.set_ylabel("Amplitud")
ax1.grid(linestyle='--')

ax2.stem(t_ideal,sign_ideal)
ax2.plot(t_ECG,senal_ECG,'--r')
ax2.set_xlim(t_min,t_max)
ax2.set_title("Señal Muestreada y Original")
ax2.set_xlabel("Tiempo [s]")
ax2.set_ylabel("Amplitud")
ax2.grid(linestyle='--')
ax2.legend(['Señal Original','Muestreo ideal'])

fig2, (ax3) = plt.subplots(1, 1, figsize=(16, 12))
ax3.stem(t_ideal,sign_ideal)
ax3.plot(t_ECG,senal_ECG,'--r')
ax3.set_xlim(0.5,1.1)
ax3.set_title("Señal Muestreada y Original")
ax3.set_xlabel("Tiempo [s]")
ax3.set_ylabel("Amplitud")
ax3.grid(linestyle='--')
ax3.legend(['Señal Original','Muestreo ideal'])

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.148005148005148, 'fraction_numerical': 0.030244530244530245, 'mean_word_length': 6.564476885644769, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, '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': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '667764', 'license': 'MIT', 'n_tokens_mistral': 1484, 'n_tokens_neox': 1411, 'n_words': 233, 'path': 'md_scripts/tipos_de_muestreo.ipynb', 'repo_name': 'AgustinSolano/SyS_scriptsbook', 'size': '3108'}