Está en la página 1de 5

Nombre: Pablo Benjamín Vega Campos

Reporte Tarea 1 CBM 412

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]

Ilustración 1 Señal ECG. Elaboración propia

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

Ilustración 2.Señal filtrada con un filtro butter. Elaboración propia

Ilustración 3.Señal ECG filtrada con media móvil. Elaboración propia

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.

• Se realiza un estimado de cuantos datos contienen un pulso, por lo que utilizamos la


siguiente relacion:
𝐷𝑎𝑡𝑜𝑠 𝑡𝑜𝑡𝑎𝑙𝑒𝑠
𝐷𝑎𝑡𝑜𝑠 𝑎𝑝𝑟𝑜𝑥𝑖𝑚𝑎𝑑𝑜𝑠 𝑝𝑜𝑟 𝑝𝑢𝑙𝑠𝑜 =
𝐶𝑎𝑛𝑡𝑖𝑑𝑎𝑑 𝑑𝑒 𝑝𝑢𝑙𝑠𝑜𝑠
4096
𝐷𝑎𝑡𝑜𝑠 𝑎𝑝𝑟𝑜𝑥𝑖𝑚𝑎𝑑𝑜𝑠 𝑝𝑜𝑟 𝑝𝑢𝑙𝑠𝑜 =
8

𝐷𝑎𝑡𝑜𝑠 𝑎𝑝𝑟𝑜𝑥𝑖𝑚𝑎𝑑𝑜𝑠 𝑝𝑜𝑟 𝑝𝑢𝑙𝑜𝑠 = 512

• 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.

• Finalmente, se grafica con la función subplot de matplotlib.pyplot [2], en la cual se le agrega


títulos tanto a los ejes como a los gráficos. Además, se realiza un cambio de color con el fin
de que cada grafico posea un color distinto y genera una mayor notoriedad entre estas
ilustraciones. (Ilustración 4).

Ilustración 4.Primeros 4 pulsos de la Señal ECG. Elaboración propia.

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 [ ]
𝑝𝑢𝑙𝑠𝑜𝑠

• Obtenido el periodo, se reemplaza esta variable en la ecuación de frecuencia cardiaca.


1 𝑝𝑢𝑙𝑠𝑜𝑠
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 = [ ]
𝑇 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠

1 𝑝𝑢𝑙𝑠𝑜𝑠
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 = [ ]
0.85375 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠

𝑝𝑢𝑙𝑠𝑜𝑠
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 ≃ 1.17[𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠]

• Finalmente realizamos una conversión de unidades para ver la cantidad de pulsos por
minutos.
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 𝑝𝑜𝑟 𝑚𝑖𝑛𝑢𝑡𝑜 = 𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 ∗ 60

𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑐𝑎𝑟𝑑𝑖𝑎𝑐𝑎 𝑝𝑜𝑟 𝑚𝑖𝑛𝑢𝑡𝑜 = 1.17 ∗ 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).

[2] J. D. Hunter, Escritor, Matplotlib: A 2D Graphics Environment. [Performance]. Computing in


Science & Engineering, 90-95 (2007).

[3] T. E. Oliphant, Escritor, Python for Scientific Computing. [Performance]. Computing in Science
& Engineering, 10-20 (2007).

También podría gustarte