Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Para replicar el espectro ECG, primero se realiza el calculo del vector tiempo en que fue muestreada
esta señal, para esto ocupamos la siguiente relación:
Debido a que se conoce la frecuencia de muestreo de la señal determinamos Fs= 600 [Hz], definida
la frecuencia podemos obtener el tiempo de la señal ECG con la siguiente ecuación.
𝑁𝑢𝑚𝑒𝑟𝑜 𝑑𝑒 𝑚𝑢𝑒𝑠𝑡𝑟𝑎𝑠
𝑇𝑖𝑒𝑚𝑝𝑜 =
𝐹𝑠
4096
𝑇𝑖𝑒𝑚𝑝𝑜 =
600
𝑇𝑖𝑒𝑚𝑝𝑜 = 6,826666667
Obtenido el tiempo se procede a crear el vector tiempo con la función linspace de numpy [1],
obtenido el vector, se realizar un gráfico de tiempos vs datos ECG con la librería matplotlib.pyplot
(Ilustración 1). [2]
Una vez obtenida la señal ECG, se le realizaron dos tipos de filtrados, el primer filtrado se realizó con
Butterorth bandpass de 0,5[Hz]-250[Hz], proporcionado por la librería scipy [3] (Ilustración 2).
Luego para reducir más el ruido de la señal, se llevo a cabo un segundo proceso de filtrado, el cual
consistió en realizar una media móvil con un step igual a 12, obteniendo una señal con menos SNR
que la señal original (Ilustración 3).
Ya obtenido la señal filtrada, se procede a realizar un grafico de los primeros 4 pulsos del registro
de ECG, por lo cual se realiza una celda de 2x2 para tener cuatro gráficos independientes, los cuales
contienen cada uno de estos cuatro pulsos, para realizar esta separación, se utiliza el siguiente
algoritmo de selección de datos.
• Obtenido la cantidad de datos se realiza un arreglo en el vector tiempo al igual que el vector
datos, dejando 4 vectores de 512 datos cada uno, para poder aplicar un grafico de tiempo
vs datos por cada pulso o ciclo del corazón.
Para determinar la frecuencia cardiaca del sujeto que fue sometido al ECG, se aplican las siguientes
igualdades.
• Para saber la frecuencia cardiaca del individuo se necesita saber el periodo de cada ciclo
cardiaco del individuo, para esto se realiza una extrapolación con los datos proporcionados
con este registro. Para determinar el periodo, realizamos la siguiente relación:
𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒𝑙 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑜 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠
𝑃𝑒𝑟𝑖𝑜𝑑𝑜 (𝑇) = [ ]
𝑁𝑢𝑚𝑒𝑟𝑜 𝑑𝑒 𝑐𝑖𝑐𝑙𝑜𝑠 𝑝𝑢𝑙𝑠𝑜𝑠
6.83 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠
𝑇≃ [ ]
8 𝑝𝑢𝑙𝑠𝑜𝑠
𝑠𝑒𝑔𝑢𝑑𝑜𝑠
𝑇 ≃ 0.85375 [ ]
𝑝𝑢𝑙𝑠𝑜𝑠
1 𝑝𝑢𝑙𝑠𝑜𝑠
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 = [ ]
0.85375 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠
𝑝𝑢𝑙𝑠𝑜𝑠
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 ≃ 1.17[𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠]
• Finalmente realizamos una conversión de unidades para ver la cantidad de pulsos por
minutos.
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 𝑝𝑜𝑟 𝑚𝑖𝑛𝑢𝑡𝑜 = 𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 ∗ 60
𝑝𝑢𝑙𝑠𝑜𝑠
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 𝑝𝑜𝑟 𝑚𝑖𝑛𝑢𝑡𝑜 ≃ 70 [ ]
𝑚𝑖𝑛𝑢𝑡𝑜
Finalmente, para determinar la posición en el tiempo de cada onda R en la señal ECG, se realizó un
algoritmo detección de máximos por cada viñeta de pulsos separadas anteriormente para realizar
los gráficos independientes, obtenido este máximo por cada pulso, se ocupa la función where, de
numpy [1] el cual regresa la posición en el vector datos de cada uno de estos máximos, debido a que
la señal no tiene un filtrado tan eficiente, la función where entrega varias posiciones de máximo, ya
que la señal al no estar totalmente filtrada se encuentra más de un punto con el mismo valor para
obtener una posición más precisa se le aplica una mediana estadística con el fin de que el dato de
posición seleccionada tenga menos error. Una vez obtenida la posición en el vector de los datos, se
replica la misma posición en el vector tiempo, obteniendo así la posición temporal de cuando ocurre
este evento en el complejo QRS. Obteniendo la siguiente tabla de valores:
Onda R Tiempo[s]
1° Onda 0.318 [s]
2° Onda 1.165 [s]
3° Onda 2.025 [s]
4° Onda 2.879 [s]
5° Onda 3.731 [s]
6° Onda 4.586 [s]
7° Onda 5.441 [s]
8° Onda 6.29 [s]
Bibliografía
[1] S. C. C. a. G. V. Stéfan van der Walt, Escritor, The NumPy Array: A Structure for Efficient
Numerical Computation. [Performance]. Computing in Science & Engineering, 13, 22-30
(2011).
[3] T. E. Oliphant, Escritor, Python for Scientific Computing. [Performance]. Computing in Science
& Engineering, 10-20 (2007).