UNIVER5IDAD AUTbNOMA METROPOLITANA

Anuncio
UNIVER5IDAD AUTbNOMA METROPOLITANA
...
.
..
IZTAPALAPA
DIVI516N DE CIENCIA5 6Á5lCA5 E INGENIERíA
Departamento de Ingenieria Eléctrica
Optimización del proceso de obtención un
deCTG fetal
a partir de una se’3ial de ECG abdominal
Tesis que presenta el alumno:
RodrigolRivera Hernández
Matricula 95320931
Para la obtención del grado de:
Licenciatura en Ingeniería Biomédica
Con área de concentraciónen:
Instrumentación Médica Electrónica
Asesor:
M. en 1.6. Rocio Ortiz
Abril del 2001
?“““di
CONTENIDO
CONTENIDO
I.- INTRODUCCI~N
1.I.- Calrdiotacografía
1.2.- Parámetros de la frecuencia cardiaca fetal.
'1.2.1.- Línea de base
'1.2.2.- Variabilidad
1.3.- Alteraciones de la frecuencia cardiaca fetal basal
'1.3.1.- Taquicardia
'1.3.2.- Bradicardia
1.4.- Alteraciones de la variabilidad
'I .4.1_-Aumentos de la variabilidad
'I .4.2.- Disminución de la variabilidad
1.5.- Alteraciones periódicas dela frecuencia cardiaca fetal
'I S.1.- Aceleraciones
1.5.2.- Desaceleraciones
1 S.2.1.-Desaceleración precoz
1.5.2.2.-Desaceleración tardía
1.5.2.3.- Desaceleraciones variables
1.6.- La 'JFC como un indicador de bienestar
I' .4.1.- Consideraciones fisiológicas
1.7.- Justificación del proyecto
1.8.- Antecedentes
1.9.-Hipótesis
1. I 0.- Objetivos
11.- METODOLOGíA
2.1 .- Descripcibn del procedimiento
2.2.- Méiodo de evaluación
111.- RESULTADOS
IV.- DISCUSI~N
V.- CONCLUSIONES
VI.- BIBLIOGRAFíA
APÉNDICE. Rutinas y procedimientos de computo en lenguaje MatlabB
ii
INTRODUCCION
INTRODUCCI~N
1 .I.-CARDlOTACOGRAFíA
Un cardiotacograma (CTG) es un registro de la frecuencia cardiaca fetal (FCF) ya sea medido con
un transductor en el abdomen o con un censor que debe estar en contacto con el feto. A parte de
la FCF, unsegundo
transductor, midelas contracciones uterinas sobre el fondo del saco
gestacional.
Diagrama 1.1.Obtención del CTG
El trazo del CTG generalmente presenta dos líneas. La línea superior es un registro de la
frecuencia cardiaca fetal en latidos por minuto. La línea inferiores un registro de las contracciones
uterinas. La escala vertical de este trazo depende de la forma en la que el transductor registra las
contracciones, por lo tanto, la interpretación se debe realizar en relación con el resto del trazo. El
trazo también puede presentar marcas (registradas mediante un interruptor que controla la madre),
que son indicaciones de que la madre sintió un movimiento fetal.
La siguiente sección describe los diferentes parámetros y alteraciones de la frecuencia cardiaca
fetal así como los patrones que se observan en el trazo de un CTG.
1.2.- PARÁMETROS DE LA FRECUENCIACARDIACAFETAL.
En la frecuencia cardiaca fetal normal distinguimos dos características importantes: su línea de
base (frecuencia cardiaca fetal basal) y su variabilidad.
1.2.1.-Línea de base
Representa la FCF media y se mide en los intervalos entre contracciones. Su frecuencia normal
oscila entre 110 y 150 latidos por minuto.
Esta frecuencia se debe al gobierno de los sistemas parasimpático y simpático sobre el corazón
fetal. La línea de base en fetos prematuros (menos de 30 semanas) se acerca a 160 latidos por
minuto. Después a medida que avanza la edad gestacional, esta frecuencia basal disminuye
progresivamente hasta unos 140 latidos por minuto. La administración de atropina, paralizando el
parasimpático fetal, restaura la frecuencia cardiaca fetal a 160 latidos por minuto, cualquiera que
sea la edad gestacional. Ello indica el progresivo control del parasimpático sobre la FCF a medida
que aumenta la edad gestacional. Por el contrario, la administración del propranolol (un bloqueador
del sistema adrenergic0 p) disminuye la frecuencia cardiaca fetal, señalando el control del sistema
simpático.
La línea base puede cambiar espontáneamente, o por diversos factores etiológicos (bradicardia y
taquicardia fetales). También existen cambios en la FCF que son sólo modificaciones periódicas,
para distinguir unos de otro debe considerarse que los cambios de la línea de base son aquellas
variaciones de la FCF que duran más de 15 minutos.
A continuación se presenta una sección de un CTG quemuestra una línea de base normal típica.
Figura 1.1: CTG que muestra una Línea de Base normal
INTRODUCCION
1.2.2.- Variabilidad
La variabilidad de la frecuencia cardiaca fetal (VCF) latido a latido (oscilaciones de la FCF que
ocurren al integrar como frecuencia los intervalosentre latido y latido) refleja unamodulación
neurológica normal y una capacidad normalde respuesta del corazónfetal.
Se considera que existen dos tipos de variabilidad: variabilidad a corto plazo (variabilidad latido a
latido producidapor la variabilidadnormal de los intervalosen el ciclo eléctricocardiaco)y la
variabilidad a largo plazo (representada por una ondulación enel trazado de la frecuencia cardiaca
feta, con una frecuencia de 3 a 5 ciclos por minuto).
La variabilidad a corto plazo muestra, normalmente, unas diferencias medias
de 1-2 latidos por
minuto, al integrar a frecuencias los intervalos entre señal básica y señal básica. La variabilidad a
largo plazo normal presenta amplitudes que oscilan entre5 y 20 latidos por minuto.
Lasinfluenciasparasimpáticasactúanatravés
de impulsosrápidosycortos,mientrasque
las
simpáticas lo hacen a través de impulsos más lentos y sostenidos. Druzen (1979) demostró que la
variabilidad a corto plazosedebeavariacionesen
el tonoparasimpático,mientrasque
la
variabilidad a largo plazo se debe a variaciones
en el tono simpático sobreel corazón fetal.
Existe una causafisiológica de disminución de la variabilidad. Se trata de laalteración en elfeto de
periodos de “sueño” (con variabilidad disminuida) y “vigilia” (con variabilidad normal). Estos ciclos
pueden durar 20 o 30 minutos; no es de preocupar el encontrar una variabilidad disminuida que,
espontáneamente, a los poco minutos vuelve a la normalidad. La estimulación del feto durante la
manipulación del útero o el aplicar sonidos relativamente intensosjunto al abdomen de la gestante
contribuyen a <despertar> al feto y al retorno de la variabilidad normal.
Lasmodificacionesde
la FCFse clasifican enalteraciones dela FCFbasal(taquicardiay
bradicardia); alteraciones de la variabilidad (por aumento o disminución) y alteraciones periódicas
de la FCF (aceleraciones y desaceleraciones precoces, tardías y variables).
1.3- ALTERACIONES DE LA FRECUENCIA CARDIACAFETAL BASAL.
1.3.1.- Taquicardia:
La taquicardia fetal se define como la FCF basal por encima de los 150 latidos por minuto. Puesto
que las taquicardias traducen aumento del tono simpático y disminución de tono parasimpático,
generalmente van acompañadas de disminución de la variabilidad a largo plazo. La taquicardia
fetal puede ser producida por uno o más de los siguientes factores:
1. Hipoxia fetalleve.
2. Fiebre materna.
3. Amnionitis.
4. Administración de parasimpaticolíticos: atropina, atarax y fenotiacinas.
5. Administración de p-adrenérgicos; hipertiroidismo materno, anemia fetal,
fallo
cardiac0 y taquiarritmia cardiaca fetal.
A continuación se presenta una sección deun CTG que muestra taquicardia
b
33
6
Figura 1.2. Taquicardia
1.3.2.- Bradicardia.
Se define como laFCF basal inferior a 110 latidos por minuto. Si la bradicardia no desciende a 8090 latidos por minuto y la frecuencia cardiaca mantiene su variabilidad, la oxigenación fetal no
suele estar afectada. En ocasiones, en un registro, puede confundirse una bradicardia basal con
desaceleraciones prolongadas, en las que una desaceleración sucede a otra sin que la FCF tenga
tiempo de volver a su línea de base. En estos casos, la variabilidadestá disminuida, y el pronóstico
fetal es grave. La administración de propranolol a la madre puede ser causa debradicardia fetal.
A continuacibn se presenta una sección de unCTG que muestra bradicardia.
w
t
INTRODUCCION
1.4.- ALTERACIONES DE LA VARIABILIDAD
La variabilidad puede estar aumentadao disminuida. Las variaciones a corto plazo en la línea de
base deben estar entre los 10 y 151pm (excepto durantelos intervalos de suelo fetal que no deben
60 minutos). Una variabilidadreducidadeformaprolongadajuntoconotras
sermayoresa
anormalidades, pueden ser indicativo de sufrimiento fetal.
1.4.1.- Aumentos de la variabilidad.
Constituyen el signo más precoz de hipoxia fetal leve. Por ello se observa con frecuenciaal inicio
de la aparición de desaceleraciones tardías.Dos todos modos, cuando la variabilidad es normal o
está aumentada el pH fetal se mantiene aún en los límites de la normalidad. El aumento de la
variabilidad (tanto en la variabilidad de corto como largo plazo) que acompaña
a al hipoxemia leve
y
perece deberse, según Druzen, a un aumento del tono simpático que produciría hipertensión
aumento de la variabilidad a largo plazo. A su vez, la hipertensión produciría estimulación de los
bar0 receptoresy reflejo vagal vasodilatador.El aumento del tonovagal aumentaríala variabilidad
a corto plazo.
1.4.2.- Disminución de la variabilidad.
S e debe a cualquier
podemos citar:
1.
2.
3.
4.
5.
6.
7.
8.
9.
causa capaz de producir depresión del sistema
nervioso fetal. Entre ella
Analgésicos
Narcóticos.
Barbitúricos.
Tranquilizantes.
Fenotiacinas.
Parasimpaticolíticos.
Bloqueadores p-adrenérgicos.
Anestésicos generales.
Hipoxia (moderadao grave)-acidosis.
Evidentemente; la hipoxiamoderada o grave y la acidosis es la causa más preocupante.
Generalmente en la hipoxia moderada o grave, la disminución de la variabilidad va acompañada
Apgar al nacer. La causa dela
de desaceleracionestardías,acidosis fetal y bajoíndicede
disminucióndelavariabilidadenlahipoxiamoderada
o grave es una depresión del sistema
nervioso central fetal producida por la misma hipoxia, tanto en el sistema simpático como en el
parasimpático.
AI parecer, los efectos de la hipoxia moderada o grave en la disminuci6n de la variabilidad no
los dos tipos (a corto y largo plazo) de la variabilidad.
Según
afectan de modo simultáneo a
estudios de Madanlou y Cols. (1977), la variabilidad a corto plazo será la primera en disminuir,
seguida de lavariabilidad a largo plazo. Por elcontrarioal
recuperarse elfetodelahipoxia
reaparecería primero la variabilidad a largo plazo, seguida de la reaparición de la variabilidad a
corto plazo. Puesto que la variabilidad a corto plazo está dominada porel parasimpático, esto
indica que el sistemavagal es mássensible a la hipoxia que
el sistema simpático.
Cuando laperdidadelavariabilidad
no va acompañadadedesaceleracionestardías
(y se
excluyen las demás causas antes citadas) y el ritmo basal es normal, probablementese trata de
una lesión del cerebro fetal producida anteriormente,
cuya causa (hipóxica, infecciosa, etc.) ha
cedido, pero permanece la secuela cerebral. Este patrón es frecuente en fetos con lesiones del
sistema nerviosocentral y también encasos prematuros. Ocasionalmentees idiopática,y el recién
nacido será normal.
INTRODUCCION
Un patrón de la disminución de la variabilidad que se observa muy rara
vez es llamado patrdn
sinusoidal. Secaracterizaporausencia
dela variabilidadacortoplazoenpresenciadeuna
variabilidad a largo plazo normal y muy uniforme. Este patrón se ha observado en la anemia fetal
grave debida a eritroblastosis o hemorragia feto-materna, así como en casos graves de asfixia
durante el parto. Lascausasdeéstepatrónsinusoidalnoestán
claras. No obstante,seha
observado el mismo patrón en recién nacidoseritroblastóticos.
A continuaciónsepresentaunasección
de un CTG quemuestraunadisminuciónen
la
variabilidad.
Figura 1.4. Disminución de la variabilidad.
7
1.6.- ALTERACIONES PERIóDICAS DE LA FRECUENCIA CARDIACA FETAL.
Lasalteracionesperiódicassedefinen
como alteraciones transitorias (y periódicas) de la FCF
pueden aparecer por causasfisiológicas en respuesta a movimientos fetales o en respuesta a cada
contracción uterina. En estos casos su significado es el mismo que una variabilidad normal. En
otros casos las aceleraciones traducen una compresión parcial del cordón umbilical en la que la
vena se ocluye, mientras lasarterias seguirían permeables. Ello produciría disminución del retorno
sanguíneo al feto con hipotensión y estimulaciónde los baro receptores. La respuesta de éstos a la
hipotensión y a la disminución del retorno es un incremento en la frecuencia cardiaca, o sea, una
aceleración. Las aceleraciones periódicas no suelen ir acompañadas de hipoxia fetal. Se trataría,
simplemente, de un ajuste circulatorio.
1.6.1.-Aceleraciones
Estas se definen como incrementos transitorios de la FCF mayores a los 151pm por al menos 15
segundos.Cuandosepresentandosaceleraciones
en unperiodo de 20 minutosseconsidera
como un trazo reactivo. Lasaceleracionessonunabuenaseñaldebidoaquemuestran
la
capacidad de respuesta fetal y la integridad de los mecanismos que controlanel corazón.
A continuaciónsepresentaunasección
respuesta a estímulos.
de unCTGquemuestraunaaceleración
típica como
8
INTRODUCCION
1.6.2.- Desaceleraciones
Las desaceleraciones o retardos de la FCF que aparecen en relación con la contracción uterina
son las alteraciones del registro de la FCF que merece un estudio más detallado. Para que una
desaceleración pueda ser considerada como tal la diferencia entre la línea de base de la FCF y el
momento en que la desaceleración es máxima, o sea, el momento de frecuencia cardiaca mínima
correspondiente a ésta desaceleración (amplitud de la desaceleración), debe ser por lo menos de
20 latidos por minuto. Además, para ser considerados como tales deben presentarse durante
varias contracciones (alteración periódica). Existen 3 tipos fundamentales de desaceleración: La
desaceleración precoz, la tardía y la variable.
1.6.2.1.-Des.c. -ración precoz
El patrón de F i refleja casi como en un espejo la forma de la contracción uterina. El inicio de la
desaceleracibn p
)z coincide con el inicio de la contracción uterina y el final de la primera con el
de la segunda. L
desaceleraciones precoces tempranas, como alteraciones periódicas de la
frecuencia cardiaca, se repiten con cada contracción, o por lo menos con cada contracción que
ocurre durante un determinado periodo de parto y son uniformes unascon otras variando
ligeramente la amplitud si las contracciones son más intensas. No se ha demostrado que éstas
desaceleraciones precoces tengan significado patológico, nivan acompañadasde fetos con
depresión hipoxica. Lacausade
éstas desaceleraciones precoces o tempranas parece ser el
aumento de la tensión intracraneal que se produce durante la contracción uterina por compresión
de la cabeza fetal. El aumento de la tensión intracraneal pone en marcha la estimulación del vago
o parasimpático, por lo que se retarda la frecuencia cardiaca fetal. Como prueba de ello tenemos
que la compresión exógena (provocada por una mano comprimiendo la cabeza fetal por encima de
pubis)de la cabeza fetal escapazde producir un retardo de la FCF. Estas desaceleraciones
precoces son mucho más frecuentes en los partos en presentación cefálica que en podálica, en las
últimas fases del parto que en las primeras, y después de romperse la bolsa de líquido amniótico.
Todo ello señala la compresión de la cabeza fetal comocausa principal.
'
Las desaceleraciones precoces no van asociadas con taquicardia, disminución de la variabilidadni
otros cambios de la FCF, si se asocian estos cambios, es posible que el diagnóstico sea erróneo y
se trate de otro tipo de deceleraciones. Las afirmaciones o suposiciones de
que
las
desaceleraciones precoces pueden tener unsignificado patológico, o que significan un peligro para
el feto por el aumento de la tensión intra craneal, que dificultaría la circulación cerebral, se basan
más en presunciones que en hechos científicamente demostrados.
9
INTRODUCCION
A continuación se presenta una sección de unCTG que muestra una desaceleración precoz.
,
Figura 1.6. Desaceleración Precoz
-0
.
I
.
.
INTRODUCCION
1.6.2.2.-Desaceleración
tardía
Es también una alteración periódica que se repite a cada contracción, por lo menos durante cierto
periodo
del
parto. Una
sola
desaceleración,
no
por
ser
alteración
periódica,
tampoco
es
desaceleración tardía, ni precoz, ni variable.Laforma
dela desaceleracióntardíaesmuy
semejante a la desaceleración precoz: es decir, es como una imagen especular de la contracción
uterina. Sin embargo, permite ladiferenciación entre la desaceleración precoz y la tardía: así como
en la precoz el inicio de la desaceleración, y su final, coinciden con el inicio y con el final de la
contracción uterina, en la tardía la desaceleración se inicia uno 15 segundos más tarde que el
inicio de lacontracción uterina, y se prolonga más allá del final de dicha contracción.
Es decir, aquí la desaceleración se produce con cierto retraso en relación con la contracción y no
simultáneamente, como ocurre en la desaceleración precoz. La forma, duración y amplitud de las
desaceleraciones tardías que aparecen a cada contracción son también similares
de unas a otras.
Las desaceleraciones tardías no suelen ir precedidas ni seguidas de aceleraciones (al contrario de
lo que sucede en las desaceleraciones variables).
Si las contracciones son muy frecuentes por superposición de sucesivas desaceleracionestardías,
puede aparecer luna bradicardia persistente.
La desaceleración tardía traduce una disminución del aporte de oxigeno al feto, provocado por la
contracción uterina. Su causa puede ser una contractilidad uterina excesivao una insuficiencia por
parte de la placenta en efectuar los intercambios gaseosos, o ambos factores a la vez. Por ello se
dice que la desaceleración tardía se debe a una insuficiencia útero-placentaria.El retraso existente
entre la contracción uterina y la aparición de la desaceleración tardía, se atribuye al tiempo que
tarda la contracción en producir la hipoxemia en la circulación capilar fetal, más eltiempo que ésta
sangre hipoxémica tarda en alcanzar el miocardio y el sistema nervioso central delfeto.
Aparte del númeroy la amplitud de las desaceleraciones tardías, las doscaracterísticasque
señalan un empeoramiento de la hipoxia fetal son la aparición de taquicardia fetal basal progresiva
(persistiendo las desaceleraciones tardías) y la perdida de variabilidad latido a latido.
Las desaceleraciones tardías tienen, por
tanto, un significado patológico, como lo demuestra el
hecho de que en aquellos fetos que han sufrido más de 20 desaceleraciones tardías en el curso
del parto, el promedio del pH de la arteria y vena umbilicales es significativamente menor que en
aquellos que han tenido menos de 20 desaceleraciones tardías. También la incidencia de indices
de Apgar inferiores a 7 es mayor en el grupo de casos con más de 20 desaceleraciones tardías en
el curso del parto.
A continuación se presenta una sección de un CTG que muestra una desaceleración tardía.
Figura 1.7. Desaceleración Tardía
1A.2.3.- Desaceleraciones variables.
Difiere de la precoz y de la tardía en que, tanto en el momento de su inicio en relación con la
contracción uterina, como su forma y amplitud y su duración son variables deuna a otra
desaceleración. Tampoco reflejan de modo especular la forma de la contracción uterina. Unas
veces su duración es menor que la de la contracción; otras mucho mayor. Mientras que las
desaceleraciones precoces o tardías, en general la caída de la FCF no suele sobrepasar el límite
de los 120 latidos por minuto (y por tanto suele ocurrir dentro de los límites de la normalidad de la
FCF basal), en las desaceleraciones variables el límite
inferior
puede
ser
ampliamente
sobrepasado, llegando a casos extremos incluso a 60 latidos por minuto.
A continuación se presenta una sección de unCTG que muestra una desaceleración variable.
Figura 1.8. Desaceleracion variable
INTRODUCCION
1.6.- LA VFC COMOUN INDICADOR DE BIENESTAR.
El monitoreo fetal permiteobtenerun
registro de las funciones fisiológicas vitales durante el
embarazo y el nacimiento. Este monitoreo puede ser de utilidad en la evaluación del proceso del
embarazo y el parto, y con el se pueden identificar condiciones que comprometan la salud del feto
y/o la madre ya que bajoestascondicionesambos
se enfrentanaunestrés
fisiológico
considerable. A menos que los problemas durante el embarazo sean detectados a tiempo y sean
tomadas las medidas terapéuticas necesarias, puedenexistir complicaciones que afectaránel resto
de la vida del feto, o aún resultar en muerte fetal durante el parto. Por este motivo se puede decir
que existen ventajas considerables en la realización del monitoreo fetal durante el embarazo y el
trabajo de parto.
El principal objetivo del monitoreo fetal es el de asegurar que los órganos vitales fetales reciban
unaadecuadaperfusióndeoxígeno,yque
los procesosmetabólicosseanprocesados
sin
compromiso y, por lo tanto, lleven acabosusfunciones
de la mejormanera. Es asíque,
idealmente debería ser monitorizada la presión parcial de oxígeno en el sistema nerviosos central,
el corazón, los riñones y el cerebro fetales. Desgraciadamente, no es posible medir estas variables
directamente, o aún indirectamente en el feto in útero con la tecnología existente en la actualidad.
Por
este
motivo, se
deben
buscar
variables
secundarias
relacionadas
que
puedan
ser
monitorizadas en la práctica.
Una de las variables más utilizadas en el monitoreo fetal es la FC fetal, que aunque es una variable
no específica, refleja si el cerebro fetal está adecuadamente prefundido y recibiendo el oxígeno y
nutrimentos necesarios.
.-
1.6.1 Consideraciones fisiológicas.
El balancesimpático-parasimpáticoejerceunainfluenciacontinuasobre
el ritmo sinusalcomo
resultado del control cardiovascular. Las principales fluctuaciones periódicas se originan debido a
los controles respiratorio, de bar0 reflejos ya los mecanismos de termorregulación.Otros
mecanismos fisiológicos que han sido estudiados en el feto humano son los ritmos ocasionados
por etapas de comportamiento, patrones de movimiento, ciclos circadianos y efectos de la edad
gestacional.Dicho de otramanera, elfeto respondeadiversosestímulosconcambiosen
la
frecuencia cardiaca, el movimiento fetal suele acelerar en forma transitoria la FC, mientras que
otras acciones como el rascarse o frotar el abdomen, orinar o asir el cordón umbilical la disminuyen
brevemente. Estos eventos son respuestas de estrés a estímulos fisiológicos leves. El mecanismo
que controla las variaciones dela FC fetal es el sistemanerviosoautónomoysuinervación
cardiaca. El desarrollofuncionalocurre de maneralentay en el feto humanosedesarrollaun
control autonómico considerablede la FC a partir del tercer trimestrede gestación. El balance entre
los componentessimpáticoyparasimpáticodelsistemanerviosoautónomocontribuyenauna
variabilidad latido a latido. El tomo vagal, con actividad cardio-desaceleradora, tiene un efectomás
rápido en el corazón que la actividad cardio-aceleradora simpática.
El análisis de la FC fetal consiste en tratar de identificar todas las características de un trazo de la
FC. En la práctica clínica es común identificar distintos componentes: la FC basal, los periodos de
aumento de la frecuencia o aceleraciones (también llamados patrones reactivosde la FC), que por
lo general son signos de salud fetal; periodos de disminución de la frecuencia o desaceleraciones,
que podrían serde origen mecánico o químico y que generalmente ameritan atención especial; lay
variabilidad de la frecuencia cardiaca, entre otros.
INTRODUCCION
1.7.- JUSTIFICACIóN DEL PROYECTO.
Como ya se ha explicado, existen diversos factores que actúan sobrela propiedad cronotrópica del
corazóndel feto ocasionandoque la frecuenciacardiaca (FC) presentaciertospatronesde
aceleración, desaceleración, variaciones de corto y largo plazo. La información que proporcionan
estos patrones hacen posiblela identificación de condiciones de riesgo que orientanal médico para
actuar oportunamente en el manejo o terapia más adecuada para prevenir o limitar agresiones
hacia la madre o el feto.
Desde que se descubrió quelos patrones de la Frecuencia Cardiaca Fetal pueden discriminar alos
fetos sanos de los fetos que presentan amenaza de hipoxcemia o acidemia, el análisis ante parto
de la Frecuencia Cardiaca Fetal se convirtió en una pruebaútil para la valoración del bienestar del
feto.
Las técnicas de obtención de la frecuencia cardiaca fetal pueden ser clasificadas en directas e
indirectas. Las primeras consisten en procedimientosinvasivos enlos que el transductor debe estar
en contacto con el feto para obtener la frecuencia cardiaca fetal y las últimas son procedimientos
relativamentenoinvasivos
en los que la madresirve como intermediarioentre el feto y el
instrumento electrónico.
Los métodos indirectos de detección de la FC fetal miden variables fisiológicas relacionadas con
los latidos cardiacos fetales detectados desde la superficie del abdomen materno. A diferencia del
electrodo utilizado para el registro del electrocardiograma fetal (FECG) que debe estar en contacto
directo con el fetoy , por lo tanto, es necesario que haya comenzado la etapa de trabajo de parto, o
bien, se realiza pasando un alambre a través de la pared abdominal materna, la cavidad uterina y
traspasar la piel fetal. Esta técnica pone en riesgo tanto a la madre como al feto y no es aplicable
como un procedimiento de rutina.
A pesar de la agresividad de las técnicas directas de obtención de la FC fetal, estas son las que
proporcionan mejores resultados y por lo tanto las más utilizadas durante el trabajo de parto. Esto
se debe a que las técnicas indirectas, como el electrocardiograma abdominal, pueden presentar
una relación señal a ruido muy baja debido a que
la señal de interés es muy
débil y requieren
etapas de procesamiento de la señal más complejas.
La FCF generalmente se detecta y se computa mediante
la auto correlación de la señal fetal de
ultrasonido Doppler, sin embargo, esta técnica de monitoreo no invasivo no es capaz de detectar
de forma precisa la variabilidad de corto
plazo. Además, puede producir registrosde aceleraciones
o desaceleraciones que no son reales, y puede malinterpretar los cambios abruptos en la seAal
considerándolos como ruido.
La señal de ECG abdominal (ECGa) también puedeutilizarse para la determinación no invasiva de
la FCFantepartoatravés
dela deteccióndepotencialescardiacosfetalespequeñosen
la
superficie del abdomen materno. A pesar de que esta información proporciona una resoluciónmás
satisfactoria, frecuentemente presenta interferencia del ECG materno, ruido electromiográfico, etc.
Es por esto, que para obtener una señal de ECG abdominal adecuada para la detección del ECG
fetal, se debe mejorar la relación señal a ruido. La tarea de procesamiento más crítica para esta
mejora es la reducción o eliminación de los complejos QRS maternos, debido a que presentan un
traslape en tiempo y frecuencia conlos complejos QRS fetales.
INTRODUCCION
Las principales ventajas del monitoreo fetal utilizando el electrocardiograma abdominal son que no
es invasivo, no representa riesgo para el paciente, utiliza transductores económicos, permite tener
unconocimiento1 de los valores de FC en etapas tempranas de la vida del feto y auxilia en el
diagnostico de sufrimiento fetal crónico.
Las ventajas de la técnica indirecta de electrocardiografía abdominal para la obtención de la FC
fetal con respecto a las técnicas directas, justifican el desarrollo y optimización de métodos para el
procesamiento de la señal de ECG abdominal.
1.8.- ANTECEDENTES.
El Cardiotacograma fetal (CTGr), como una herramienta de diagnóstico, proporciona información
sobre la variabilidad de lafrecuencia cardiaca fetal (VFC,). El CTGf puede generarse apartir de una
señal de ECG fetal y una forma de obtener el ECG fetal es el ECG abdominal (ECGa).
Para el caso de una señal de ECGa la relación señal a ruido (S/R) es muy pobre y existe traslape
en tiempo y frecuencia de los complejos QRS fetales con los complejos QRS maternos. Por esta
razón la obtenciijndel ECG y del CTGfetales, a partir de una señal abdominal materna sedificulta.
Existeninvestigaciones en las quesereportandiversasformas
de realizar la adquisición del
electrocardiograma fetal y el procedimiento para la eliminación (o reducción) de la señal materna.
Eisenberg et al. [I9721 propone una técnica de registro multielectrodo (4 electrodos abdominales)
con el fin degarantizarque
no haya latidos perdidos(comosedaencasosderegistros
de
electrodo Único).
Abboud et al. [I9921 desarrollan un sistema en el que logran la eliminación de la señal materna
existente en el registro abdominal. La técnica está basada en la generación de una forma de onda
de ECG materno promediado (que funciona como plantilla) y que posteriormente es substraída de
la señal abdominal. La técnica
de alineación para generar la plantilla se basa en la función de
correlación cruzada.
Callaerts et al. [I9861 desarrollaronunmétodoadaptivoentiempo
real de extracción del
electrocardiograma fetal completo de un registro multielectrodos. Este método esta basado en un
análisis matemático (geométrico) de las tres señales generadas por electrodos conectados en la
superficie cutánea abdominal.
Vanderschoot et al. [I9871presentan dos técnicas basadas enla descomposición del valor singular
de una matriz demedición. Una de las técnicas se realiza fuera de linea, laotra en tiempo real y se
garantiza una buena eliminación del ECG materno sitres de los electrodos empleados se localizan
en el tórax.
Bergveld et al [I9811 describenunatécnica
de eliminaciónbasadaen
al optimización de un
procedimiento en el que se realiza la multiplicación de coeficientes de seis señales abdominales
independientes que se suman entresí.
En 1996, Echeverría et al [ I ] propusieron un método para procesarel ECG abdominal y extraer los
complejos QRS fetales obteniendo así la localización temporal de la onda R. Este método constó
de dos etapas: la primera consiste en una etapa de preprocesamiento para la supresión de ruido
aditivo de baja y alta frecuencia basado en una descomposiciónmulti resolución wavelet optima, y
en la segundaetapasecancelan
los complejosQRSmaternosmediante
la comparación,
identificaciónysubstracción
de patrones.Posteriormente,mediante la aplicación. delalgoritmo
propuestoporPanyTompkinsen1985
[3] sedetectaron los picos de las ondas"R"de
los
complejos fetales.
Losresultadosobtenidosenesteúltimo
trabajo, mostraron la confiabilidaddelmétodopara
la
supresión de complejosQRSmaternos.
Sin embargo,debidoaque
el métodosomete
al
reconocimiento de patrones a todos los complejos maternos (presenten traslapeo no), requiere de
un tiempo de procesamiento elevado.
En 1998, Salinas et al [2] propusieron y evaluaron un procedimiento para la identificación de
complejos maternos conflictivos (traslapados con complejos fetales), esto con el fin de aplicar el
reconocimiento 'de patrones sólo a los complejos conflictivos. El procedimiento se basóenlos
cambios de amplitud generados por los complejos QRS fetales al estar traslapados con el complejo
QRS materno. Como resultado se obtuvo un procedimiento confiable en la identificación de
complejos confli8ctivos.Sin embargo, al igual que en el caso de Echeverría et al, no se toman en
cuenta los cambios morfológicos en la señal a lo largo del tiempo y pueden generarse errores de
identificación en registros prolongados.
tn
I .9.- HIP~TESIS.
Basándonos en e 1 método propuesto por Echeverría et al y en los resultados obtenidos por Salinas
et al. En el presente trabajo, seproponeunametodologíaalternativapara
la supresión de
complejos QRS maternos y obtención de un CTG fetal.
El método utiliza un procedimiento de análisis de cambio en amplitud de la señal para identificar a
los complejos no conflictivos y construir, a partir de estos, un patrón que se adapta a los cambios
de la señal materna a lo largo del tiempo.
1.IO.- OBJETIVOS:
Los objetivos de este trabajo son:
0
Crear una interfase amigable con
de ECG abdominal.
el usuario mediante la cual se puedan procesar
las señales
0
Reducir el tiempo de extracción de complejosQRS fetales, sin sacrificar la confiabilidaddel
método.
Generar un método que se adapte a los cambios morfológicos de las complejos QRS a lo largo
del tiempo.
METODOLOGIA
METODOLOGíA
2.1.- DESCRIPCIóN DEL PROCEDIMIENTO.
Para el procesamiento de la señal en el presente trabajo, se utilizó la plataforma de programación
MatlabB, Esta plataforma ofrece ventajas
en el procesamiento de señales digitales, manejo de
flexible sobreinterfaces de usuarioenun
matrices,arreglos y gráficas, y permiteunmanejo
ambiente Windows desde una PC.
Todas las rutinas y procesos realizados se encuentran debidamente documentadosen el Apéndice
de este trabajo.
Para la descripcióndelprocesoquese
realiza para la obtencióndelCTG
fetal se utilizan
diagramas deflujo queexplican de maneraclaracadauna
de las etapasdelproceso
y se
presentan figuras que muestran el estado de la interfase con el usuario en cada etapa del proceso.
En cada uno de estos diagramas se presenta de manera global el flujo de operaciones realizadas,
y se especifica que operaciones requieren de la intervención del usuario, así como procesos de
toma de decisión.Losdiagramas
deflujo
nosondiagramasdescriptivos
de las rutinas
programadas, sino que son esquemas que muestran paso a paso
el proceso completo de forma
genérica.
El proceso Comienza cuando se invoca, desde
‘matfwav.m’
la ventana de comandos de MatlabB, a la función
En la siguiente página se presenta el diagrama de flujo del proceso completo de la obtención del
CTG fetal a partir de una señal de ECG abdominal.
20
METODOLOGIA
Filtro y normalización de la
c""""""""""""""~
Obtención del CTG fetalporelmétodode
Complejo
Característico
Adaptable
(CCA).
.'\
';
I
I
1
\
/
1
Selección de 3 complejos
maternos limpios.
1
J.
Obtención del patrón
fetal.
,/
Localización de las2 primeras ondas
R de los complejos maternos enlos 5
I
Selección de 3 complejos
fetales
limpios.
Obtención del patrón
materno.
1
I
I
!
I
I
I
I
1
I
I
!
limites temporales adaptivos.
I
I
I
I
Evaluación del
resuitado de la
búsqueda de
complejos.
I
I
I
I
I
I
I
I
I
.1
I
I
Construcción de la
librería
I
7-A
1
I
J.
Selección del nivel de
desplazamiento y ajuste de
los límites del patrón
materno.
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Eliminación delos
complejos maternos de la
setial actualizando el
patrón o complejo
característico materno.
Localización de
los complejos
I
I
I
I
I
I
I
I
I
Construcción del
cardiotacograma
I
I
\
\
\
I.
,
""""""""~"""""""~~
Diagrama 2.1.1: Proceso completo de obtención del CTG fetal a partir del ECG abdominal.
En el diagrama 2.1.1 se puede observar del lado derecho el proceso de Obtención del CTG fetal
por el método de Complejo Característico Adaptable (CCA), que es
el proceso propuesto en el
presente trabajo, este proceso se considera como un proceso alternativo al proceso propuesto por
[Echeverría et. al.] en 1996 [I], sin embargo los procesos de seleccióndecomplejosfetales
y
maternos limpios se utilizan también en el proceso alternativo. A continuación se describen cada
uno de los procesos de este diagrama.
21
I
.....................
;
ObtencióndelaseñaldeECGabdominal
I
I
r
I
I
I
I
I
I
Creación de interfase de
usuario
I
I
I
I
I
I
I
Selección de tipo de
archivo donde se
encuentra la señal de ECG
abdominal
I
I
*
L 1
Nombre y ruta de acceso
Lectura de datos del
archivo y se obtiene la
señal en un arreglo
I
"_ """"""_
""
I
I
I
I
I
I
I
I
I
I
I
II
I
I
I
I
-
" " " _" "
I
I
I
I
." . _
"""_
"
Filtrado y normalización
de la señal.
I
I
v
Análisis y síntesis de los
filtros correspondientes a
un esquema biortogonal
con wavelets spline de
soporte compacto
I
Analisis de multiresolición
con 1O detalles
Del análisis se descartan
las primera y últimas 3
bandas para eliminar ruido
de baja y alta frecuencia
I
I
Del análisis se obtienenlos
coeficientes de la ecuación
de diferencias para elfiltro
I
I
Filtrado y normalización de
la señal
1
ención de los patrones maternoy
para la construcción dela librería
~
Diagrama :!.I2
Procesos de obtencion de la señal de ECG abdominal, filtradoy normalización de la señal.
22
METODOLOGIA
La primera parte del proceso es la obtención de una señal de ECG abdominal, lo primero que se
hace es presentar una interfase de usuario que facilita el acceso a documentos o archivos que
contengan la información dela señalquese
utilizará’. LaFigura 2.1.1 presenta la interfase
utilizada para este caso. En la figura 2.1.2 se presenta le submenú para la selección del tipo de
archivo,cundoseseleccionaun
tipo dearchivo segeneraunainterfaseperaseleccionar
la
frecuencia de muestreo (Fig. 2.1.3).
Figura 2.1.2: Submenú para la selección del tipo de archivo
Figura 2.1.3: lnterfase para laselección de la frecuencia de muestreo
’
Las funciones en lenguaje MatlabB, involucradas en este proceso son: ‘matfwavm’,‘elefrel .m’,‘elefre2.m’,
‘leartm’,‘1earb.m’y ‘guard1.m’.(ver Apéndice)
23
MFTODOI OGlA
Una vez seleccionada la frecuencia de muestrosepulsa el botón “Abrir” paraproporcionar el
nombre del archivoy la ruta de acceso para estearchivo (Fig. 2.1.4)
‘La función en lenguajeMatlab@, donde se realiza el filtrado de la seiial es: ‘guard1.m’.(ver Apéndice)
a4
METODOLOGIA
AI pulsar la opciCln “Filtrar” se realiza el proceso de filtrado2 descrito en el diagrama 2.1.2, para este
los
propósito se utilizó la teoría de descomposiciónwaveletmultirresoluciónysurelacióncon
bancos de filtros. El algoritmo de banco de filtros se basa en la descomposición de una señal en
regiones de frecuencia especificas mediante el análisis de un conjunto de filtros. Cada una de las
sub-bandas de frecuencia se procesa en forma independiente y finalmente la señal se reconstruye
a partirdelassub-bandasprocesadasmediante
la síntesisdeunconjuntodefiltros
[5].Un
algoritmo de banco de filtros está relacionado conla descomposición multirresolución de una señal
por medio de la transformada “wavelet”.
Para este proceso se utilizaron las funciones ‘wsp1ine.m’ y ‘mu1tires.m’ de MatlabB desarrolladas
en la Universidad de Vigo [8]. La función ‘wsp1inw.m’ realiza el análisis y la síntesis de los filtros
correspondientesaunesquemabi-ortogonalconwaveletssplinedesoportecompacto.Esta
función recibe la cantidad de ceros en z=-I requeridos para el análisis y la síntesis del filtro pasabajas (m y n respectivamente).El par de valores m-n para los cuales resultó una mejor limpieza de
unconjuntodeseñalesde
ECGa fuede m=7 yn=21 [5]. Porotrolado, la función‘mu1tires.m’
realiza un análisis multi-resolución, esta función recibe el análisis y
la síntesis de los filtros que
proporciona la función ‘wsp1ine.m’ y el número de detalles que se usaran para el análisis, en este
caso se utilizaron 10 detalles. La reconstrucción de la señal se hace descartando las primeras y
últimas 3 bandas., eliminando ruido de baja yalta frecuencia.
Como resultado, se presenta en la gráfica la señal filtrada, y se presentan los botones “Limpiar” ,
“Librerías” y el submenú “Patrones” (Fig.2.1.6).
El siguiente paso del proceso es la obtención de complejos maternos y fetales sin traslapamiento
para la obtención de patrones de los complejos maternos y fetales.
A continuación se presenta un diagrama de flujo que muestra el proceso de
patrones materno y fetal.
la obtención de los
METODOLOGIA
7
I
Filtrado y normalización de la señal.
""""""""""""-"
//
Selección de 3 complejos limpios
I
I
I
los :3 primeros segundos de
la señal para la búsqueda de
I
I
I
I
I
I
I
I
I
I
I
I
I
I
\
\
I
I
\
\
I
I
I
I
Se
almacena
la posición
del
complejo
I
I
I
I
I
I
I
I
A
,'
I
I
I
I
I
\
I
\
\
I
I
\
\
\
\
I
I
I
I
\
I
fetal
patrón
Obtención
del
/
-- - - --- - - - - - -
.
/
I - -
Obtención delpatrónmaterno
/
\
I
I
Se busca
complejo
el fetal
con
mayor
númerodemuestrasyapartirdeeste,se
mismo
elda
les
tamatio
(número
de
muestras)
a
los 3 complejos
fetales.
I
I
I
I
I
I
I
I
\
I
I
I
I
I
I
I
I
I
I
1
I
1
I
1
I
I
I
I
I
les da el mismo tamatio (número
de
muestras) alos 3 complejos maternos.
I
I
I
I
I
I
I
I
I
complejos, alinelndolos de acuerdo la
a
máxima correlación entre ellos.
Se calculan nuevos límites para
los 3
patrones agregando secciones de señal
antes y después de cada complejo.
I
I
I
I
I
I
I
I
I
I
I
I
I
I
antes
despues
y
de
cada
complejo.
I
I
. .
I
I
señal
\
\
\
.
I
I
I
i
Se promedianlos 3 complejos maternos
paraformarelpatrónmaternode
la setial
fetales
para
patrón
ser
el fetal
la
de
I
I
I
"
"
"
"
"
"
"
"
r
.'
I
,
,
~"""""""""""""""~
que se agregaal patrón para obtenerlos límites
finales a partir de las posiciones donde
librería
Diagrama 2.1.3: Obtención de los patrones materno y fetal para la construcción de la librería
20
METODOLOGiA
Paracontinuarcon el procesosepulsa el menú“Patrones”quepresentaunsubmenúcon
las
opciones “Materno” y “Fetal” (Fig. 2.1.7), estas opciones presentan asu vez un menú con la opción
“Selección” (Fig. 2.1.8 y Fig. 2.1.9).
nl;
Figura 2.1.7. Submenú de la opciónPatrhes
Figura 2.1.8. Submenú de la opción “Materno”
Figura 2.1.9. Submenú de la opción “Fetal”
Enla primeraparte del proceso de obtencióndeunpatrónseseleccionan3complejossin
o fetales, esporesoque, en el diagrama 2.1.3, el
traslapamientoyasencomplejosmaternos
proceso de selección de complejos “limpios” es el mismo para los complejos maternos y fetales’.
AI pulsar la opción “Selección” se presenta una ventana con la gráfica de los 3 primeros segundos
de la señal y el usuario decide si desea ver la siguiente sección de la señal o si desea seleccionar
un patrón quede acuerdo a su criterio no tenga traslapamiento(Fig. 2.1.IO).
Si el usuariodesea vermás señal,sepresentan
los siguientes 3 segundosde la señalen la
gráfica, si por el contrario, el usuario cree que se puede seleccionar un complejo en
el tramo de
señalqueseobserva
enla gráfica, sepresentauna
rejilla o “grid” en la gráficay el botón
“Continuar” aparece en la ventana, en este momento el usuario con el uso del “ratón” o “mouse” de
la PC puedeseleccionar el tramo de la señaldonde se encuentra el complejo de interésy al
presionar el botón “Continuar” se hace un acercamiento o “zoom” sobre esa región. Repitiendo el
mismo procedimientoseseleccionaahora,únicamente
el complejo “limpio”(Fig. 2.1.11y Fig.
2.1.12).
Las funciones en lenguaje Matlab@, involucradas en este proceso son: ‘wn2.m’, ‘patmatm’, ‘patfetm’ y
‘segmenta.m’. (ver Apkndice)
27
METODOLOGíA
28
METODOLOGIA
Cuando se selecciona el complejo y se pulsa
el botón “Continuar” se almacena la posición del
complejo y regresamos a la ventana de la figura 2.1.1O, todo el proceso se repita hasta seleccionar
3 complejos sin traslapamiento.
La obtención del patrón se realiza a partir de los tres complejos maternos o fetales que se hayan
seleccionado.
Lo siguiente es obtener el patrón materno o fetal ‘, sin embargo, el patrón materno no se obtiene
de la misma forma que el patrón fetal por lo tanto, como se puede observar en el diagrama 2.1.3,
se realizan dos procesos distintos.
Para el patrón Materno se selecciona la opción “Promedio” en el submenú ”Materno” (Fig. 2.1.8) y
para el patrón Fetal se selecciona la opción “Mejor señal” en el submenú “Fetal” (Fig.2.1.9).
Para el caso del patrónMaternose
realiza el procesodescrito como “Obtencióndelpatrón
materno” en el diagrama 2.1.3 y se presenta una ventana con
la gráfica del promedio de los 3
complejos seleccionados donde el usuario selecciona, conel uso del “mouse” de la PC, un nivel de
offset o desplazamiento para encontrarlos límites finales del patrón (Fig. 2.1.13).
En esta última gráfica se presentan en color azul las secciones de la señal que no pertenecen al
promedio de los 3 complejos y el programa automáticamente selecciona el inicio y final del patrón,
en donde el offset o desplazamiento seleccionado se intersecte con estas secciones.
AI pulsar continuar en esta ventana, se presenta otra ventana con 2gráficas, una presenta los tres
complejos seleccionados y la otra presenta el patrón Materno (Fig. 2.1.14).
Las funcione:s en lenguajeMatlab@, involucradas en este proceso son: ‘matfim’,‘fetalfi.m’, ‘a1inea.m’
y ‘centram’.
(ver Apéndice)
29
30
METODOLOGIA
Para el caso del patrón Fetal se realiza el proceso descrito como “Obtención del patrón fetal” en el
diagrama 2.1.3, en el cual, se presenta una ventana con
la gráfica con los 3 complejos fetales
seleccionados donde el usuario selecciona, de acuerdo a su criterio, el mejor o más representativo
complejo de los 3 (Fig. 2.1.15). AI seleccionar “Continuar” se presenta una ventana con la gráfica
del complejo seleccionado donde el usuario selecciona un nivel de offset o desplazamiento para
encontrar los límites finales del patrón al igual que para el caso del patrón materno(Fig. 2.1.16).
31
METODOLOGíA
AI pulsar “Continuar”en esta última ventana se presenta otra ventana conla gráfica del patrónfetal
(Fig. 2.1.17).
Ahora al pulsar “Continuar” el programa regresa a la ventana de la figura 2.1.6. Para continuar, se
pulsa la opción “Librería” donde se construye la librería de las señales de traslapamiento ’, esta
librería se utiliza para la identificación de los cambios morfológicos existentes en el complejo QRS
maternocuandoéstecoincideconuncomplejoQRS
fetalcomo fuedescritoen1996por
Echeverría et al [I].
Las señales de traslapamiento se generan sumando el patrón materno y el
patrón fetal muestra a muestra.
AI terminar la construcción de lalibrería, se presenta una nueva ventana conlos botones “Graficar”,
“Cerrar” y el menú “Selección de picos” (Fig. 2.1.18).
AI presionar el botón“Graficar”sepresent.anen
señales de traslapamiento de la librería
‘.
la gráfica, en forma de secuencia,todas las
La función en lenguajeMatlab@, donde se realiza este proceso es: ‘bib1iorn.m’. (ver Apéndice)
‘La función en1 lenguaje Matlab@, donde se realiza este proceso es: ‘t0das.m’.(ver Apéndice)
METODOLOGIA
A partir de la señal filtrada y normalizadaqueseobtuvo
al principio delprocesose realiza la
obtención del cardiotacograma (CTG) fetal por el método del Complejo Característico Adaptable
(CCA) propuesto en estetrabajo.
A continuación se presenta el diagrama de flujo de los 2 primeros procesos de este método, la
localización de las 2 primeras ondas R de los complejos maternos en los 5 primeros segundos de
la señal y la búsqueda de complejos mediante límites temporales adaptables.
METODOLOGIA
*
señal.
Localización de las2 primeras ondasR
de los complejos maternos enlos 5
primeros segundos dela señal
"""""""""""~""""""""""-""-
r""""""""""""""""""""""""I
I
I
I
Búsqueda de complejos mediante
límites temporales adaptivos.
I
I
I
I
Localización de los picos de la señal
utilizando 2 umbrales distintos.
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Búsqueda de la siguiente onda R en la
setial utilizando el mayor del o s
umbrales y límites temporales.
I
Se almacenala posición
de la onda R.
I
I
I
I
I
I
I
I
PROM2:=PROM1.
¿Se encontraron 8
intervalos no regulares
consecutivos?
incrementando
señalla
los límites
temporales.
I
I
I
I
I
PROMI: Promedio de los 8
I
Seactualizaelpromedio
de intervalos PROM1.
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
-
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Se actualiza el promedio
de intervalos regulares
PROM2.
I
I
I
I
I
I
I
I
PROh12: Promedio de los 8
últimos intervalos regulares
I
I
últimos
L
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Búsqueda de la siguiente onda
R en
la señal utilizandoel menor de los
umbrales.
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Diagrama 2.1.4: Búsqueda de complejos maternosen la setial
34
AI pulsar la opciiin “Selección de picos” en la ventana de la figura 2.1.18, se presenta una ventana
con la gráficadel patrón Materno (Fig. 2.1.1Y) en donde el usuario debe seleccionarla polaridad de
la onda R de los complejosmaternos 7 , estocon el fin de especificarsisebuscaranondas
R
positivas o negat:ivas.
Una vez seleccionada la polaridad de la onda R del complejo materno y al pulsar “Continuar” se
toman los 5 primeros segundos de la señal para encontrar los 2 primeros complejos maternos8.
Para encontrar la localización de las ondas R en los 5 primeros segundos de la señal, cada unade
las muestras de este tramo inicial deseñal se elevan alcuadrado para aumentarla diferencia entre
ellas y el umbral que se toma para detectar los “picos” u ondas R en la señal, es de dos veces el
valor medio delas muestras del segmento elevadoal cuadrado.
En caso de que el periodo entre el posible primer complejo materno yel posible segundo complejo
maternos sea menor a 300ms, que es el periodo refractario, se busca un tercer posible complejo
queseencuentredespués
de esteperiodo,yseconsideraaesteposiblecomplejo
comoel
segundo compkjo de la señal. De esta forma se obtiene la posición de los 2 primeros complejos
maternos en la señal.
El siguientepasodelprocesoes
la detección de los picosen el resto de la señalutilizando2
umbrales de detección distintos ’, a continuación se describen estos 2 umbrales.
Umbrall: Es el valor promedio de todos los picos que se encontraron enla señal.
Umbral2: Es el valor promedio de todos los picos de la señal mayores a Umbrall.
Umbral3: Umbral2 menos dos vecesla desviación estándar de todoslos picos mayores a Umbral2.
De esta forma, Llmbrall y Umbral3 se consideran como los umbrales de detección menor y mayor
respectivamente.
La función en lenguaje Matlab@, donde se realiza este proceso es: ‘po1picam.m’. (ver Apéndice)
36
METODOLOGIA
La siguiente parte del procesoes la búsqueda del siguiente complejo maternoen la señal para esto
se utilizan los umbrales descritos anteriormente y limites temporales adaptables como se muestra
en el diagrama 2.1.4.
Para definir los liimites temporales que seutilizan, se definen primero dos promedios:
PROMI: Promedio de los 8 últimos intervalos RR en la señal
PROM2: Promedio de los 8 últimos intervalos RR en la señal que caen dentrode ciertos límites.
La razón para tener estos dos promedios es para hacer que el algoritmo se adapte rápidamente a
los cambios en la señal. Los intervalos que se seleccionan para PROM2 son intervalos que caen
dentro de límites aceptables (superior e inferior) de intervalos RR, estos límites son:
Límite inferior = 85% de PROM2.
Límite superior := 125% de PROM2.
Límite inferior = 300ms despuésdel último complejo.
Límite superior := 170% de PROM2.
En este caso el límite inferior se encuentra después del periodorefractario del corazón, puesto que
durante este periodo es fisiológicamente imposible que se presente un
latido.
Si los últimos 8 intervalos que se encuentran caen fuera de los limites iniciales de búsqueda, el
valor de PROM2sesubstituyepor
elvalorde PROMI, quees el promedio de los últimos 8
intervalos que se encuentren.
De esta manera se buscan todos los complejos maternos en la señal y se presenta una ventana
con la gráfica de los 5 primeros segundos de la señal indicando con asteriscos rojos las posiciones
de las ondas R en la señal (Fig. 2.1.20).
La funcion en lenguaje MatlabB, donde se realiza este proceso
es: 'detpicarnm'. (ver Apéndice)
Las funciones en lenguaje Matlab@, involucradas
en este procesoson: 'detpicamm' y 'rrprornm'. (ver Apéndice)
METODOLOGIA
La siguiente parte del proceso es la evaluación del resultado de la búsqueda de complejos,es esta
parte se revisa la posición de los complejos maternos en la señal en busca de posibles complejos
no detectados o complejos detectados erróneamente.
A continuación se presenta un diagrama de flujo del proceso de la evaluación del resultado de
búsqueda de complejos.
la
37
METODOLOGIA
las 2 primeras ondas R
en los 5 primeros segundos de la señal
límites temporales adaptivos.
f-
LJ
I
I
I
encontraron en la
I
I
,
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
i
~"-"""""""
I
I
I
1
I
I
1
I
\ *N
I
I
I
I
I
I
I
,'
I
I
I
I
\
I
I
I
I
I
I
I
\
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
i
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
i
Localización manual
de los 2 primeros
complejos
I
de todos complejos
de la señal
I
I
I
I
I
I
I
I
I
I
u ', """""""_""_""
~------"""""""""".
'
/-I
I
I
I
1 ;
.'
/
//
I
I
I
""""""""I
Eliminación de los complejos
maternos de la señal.
I
I
I
I
I
Posición de los 3
complejos
maternos a partir
de los cuales se
construyo el patrón
Diagrama 2.1.6 Evaluación del resuttadmk la búsqueda de complejos
38
METODOLOGiA
La primera parte de este proceso es la revisión o inspección visual de la posición de todos los
complejos maternos que se encontraron en la señal, esto se realiza en la ventana que se presenta
en la figura 2.120,donde utilizando un control se pueden observar distintas secciones de la señal.
Encasodequetodas
las posicionesde los complejos maternos sean correctaselproceso de
evaluación termina y se continúa con la eliminación de los complejos maternos de la señal.En
caso de que la posición de los complejos maternos en la señal no sea correcta, el usuario puede
seguir 2 procedimientos:
Uno, en donde seeliminan y colocan manualmente las posiciones correctas de todoslos complejos
maternos en la señal‘’, utilizando los botones “Quitar un pico” y “Agregar un pico” que se presentan
en la ventana de la figura 2.1.20. AI pulsar, por ejemplo, la opción “Quitar un pico” se presenta en la
gráfica una rejilla o “grid” y el usuario puede seleccionar con el botónizquierdo del “mouse” o ratón
el pico o supuesto complejo que desea retirar (Fig. 2.1.21 y Fig. 2.1.22).
~~
10
La función en lenguaje MatlabB, que se utiliza para eliminar
y agregar picos es: ‘quipopicm’. (ver Apéndice)
30
METODOLOGIA
P
al
AIpulsarcontinuarenesta
última ventana los botones “Quitar un pico” y “Agregar un pico”
aparecen nuevamente en la ventana (Fig. 2.1.23),ahora el usuario puede pulsar “Agregarun pico”
y siguiendo el mismo procedimiento puede marcar con el botón izquierdo del “mouse” o ratón la
posición de la onda R que no se encontró (Fig. 2.1.24).
t
40
METODOLOGIA
I
da búsqueda
La siguiente parte del proceso es retirar o eliminar todos los complejos Q R S maternos de la señal
de ECG abdominal. A continuación se presenta el diagrama de flujo del proceso de eliminación de
los complejos maternosde la señal.
42
METODOLOGIA
Evaluación del
resultado
dePosición
de la
los 3
complejos maternos a
partir delos cuales se
c
"
"
-
'I
I
I
I
I
I
I
I
I
Eliminación
de los
complejos maternos de
la seiial.
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
c
L
I
I
Se calcula la desviación estándar de
las señales resultantes y el promedio 4
de estas desviaciones.
4
Se alinea cada uno delos complejos
con el patrón de acuerdo a la máxima
correlación y se realiza la resta
muestra a muestra para cada uno de
los 3 complejos.
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Se alinea el patróncon el primer
complejo de la señal de acuerdo a la
máxima correlación entrelos dos y se
realiza la resta muestra a muestra.
I
I
I
Se alinea el patróncon el siguiente
complejo de la señal de acuerdo a
la máxima correlación entrelos
dos y se realiza la resta muestra a
muestra.
*
<
¿La desviación estándar del
resultado es menor que el
promedio
de
las desviaciones?
y
r
I
I
I
I
I
I
I
I
I
I
I
I
I
Se considera a este
complejo "no conflictivo"
se almacena
la
desviación estándar de
la diferencia
I
I
I
I
I
I
NO
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
complejo
"conflictivo"
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
~
I
I
I
I
Se buscan los 3 complejos maternos
a partir delos cuales se construye al
patrón.
I
I
I
I
I
I
I
I
I
I
I
del complejo
Se eliminan por
sustracción del
patrón el
complejo
materno de la
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Diagrama 2.1.6: Eliminacibn de complejos maternos en la señal.
METODOLOGIA
Una vez localizados todos los complejos maternos en la señal, se pulsa la opción “Continuar” en la
ventana que se presenta en la figura 2.1.25 esto hace que se
cierre la ventana y el programa
regresa a la ventanaque se presenta enla figura 2.1.6.
AI seleccionar la opción “Limpiar” se realiza el proceso de eliminación de complejos maternos dela
señal”. En este proceso, mediante un ciclo “for” se eliminan todos los complejos maternos de la
señal, y es elproceso en donde se enfoca e! desarrollo de este trabajo.
Lo primero que se hace es localizar los complejos maternos a partir de los cuales se construyó el
patrón materno, estos complejos se alinean con el patrón de acuerdoa la máxima correlación entre
ellos y se realiza la resta muestra a muestra entre el patrón y cada uno de los 3 complejos.
Se almacena la desviación estándar que se obtiene del resultado de la resta del patrón con cada
complejo y de esta manera se obtienen 3 desviaciones estándar asociadas cada una a uno de los
complejos a partir de los cuales se construyb el patrón materno.
Se obtienen el valor promedio de las desviaciones estándar y este valor se utilizará como criterio
para determinar si un complejo se considera conflictivo (presenta traslape) o no conflictivo (no
presenta traslape). Si la desviación estándar del resultado de la resta muestra a muestra entre un
complejode la sefial y el patrónmaterno es menor que elpromedio quese obtuvo de las
desviaciones estAndar,seconsidera
que al complejo como no conflictivo o quenopresenta
traslape.
Esta evaluación se realiza sobre todos los complejos de la señal antes de eliminarlos y cuando se
hanencontrado 5 complejos consideradosno conflictivos, seseleccionan los 3 quehayan
presentado las menores desviaciones estándar en el resultado de la resta con el patrón, es decir,
que seseleccionan a los 3 complejosmás parecidos al patrón materno y a partir deestos
complejos se construye un nuevo patrón materno.
De esta forma, el patrón materno o complejo materno característico de la señalseadapta
constantemente a los cambios morfológicos de la serial de ECG materna, haciendo más confiable
el proceso de eliminación de los complejos maternosen la señal.
Cuando el proceso de eliminación de complejos maternos de la señal termina se presenta una
gráfica de la señal sin complejos maternos y un botón con la leyenda “Pasa banda”(Fig. 2.1.26).
11
Las funciones en lenguaje Matlab@, involucradas en esta proceso son: ‘lirnpiar.rn’, ‘extra1v.m’ y ‘rnayor1vf.m’.
(ver Apéndice)
44
METODOLOGIA
El siguiente paso del proceso es la localización de los complejos fetales en la señal, en esta parte
del programa el procesamiento que se hace sobre la señal nos permite obtener la posición exacta
de las ondas R de los complejos fetales.
A continuación se presenta un diagrama de flujo del proceso de la localización de los complejos
fetales.
complejos maternos
de la setial
~"""""""""""-
Localización
de los
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
i
""""~"_"""""""""
.---------- - - - ------ - - - _ - _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
i
Filtro
I
II
I
I
I
I
~
I
con un filtro pasaaltas y se
almacena la setial
filtrada
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
primeros segundos dela señal
filtrada, utilizando un umbral de
detección de 3 veces el valor
promedio delas muestras en
I
I
I
I
I
I
I
I
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Localización
de
las 2 primeras
ondas R
I
I
II
II
II
I
I
I
I
I
I
puntos de la setial
Busqueda de
complejos en la señal
I
I
I
I
I
I
I
I
Localización de las
siguientes ondasR
en la señal fetal
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
corresponden a las 2
I
I
I
I
I
I
ventana móvil dela
setial elevada al
cuadrado y se
almacena el resultado
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
cardiotacoarama
49
METODOLOGIA
Hasta este momento se cuenta con una seiial abdominalque no presenta complejos maternos y a
partir de la cual seobtendrá el cardiotacograrna fetal. El últirno proceso,nosaseguraque
los
complejos fetales antestraslapadoscon los complejosmaternosahorasepresentansinseñal
materna, y es relativamente sencillo localizarlos a lo largo de la señal abdominal. Sin embargo
también pueden existir complejos fetales que originalmente no presentaran traslapamiento conlos
complejos maternos y para los cuales no se elimina la señal materna presente. Estos complejos
fetales puedenestartraslapadoscon
el registro deotros fenómenos delECGmaterno, como
pueden ser las ondas P o T. Es por esto queel métodoque se utilizo para localizar a los complejos
fetales no solo considera criterios de amplitud de la señal, sino que también se utilizan criterios
temporales,dependiente,ancho
del complejo y rangos fisiológicos paraobtenermejores
resultados. El algoritmo en el que este trabajo está basado es el que presentan Pan y Tompkins
(1985) 131, que presentan un análisis en varios pasos de procesamiento de la señal. AI pulsar la
opción “Pasa banda” en la ventana de la figura 2.1.26 se inicia un proceso de filtrado, que es el
primer paso para la localización de los complejos fetales 12.
El filtrado de laseñal se realiza con un filtro pasa banda, que deja pasarel rango de frecuencias en
el que la energía del complejo QRS es máxima (5 y 15Hz). Para nuestro caso se utilizaron dos
filtros en cascada, un pasa altas y un pasa bajas, con esto se logró un filtro pasa banda de 5 a
12Hz que esta bastantecerca al filtro deseado.
La ecuación dediferencias para el filtro pasa-bajas es:
Para este caso la ganancia del filtro es de 36 y tiene un retraso de 6 muestras. La ecuación de
diferencias para el filtro pasa-altas es:
Y presenta una gananciade 32 y su retraso es de 16 muestras.
Cuando el proceso de filtradotermina se presenta enla gráfica de la figura 2.1.26 la señalfiltrada y
el botón “Derivar” (Fig. 2.1.27).
AI pulsar la opción “Derivar” en esta últirna ventana, el proceso continúa en la sección indicada en
la esquina inferior izquierda del diagrama 2.1.7, este es el procesamiento que se hace sobre la
señal.
La diferenciación (derivada) de la señal se realiza para obtener información sobre la pendiente del
complejo QRS. Se utiliza una derivación de 5 puntosquepresenta
la siguienteecuaciónde
diferencias 13:
Una vez terminada la operación de diferenciación se presenta en la ventana la gráfica de la señal
resultante del proceso de diferenciación, queenadelante se denominaráseñal derivada, y la
opción “Cuadratura” (Fig. 2.1.28).
12
13
Ap4ndlcr)
La función en lenguajeMatlabd, donde se realiza el filtrado de la señal es: ‘pbanda.m’. (ver Apbndice)
La funcidn en lenguaje MatlabQD,donde me rerllza Ir dorlvaolbn o dlkrenolroldn do Ir rofial 01: ‘dorlvclr~n’, (wr
,qi
METODOLOGIA
AI pulsar la opción “Cuadratura” se elevaal cuadrado la señal resultante de la etapade
deri~ación‘~,
est:o hace que todos los puntos sean positivos y realiza una amplificación no lineal de
la derivada, enfatizando las frecuencias altas (i.e., fundamentalmente las frecuencias del ECG). AI
igual que para la diferenciación, alfinalizar este procesose presenta la gráfica de la señal
resultante y ahora se presenta la opción “IVM” (Integración de Ventana Móvil) (Fig. 2.1.29), que es
el siguiente paso del proceso.
I
I - I
AI pulsar la opción “IVM” en esta última ventana, se realiza una integración con ventana móvil de la
señal para obtener información de la forma de onda de ECG y de la pendiente de la onda R15. El
número de muestras que se utiliza para la ventana de integración debe ser aproximadamente el
mismo número de muestras del complejo QRS más ancho que exista en la señal. Para el caso de
la señal fetal se encontró que el ancho de ventana más adecuado es de 60ms. AI igual que en el
caso de la diferenciación de la
señal, para poder realizar la integración se aplica un filtro digital con
coeficientes relacionados con el ancho de la ventana de integración. Este filtro se puede describir
con la siguiente ecuación:
y@-)=
- [x(nT-(hr-1)T)+x(nT-(N”2)T)+ .........+x(nT)]
Donde N es el número demuestras de la ventana de integración.
Como resultado se presenta en la ventana la gráfica de la señal integrada (Fig. 2.1.30). La relación
entre la forma de onda resultante de la integración de ventana móvil y el complejo QRS fetal se
presenta en la figura 2.1.31.
14
M
La función en lenguaje Matlab@, donde se eleva al cuadrado la señal es: ‘cuadram’.(ver Apéndice)
La funalbn am IangumJeMatlrb@,denda ea raellre le lntrgretrl&l €IC! le sefiel ea: ‘fflW1nt:ffl’: (Wt ApfkidlHl
Figura 2.1.31. Relación del complejo QRS con la forma de onda de la integración con ventana móvil. (a) señal de ECG.(b)
Salida del proceso de integración con ventana móvil, QS: Tamaño del complejo QRS, W : Tamaño de la ventana de
integración.
50
METODOLOGíA
El complejo QRScorresponde a la pendienteascendentede
laforma deondade
la señal
integrada. La duración en tiempo de esta pendiente es igual al ancho del complejo QRS. De esta
manera, al buscar los complejos en la señal integradase pude encontrar un marco de referencia de
la localización exacta de los complejos en la señal filtrada.
El procesamiento sobre la señal termina una vez que se ha integradola señal derivada.
Como se puede observar en el diagrama 2.1.7, para continuar con la localización de los complejos
fetales se buscan los picos en los 3 primeros segundos de señal filtrada que puedan corresponder
a las ondas R fetales en este intervalo.
AI pulsar la opción“Ondas R”en la ventana de la figura 2.1.30, se presentauna figura con la
gráfica del complejo fetal utilizado para la construcción de la librería (Fig. 2.1.32) y es aquí donde
se recibe la información por parte del usuario sobre la polaridad de la onda R del complejo fetal16.
La información que proporciona el usuario se utiliza para que el algoritmo busque en la señal ondas
positivas o negativas.
AI pulsar “Continuar” en esta última ventana, se presenta la gráfica de los 3 primeros segundos de
la señalcon el resultado de la búsquedade los picos en este intervalo (Fig. 2.1.33).Enesta
ventana el usuario proporciona, de ser necesario,
la localización de los dos primeros complejos
fetales en la señal, utilizando las opciones “Quitar un pico” y “Agregar un pico” descritas
anteri~rmente’~.
16
-
La función en lenguaje Matlab@, donde se realiza este proceso ’po1pif.m’.
es:
(ver Apéndice)
17
Las funciones en lenguaje Matlab@, dondese realiza este proceso son: ‘pini.m’y ’qppfm’. (ver Apéndice)
METODOLOGiA
I
La siguiente parte del proceso es la búsqueda de complejos en la señal integrada. A continuación
se presenta un diagrama de flujo que describe el proceso de búsqueda.
J
METODOLOGíA
p"""""""""~.""""""""""""""~""""""""""
I
Localizacitjn en
la
señal
integrada
de
los picos
correspondientes a los 2
primeros
complejos
fetales.
correcciónla
de
posición de los 2
primeros complejos
_ j
A partir
del
primer
intervalo
RR,
en
la setial integrada, se obtienen los
límites temporales
búsqueda.
de
I
I
I
I
I
I
I
Se construyen
los
umbrales
de
Se
obtiene
valor
el
y posición
la
de
detección a partir delos picos en los
f
"
todos los picos de la setial
primeros 1.5 segundos de la setial.
integrada
en
los primeros 1.5
segundos
I-"
I
I
I
Búsqueda de los picos en la
señal integrada utilizando
límites temporales.
I
I
I
I
<
dePROM2:
la Promedio
últimos
intervalos
regulares
I
considera
Se
al
I
Búsqueda de los
complejos
integrada
setial
los
en8
I
PROM1: Promedio delos
8 ÚMmos intervalos
promedio el
intervalos
I
I
actualiza
Se
de
PROMI.
actualizan
Se
los de
niveles
-
detección.
los límites temporales.
-
correspondiente
PROM2:=PROMI.
I
regulares no intervalos
consecutivos?
Se almacena la posición
correspondiente
pico
del
al
I
I
I
I
I
siguiente
I
I
mplejo
1
I
I
la
I
I
I
I
I
I
I
I
I
I
I
I
pueden
II
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
II
I
I
I
I
I
I
I
II
I
I
Búsqueda de
todos
picos
que
corresponder al
siguiente
complejo.
toda
I
I
I
I
I
I
II
analizado
I
I
I
I
I
II
I
I
I
I
II
siguiente
menor de los umbrales.
los
I
I
- 1I
I
I
I
mayor de los umbrales.
I
I
II
~------""""""""""""""""~"""""""""~,
I
*
Localización de las
siguientes ondas R
en señal fetal
Diagrama 2.1.8. Búsqueda de complejos en la señal integrada.
63
METODOLOGIA
Para el proceso de búsqueda de los complejos en la señal integrada”, se utiliza el algoritmo que
se utilizó anteriormente para la búsqueda de complejos maternos descrito por Pan y Tompkins en
1985 [3].
En esta parte delproceso se buscantodos los complejos fetales partiendo la señalintegrada,
utilizando criterios de amplitud, temporales y de la pendiente de la onda R.
Como se pude observar en el diagrama 2.1.8 para la búsqueda de un complejo se utilizan limites
temporales. Para definir estos límites se utilizan 2 promedios de los intervalos entre los complejos
previos o anteriores, uno es el promedio de los 8 últimos intervalos que se encontraron (PROMI) y
el otro es el promedio de los últimos 8 intervalos quecaendentrode
los limites iniciales de
búsqueda (PROM2). Estos límites son:
Límite inferior = 95% de PROM2.
Límite superior =110%
:
de PROM2.
AI incrementar los límites de búsqueda se utiliza:
Límite inferior = 85% de PROM2.
Límite superior =:130% de PROM2.
Si los últimos 8 intervalos caen fuera de los límites iniciales, el promedio PROM2 se substituye por
el promedio PROMl.
Al igual que para el caso de la búsqueda de complejos maternos, se utilizan también dos umbrales
de detección distintos.
La diferencia de este proceso con respecto al que se realiza para los complejos maternos es que
los umbrales UMBI y UMB2 no son constantes y se adaptan a los cambios que se presentan en la
señal, estos umbrales están diseñados para “flotar” sobre la señal de ruido presente en la señal y
se determinan de la siguiente manera:
PS = O.l25*PICO + 0.875*PS
PR = O.l25*PICO + 0.875*PR
UMBI = PR + 0.25(PS - PR)
UMB2 = 0.5*UMB1
Donde:
PICO es el pico que se encontró.
PS es un estimado de los picos de señal.
PR es un estimado de los picos de ruido.
De esta manera cadavezque
se encuentre un conjuntode picos en los límites temporales
establecidos, uno de estos será considerado como un
pico correspondiente a un complejo en la
señal filtrada y los demás se consideran como picos de ruido y se actualizan los valores de PS, PR,
UMBI y UMB2. Si se encuentra un pico utilizando el umbral UMB2 el valor de PS se actualiza de la
siguiente manera:
PS = 0.25*PICO + 0.75*PS.
Deesta manera
obtienen las localizaciones de los picos en la señalintegrada,estospicos
representan la localización aproximada de las ondas R, pero desplazadas a la derechaporel
retrazo debido al procesamiento. A continuacirjn se presenta el diagrama de flujo del proceso de la
localización de las ondas R en la señal filtradalB.
18
La función en lenguaje MatlabB, donde se realiza este proceso es: ‘enc0n.m’. (ver Apéndice)
54
METODOLOGíA
Localizacióndelasondas R en la señal fetal
I
complejos en la
señal integrada
I
I
I
I
I
I
r-------
Derivada
I
SI
J
I
I
I
I
I
I
I
I
I
I
I
I
I
I
complejos en la
I
I
I
I
I
I
Señal
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
A partir de la posición del complejo
‘T de la señal integrada, se busca, en
un intervalo previo de2 veces la
ventana de integración, el punto
de
mayor pendiente enla señal derivada
I
I
I
A partir de la posición del complejo
“i” de la señal integrada, se buscan,
en un intervalo previo de2 veces la
ventana de integración, todos los
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
se busca (hacia adelante) el punto
donde la pendiente cambia de
sentido, que representa el punto de la
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I-
fetal que corresponda al punto
donde la pendiente de la señal
derivada cambia de sentido
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
A
Se considera como ondaR al
pico más cercanoal punto
donde la señal derivada cambia
de sentido
<
correspondiente
I
I
I
I
I
I
I
Se considera que el pico
I
I
I
I
I
I
I
I
I
I
Diagrama 2.1.9. Localizaciljn de las ondas R en la señal fetal.
cardiotacograma
MFTODOlLOGiA
Las posiciones de los complejos encontradas en la señalintegrada funcionan como marco de
referencia de la posición de las ondas R en la señal filtrada. Para encontrar la posición de cada
complejo, se busca la onda R en un intervalo inmediato anterior a la posición de cada complejo de
la señal integrada, el intervalo que se utiliza es de 2 veces el tamaño de la ventana de integración.
En este intervalo se buscan el pico más grande para la señal derivada. Este pico corresponde a la
máxima pendiente del complejo, es decir, a la pendiente de la onda R, a partir de este punto se
busca a la derecha o haciadelante el primer cruceporcerode
la señalderivada,estepunto
corresponde, entonces, a una pendiente cero que es el punto exacto en
donde ocurre la onda R.
Por últirno, se considera como onda R al pico en la señal filtrada que corresponda al punto donde
la pendiente es cero o donde cambie de sentido, en caso de no encontrar este pico, se considera
como onda R al pico en la señal filtrada más cercano a este punto.
Como resultado de la localización de los corriplejos fetales se presentala gráfica de la señal filtrada
con la posición de todas las ondas R marcadas con asteriscos rojos (Fig. 2.1.34).
La última parte del proceso esla construcción del cardiotacograrna (CTG) a partir de la posición de
los complejos fetales en la señal.
A continuación se presenta el diagrama de flujo del proceso de la construcción del CTG.
METODOLOGIA
las ondas R en
,/
’.
I
I
I
I
I
Se calculala diferencia
entra cada uno de las
I
I
I
I
I
\
\
\
\
\
\
I
I
I
I
I
I
I
I
I
obtiene la frecuencia
cardiaca latido a latido
I
I
I
I
I
I
Se obtiene la frecuencia
cardiaca en latidos por
I
I
I
I
I
I
I
\
\
\
\
\
r-
I
I
I
I
I
I
Se presenta la gráfica de
la variabilidad dela
frecuencia cardiaca (CTG)
\
\
\
\
\
\
\
\
I
I
I
I
I
I
,,
I
Diagrama 2.1.10. Construcción del CTG.
AI pulsar la opción “CTG” en la ventana de la figura 2.1.34 se construye el CTG’’ y se presenta una
ventana con la gráfica del CTG y un botón con la leyenda “Terminar” (Fig. 2.1.35).
AI pulsar la opción “Terminar” se cierran todaslas ventanas y termina el proceso.
18
La función en lenguaje Matlab@, donde se realiza este proceso ‘ctgm’.
es:
(ver Apéndice)
58
METODOLOGIA
2.2.- MÉTODO
DE EVALUACIóN.
La evaluación del proceso se realizó sobre una señal simulada de ECG abdominal, esta señal se
construyó con dos señales. Una señal de ECG abdominal y una señal de ECG de adulto.
Como se menciono anteriormente la señal de ECG abdominal presenta componentes deECG
materno y fetal., entre otros. Poresto, la señal de ECG abdominal se procesó conel método
descrito en el presente trabajo, como resultado se obtuvo una señal sin complejos QRS maternos y
un Cardiotacograma (CTG) que no proporciona información importante debido a que la localización
de los complejos fetales se desconocía de antemano.
A partir de la señal que se obtuvo, se construyó un CTG localizando manualmente todos los
complejos fetales en la señal y se consideró a esta señal como la parte fetal o señal fetal de la
señal simulada de ECG abdominal.
A continuación se presenta la gráfica del CTG que se obtuvo a partir de un total de 422 complejos
fetales encontrados:
180
160
5o
F
120
110
1O 0
90
80
O
1
I
I
I
1
1
I
20
40
60
80
100
180120160
140
I
I
Tiempo [seg]
Figura 2.2.1: CTG del ECG fetal
A pesar de que la señal que se obtuvo no es formalmente una señal de ECG fetal, ya que gran
parte de la señal materna no fue eliminada, el filtrado que se realizó durante el proceso garantiza
que lamayor cantidad de energía presente en la señal,es la energíaquecorresponde a los
componentes en frecuencia del complejo QRS fetal, que es la sección del trazo del ECG fetal, que
se utiliza en el proceso.
Por otra parte, la señal que se utilizó como parte o señal materna para generar la señal simulada
de ECG abdominal, es una señal que seobtuvo del registro de un ECG de adulto.
METODOLOGIA
La razón más importante por la cual se utilizaron estas señales como partes fetal y materna fue
que de esta manera se pudo observar el comportamiento del proceso con señales que presentan
una variabilidad en Frecuencia Cardiaca (fetal y materna) fisiológicamente real.
Hay que recordarque el objetivo delpresentetrabajonoesestudiarla
relación entere la
variabilidad de la frecuencia cardiaca (VFC) fetaly materna, sinoevaluar el proceso, especialmente
cuando los complejos fetales y maternos se traslapan, por estola VFC presente enlas señales que
se utilizaron, facilita la evaluación del proceso y no se convierte, propiamente, en un factor que
limite el método de evaluación.
La parte materna de la señal simulada se acondicionó de tal forma que la relación Señal MaternaSeñal Fetal (M/F), en la señal simulada, fue de 9.5dB, que cae dentro del promedio de la relación
MIF que se observa en los registros de ECG abdominal que se utilizan en casos de estudio[l].
A continuación se presentan secciones delas señales utilizadas para generar la señal simulada de
ECG abdominal
Figura 2.2.3:Setial de ECG que se utiliza como la señal materna para la
construcción de la señal simulada de ECG abdominal
El registro de las dos señales se realizó durante 3 minutos a una frecuencia de muestre0 de IkHz.
Laseñal
simuladade ECG abdominal seconstruyó
sumando muestra a muestra los dos
componentes.
60
METODOLOGIA
A continuación se presenta una sección de la señal simulada de ECG abdominal.
Figura 2.2.4: Seftal simulada de ECG abdominal
Para laevaluación se generaron otras tres señales,agregando a la señal simulada deECG
abdominal, 3 niveles distintos de componentes de ruido blanco Gaussiano,de esta forma se
obtuvieron cuatro señales para la evaluación, una señal que no presenta componentes de ruido y
tres señales con una relación S/R de IOdB, 8dB y 5dB respectivamente. A continuación se
presenta una sección de las tres señales generadas.
"
"
Tiempo [seg]
Figura 2.2.5: Señal simulada de ECG abdominal con una relacion SIR de
1OdB.
4
5
1
"
"
5
5
i s
Tiempo [seg]
Figura 2.2.6: Señal simulada de ECG abdominal con una relación
S/R de 8dB.
61
METODOLOGIA
5
5
$
5
7
3
Tlernpo [seg]
Figura 2.2.7: Seiial simulada de ECG abdominal con una relación SIR de 5dB.
Para las cuatro señales de evaluaciónse obtuvo la gráfica del CTG que se generó y se calculó la
cantidad defalsos positivos y falsos negativos en la detección de complejos fetales.
Como parteadicionaldelaevaluación
se calculoeltiemporequeridoparael
eliminación de complejos maternos de la señal.
procesode
62
RESULTADOS
RESULTADOS
A continuaciónsepresenta
procesaron:
la gráfica del CTG que se obtuvo paralascuatroseñalesque
se
I80
170
i 60
*, >rO
30 I
20
IO
#O
90
80
c
20
40
60
80
1O 0
12c
140
Iepl
180
$?moo [sq:
Ftgura 3.1: CTG de la señal srmulada de EGG abdominal
I ao
170
160
7 50
1-
."
; 140
S
130
1,
ii 1 2o
I
110
'I GO
90
eo
Figura 3.2, CTG de la sefial simulada de ECG abdominalcon una
relac on S!R de 1OdB.
63
11
i
iI
4
r"
I
1
Figura 3.3. CTG de la s e t i a l simulada d e ECG abdonrinal con una
relación S!R de 08dE
1 a0
170
j60
"
d
v
w
!50 -
i
"I
-
:
140 -
'1
130
-
'
- 120
S;
.
l
110
-
1O 0
i
90 -
8 0 O.
20
I
40
I
6 I0
<
(3 O
100
120
140
160
18@
TiZirlOm (st-g]
Figura 3.4: CTG de la señal simulada de EGG abdominal con una
relacidn S!R d e 05dí3.
64
Para evaluar cualitativamente el desempeña del proceso se utiliza la sensibilidad y la predictividad
positiva en la delección de complejos fetales.
La tabla 3.1 muestra la cantidad de Falsos Negativos (FN) y Falsos Positivos (FP), la Sensibilidad
(Se) y la Predictividad positiva (P+) [4] obtenidas al aplicar el método CCA a las cuatro señales que
se procesaron.
1
10
O
0.97
1.0
1
Tabla 3.1. Sensibilidad (Se)y Predictividad Positiva (P+)
obtenidas al evaluar el desempeño de la metodología de
extracción de picos por CCA. FN- falsos negativos, FP- falsos positivos.
La tabla 3.2 muestra los tiempos de procesamiento quese obtuvieron en el proceso de eliminación
de complejos maternos al aplicar el método de extracción de complejos propuesto por Echeverría
en 1998 y el mismo proceso en el método de extracción por Complejo Característico Adaptable
(CCA) propuesto en este trabajo sobre el mismo grupo de señales.
Tabla 3.2. Tiempos de procesamiento para la eliminacl6n de complejos maternos obtenidos al aplicar dos metodologias de
extracción de complejos QRS fetales en cuatro señales de ECGa con diferenteSIR.
65
DISCUS101I
DISCUSI~N.
AI analizar los resultados que se obtuvieronse puede decir que:
De acuerdo a 10:s resultados en la Tabla 3.1, se puede concluir que el proceso de detección de
complejos QRS .fetales, es confiable para los casos que se estudiaron ya que
la sensibilidad del
proceso fue mayor al96% para todos los casos.
Paraelcasode
las señalesquecontaminaronconruidoblanconoseobservaunadiferencia
significativa en la sensibilidad del proceso. Para el caso de la señal a la que no se le agregó ruido
blancosepresentaunamejoraen
la sensibilidad de tansoloun
2% conrespectoa las otras
señales.
En ninguno de las cuatro casos se detectaron Falsos Positivos, ya que el algoritmo esta diseñado
parabuscar un complejo utilizando límites temporalesque se generande los intervalos RR
anteriores, esto d,a como resultado que la Predictividad Positiva para todos los casos sea del 100%
independientemente de las relaciones S/R y IWF que se presente en la señal.
A pesar de estos resultados, no hay que olvidar que para la construcción del CTG fetal se utilizan
losintervalos RR de la señal fetal y queporcadaFalsoNegativo(FN)(complejodetectado
erróneamente), se pierdendosintervalos
RR de la señal (el intervalo entre el complejo QRS
anterior y el Falso Negativo, y el intervalo entre el Falso Negativo y el complejo QRS siguiente).
Es por esto, que la confiabilidad en la obtención del CTG disminuye en dos perdidos por cada falso
negativo durante la detección delos complejos fetales.
Esto se puede observar en las gráficas de las CTGs en donde se pueden presentar dos artefactos
[5]. Uno deestos
quenosondetectadosdurante
el procesodelocalizacióndecomplejos
artefactos, conoc:ido como el artefacto sube-baja, se presenta cuando el trazo del CTG lleva una
cierta tendencia !I surge un aumento seguido de una disminución abrupta de la frecuencia cardiaca
fetal; en el otro artefacto el cambioabruptoocurreprimerohaciaabajo
y posteriormentehacia
arriba (artefacto baja-sube).Para el primerartefactoesperaríamosqueelcomplejodebería
encontrarse después y para el segundo, antes de lo detectado.
AI comparar la posición de los complejos fetales que se encontraron en cada una delas señales de
pruebacon la posiciónde los complejosen la señalque se utilizó comoparte fetal para la
construcción de la señal simulada de ECG abdominal, se observó que la posición de los complejos
que se detectaban correctamente variaba hasta en k 3ms con respecto a sus posicionesoriginales.
Esta variabilidad aleatoria sedebebásicamenteaque
las señalesdepruebaseconstruyeron
mediante la adición de componentes de ruido blanco, señal materna y señalfetal, y a los procesos
de filtrado que se realizan sobre ellas.
la eliminaciónde los complejos
Por otra parte,aunque los tiemposdeprocesamientopara
maternos de la señal pueden cambiar ligermnente por
la selección que realice el usuario de los
patrones materno yfeta, la tabla 3.2 muestra que existe una diferencia considerable entreel tiempo
requerido para cada método, siendo CCA quien genera los mejores resultados como consecuencia
de la eliminación de la etapa de reconocimiento de patronesde traslapamiento.
66
CONCLUSIONES
CONCLUSIONES.
De los tres objetivosqueseplantearon
siguiente:
al principio del presente trabajo, sepuedeconcluir
Io
Por una parte, sepudocrearunainterfaseamigablecon
el usuario,bajo la plataforma de
programación MatlabB, que facilitó la extracción de los complejos fetales de una señal abdominal
de ECG y la construcción del CTG fetal (CIG9. Se propuso, también, un método que se adapta
rápidamente a 10:s cambios morfológicos de las complejos QRS maternos a lo largo del tiempo.
Respectoa la c:apacidaddeextracción
de complejos fetales, los resultadosmuestranque
el
métodoescapaz
de realizar extraccionesconfiables del complejo QRS fetal ya quegenera
cantidadesmínirnas de FN y FP. Sinembargo,antes de afirmar que la metodologíaes 100%
confiable para la generación del CTGf, es necesario evaluarla en un espacio muestra1 constituido
porseñalesadquiridasbajocondicionesrealesderelaciones
S/R y M/F paradeterminar los
resultados de su desempeño,por lo pronto se consideraque los resultadosobtenidosson
prometedores.
Como perspectivas a futuro, se propone trabajar sobre los las rutinas y procedimientos en donde
interviene el criterio del usuario, con la finalidad de crear un proceso independiente del usuario que
pueda extraer los complejos fetales de una señal de ECG abdominal y generar el CTG, de forma
confiable y en tiempo real.
67
BIBLIOGRAFIA
BIBLIOGRAFIA.
[ l ] JC Echeverría, R Ortiz, N Ramírez, V Medina, R González. A Reliable Method for Abdominal
ECG Signal Processing. Computers in Cardiology 1998; 25529-532.
[2] Salinas E, C)rtiz R, González R, Echeverría JC. Procedimientos Para la Identificación de
Complejos QRSMaternos y fetales Traslapados. Rev. Mex. lng. Biom. Nov. 1998:712-715.
[3] Pan J, Tompkins WJ. A real-Time QRS Detection Algorithm. IEEE Trans Biomed Eng
32:230-236.
1985;
[4] AAMI, Association for the Advancement of Medical Instrumentation. Recommended practice for
testing and reporting performanceresults of ventricular arrhythmia detection algorithms, 1986.
[5] Ortiz Pedroza R. Confiabilidad de la Fono cardiografía en laDeterminaciónde la Variabilidad de
la Frecuencia Cardiaca Fetal por Análisis, Espectral y Temporal, 1997.
[6]The MATH WORKS Inc. Using MATLABVersion 5, 1996.
[7] http://www.fetal.freeserve.co.uk/ctg.html
[8] http:/lwww.gts.tsc.uvigo.es/-wavelets/
APÉNDICE
APÉNDICE
RUTINAS Y
PROCEDIMIENTOS DE
COMPUTO EN LENGUAJE MATLA88
A1inea.m
function lim=alinea (:sena,extremos)
%FUNCIóN QUE GENERA LOS EXTREMOS DEL PATRóN
%EN BASE A LA CORRELACIóN ENTRE
%TRES DE ELLOS
g=sena;
xl=g(extremos(l):extremos(2))-g(extremos(l));
x2=g(extremos(3):extremos(4))-g(extremos(3));
x3=g(extremos(5):extremos(6))-g(extremos(5));
d=length(xl);
t l 1 =extremos(1);
tl2=extremos(2);
s=xcorr(x2,xl);
[a,b]=max(s);
m=d-b;
t21=extremos(3)+m;
t22=extremos(4)+m;
s=xcorr(x3,xl);
[a,b]=rnax(s);
m=d-b;
t31=extremos(5)+m;
t32=extremos(6)+m;
%Se alinean de acuerdo la máxima correlación
%el primer y segundo complejos.
%Se calculan nuevos límites para el segundo complejo
%Se alinean de acuerdo la máxima correlación
%el primer y tercer c3mplejos.
%Se calculan nuevos limites para el tercer complejo
lim=[tll t12 t21 t22 r31 t321;
69
APENDICE
Amp1ia.m
%Se agregan ceros a la señal cuando un pico
%esta cerca del inicio de la señal o cerca del final
global sena1 locs limrn
xa=zeros(1,300);
senal=senal';
xa=[xa senal];
xa=[xa zeros( 1,300)];
senal=xa,
senal=senal';
l0cs=l0cs+300;
limm=limm+300;
Bibi1om.m
function m=bibliom(fet,mat);
%Construcción de librerias a partir de patrones
%materno y fetal
lf=length(fet);
Im=length(mat);
fet=fet';
mat=mat';
fe=[fet zeros(l,Im+lf)]; %Se generan dos vectores con cada patrón (materno y fetal)
feto=fe;
ma=[zeros(l,lf) mat zeros(1,If)l;
lon=length(fe);
¡¡=I;
¡=I:
while i <= (Im+lf+l)
%La librería se genera sumando los dos patrones
m(ii,:)=feto+ma; %desplazando el patrón fetal una muestra a la vez
feto=[zeros(1,i) fe(1,I :Ion-¡)];
¡=¡+I:
ii=ii+l;
end
m(ii,:)=ma;
70
Centra.m
function centra(ll,bb:)
%FUNCIóN QUE DEFINE LOS LiMITES DEL PATRClN
global figura a b coxi linli pos band materno fetal I
1=11;
band=bb;
figura=figure( ...
%Se presenta unanuevaventana.
'Narne','Ajuste de la linea basal.', . . .
'NumberTitle','off', ..,
'position',[70 50 610 470));
ejes=axes( . . .
'Units','normalized', . . .
'Position',[O.l3 0.150.775 0.8151);
a=[];
b=[l;
coxf=[];
inicial=O;
final=O:
lin=[];
estado=[]:
n=l:
%Se define la función del puntero al desplazarse sobre la ventana
%de tal forma que al presionar el botón de ratón se (3Imacena
%la amplitud de la posición del puntero sobre la gráfica,
set(figura,'units','nornlalized','WindowButtonMotionFcn',[
,,
'global a b coxf lit1 li pos,',,,,
'a=get(gcf,"currentpoint");',.
..
'b=get(gca,"curreiltpoint");',..,
' if a(1)>0.13 & a(1)<0.905 &a(2)>0.11 &a(2)<0.925,',. . .
'
set(gcf,"pointer","crosshair");',
...
' li=get(gca,"xlim");',...
' set(gcf,"WindowEuttonDownFcn","global
lin,set(lin,""visible"",""off"");',
'
coxf=b(3);lin=line([li(l)
li(2)],[b(3) b(3)],""color"",""r"");");',
...
' set(pos,"String",num2str(b(3)));',...
' else,', . ..
' set(gcf,"pointer","arrow");',
..
' set(gcf,"WindowButtonDownFcn","");',,..
' set(pos,"String",'"');',...
'end,']);
71
APFNDICE
Centra.m (continuación)
if band==l
mat=materno;
else
mat=fetal;
end
tam=length(mat);
eje=1:tam;
%Se grafica el promediode los complejos maternos
%para la selección de la línea basal.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ml=rnat(l:l);
ejel=l:l;
m2=mat((l):(tam-l)8);
eje2=(l):(tam-l);
m3=rnat((tam-l):tam);
eje3=(tam-l):tam;
plot(eje1,ml);
hold on;
plot(eje2,m2,'r');
plot(eje3,m3);
grid:
hold on
..................................................
%Se presentan 10: controles que muestranel nivel
%o amplitud donde se encuentra el puntero.
%%%%%%%o~%a~~%%%%%%%%Qh%%~o%~a%%c~a~%%%%%%%%%%%%%%%%a~a~%%a~%o~%~~
uicontrol(gcf,'HolizontalAlignment','right',...
'BackgroundColor',[O,8 0.8 0.81,.. .
'Style','text','Pos',[30
20 50 201,...
'ForegroundColor',[O O O], .. ,
'String','Nivel:','visible','on');
pos=uicontrol(gcf,'HorizontalAlignment','left',
..
'6ackgroundColor',[O.80.8 0.81,.. .
'Style','text','Por;',[80
20 70 201,...
'ForegroundColor',[O O O], ...
'String', 'visibl'e','on');
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
boton=uicontrol(gcf, ... %Control
"Continuar"
'BackgroundColor',[O O O], ...
'Style','pushbutton','Pos',[400
20 100 201,.. .
'ForegroundColor',[l 1 I],
...
'String','Continuar', 'visible','on',. . .
'callback',[...
%%Función del Control "Continuar"%%
'global figura band maternofetal coxf I,',...
'if band==l,',...
' seg=materno;',...
'I,
72
APENDICE
Centra.m (continuación)
'else,',..,
' seg=fetal;',. . .
'end,',...
'close(figura);',...
'seg=seg-coxf;',, , .
'Is=length(seg);',...
'secini=abs(seg((ls-I):ls));',
..
'ls=Is-I-5;',.,
,
'prod=seg(ls+l:I*seg(ls);',
...
'while prod>O,',...
%Se busca el límite superior
' Is=Is+l;', ...
%donde la señal y el umbral seleccionado
'if Is < length(seg),',...
%se intersectan.
' prod=seg(ls+l)*seg(Is);',
..
'else,',, , ,
[x,ind]=min(secini);',...
' cte2=5;',...
' nuevo=0:l:(cte2-l);',...
' nuevo=nuevo./cte2;
' nuevo=nuevoi';', , . ,
' Is=length(seg)-l+l;',...
' tor ii=l:cte2,',...
'
seg(ls-ii)=seg(ls-ii).*
,,,
I
end,',..
' prod=-I;',...
'end,',...
'end,',, , ,
'lims=ls-l;', ...
I
I!...
'i=l+5;',...
'secfin=abs(seg(l:l));',.,.
'prod=seg(i)*seg(i-I);',
...
'while
prodzo,',
...
%Se
busca
el límite
inferior
' i=i-l .'
%donde la señal y el umbral
seleccionado
' if i > I , ' , , . .
intersectan.
%se
'
prod=seg(i)*seg(i-I);',...
' else,',...
'
[x,ind]=min(secfin);',...
'
cte2=5;',...
'
nuevo=O:l:1:cte2-1);'.
...
'
nuevo=nuelr'o./cte2;~,
,,,
'
nuevo=nuevo";',, ..
'
i=ind;',. , .
' Is=length(seg);',...
'
for ii=l:cte2,',...
seg(i+ii-l)=seg(i+ii-I).*nuevo(¡¡);',. . .
'
end,',:..
'
prod=-I , ,
' end,'...
'end,',, , ,
'limi=i;',.,,
'seg=seg(limi:lims):',..
'seg=[O;seg;O];',. . .
'if band==l,',...
%Si se trata d e l patrón materno
' materno=[];',...
%se presentala gráfica de los 3
' materno=seg;',...
%complejosy la gráfica del patrón.
3
3 . .
;I,.
73
APEPJGICE
Centra-m (continuacibn)
tlgure(gct);',...
' graf2=subplot(2,1,2),',. . .
' piot(maternoj,',. . .
' grid,',.
' posgrf'2=get(graf2,''pos;'),;,. , .
' set(graf2,"pos",[posgrf2(1)-.05
posgrf2(2)+.02 posgrf2(3)-.13posgrf2(4)]),',..
' gca,',. . .
' title("Patrón Matemo","Color","k"),', ...
'
'else,',. . .
%Si se trata de¡ patrón fetai
' frtal=[];',...
%se
presenta
la gráfica del patrón fetal
' fetal=seg;',..
' figure(gcf);',. . .
' plot(fetal),',...
' grid,',,..
gca,',...
' posgrf=get(gca,"pos"),',
...
' set(gca,"pos",[posgrf(l)
posgrf(2)-.05 posgrf(3) posgrf(4)]),',...
' litle("Patrón Fetal"," Color","k"),' ,...
'end,']);
I
74
APENDICE
Ctg.m
function ctg(lpf)
%FUNCIóN QUE OBTIENE E t CTG DEL ECG FETAL
%A PARTIR DE LAS POSICIONES DE LOS C0MPLE:JOS FETALES
global T
Ipf=lpf*T;
%Se obtiene la frecuencia cardiaca a partir de
%los intervalos RR.
%%%%%%%%%%?~%%%%%%%%%%%%%%%%l~%%%%%%%%%%%%%%%~~O~O~
dlpf=diff(lpf);
dlpf=( 1./dlpf);
tac=60*dlpf;
Ipf=lpf(2:length(lpf));
%%%%%%%%%%~6%%%%%%%%%%%%%%%%%%%%%%0~0~%%%%%%%%%%0~0~0~
picgr=figure('Numbei~iUe','off','Name','Cardiotacogram~~,');
%Se presenta una nueva ventana.
ejes=axes( . , .
'Units','normalized', . . .
'box','on',. . .
'drawmode','fast , . . .
'Position',[O.lO 0.18 0.8 0.751);
set(gca,'ylim',[80 1801);
%Se presenta la gráfica del CTG.
hold on,
plot(lpf,tac);
. . . . . . . . . . . . . . . . . . . . . . .
cont=uicontrol('visible','on','position',[400
20 80 201,...
'string','Terminar.',...
'callback',['global ecgder despli,',...
'close(gcf);']);
cierra
%Se
%Control "Terminar"
la ventana.
75
APENDICE
Cuadra.m
function cuadra(ori);
%FUNCIóN QUE ELEVA AL CUADRADO LASEÑAL
global ecgcua trai despli frec,
%Se eleva al cuadrado la señal
. . . . . . . . . . . . . . . . . . . . . .
ecgcua=ori.*2;
%%%%%%%%%%~~%%%%%%%%%%
tama=length(ecgcua);
trai=round(2,5*frec);
despli=uicontrol(gcf,':;tyle','slider',
... %Control de desplazamiento de la señal
'units','normalized',. ..
'position',[O.lO0.93 0.8 0.031,...
'min',l,'max',tama-trai,'value',l
,...
'callback',[.
'global ecgcua trai,',...
'pos=get(gco,"Value");',
...
'axis([round(pos)round(pos)+trai min(ecgcua) max(ecgcua)]);']);
%Se presenta la grifica de la señal.
ini=l;
¡¡=I;
set(gca,'nextplot','replace');
plot(ecgcua,'b);
set(gca,'xlim',[ini ii'trai]);
set(gca,'ylim',[min(ecgcua)
max(ecgcua)]);
set(gca,'color',[l 1 l],'xcolor',[O O O],'ycolor',[O O O]);
hold on
xlabel('muestras','color','k');
ylabel('magnitud','color','k');
hold on
. . . . . . . . . . . . . . . . . . . . . . .
mwibot=uicontrol('visible','on','position',[450
80 80 20],..%Control "IMV
Btring','lVIW.',...
'callback',I"global ecgcuadespli.',. , .
'delete(despli);',. . .
'delete(gco);',. . ,
'mwint(ecgcua);']); %Se invoca a la funciljn 'mwint.m'.
%%%%%%%%%%%%%%%%%%%%%%%
76
Derivar.m
function derivar(ori);
%FUNCIóN QUE DERIVA LA SEÑAL
%CON UNA DERIVACIóN DE 5 PUNTOS
global ecgder trai despli frec,
%Derivación de la señal.
%%%%%%%%%%%%%%%%%%%%
I=length(ori);
a=ori(1:(l-2));
b=ori(3:l);
a=b-a;
a=[O a O];
a=2*a;
c=ori(l:(l-4));
d=ori(5:l);
C=d-C;
c=[O o c o O];
ecgder=(a+c)/8;
%%%%%%%%%%%%%%%%%%%%%%%
tama=length(ecgder);
trai=round(2,5*frec);
despli=uicontrol(gcf,'style','slide..r',%Control de desplazamiento de la señal
'units','normalized, ...
'position',[O.lO 0.93 0.8 0.031,...
'min',1,'max',tama-trai,'value',
1,...
'callback',[...
'global ecgder trai,',...
'pos=get(gco,"Value");',
..
'axis([round(pos) round(pos)+trai min(ecgder) max(ecgder)]);']);
%Se presenta la grifica de la señal.
ini=l;
¡¡=I;
set(gca,'nextplot','replace');
plot(ecgder,'b');
set(gca,'xlim',[ini ¡¡"trail);
set(gca,'ylim',[min(ecgder)
max(ecgder)]);
set(gca,'color',[l 1 l],'xcolor',[O O Oj,'ycolor',[O O O]);
hold on
xlabel('muestras','color','k');
ylabel('magnitud,'color','k');
hold on
77
APENDICE
Derivacm (continuación)
%%%%%%%Q~%%%%%%%%%%Q~%%%%
cuadbot=uicontrol('vi:sible','on','position',[450
80 80 201,. . . %Control "Cuadratura"
'string','Cuadratura',. . .
'callback',['globalecgder despli,',...
'delete(despli);',...
'delete(gco);',. . .
'cuadra(ecgder);']); %Se invoca a la función 'cuadra.m'
78
APEldDlCE
Detpicam.m
function detpicam(se,ll,l2);
%FUNCIóN QUE DETECTA LAS ONDAS R
%DE LOS COMPLEJOS MATERNOS EN LA SEÑAL
global h a t lifet sena1 sen tramo desp continua grafpic
global locs picos popibot quipibot se grafpic T vent
%Si la polaridad de1 8 onda R es negativa
%se invierta la polaridad dela señal.
if se==l
sen=-l*senal;
else
sen=senal;
end
%Si I1=O la función $,einvocó por primera vez,
%y las posicionesde los dos primeros complejos
%matemos no están definidas (I1y 12).
if ll==O,
refra=300e-3;
refra=refrafl;
refra=ceil(refra);
vent=5/T;
vent=ceil(vent);
los 5 primerossegundosde la señal
vent=sen(1:vent);%Setoman
todas lasmuestras de estetramo
offset=min(vent);%seelevanalcuadrado
vent=vent+abs(offset); %y se buscan los picos que sobrepasen la media de
de este
tramo.
vent=vent."2;
%todas
las
muestras
umbral=2*(mean(vent));
[p,l]=pkpicker(vent,umbral)
Indice=l;
while (I(indice)-l(l))<=refra %Se buscan los 2 posibles primeros complejos matemos
indice=indice+l;
%de
acuerdo
un
periodo
a
refractario
de
300ms.
end
pp=p(indice:length(p));
Il=l(indice:length(l));
P=[P(l);PPl;
l=[l(l);ll];
end
tamano=length(sen);%Secalculaelnúmerode
vent=5/T;
%un tramo
señal
dede
vent=ceil(vent);
tramo=vent:
mestras para
5 seg.
%Se buscantodos los picos en la señal
[picj, locj]=pkpicker(sen);
%Se calculala media de los picos
picproml=mean(picj);
[picj, locj]=pkpicker(s~~n,picproml);%Se buscantodos los picos en la señal
%que estenpor arriba de la media de
picjl
%todos
=picj;
los pil:os de la señal.
locjl =locj;
79
APENDICF
0etpicam.m (continuación)
picprom2=mean(picj:1;
%Se
calcula nuevamentemedia
la
de los picos que se encontraron
[picj, locj]=pkpicker(aen,picprom2); %Se buscan los picos que estén por arriba de esta media.
picprom3=mean(picjj;
%Se calcula nuevamente el promedio de los picos.
[picj, locj]=pkpicker(s.en,picprom3);%Y se buscan los picos que están por arriba de este promedio.
desvpic2=std(picj);
umbral=picprom2-(2"desvpic2);
%El umbral se define comoelsegundo promedio queseobtuvo
%menos 2 vecesla desviación estándar de los picos que
%se encontraron con el tercerpromedio
%%Si es la primera vez que se invoca a la función,
%%se presentan en la ventana, la gráfica y los controles
%%"Quitar un pico" y "Agregar un pico"
if I1==o
ejes=axes( . . .
'Units','normalized', ...
'box','on',...
'drawmode','fast',. . .
'Position',[O.lO0.18 0.8 0.751);
desp=uicontrol(gcf,'style','slider',
,...
'units','nomialized',. . .
'position',[O.lO0.93 0.8 0.031,...
'min', 1,'ma:c',tamano-tramo,'value',
1,...
'callback',[...
'global sen tramo,',.. ,
'pos=get(gco,"Value");',
...
'axis([round(pos)round(pos)+tramo min(sen) max(sen)]);']);
%Para quitar o agregar un pico se invoca a la funciórl 'quipopic.m'
popibot=uicontrol(gcf, .. .
'BackgroundColor',[OO O], ...
'Style','pushbutton','Pos',[300
20 100 201,. . .
'ForegroundColor',[l 1 I], ,.,
'String','Agregar un pico', 'visible','on'....
'callback','global se desp continua locs picos popibot quipibot grafpic,quipopic(1,I)');
quipibot=uicontrol(gcf, .,,
'BackgroundColor',[O O O], , , ,
'Style','pushbutton','Pos',[200
20 100 201, ...
'ForegroundColor',[ 1 1 I], . . .
'String','Quitar un pico', 'visible','on',...
'callback','global se desp continua locs picos popibot iquipibot grafpic,quipopic(1,2)');
end
ini=l;
hold on
¡¡=I;
[picj, locj]=pkpicker(sen,umbral);
%Se buscan los pico:; por arriba del
%umbral definido anteriormente.
80
AF'ENDICE
Detpicam.m (continuación)
if 11-=o
l(l)=ll:
1(2)=12:
end
I=find(locj>l(2))%Segeneran
2 vectores quetienenlasposicionesde
los picos
dos umbrales
de
detección
distintos.
Il=find(locj1>1(2))
%utilizando
j=find(locj==l(l))
k=find(locj==1(2))
locj=[1(1);1(2);locj(I(l):(length(locj)))];
picj=[picj(j);picj(k);pic~,(l(?):(length(picj)))~;
locjl=[1(1);1(2);locjl(ll(l):(length(locjl)))];
picjl=[picj(j);picj(k);picjl(Il(l):(length(picjl)))];
[picj, locj]=rrprom(pic~,locj,picjl,locjl,T,sen);
%Se invoca a la función 'rrprom.m'
1'de
3búsqueda
los complejos.
%para
picos=picj;
locs=locj;
if se==l
sen=-1*sen;
picj=-l*picj;
picos=-l*picos;
end
if I1==o
plot(sen);
end
%Gldfica de la señal
hold on
grafpic=plot(locs,picos,'*r'); %Se
grafican los picos
que
se
encontraron
hold on
set(gca,'xlim',[ini¡¡"tramo]);
set(gca,'ylim',[min(sen)
max(sen)]);
ini=ii*tramo;
if ll==O
robt=uicontrol(gcf, , . ,
%Control "Enconrar Picos''
'BackgroundColor',[O O O], ...
'Style','pushbutton','Pos',[lOO
20 100 201, . . .
'ForegroundColor',(l 2 I], ...
'String','Encontrarpicos', 'visible','on',...
'callback',[..
'global grafpic se Iocs,',...
'delete(gcN3);',. . .
'set(grafpic,"visible","off");~,,,,
'detpicam(se,locs(I),locs(2));'1);%Se
i n m a nuevamente la función'detpicam.m'
definen se ahora
%peroend
las posiciones de los
%2 primeros complejos maternos.
81
APEI,IDICE
Elefrel .m
%ELEFREI
global
frec
% Definición
de
la variable
global
"frec"
menl=uicontrol(gcf,':~tyle','text','position',[30
60 200 201.
'string','Frecuencia de Muestreo.');
editcol=uicontrol(gcf,'style','edit',
...
edición
decampo
% Definición
del
8020],..
frecuencia
O h "editcol"
de
lapara
'positic8n',[30
30
'BackgroundColor','w','foregroundColor','k,
..% muestreo de la señal
'string','2');
% Definición del menú
popcol=uicontrol(gcf,'Style','popup',
...
'String','Hz.lkHz.lMHz.lGHz.',..
uicontrol('string','Abrir.','position',[300 3080 401, ...
'callback','close(gco);leart,'); "teart".
rutina la
"popcol" para la
% selección del rango de la %
frecuencia de muestreo
Oh
'Position',[l2030 50 60],'BackgroundColor','w','foregro~ndColor','k');
% Definicióndeelbotón"Abrii'
a llama
% que
Elefre2.m
%ELEFRE2
global
frec
% Definición de
variable
la global
"frec"
menl=uicontrol(gcf,'~;tyle','text','position',[30
60 200 20'!,
'string','Frecuencia de Muestreo.');
edición
decampo
% Definición
del
O h "editcol"
para
la frecuencia
de
'position',[30 30 80201,...
'Backgr.oundColor','w','foregroundColot','k',
...% muestreo dela señal
'string','2');
editcol=uicontrol(gcf,':;tyle','edit'...,
% Definición del menú
% "popcol" para la
'Position',[l20 30 50 60],'BackgroundColor','w','foregrot~ndColor','k');% selección del rangode la
% frecuencia de muestreo
popcol=uicontrol(gcf,':3tyle','popup',
...
'String','Hz.IkHz.JMH;!.IGHz.',,..
uicontrol('string','Abrir.','position',[30030 80 401, ...
'callback','delete(gco);learb');
Oh
Definicióndeel botón "Abrii'
a llama
% que
la rutina "learb"
82
APEi'lDICE
Enc0n.m
function encon(ecgin'i,a,se,p,l);
%FUNCIóN QUE LCICALIZA LOS COMPLEJOS FETALES EN LA SEÑAL
global fetsen lvi T Ipf ecgder frec,
length(se)
%Si la onda R del ccmplejo fetal
%es negativa, se invierten la señal
%de ECGa y la señal resultante de la integración
if se==l
fetsen=fetsen*(-I);
ecgder=ecgder*(-I:I;
end
t=T;
refra=IOOe-3;
refra=refra/t;
refra=ceil(refra);
lorf(l)=l(l)
lorf(2)=1(2)
%Se buscan los 2 primeros complejos en la señal
%resultante de la integración.
%Oh%%%%%%%%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Oh%%
Ipsi(l)=l(l)
lpsi(2)=1(2)
lpsil =Ips¡(l)+lvi
Ipsi2=lpsi(2)+lvi
[m,psil]=max(ecgint~Ipsi(l):lpsil))
[rn,psi2]=max(ecgint(Ipsi(2):lpsi2))
Ipsi(l)=lpsi(l)+psil-I
Ipsi(2)=lpsi(2)+psi2-1
tral=ecgint(lpsi(l):lpsi(l)+(2*a))
[b,c]=pkpicker(tral)
b=b'
c=c'
[b,cc]=max(b)
c=c(cc)
Ipii(l)=c+(lpsi(l)-1)
tra2=ecgint(lpsi(2):lpsi(2)+(2*a));
[b,c]=pkpicker(tra2);
b=b;
c=c"
[b,cc]=max(b);
c=c(cc);
Ipii(2)=c+(lpsi(2)-1);
o ~ o / o o / o o ~ o ~ o ~ o / o o / o o ~ oo
~ om
~oo /om
Oo m
o ohoho ho h
o h
o h
o omo ko m
,oooooooooooooooooooooooooooooooooooooooo
hhk/////////////////
///
83
APENDICE
Enc0n.m (continuación)
%Se buscantodos los picos en los primeros
%1.5 segundos en la señal resultante de la integración
%%%%o~%%%%%?~o~%%oh%%%%o~%%%%%%%%%%%%%%o~o~%oh%%%%oh%%%%%oh%%oh%%%%%%%
vent=1.5/T;
vent=ceil(vent);
vent=ecgint(l:vent);
[p,l]=pkpicker(vent,O),
p‘p“
1=1’.
%~~o%%%%%%%%K%%%%~%%%%%%%%%%K%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Se consideran com’o señales deruido,
%todos los picos que norepresentan
%a los complejos fetales.
%%%%%%%%%%%%%%%%%K%%%%%%%%%~~%%%%%%%%%%%%%%%%~%%%%%%%%Qh
b=find(l==lpii(l));
c=find(l==lpii(2));
j=1;
for i=l:length(l)
if i-=b & i-=c
if i<=c
lrui(j)=l(i);
j=j+l;
end
end
end
spki=ecgint(lpii(l));
spki=(0.125*ecgint(lpii(2)))+(0.87!7spki);
if -isempty(ltui),
npki=ecgint(lrui(1));
for i=2:length(lrui),
npki=(0.125*ecgint(lrui(i)))+(0.875”npki);
end,
else
npki(1)=0;
end
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
%Se definen los umbrales de detección,
%y los límites temporales de búsqueda.
%%%%%%%%%%%%%%%%%%%%%%%%%%%~o~,%~o%~o~o~o~o%~o%~o~o%%~o%%%%%~%~~~~
umbil=npki+(0.25”(spki-npki));
umbi2=0.5”urnbil;
rrprol =lpii(2)-lpii(l);
rrprol l=rrprol;
rrpro2=rrprol;
rtpr022=rrpr02;
rrll=0.95*npro2;
rrll=floor(rdl);
rrhl=1.1O*npr02;
rrhl=ceil(rrhl);
rrllm=0,85*rrpro2:
rrllm=floor(rrllm);
rrhlm=l.2*rrpro2:
rrhlm=ceil(rrhlm);
%%~h%%%%%%%%~~K%%%%%%%%%%%%%%~%~%%%%%%%%%%%%%%%%%%~~%%%%%
84
APENDICE
Enc0n.m (continuacion)
posi(l)=l;
posi(2)=2;
posil=[];
Ipos=[];
j=2;
cont=l;
contcon=l;
contdes=O;
k=l;
kk=O;
ultloc=lpii(j);
%Se buscan los primeros 8 complejos fetales
%para inicializar los limites temporales.
for i=2:8,
[pic,loc]=pkpicker(s~cgint(ultloc~l:ultloc+~l~),O)
%Se realiza la búsqueda utilizando
%límites temporales y el mayor
loc=loc+(ultloc+rrll-1)
%de 2 umbrales de búsqueda.
Ipos=loc';
pos=pic';
Ipom=find(pos>=umbil);
if -isempty(lpom),
[md,lmd]=max(pos(lpom(l,:)))
Ipos=lpos(1:Ipom(lmd));
Sisi se encuentra algún pico, se actualizan
rrprol=[rrprol (loc(length(lpos))-ultloc)];
rrprol 1=mean(rrprol);
%lospromedios de los periodos RR.
npr02=[npr02 (loc(length(lpos))-ultloc)];
rrpro22=mean(rrpro2);
cont=cont+l;
contcon=contcon+l;
contdes=O;
posicion=loc(length(Ipos));
ultloc=loc(length(lpos));
else,
[pic,loc]=pkpickel-(ecgint(ultloc+nllm:ultloc+nt7lm),0)%Si no se encuentra ningún pico,
loc=loc+(ultloc+rrilm-I)
%se incrementan los límites de búsqueda
Ipos=loc';
pos=pic';
Ipom=find(pos>=umbil);
if -isempty(lpom:l,
[md,lmd]=max(pos(lpom(l,:)))
Ipos=lpos(l:IpcNm(lmd));
nprol=[rrprol (loc(length(lpos))-ultloc)];
%Si se encuentra algún pico, se actualizan
rrprol 1=mean(nprol);
%los promedios de los periodos RR.
npr02=[rrpr02 (loc(length(lpos))-ultloc)];
rrpro22=mean(rrpro2);
posicion=loc(length(Ipos));
ultloc=loc(lengíh(lpos));
85
APENDICE
Enc0n.m (continuación)
el se
Ipom=find(pos:>=umbi2);
%Si no se encuentra ningún pico, se utiliza un umbral menor para la búsqueda
%Si no
se
encuentra
ningún pico, se utiliza un umbral de
valor O.
if isempty(lporn),
Ipom=l:lengíh(pos);
Ipom=lpom';
end
[m,j]=max(pos(lpom(:)));
Ipos=lpos(1:Ipom(j));
nprol=[rrprol (loc(length(lpos))-ultloc)];
%Se actualizan los promedios de los
rrprol l=mean(rrprol);
'%periodos RR.
rrpro2=[npro2 (loc(length(lpos))-ultloc)];
rrpro22=mean(rrpro2);
kk=l;
posicion=loc(length(lpos));
ultloc=loc(length(lpos));
end
contcon=O:
contdes=contdes+l;
end.
if length(lpos)>l,
for m=l:length(lpos)-I,
npki=(O.125*pic(m))+(0.875*npki);
end
end
%Se actualiza el nivel de ruido de la señal.
%Se actualiza el nivel de la señal (ECGf)
if kk==O,
spki=(0.125*ecgint(ultloc))+(0.875"spki);
else
spki=(0.25*ecginf.(uItloc))+(0.75*spki);
end
%Se actualizan los umbrales de detección y los límites temporales.
umbil=npki+(0.25*(spki-npki));
umbi2=0.Yumbi1;
Ipii(i+l)=ultloc;
rrll=0.95*rrpro22;
rrhl=l.lO*npro22;
rrllm=0,85*rrpro22;
rrllm=floor(rrllm);
rrhlm= 1.2*rrpro22;
rrll=floor(rTll);
rrhl=ceil(rrhl);
rrhlm=ceil(rrhlm);
Ipos=[];
kk=O;
end,
86
APENDICE
Enc0n.m (continuación)
i=length(lpii);
puo=ultloc;
%Se buscan los siguientes complejos fetales
while (posicion+rrhlm) < length(ecgint),
[pic,loc]=pkpicker(ecgint(puo+rrll:puo+rrhl),O); %Se realiza la búsqueda utilizando
loc=loc+(puo+rrl-I);
mayor
%límites temporales
el
y
Ipos=loc';
%de
búsqueda.
2 umbrales de
pos=pic';
Ipom=find(pos>=urnbil);
if -isempty(lpom),
[md,lmd)=max(pos(lpom(l,:)));
Ipos=lpos(1:Ipom(lmd));
rrprol=[rrprol(2:13) (loc(length(Ipos))-puo)]; %)Sise encuentra algún pico,se actualizan
rrproll =mean(rrprol);
%lospromedios de los periodos RR.
if cont < 8,
rrpr02=[rrpr02 (loc(length(lpos))-puo)];
npro22=mean(rrpro2);
cont=cont+l;
else
rrpro2=[npro2(2:8) (loc(length(lpos))-puo)];
rrpro22=mean('rrpro2);
end,
contcon=contcon+l;
contdes=O;
posicion=loc(length(Ipos));
else,
[pic,loc]=pkpicker(ecgint(puo+rrllm:puo+rrhlm),O);
loc=loc+(puo+nilm-l);
lpos=Ioc';
pos=pic';
Ipom=find(pos>=umbil);
%Si encuentra
se
no
ningún pico,
%se incrementan los limites de búsqueda.
if -isempty(lpom),
[md,lmd]=max(~~os(lpom(l,:)));
Ipos=lpos(1:Ipom(lmd));
%Si se
encuentra algún pico, se actualizan
rrprol=[rrprol(;!:8) (loc(length(lpos))-puo)];
%los promedios de los periodos RR.
rrprol 1=mean(rrprol);
posicion=loc(length(lpos));
else
Ipom=find(pos>=umbi2);
%Si no se encuentra ningún pico, se utiliza un umbral menor para labúsqueda
if isempty(lpom),
%Si no se
encuentra ningún pico, se utiliza un
umbral
de
valor
O.
lpom=I :length(pos);
Ipom=lpom';
end
[m,j]=max(pos(lpom(:)));
Ipos=lpos(l :Iporncj));
nprol=[rrprol(2:8) (loc(length(1pos))-puo)]; %Se actualizan los promedios de los
rprol l=mean(rrprol);
%periodos RR.
kk= 1;
posicion=loc(length(Ipos));
end
APENDICE
Enc0n.m (continuación)
contcon=O;
contdes=contdes+l;
if contdes >= 8,
rrpro2=rrprol;
rrpro22=rrprol ,l;
contdes=O;
end,
end,
puo=posicion;
if length(lpos)>l,
for m=l:length(lpos)-I,
npki=(0.125*pic(m))+(0.875*npki);
end
end
%Se
actualiza
el
nivel
de
ruido
de
la señal,
%Se actualiza el nivel dela señal (ECGf)
if kk==O,
spki=(0.125*ecgint(puo))+(0.875*spki);
else
spki=(0.25*ecgint(puo))+(0.75*spki)~
end
%Se actualizanlos umbrales de detección y los limites temporales,
umbil=npki+(O.25*(spki-npki));
umbi2=0.5*umbiI;
¡=¡+I;
Ipii(i)=puo;
nll=0.95*rrpro22;
rrhl=l. lPrrpr022;
rrllm=0,85*npro22;
rrllm=floor(nllm);
rrhlm=l.2*rrpro22;
rrll=floor(rrll);
rrhl=ceil(rrhl);
rrhlm=ceil(rrhlm);
Ipos=[];
kk=O;
end,
88
Enc0n.m (continuación)
%A partir de la posicion de los complejos en la señal
%resultante de la integración se buscan los complejos
%en la señal de ECGa utilizando la pendiente de la señal.
%%%%%%%%%%'~%%%%%%%%%%%%%%%%~%%%%%%%%%%%%%~%%%%%%~%~%%%Oh%%%
for i=l:length(lpii),
Im=lpii(i)-(2*lvi);
lM=lpii(i);
IMM=lpii(i)+(lvi);
Im=round(lm);
IM=round(lM);
IMM=round(lMM);
Ip=ecgder(lm:IM);
Ipp=fetsen(lrn:IM);
[mlp,lmlp]=pkpicker(Ipp);
mlp=mlp';
Imlp=lmlp';
Imlp=lmlp+(lrn-I);
[xx,yyI=max(lpp);
yy=yy+(lm-1);
%Se busca la máxima pendiente
~m~,lmpl=max(lp);
Imp=round(lmp);
Imp=lmp+(lm-I);
uno=ecgder(lrnp);
dos=ecgder(lmp+l);
prod=uno*dos;
%A partir de la máxiTa pendiente
while sign(prod)>=O,
Imp=lmp+l;
%se
busca
el punto de pendiente cero
R.
uno=ecgder(lmp);
%que representa el puntoonda
de
la
dos=ecgder(lmp.-I);
prod=uno*dos;
end
if -isempty(find(lmlp==Imp))
Ipf(j)=lmp;
elseif -isempty(find(lmlp==(lmp+l)))
Ipf(j)=lmp+l;
else
Imlpl=lmlp-Imp;
Imlpl=abs(lmlpl:);
[Imlp2,lmlp3]=mirl(lmlpl);
Ipf(j)=lmlp(lmlp3);
end
if j>=2,
ultpen=mp
if Ipf(j)==lpf(j-I)
Ipf(j)=lmp;
end
else
ultpen=mp;
end
j=j+l
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O~%%%
89
APENDICE
Enc0n.m (continuación)
plpf=fetsen(lpf(l,:));
if se==l,
fetsen=fetsen*(-I);
plpf=plpf*(-I);
ecgder=ecgder*(-I):
end
hold on
tama=length(fetsen):
trai=round(:!.Yfrec);
desp=uicontrol(gcf,'style','slider',
...
%Control
desplazamiento
del
de
'units','norrnalized
'position',[O. 1O 0.93 0.8 0.031,.. ,
'min', ,'max',tamano-tramoi,'value',
1
1,..,
'callback',[...
'global fetsen tramo¡,',
...
'pos=getl:gco,"Value");',...
'axis([round(pos) round(pos)+tramoi min(fet:sen) max(fetsen)]);']);
la señal
'
,
.
.
.
%Se presenta la gráfica de la señal.
ini=l;
¡¡=I;
set(gca,'nextplot','8-eplace');
plot(fetsen,'b');
hold on
grafpic=plot(lpf,plpf,'*r');
hold on
set(gca,'xlim',[ini ¡¡*tramo¡]);
set(gca.'ylim',[mincfetsen)
max(fetsen)]);
set(gca,'color',[l 1 l],'xcolor',[O O O],'ycolor',[O O O]);
hold on
xlabel('muestras','color','k');
ylabel('magnitud,'c:olor','k');
hold on
. . . . . . . . . . . . . . . . . . . . . . . .
cuadbot=uicontrol('vi:;ible','on','position',[450
8080 201,... %Control "CTG"
'string','CTG',...
'callback'.['global lpf,',...
'delete(gco);',...
'ctg(lpf);']); %Se invoca a la función 'ctg.m'
90
Err0res.m
function errores(cadena)
%DESPLIEGA DIAL.OG0 DE ERROR.
figura=figure( . , ,
'color',[0.8 0.8 0.8], , . ,
'Name','Error.', ...
'NurnberTitle','off', . . .
'MenuBar','Nore', ...
'UserData',[O], ...
'position',[268 264 263 721);
info=uicontrol(...
'style','text',,..
'backgroundcolor',[O.8 0.8 0.81,
'foregroundcoIor'J0 O O], ...
'Position',[G40 250 201, . . ,
'UserData',[l], ...
'String',cadena);
boton=uicontrol(, ..
'Position',[lOl 12 60 201,
'UserData',[I], ...
'String','OK');
t=waitforbuttonpress;
d=get(gco,'UserData');
while t==l I d==O
t=waitfo~uttonpre.ss;
d=get(gco,'UserData');
end,
if d==l
close(figura);
end
91
APENDICE
Extrakm
function [ol,Y1,L1,L:2,MD1]=extralv(xmin,muI,lonfet)
%FUNCIóN QUE ELIMINA POR SUSTRACCIóN LOS COMPLEJOS MATERNOS
%DE LA SEÑAL DE ECGa.
%la función devuelve en '01' la señal de ECGa sin cornplejos maternos.
global M contpat patpos msdes limm,
msdes=[];
patpos=Il;
contpat=O;
muI=muI';
ultlib=[];
p l =find(xmin>limm('.) & xmin<limm(2)) %Se buscan los complejos
p2=find(xmin>limm(3)& xmin<limm(4)) %a partir de los cuales se
p3=find(xmin>limm(5) & xmin<limm(6)) %construyó el patrón.
pl=pl(l);
P2=P2(1);
p3=p3(1);
p4=[xmin(pl) xmin(p2) xmin(p3)l;
%%%%%%%%%%Q~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%o/ó
O/ó%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
w=length(M( 1,:));
%%%%%%%%%%%%
lonmatrw-(Ylonfet);
Ito=lonfet+lonmat;
%%O/ó%%%%%%%%%
[s,d]=max(abs(M(w-lonfet+2,:)));
LIl=d-l;
L22=w-d;
for ii=l : 3
%Cada uno de los 3 complejos
tl=mul(p4(ii)-LI 1:p4(ii)+L22); %se alinea con el patrón materno
cor=xcorr(tl,M(w-lonfet+2,:)); %de acuerdo a la onda R de este.
[f,g]=max(cor);
se
%y calcula el punto de máxima
%correlación
mues 1=w-g;
%Se alinean cada
uno
de
los 3
tl=mul((p4(ii)-LI l)+muesl:(p4(ii)+L22)+muesl);
al=m1n(min(corrcc~ef((M(w-lonfet+2,lonfet:lto)),tl(lonfet:lto))));
%complejos con el patrón
h l l=(p4(ii)-LI
l)+muesl;
acuerdo
%de
a la máxima correlación,
h22=(p4(ii)+L22)+muesl;
se
%y obtienen los coeficientes de
restal=(mul(hl I:h22))-M(~-lonfet+2,:);
%de correlación cruzada
zll=std(restal(l:lonfet));
z22=std(restal(lonfet:lonfet+lonmat)):
z33=std(restal(lonfet+lonmat:length(restal)));
desl
=zl1 *z22*z33;
%Se calcula la desviación estándar de la diferencia de
ultlib=[ultlib desl];
%decada complejo con el patrón materno.
end
%%%%%%%%%%&
?%%%%%%%%%%%%%%%%
%
I%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%O~%%%%%%%%
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
APENDIC~
Extra1v.m (continuación)
if xmin<2000
save edgardo M mu1
end
tic;
w=length(xmin);
ww=size(M);
o1 =muI;
%Se alinea cada uno de los picos encontrados
%con el patrón materno para la substracción.
for i=l:w
%La función 'mayorlvf.m' alinea los complejos
%y adapta el patrón materno a los cambios en la seiial.
[yl,al,dl,des,loc,ll1,121,md,ul]=mayorlvf(xmin(i),mul,lonfet,ultlib);
0 l ( l l l ( ~ l ) ~ l 2 l ( ~ l ) ) ~ ~ ~ ~ ~ ( l l l ( ~ l ) ~ l 2 l ( ~ l ) ) - M (%Se
~ ~ lelimina
) , ~ ) ~el complejo rnatemo
MDl(i)=(md);
Yl(i)=yl;
Ll(i)=lll(yl);
L2(¡)=121(yl);
ultlib=ul;
end
t=toc
save restapadre 01
93
Feta1fi.m
function fetalfi
%PROCESO PARA SELECCIONAR EL PATRóN FETAL
global sena1 lifet fetal
global fetl fet2 fet3 bot1 bot2 bot3mensaje I1
fll=lifet(l);
f12=lifet(2);
f21 =lifet(3);
f22=lifet(4);
f31=life@);
f32=lifet(6);
%Posición inicial y final
%de cada uno de los c9mplejos seleccionados,
%Se calcula la mitad de cada uno de los complejos.
centl=fix((fl l+fl2)L!);
fetl=senal(flI:f12);
cent3=fix((f31+f32)./;!);
fet3=senal(f31:f32);
Il=length(fetl);
12=length(fet2);
13=length(fet3);
If=[ll 12 131;
[I,lmax]=max(lf);
%De acuerdo al complejo más largo se calculan nuevainente los limites
if Imax==:l
mitad=centl-fll;
f21=cent2-mitad;
f22=cent2+mitad;
f31=cent3-mitad;
f32=cent3+mitad;
fl2=centl+mitad;
elseif lmax==2
mitad=cent2-f21;
f l l=centl-mitad;
fl2=centl+mitad;
f31=cent3-mitad;
f32=cent3+mitad;
f22=cent2+mitad:
APENDICE
Feta1fi.m (continuación)
else
mitad=cent3-f31;
fll=centl-mitad;
fl2=centl+mitad;
f21=cent2-mitad;
f22=cent2+mitad;
f32=cent3+mitad;
end
fetl=senal(fll:fl2);
fet2=senal(f21:f22);
fet3=senal(f31:f32);
Il=length(fetl);
12=length(fet2);
13=length(fet3);
If=[ll 12 131;
%SE CALCULAN NUEVAMENTE LOS LíMITES ALINEANDOLOS DE ACUERDO A LAS MAXIMA CORRELACIóN
limfo=[fl 1 ,f12,f21 ,f22,f31
,f32];
limf=alinea(senal,limfo);
%Se
invoca
la función 'a1inea.m'
f l l=limf(l);
f12=lirnf(2);
f21 =limf(3);
f22=limf(4);
f31=limf(5);
f32=limf(6);
fetl =senal(f 1 1 :f 12);
fet2=senal(f21 :f22);
fet3=senal(f31 :f32);
Il=length(fetl);
y después de cada complejo.
%Se agregan tramos de señal antes
Il=round((ll*50)/100);
fetl=senal(fll:fl2);
feQ=senal(f21 :f22);
fet3=senal(f31:f32);
limf=[fll f12 f21 f22 f31 f32];
APÉNDICE
Feta1fi.m (continuaciónj
%Se presentala gráfica delos 3 complejos fetales seleccionados
fig2=figure('Nurnberl-itle','off','Name','Patrón
Fetal');
ejes=axes( . , .
'Units','normaliz'Etd',...
'Position',[O.ll 0.25 0.79 0.6951);
plot(fet'l,'color',[.5 . 3 O]);
hold on,plot(fet2,'r');
plot (fet3,'color',[.3 .8 O]);
grid
hold off
de las tres señales
%Se presentan los controles de selección para cada una
botl=uicontrol(fig2, ,,,
'style','radio', ...
'BackgroundColor',[O.80.8 0.8],..,
'ForegroundColor',[.5 .3 O]. . . .
'string','señal l',
.. .
'position',[280 60 '100 201, ...
'callback',[. . .
'global fetl bot2 bot&', ...
'set(bot2,"value4'.0);'...
'set(bot3."value",O);',...
'fetal=fetl;']);
bot2=uicontrol(fig2, . . ,
'style','radio', , , .
'BackgroundColor',[0.80.8 0.81,.
'ForegroundColor','r',, ..
'string','señal 2', . .
'position',[280 40 '100 201, . . .
'callback',[.,.
'global fet2botl bot3,',. , .
'setjbot1,"value' ,O);',,,
'set(bot3,"value",O)~',
..
'fetal=fet2;']);
bot3=uicontrol(fig2, ..
'style','radio',. , ,
'BackgroundColor',[O.8 0.8 0.81,
'ForegroundColor',[.3 .8O], , , .
'string','señal 3 , . . .
'position',[280 20 "'O0 201, ...
'callback',[..
'global fet3botl bot2,',...
'set(botl,"value",O);'...
'set(bot2,"value",O);',...
'fetal=fet3;']);
APENDICE
Feta1fi.m (continuación)
mensaje=uicontrol(gcf, ...
%Mensaje: 'Seleccione una de las setíales'
'BackgroundCol~or',[0.80.8 0.81,. . ,
'Style','text','Pos',[30
60 200 201,...
'ForegroundColor',[O O O], ...
'String','SelecciOne unade las señales.', 'visible','on');
%%Función del control "Continuar"%%
cod=[...
'global bot1bot2 bct3 mensaje fetal I1 ,',
'set(gco,"callback","close(gcf);");',...
'set(bot1,"visible","off");', ...
'set(bot2,"visible","off');', . . .
'set(bot3,"visible","off");',..
'set(mensaje,"visible","off");',...
'centra(ll,2);'];
continua=uicontrol(gcf, ...
%Control:
"Continuar"
'BackgroundColor',[OO O], ...
'Style','pushbutton','Pos',[400
20 100 201,...
'ForegroundColor',[ 1 1 I ] , . . .
'String','Continuar', 'visible','on',...
'callback',cod);
97
APENDICE
Guard1 .m
function [senal, tamano]=guardl(bandera}
%FUNCIóN PARA LEER UNA SEÑAL DE ECGa Y PqESENTARLA EN PANTALLA
%La variable bandera especifica el tipode archivo que se abrirá
global original libbot M picos Iocs despli T %DefiniciOn de variables globales
global ii in¡ tramoi senal frec limpbot
echo off
pato=path;
[archivo,pato]=uigetl'ile('*.txt','archivo
de entrada'};
%Se
obtiene
nombre
el
archivo.
del
%y
acceso
ruta de
archivo=[pato
archivo];
iden= fopen(archivo,'rt'); %Se genera un identificador para abrir el archivo
path=pato;
if bandera == 1
[senal,tamano]= fscanf(iden,'%g'); %Lectura de datos
else
[senal,tamano]= fread(iden,inf,'intl6');
end
fclose(iden);
set(gcf,'visible','off);
onginal=senal;
YOSeobtienenelnúmerodemuestrasparauntramode
tramoi=tramoi/(frec*lO);
tramoi=round(trarnoi);
tramoi=tamano/tramoi;
tramoi=round(tramoi);
ini=l;
cad=num2str(tamana);%Sepresentaenpantallael,&mero
cad=rNúrnero de Muestras: ' cad];
uicontrol(gcf,'style','te!xt','position',[30
30 280 201,...
'ForegroundColor',[l 1 I],
...
'BackgroundColor',(0.50 0.50 OSO], , , ,
'HorizontalAlignrnent','left',...
'string',cad);
10 seg
de muestras
uicontrol(gcf,'style','text','position',[30
50 280 201,... %Se presenta en pantalla
'ForegroundColor',['l 1 l],..,
frecuencia
%la
de muestre0
'BackgroundColor',[~O.50
0.50 0.50],
...
'HorizontalAlignment','left', ...
'string',['Frecuenciade Muestreo: ' num2str(frec) 'Hz,']);
ejes=axes( . . ,
'Units','normalizetl',,. .
'color',[l 1 I]
,...
'box','on',, . .
'drawmode','fast',. . .
'xcolor',[O O O], , . .
'ycolor',[Oo O], ...
'Position',[O.10 0.48 0.8 0.451);
98
APENDICE
Guard1.m (continuaeih)
despii=üiconiroi(gci,'s~~le','siidei,
... %Se crea Ü U control para
,..
?he!desp!azam en!^ de!ase%!
'.nit.','n~.l?!ized',
'position',[D.lO0.93 0.8 G.03], . . .
'min',l,'max',tamano-tramoi,'value',l,
...
'callback',[ , .
'global senal tramoi,',. . .
'pos=get.(gco,"Value");',...
'axis([round(pos) round(pos)+tramoimin(sena1)max(senal)]);']);
espera=uicontrol('string','Salir.','position',[450
20 80 261,... %Control "Salir"
'callback','clear all,closeall,');
uicontrol('position',[~l50
50 80 20],'string','Filtrar',... %Control "filtrar"
%%%%%%%FUNCIÓN DEL CONTROL "FITRAR"%%%%%%%
'callback',[. . .
'global senal ii ¡ni tramoi original libbot limpbot frec,',...
'set(gco,"visible","off");',...
'set(libbot."visible","on");',.,.
'setjlimpbot,"visible","on");', ...
'x=zeros([l 10000]);',...
'x(5000)=1;'....
'[h,g,rh,rg]=wspl;ne(7,21);',
...
%Análisisysíntesisde los filtroscorrespondientes
%a un esquema biortogonal de soporte compacto
'm=multires(x,h,lh,g,rg,lO);',
...
%Análisismultiresoluciónde 10 detalles.
Oh Se
eliminan los detalles
de
las
primeras
'xx=sum(m(4:7,:));',...
%últimas
y
3 bandas.
'b=rx(4500:5500);',, , ,
'save coefib,',...
'senal=prepro(original);',
... % Se invoca ala funcion 'prepr0.m' (filtado y normalización)
'tramin=ini-tramoi+I;',,,.
'pos=get(gca,"xllm");',..
'set(gca,"nextplot","replace");',. , ,
'plol:(senal,"b");',...
%Se grafica la señal
normalizada.
filtrada
y
'set(gca,"xlim",[pos(1) pos(2)]);',, . .
'set(gca,"ylim",[rnin(senal)
max(senal)]);',...
'set(gca,"color",[l 1 I]."xcolor",[O 0 G],"ycolor",[O O G]);',.,.
'hold on,',...
'xlabel("muestra:~","color","k");',,,,
'ylabel("magnitud","color","k");',...
'hold on,',. . ,
'ven2,'I);%Seinvocaalproceso'ven2.m'
libbot=uicontrol('visible','off,'position',[45050 80 20],'string',... %Control "Librerías"
'Librerias',. . .
'callback',[... %%%,%%%%FUNCIóN DEL CONTROL "LIBRERIAS"%%%%%%%
'global materno fetal sena1 M,',.,,
'ifisempty(matern0) I isempty(fetal),',. . ,
'%Si no sehanseleccionado los patrones
' errores("Primero seleccionelos patrones.");',. . .%se presenta un mensaje de error.
' figure(gcf);',...
99
100
APENDICE
Learb.m
global senal
frec T
% Definición de variables
globales
cb-col= [ 1 1000 1000000 1000000000];
YO El vector"cb-col" contiene las magnitudesde
mag= cb-col(get(popcol,'Value'));
% Se
obtiene
en
"mag"
valor
el de
"cb-col"
% correspondiente a la selección en "popcol"
% rangos de frecuencia.
frec=get(editcol,'strirlg'); % Se obtiene lafrecuencia que introduceelusuario
frec=stC?num(frec);
frec=frec*mag;
T= 1Ifrec;
Oh Se calcula la frecuencia
% y periodo de muestreo
set(popcol,'visible','off);
O
h Se elimina eltexto y controlesde la figura
set(editcol,'visible','off);
set(men1,'visible','of"');
(senal,tamano]=guard1(2); % Se invoca a la función "guardl" que devuelve un vector
% con la señal a procesar,y el número de muestras de la señal
Leart.m
global senal
frec T
% Definición de
variables
globales
cb_col= [ I 1000 1000000 1000000000];
% El vector"cb-col"contiene las magnitudesde
% rangos de frecuencia.
mag= cb-col(get(popco1,'Value'));
% Se
obtiene en "mag" el valor
de
"cb-col"
% correspondiente a la selección en "popcol"
frec=get(editcol,'string'); Oh Se obtiene la frecuenciaque introduce el usuario
frec=stC?num(frec);
frec=frec*mag;
T= 1Ifrec;
% Se calcula la frecuencia
O h y periodo de muestreo
set(popcol,'visible','off);
% Se elimina el texto y corltroles de la figura
set(editcol,'visible','off');
set(menl,'visible','off');
[senal,tamano]=guarcll(l);
% Se invoca a la función "guardl" quedevuelve un vector
% con la señal a /procesar,y el número de muestrasde la señal
101
APEINDICE
Limpiar.m
function limpiar
%FUNCIóN DONDE SE ELIMINAN LOS COMPLEJOS MATERNOS DE LA SEÑAL DE ECGa
global sena1 M fetal materno Iocs picos desp tramoi fetsen
T Y1 limm frec,
carnbio=O;
condl =locs(1)-(length(fetal)+length(matemo));
cond2=locs(length(locs))+length(fetal)+length(maternc1);
if condl<l I cond2 :' length(sena1) %Encaso de ser necesario, se agregan ceros
de
finalalamplia;
principio
%al
y
la señal
%para la eliminacibn
primer
dely
último complejo
cambio=l ;
T').
'amplia. %(proceso
end
total=length(locs)
[ol,Y1,L1,L2,MD1]~~extralv(locs,senal,length(fetal));
96Se invoca a la función 'extra1v.m'
%(eliminación delos complejos maternos).
if cambio==l %Si se agregaron tramos inicial y fina a la señal, se eliminan.
incre-(length(fetai)+length(matemo));
senal=senal((incrt?+l):length(senal)-incre);
ol=ol((incre+l):length(ol)-incre);
limm=limm-incre;
end
fetsen=ol:
hold on
%Se
obtiene
número
el
de muestras
para
tramo
el
tamano=length(fetsen);%de 2.5 seg que se presenta enla gráfica
tramoi=2,Yfrec;
trami=round(tramoi);
desp=uicontroi(gcf,'style','slider',
... %Control parael despiazamiento dela señal
'units','norlnalized,...
'pos1tion',[O. 1O 0.93 0.8 0.03],.
..
'min',1,'m;lx',tamano-tramoi,'value',
1,.. .
'callback,[...
'global fetsen tramoi,',...
'pos=gel(gco,"Value");',
...
'axis([round(pos) round(pos)+tramoi min(fetsen) max(fetsen)]);']);
ini=l;
¡¡=I;
set(gca,'nextplot','replace');
plot(fetsen,'b');
%Se
presenta
gráfica
de
la
los primeros
set(gca,'xlim',[iniii*tramoi]);%2.5segde
la señal
sin
complejos
maternos.
set(gca,'ylirn',[min(fetsen)
max(fetsen)]);
set(gca,'color',[l 'I I],'xcolor',[O O O],'ycolor',[OO Ojj;
hold on
xlabel('muestras','color','k');
ylabel('magnitud','color','k');
hold on
102
APENDICE
Limpiar.m (continuación)
%%%%%%%%%%%%%%%%%%%%%%%
filbot=uicontrol('visible','on','position',[450
80 80 201,. . . %Control "Pasabanda"
%(fltrado
pasabanda)
'string','Fasabanda.',. . .
%%%%%FUNClÓN DEL COIVTROL "PASABANDA%%%%%
'callback',['globalfetsen despfrec,',...
'delete(desp);',...
'delete(gco);',.. .
'pbanda(fetsen);']); %Se invoca a la función 'pbanda.m'
103
APENDICE
function matfi
%PROCESO PARA GENERAR EL PATRON MATERNO
global lirnat sena1 matemo limm
m1 l=limat(l);
m12=limat(2);
%de
cada
uno
m21=limat(3);
m22=limat(4);
m31=limat(5);
m32=limat(6);
%Posición
inicial
y final
de los
complejos
seleccionados.
%Se calcula la mitad de cada uno de los complejos
centl=fix((mll+ml2)./2);
matl=senal(mIl:ml2);
Il=length(matl);
12=length(mat2);
13=length(mat3);
1=[1112131;
[I,lmax]=max(l);
%De acuerdo ai complejomás largo se calculan nuevamente los límites
if Imax==l
mitad-centl-mll;
m21=cent2-mitad;
m22=cent2+mitad;
m31=cent3-mitad;
m32=cent3+mitad;
ml2=centl+mitad;
elseif Imax==2
mitad=cent2-m21:
m1l=centl-mitad;
ml2=centl+mitad;
m31=cent3-mitad;
m32=cent3+mitad;
m22=cent2+mitad;
else
mitad=cent3-m31;
m1l=centl-mitad;
ml2=centl+mitad;
m21=cent2-mitad;
m22=cent2+mitad;
m32=cent3+mitad;
end
1O4
APENDICE
Matfi.m (continuacion)
matl=senal(mll:ml'2);
mat2=senal(m21:m22);
mat3=senal(m31:m32);
Il=length(matl);
12=length(mat2);
13=length(mat3);
1=[11 12 131;
%SE CALCULAN NIJEVAMENTE LOS LíMITES ALINEANDOLOS DE ACUERDO A LAS MÁXIMA CORRELACIóN
limmo=[mll,ml2,m21,m22,m31,m32];
limm=alinea(senal,limmo);
%Se invcca la funcion 'a1inea.m'
mll=limm(l);
m12=limm(2);
m21=limm(3);
m22=limm(4);
m31=limm(5);
m32=limm(6);
matl=senal(mll:m12);
mat2=senal(m21:mi!2);
mat3=senal(m31:m32);
%Se presenta la grhfica de los 3 complejos seleccionados.
fig2=figure('NumberTitle','off','Name','Complejos Matemos');
grafl=subplot(2,1,1),plot(matl,'color',(.5
.3O]);
hold on,plot(mat2,'r');
plot (mat3,'color',[.2,.8 O]);
grid
posgrfl =get(grafl,'pos'),
set(grafl,'pos',[posgrf1(1)-.05
posgrf1(2)+.02 posgrfl(3)-.13 posgrfl(4)]),
tex=['Complejos matemos'];
gca
title('Comp1ejosmatemos','color','k');
boton=uicontrol('string','Continuat,
,...
'Pos',[430 30 100 201,. . .
'callback','close(gcf)');
materno=matl+mat2+mat3;
matemo=materno/3
%Control "Continuar"
%Se cierra la ventana.
OhSe obtiene el promedio de las 3 señales
Il=length(matemo);
%Se agregan tramos de señal antes y después de czda complejo
Il=round((ll*5O)/100);
105
Matfi.m (continuación)
matl=senal(mll:rnl:2);
mat2=senal(m21:m22);
mat3=senal(m31 :m32);
limm=[rnll m12m21m22m31m321;
matemo=matl+mat2+mat3;
materno=matemo/3;
centra(l1,l);
%Se obtiene el promediode las 3 señales
%Se inVOca a la función 'centra.m',para
obtener
los
límites finales
del
patrón.
1O6
APENDICE
Matfwav.m
%PROGRAMA PRlhlCIPAL PARA ELIMINAR LA SEÑAL MATERNA
%DE LA SEÑAL ABDOMINAL POR WAVELETS
clf
%$Limpia todas las variables.
clear all
O h Limpia todas las variables globales
clear global
echo off
% Definición devariablesglobales
global original senlinl xx lfin materno fetal M locs picos sena1
clear all
clear global
close(gcf)
% Limpia todas las variables.
% Limpia todas las variables globales
O h la
Sierra ventana actual
pos=[O, 0.5, 0.5, 0.5:!;
% Se define el vector "PO:$
figl =figure('NumberTitle','off','Name','Señal
Abdominal',...%Se define la figura "figl"
'color',(0.80.8 0.81);
encabezado. %y su
uicontrol( . . .
'Style','frame', ...
de
'Units','normalind', ...
(.35-.05)+2*.02],
., .
'Position',[.O502 .05-.O2 (.75-.05)+2*.02
'BackgroundColor',[O,500.50 0.501);
% Definición de un cuadro
% para el texto y controles
O h dentro
la figura
mensaje=uicontrol('style','text','position',[40
90 350 501,...
% Definición del texto.
'string','Programapara eliminar la señal matema de la señal abdominal por wavelets.'):
entrada-. uimenufgcl,'label','Abrir
Archivo');
Oh
Definición del menu "Abrir Archivo".
entr=uimenu(entrada,'label','Archivo
Texto','CallBack','defrel');
entrl =uimenu(entrada,'label','ArchivoBinario','CallBack','elefre2');
% Definición del submenú %
"Archivo Texto".
% Se llama a la rutina
%"elefrel"
Definición del submenu %
"Archivo Binario".
% Se llama a la rutina
%elefre2
Oh
1o7
Mayor1vf.m
function [y,a,dl,des,loc,11,12,mindes,ul]=mayorlvf(xmin,mul,lonfet,ultlib);
global M contpat patpos msdes,
w=length(M(l,:));
band=O;
%%%%%%%%%%%%
lonmat=w-(2*lonfet);
Ito=lonfet+lonmat;
%%%%%%%%%%%%
[s,d]=max(abs(M(\rv-lonfet+2,:)));
%Cadauno de los complejos
LIl=d-1;
con
alinea
%se
el
materno
patrón
R de este,
L22=~-d;
acuerdo
%de
onda
a la
%y se calcula el punto de máxima
%correlación.
los
tl=mul(xmin-Ll I:)tmin+L22);
dealinean
uno
%Se
cada
cor=xcorr(tl,M(w-lonfet+2,:));
patrón el%complejos
con
acuerdo
[f,g]=max(cor);
%de
acorrelación,
la máxima
coeficientes
%y selosobtienen
de
muesl =w-g;
tl=mul((xmin-L1l)+muesl:(xmin+L22)+muesl);%decorrelacióncruzada
al=min(min(corrcc~f((M(w-lonfet+2,lonfet:lto)),tl(lo~fet:lto))));
h l 1=(xmin-L1l)+muesl;
h22=(xmin+L22)+1nuesl;
restal=(mul(hlI:h22))-M(~-lonfet+2,:);
z l l=std(restal(l:lonfet));
z22=std(restal(lonfet:lonfet+lonmat));
z33=std(restal(lonfet+lonmat:iength(resta1)));
desl
=zl I*z22'z3:3;
%Se
calcula la desviación
estándar dediferencia
la
de
%de cada complejo con el patrón materno.
if -isempty(ultlib),
mdes=mean(ultlib);
sdes=std(ultlib);
if desl<=(mdes+sdes),
%Si se trata de un complejo no conflictivo,
band=l ;
%se almacena la desviación estándar
contpat=contpat+l;
msdes=[msdesdesl];
%delresultado de la diferencia
%entre el patrón y el complejo materno
patpos=[patpos h l 1 h221;
end
end,
if band==O,
. . . . . . . . . . . . . . . . . . . . . . . .
y=l;
a=al,
dl=restal ;
des=desl ;
loc=w-lonfet+2;
Il=hll;
12=h22:
mindes=desl;
ul=ultlib;
. . . . . . . . . . . . . . . . . . . . . . . . .
108
APENDICE
Mayor1vf.m (continuacion)
else,
y=l;
a=al;
dl=restal;
des=desl;
loc=w-lonfet+2;
Il=hli;
12=h22;
mindes=desl;
ul=[ultlib desl];
end
%Si se han encontrado 5 complejos no conflictivos
%se seleccionan los 3 que presenten una menor
%desviación estándar enla diferencia (resta) con el patrón
%y con estos complejos se obtiene un nuevo patrón.
if contpat==5,
contpat=O;
[f,g]=rnin(rnsdes);
prirn=g.*2;
msdes(g)=inf;
[f,g]=min(rnsdes);
segu=g.*2;
rnsdes(g)=inf;
[f,g]=rnin(msdes);
terc=g.*2;
patmatl=mul(patpos(prim-1):patposjprim));
patmat2=mul(patpos(segu-l):patpos(segu));
patmat3=rnul(patpos(ter~-l):patpos(terc));
cte2=5;
nuevo=O:l:(cte2-1::;
nuevo=nuevo./cte>!;
1,(Ionmat-IO))];
tra=[nuevo( 1) nuevo(2) nuevo(3) nuevo(4) nuevo(5) ones(
tra=[tra nuevo@) nuevo(4) nuevo(3) nuevo(2)nuevo(l)];
norma=[zeros(1,lonfet) tra zeros(1Jonfet)];
patmatl =patmat1."norma;
patmat2=patmat2."norma;
patrnat3=patmat3."norma;
prn=patmatl+patmat2+patmat3;
pm=prn./3;
M(~-lonfet+2,:)=pnl(I,:);
patpos=[l;
msdes=[];
end
1o9
function mwint(ori);
%FUNCIóN QUE INTEGRA LA SEÑAL
%CON UNA VENTANA DE INTEGRACIóN
%DE 60ms.
global ecgint trai despli fetl fet2 fet3 T Ivi a frec,
%Se integra la señal.
%%%%%%%%%%%%%%%%%%%%%%%%%%~~Q%%
ventana450e-3;
ventana=ventana/T;
N=ceil(ventana);
N=rnax([length(fetl) length(fet2) length(fet3)l)
N=60e-3;
N=round(N/T);
a=N;
b=ones(1,N);
ecgint=filter(b,a,ori);
%Se utiliza la función 'filter m '
Ivi=N;
%para integrara la señal.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tama=length(ecgint);
trai=round(2,5*frec);
despli=uicontrol(gcf,'styie','slider',
... %Control de desplazamiento de la señal,
'units','norrnalized',. . .
'position',[O 1O 0.93 0.8 0.031,.. ,
'min', 1,'max',tama-trai,'value',l
, .. .
'callback',[..,
'global ecgint trai,', . . .
'pos=get(llco,"Value");~,
,,,
'axis([round(pos) round(pos)+trai min(ecgint) max(ecgint)]);']);
%Se presenta la gráfica de la señal.
in¡=1;
¡¡=I;
set(gca,'nextplot','replace');
plot(ecgint,'b);
set(gca,'xlim',[ini ii*kai]);
set(gca,'ylim',[min(ecgint)
max(ecgint)]);
set(gca,'color',[l 1 'l],'xcolor',[O O O],'ycolor',[O O O]);
hold on
xlabel('muestras','color','k');
ylabel('magnitud','color','k');
hold on
110
APENDICE
Mwint.m (continuación)
%%%%%%%%%~h%%%%%%%%%%%%%
picobot=uicontrol('viaible','on','position',[450
80 80 201,.. %Control "Ondas R"
'string','Ondas R.',...
'callback',['globalecgint despli a,',,..
'delete(gco);',. . .
'delete(despli);',. . .
'polpif(s:cgint,a);']); %Se invoca a la función 'po1pif.m'.
. . . . . . . . . . . . . . . . . . . . . . . .
111
AF'EldDICE
Patfet.m
function patfet
%PROCESO DE SErLECClÓN DE 3 COMPLEJOS FEiTALES SIN TRASLAPAMIENTO.
global sena1 lifet i j in tramo f ff
tam=length(senal);
sena=senal;
in=l;
¡=I;
jZ-1.
tramo=round(3*frec);
%Se
obtiene
número
el de
muestras
%para un tramo de 3seg. de señal
figNumber=figure(...
'Name','Seleccióndel patron
fetal.'.
'NumberTitle','off, ...
'Visible','off', ...
'UserData',[l], ...
'position',[120 100 560 4201);
,._
%Se
abre
una
ventana
%para la gráfica de la señal
ejesl-axes( . .
'Units','normaliz:ed',...
'UserData',[ I],
, ,
'Position',[O.IO 0.20 0.800.701);
,
graf=plot(in:i*tramo,:senal(in:i*tramo));
set(graf,'UserData',[l]);
set(ejes,'userdata',['l]);
uicontrol( .. .
'Style','text', ,.,
'Position',[50 40 150 201, ...
'BackgroundColor',[0.80.8 0.81,
'ForegroundColor',[O O O], ...
'HorizontalAlignment','left', , , ,
'UserData',[l], ...
'String','iDesea ver mas señal?');
%Se presentala gráfica de
%los ptimeros 3seg. dela señal
%Se presenta la pregunta
%'¿Desea ver mas señal?'
botno=uicontrol('pos~ition',[50
20 60 20],'string',...
% Sepresenta la opción 'No'.
'No','callback',[...
'global in i tramo lifet j f ff,',,,,
J=]+2;',. ..
' ifj==7'
>
%Si se
han
seleccionado
complejos
3
se
cierra
la ventana
'
close(gcf);' , . .
' else,'....
%Si
seleccionado
han
seno complejos
3
'
f=l;',..
invoca
%se
a
la función 'segmentam' para
'
ff=2;', ...
%seleccionar
complejo.
un
'
segmenta(in,i*tramo);',...
' end,']);
I
'
I
I.''
112
APENDICE
Patfet.m (con,tinuación)
botsi=uicontrol('position',[l20
20 60 20],'string',...
%Se presenta la opción 'Si'
'Si','callback',[...
'global i in tramo senal,',...
'in=i*tramo;',...
%Se presenta en la ventana la gráfica de
'¡=¡+I;',. . .
%los siguientes 3seg
'plot(in:i*tramo,!;enal(in:i*trarno));']);
set(figNumber,'Visible'.'on'):
113
APENDICE
Patmat.m
function patmat
%PROCESO DE SELECCIóN DE 3 COMPLEJOS MATERNOS SINTWSLAPAMIENTO.
global sena1 h a t i :Iin tramo f ff frec
tam=length(senal);
sena=senal;
in=l;
¡=I;
jZ.1.
trama=round(3*freq;
%Se
obtiene
el
númer:, de muestras
%para un tramo de 3seg. de señal
figNumber=figure( ...
'Name','Selecc:ión de lospatronesmatemos(3).',
'NumberTitle','off', ...
'Visible','off', ...
'UserData',[l], ...
'position',[ 120 1O0 560 4201);
...
%Seabreunaventana
%para la gráfica dela señal
ejes=axes( . . .
'Units','normali;led', ...
'UserData',[Z], ..
'Position',[O.lO0.20 0.80 0.701);
graf=plot(in:i*tramo,senal(in:i*tramo));
set(graf,'UserData',Il]);
set(ejes,'userdata',[11);
uicontrol( ...
'Style','text', ...
'Position',[5040 150 201, . . .
'BackgroundColor',[0.80.8 0.81, ..
'ForegroundColor',[O O O], .. .
'HorizontalAligl?ment','left',.. .
'UserData',(l], ...
'String','¿Desea vermas señal?');
%Se presentala gráfica de
%losprimeros 3seg. dela señal
%Se presenta la pregunta
%'¿Desea ver mas señal?'
botno=uicontrol('position',[50
2060 20],'string',..
% Se presenta la opción'No'.
'No','callback',[...
'global in i tramo limatj f ff,',...
' j=j+2;', . . ,
' ifj==7 ,'
%Si se hanseleccionado3complejossecierra
la ventana
'
close(gcf);',. , ,
' else,',...
%Sihan
seleccionado
se
no complejos
3
f=l;',,..
%se
invoca
a
la funciim
'segmenta.m'
para
'
ff=l;',...
%seleccionar
complejo.
un
'
segmenta(in,i*tramo);',..
'end,']);
,
1"'
I
114
APFNnlCF
Patmat.m (continuación)
botsi=uicontrol('pos1tion',[l20
20 60 20],'string',. . .
%Se presenta la opción 'Si',
'Si','callback',[...
'global i in tramo senal,',...
'in=i*tramo;',...
%Se presenta en la ventana
gráfica
la de
'¡=¡+I;',,,.
%lossiguientes 3.939.
'plot(in:i*tramo,~~enal(in:i*tramo));']);
set(figNumber,'Visitlle','on');
115
A,PENDICE
Pbanda.m
global ecglim trai despli fetsen frec,
%Coeficientes de 121ecuación de diferencias
%del filtro pasa bajas
a=[1 -2 I];
b=[l O O O O O -2O O O O O I];
ecglim=filter(b,a,ecgcon);%Filtrado de la señal
ecgcon-ecglim;
%Coeficientes de la ecuación de diferencias
%del filtro pasa altas
a=[1 I];
b~[-lOOOOOOOOOOOOOOO32OOOOOOOOOOOOOOOI]~
ecglim=filter(b,a,ecgcon);
%Filtrado de la señal
fetsen=ecglim;
tama=length(ecglim);
trai=round(2,5*frec);
despli=uicontrol(gcf,'style','slider',,..
%Control de desplazamiento de la gráfica
'units','norrnalized',...
'position',[O. 1O 0.930.8 0.03],,. .
'min',l ,'max',tama-trai,'value',1,.. .
'callback',(...
'global ecglim trai,',...
'pos=get(gco,"Value");',. . .
'axis([round(pos)round(pos)+trai min(ecglir1) max(ecglim)]);']);
%Se presenta la gráfica dela señal filtrda.
ini=l;
¡¡=I;
set(gca,'nextplot','replace');
plot(ecglim,'b');
set(gca,'xlim',[ini ¡¡'%ai]);
set(gca,'ylim',[min(ecglim)
max(ecglim)]);
set(gca,'color',[l 1 l],'xcolor',[O O O],'ycolor',[OO O]);
hold on
xlabel('muestras','c:olor','k');
ylabel('magnitud','c:olor','k');
hold on
116
APENDICE
Pbanda.m (continuación)
%%%%%~%%%%%%%%%%%%%%~~oO~~~
deribot=uicontrol('visible','on','position',[450
80 80 201,. . . %Control "Derivar"
'string','Derivar.',...
'callback',['globalecglim despli,',...
'delete(despli);',. . ,
'delete(gco);',...
'derivar(ecglim);']);%Seinvoca a lafunción'derivar.m'
117
APENDICE
function pini(ecgint,a,senti);
%FUNCIóN QUE E3USCA LOS POSIBLES COMPLEJOS FETALES
%EN LOS PRIMEROS 3 SEGUNDOS DE LA SEÑAL.
global fetsen IviT ecgder I p continua popibot quipibot grafpic se ejes a senti,
se =senti;
%Si la onda R del complejo fetal
%es negativa, se invierten la señal
%de ECGa y la señal resultante dela integración
if se==l
fetsen=fetsen*(-I);
ecgder=ecgder*(-'I);
end
ecgder=ecgder(:);
ecgder=ecgder';
ecgint=ecgint(:);
ecgint=ecgint';
fetsen=fetsen(:);
fetsen=fetsen';
t=T;
refra=100e-3;
refra=refra/t;
refra=ceil(refra);
%Se seleccionan los primeros 3 seg. de la señal
vent=3/T;
vent=ceil(vent);
Ion3s=vent;
vent=fetsen( :vent);
1
offset=min(vent);
vent=vent+abs(offset);
~ent=vent.~2;
%Se
cuadrado
eleva
al todas
las muestras
%de los primeros3seg. deseñal, y se buscan
umbral=3*(mean(vent));
(p,I]=pkpicker(vent,umbral)%los picos mayores a 3 vecesel valor medio
p=p"
%de todos
sección
esta
puntos
en
de la señal
l=l';
p=fetsen(l);
if length(p)<=l
%Si no se encuentran por lo menos 2 picos
umbral=1.5*(mean1:vent));
%elumbraldedetecciclnsereduce
a la mitad
[p,l]=pkpicker(vent,umbral)
p=p"
(=I'.
p=fetsen(l);
end
if se==l
fetsen-fetsen*(-I);
ecgder=ecgder*(-I);
end
Pini.m (continuación)
%Se presenta una nueva ventana.
picgr=figure('NumberTitle','off','Name','Selección
del periodo inicial,');
ejes=axes( . . .
'Units','normalized', ...
'box','on',, , .
'drawmode','f~rst',..,
'Position',[O.lO0.2 0.80.751);
%Se presenta la gráfica de los primeros 3 seg. de la señal
graftmp=plot(fetsen(I:lon3s));
mensaje=uicontrol(gcf, ... %Se presenta un mensaje escrito en la ventana.
'BackgroundColor',[0.80.8 0.81,...
'Style','text','Pos',[30
40 350 201,...
'ForegroundColor',[OO O], ...
'String','Seleccione la localización de los dos primeros patrones.', 'visible','on');
%%Función del control "Continuar"%%
cod=[.. .
'global picgr se senti p I a ecgint mensaje graftmp ejes continua,',...
'close(gcf);',, . .
'encon(ecgint,a,senti,p,I);'];
%Se invoca a la función 'enc0n.m'
%búsqueda de los complejos en la señal resultante de la integración
continua=uicorltrol(gcf, ... %Control "Continuar".
'BackgroundColor',[O O O], , . .
'Style','pushbutton','Pos',[400
20 100 20],..
'ForegroundCc4or',[I1 I ] , ...
'String','Continuar', 'visible','on',...
'callback',cod);
%Se presenta el control de la función "Agregar un 3ico" %
%donde
se
invoca a la función 'qppfm'
%
popibot=uicontrol(gcf, ...
'BackgroundColor',[OO O], ...
'Style','pushbutton','Pos',[300
20 100 201, ...
'ForegroundColor',[l 1 I], ...
'String','Agregar un pico', 'visible','on',. . .
'callback','global se senti a continua I p popibot quipibot grafpic,qppf(1,1)');
%Se presenta el control de la función "Quitar un pico" %
%donde
se
invoca a la función 'qppfm'
%
quipibot=uicont?ol(gcf,, , ,
'BackgroundColor',[O O O], . . .
'Style','pushbutíon','Pos',[200
20 100 201,...
'ForegroundColor',[l 1 I ] , .,.
'String','Quitar un pico', 'visible','on',...
'callback','global se senti a continua I p popibot quipibot grafpic,qppf(1,2)');
if senti==l
p=-I*p;
end
hold on
grafpic=plot(l,p,'*r');
%Se presentan en la gráfica los picos encontrados
%en los primeros 3 segundos de señal.
119
AF'ENDICE
Po1picam.m
function polpicam
%PROCESO PARA SELECCIONAR LA POLARIDA[)
%DEL COMPLEJO MATERNO EN LA SEÑAL
global h a t lifet se posbot negbotpicgr mensaje sena1 materno ejes graftmp continua
filabsj=senal;
length(fi1absj)
picgr=figure('NumberTitle','off,'Name','Deteccióonde Picos.'); %Se presenta una nueva ventana
ejes=axes( . . .
'Units','normali;red', ...
'Posit¡on',[G.l30.25 0.79 0.6951);
graftmp=plot(matemo);
%Gráfica
patrón
del
materno
mensaje=uicontrol(gcf, ,. .
%Se
presenta
un
mensaje
escrito
'BackgroundColor',[O.80.8 0.8]s...
'Style','text','Pos',[130
60 250 201,...
'ForegroundColor',[O O O], ...
'String','Laonda R del complejo materno es...', 'vlsible','on');
posbot=uicontrol(gcf, . . . %Botón que define la polaridad positiva del complejo
'style','radio',. . .
'BackgroundColor',[0.80.8 0.81,...
'ForegroundColor',[OO O], . . .
'string','Positiva',. , .
'position',[l50 40 100201, . . .
'callback,[...
'global filabsj se posbot negbot,',. . .
'set(negbot,"value">O);'..,
'se=O;']);
negbot=uicontrol(gcf, ... %Botónquedefinelapolaridadnegativadelcomplejo
'style','radio',. ..
'BackgroundColor',(O.80.8 0.81,.. .
'ForegroundColor'.[O O O]. . . .
'string','Negativa',. . .
'position',[l50 20 'I00 201, . . .
'callback',[.. .
'global filabsj se negbot posbot,',. . .
'set(posbot,"valLle"~O);'
...
'se=1;'I);
%%Función del conlrol "Continuar"%%
cod=[.. .
'global picgrse posbot negbot mensaje graftmp ejescontinua.',
..
'if get(posbot,"value")==O& get(negbot,"value")==G,',.
' errores("Se1eccione una opción.");',. . .
' figure(picgr);',...
120
APENDICE
Po1picam.m (continuación)
'else,',. . .
'set(gco,"callback","close(gcf);");',
...
'set(ejes,"visible","off");',..,
'set(graftmp,"visible","off");',..
'set(posbot,"visible","off");', ...
'set(negbot,"visible","off");',...
'set(mensaje,"visible","off");', . . .
'detpicam(se,O,O);',... %Se invoca la función 'detpicam.m'
'end,'];
continua=uicontrol(gcf, . . . %Control"Continuar"
'BackgroundColor',[OO O],, , ,
'Style','pushbutton','Pos',(400
20 100 201,...
'ForegroundColor',[l 1 I ] , ...
'String','Continuar', 'visible','on',...
'callback',cod):
121
Po1pif.m
function polpif(ecgint,a)
%FUNCIóN DONDE EL USUARIO SELECCIONA
%LA POLARIDAD DE LA ONDA R DEL COMPLEJO
%QRS FETAL
global h a t lifet ecgint a se posbot negbot picgr mensaje sena1 fetal ejes graftmp continua
filabsj=senal;
length(fi1absj)
picgr=figure('NumberTitle','off','Name','Señal
Fetal');
%Se presenta unanueva ventana.
ejes=axes( , , .
'Unlts','normalized, ...
'Position',[O.l3 0.25 0.79 0.6951);
graftnlp=plot(fetal);
%Se presenta la gráfica del patron fetal
%Se presenta un mensaje escrito.
mensaje=uicontrol(gcf, . . .
'BackgroundColor',[O.80.8 0.81,...
'Style','text','Pos',
[ 130 60 250 20],,
..
'ForegroundColor',[O O O ] , .. ,
'String','La onda R d e l complejo fetal es...', 'visible','on');
%Se presenta el boton que define como
%positiva a la onda R del complejo fetal
posbot=uicontrol(gcf, .,.
'style','radio', ...
'BackgroundColor',[0.8 0.8 0.81,.. ,
'ForegroundColor',[O O O],, , ,
'string','Positiva', ..,
'position',[l50 40 100 201, ...
'callback',[.. .
'global filabsj se posbot negbot,',., ,
'set(negbot,"value",0);'...
'se=O:']);
%Se presenta el botljn que define como
%negativa a la onda R del complejo fetal
negbot=uicontrol(gcf,...
'style','radio', ...
'BackgroundColor',[O.8 0.80.81,...
'ForegroundColor',/OO O], ...
'string','Negativa', ,. .
'position',[l50 20 IO0 201, ...
'callback',[. . .
'global filabsj se Inegbot posbot,',...
'set(posbot,"value",O);'.
,.
'se= 1;'I);
122
APENDICE
Po1pif.m (continuación)
%%Función del control "Continuar"%%
cod=[...
'global picgr se posbot ecgint a negbot mensaje graftmp ejes continua,',,.
...
'if get(posbot,"valve")==O & get(negbot,"value")==O~'
' errores("Se1eccione una opción
' figure(picgr);',...
'else,',. . .
'close(gcf);',. . ,
'pini(ecgint,a,se);',... %Se invoca a la función 'pinim'
'end,'];
.'I);',...
continua=uicontrol(gcf, ... %Control "Continuar"
'BackgroundColor',[OO O], ...
'Style','pushbutton','Pos',[400
20 100 201, ...
'ForegroundColor',[l 1 I ] , ...
'String','Continuar', 'visible','on',...
'callback',cod);
Prepr0.m
function y=prepro(x);
%PREPROCESAMIENTO
%CON FILTRO PASABANDA EQUIVALENTE
%REGRESA SEÑAI- FILTRADA Y NORMALIZADA
y=x./max(abs(x));
% Se normaliza la señal.
load coefi
y=filter(b,1,y);
% Se filtraseñal.
la
123
Qppf.m
function qppf(vez,bandera);
%ESTA FUNCIóN QUITA Y PONE PICOS SEGúN SE INDIQUE POR EL USUARIO
global se senti band continua I p popibot quipibot a ai3 b fetal fetsen grafpic eccgint
gca;
if vez==l
grid on
band=bandera;
set(popibot,'visible','off');
set(quipibot,'visible','off');
Oh Se define nuevalnentela función del control "Continua"
set(continua,'callback',('global
popibot quipibot ecginta se senti p I,', ...
'grid off,',...
'set(popibot,"visible","on");' , . . .
'set(quipibot,"visible","on");',,...
'set(gco,"callback","global
a ecgint se senti p l,close(gcf),',...
'encon(ecgint,a,senti,p,l);");']);
aa=[];
b=[l;
%%Se define la furtción del puntero al desplazarse por la ventana %%
%%de
forma
tal que
presionar
al
el
botón de ratón,
%%
%%se
ejecute
de nuevo la función 'Qppfm'
%%
set(gcf,'units','norrn,3lized','WindowButtonMotionFcn',[
.,.
'global aab I p band,',. . .
'aa=get(gcf,"currentpoint");',
...
'b=get(gca,"cu~entoint");',
...
' if aa(l)>O.lO & aa(1)<0,9 & aa(2p0.18 & aa(2)<0.93,',. . .
' set(gcf,"pointer","crosshair");',
...
' set(gcf,"WindowButtonDownFcn","global
a aa b bsnd I p,if band==l,qppf(2,l);else,qppf(2,2);end,");',
' else,',...
' set(gcf,"pointer","arrow");',
..
' set(gcf,"Windo~rButtonDownFcn","");',. . .
'end,']):
elseif vez==2
set(gcf,'pointer','arrow');
set(gcf,'WindowButtonMotionFcn',");
set(gcf,'WindowButlonDownFcn',");
%%Se agraga el pico más cercano al punto donde se colocó el cursor %%
if bandera==l
lon=length(fetal)./:?;
lon=round(lon);
locp=round(b(1));
yi=fetsen(locp);
124
APENDICE
Qppf.m (continuación)
inilocp=locp-Ion:
finlocp=locp+lon;
rango=fetsen(inilocp:finlocp);
if senti==l
rango=-l*rango;
end
[maximo,i]=max(~-ango);
locp=inilocp+i-I;
yi=fetsen(locp);
I=[I locp];
I=sort(l);
donde=find(l==locp);
rangol=p(l:donde-I);
rango2=p(donde:length(p));
p=[rangol y¡];
p=[p rango21;
hold on
set(grafpic,'visible','off);
hold on
grafpic=plot(l,p,'*r');
%%Se elimina el pico mas cercano al punto donde S'? colocó el cursor %%
elseif bandera==2
x=b( 1);
y=b(3):
resta=abs(l-x);
lug=find(resta==rnin(resta));
locq=l(lug);
sublocl=l:lug-I;
subloc2=lug+l:length(l);
I=l([sublocl subloc2]);
p=p([sublocl subloc2]);
hold on
set(grafpic,'visible','off');
hold on
grafpic=plot(l,p,'*r');
end
end
125
Quipopic.m
function quipopic(vez,bandera);
%ESTA FUNCIóN QUITA Y PONE PICOS SEGúN SE INDIQUE POR EL USUARIO
global se band desp continua locs picos popibot quipibot a b materno sena1 grafpic
gca;
if vez==l
grid on
band=bandera;
set(desp,'visible','off);
set(popibot,'visible','off);
set(quipibot,'visibls','off');
set(continua,'callback',['global
desp popibot quipibot,',... %Se define nuevamente la función
'grid off,',
...
%del control "Continua"
'set(desp,"visible","on");',
...
'set(popibot,"visible","on");',. ,
'set(quipibot,"visible","on");',
.. ,
'set(gco,"callback","close(gcf);");~])~
,
%%Se define la función del puntero al desplazarse por la ventana %%
%%de
tal
forma
que al presionar el botón de ratón,
%%
%%se ejecute de rluevo la función 'quipopic.m'
%%
set(gcf,'units','nomlalized','WindowButtonMotionFcn'~[
...
'global a b locs picos band,',, , ,
'a=get(gcf,"currentpoint");',...
'b=get(gca,"currentpoint");',
...
' if a(1)>0.10 & a(1)<0.9 & a(2p0.18 & a(2)<0.93,',...
' set(gcf,"pointer","crosshair");',
..
' set(gcf,"WindowButtonDownFcn","global
a b ban3 locs picos,if band==l ,quipopic(2,1);',...
else,quipopic(2,2);end,");'
,...
else,', ...
' set(gcf,"pointer","arrow");',
...
' set(gcf,"Windo\rvButtonDownFcn","");',
.. .
'end,']);
I
elseif vez==2
set(gcf,'pointer','arrow');
set(gcf,'WindowButtonMotionFcn',");
set(gcf,'WindowButtonDownFcn',");
126
APENDICt
Quipopicm (continuación)
%%Se agrega el picomás cercano al punto dondeSI! colocó el cursor %%
if bandera==l
lon=length(rnaterno)./2;
lon=round(lon);
locp=round(b(I));
yi=senal(locp);
inilocp=Iocp-Ion:
finlocp=locp+lon;
if finlocp>length(senaI);
finlocp=length(senaI);
end
rango=senal(inilocp:finlocp);
if se==l
rango=-I*rango;
end
[rnaximo,i]=rnax(rango);
locp=inilocp+i-I;
yi=senal(locp);
locs=[locs;locp];
locs=sort(locs);
donde=find(locs==locp);
rangol=picos(l:donde-I);
rango2=picos(dor~de:Iength(picos));
picos=[rangol;yi]
picos=[picos; rango21;
hold on
set(grafpic,'visible','off);
grafpic=plot(locs,picos,'*r');
%%Se elimina el pico más cercano al punto donde
se colocó el cursor %%
elseif bandera==2
x=b(l);
y=b(3);
resta=abs(locs-x);
lug=find(resta==min(resta));
locq=locs(lug);
sublocl=l:lug-I;
subloc2=lug+l:ler1gth(locs);
locs=locs([subloc'l subloc2],:);
picos=picos([sublocl subloc2],:);
hold on
set(grafpic,'visible','off');
grafpic=plot(locs,picos,'*r');
end
end
127
APENUICE
Rrpr0m.m
function [pics,Iocs]=~rom(pic,loc,pic1
,locl,t,senal)
%%FUNCIóN QUE BUSCA LOS COMPLEJOS MATERNOS EN LA SEÑAL DE ECGa %%
refra=300e-3;
refra=refra/t;
refra=ceil(refra);
tap=length(pic);
pics(l)=pic(l);
pics(2)=pic(2);
%Se inicializan los límites temporales de acuerdo a
%el periodo entre el primer y segundo complejo.
ave1
ave2=[]:
avel(l)=loc(2)-loc(l);
ave2(1)=avel(l);
avell=avel(l);
ave22=avelI;
rrll=0.85”avel( 1);
rrhl=1.25^avel(l);
rrll=floor(rrll);
rrhl=ceil(rrhl);
rrllm=refra
rrhlm=1.7*avel(l);
rrhlm=ceil(rrhlm)
=[I;
posi(l)=l;
posi(2)=2;
posil=[];
loc2=[];
km=l;
Ipos=[];
j=2;
cont= 1;
contcon=l;
contdes=O;
k=l;
kk=O;
ultloc=loc(j)
128
Rrpr0m.m (continuación)
%Se buscanlos prirneros 8 complejos matemos
%para inicializarlos límites temporales,
for i=2:8,
if (ultloc+rrhlm)<length(senal)
Ipos=find(loc>(ultloc+nll)& loc<(ultloc+rrhl))
%Se
realiza
búsqueda
la
utilizando
temporales. %limites
if -isempty(lpos),
[m,j]=max(pic(lpos(:)))
j=lpos(j)
avel=[avel (loc(j)-ultloc)];
%Si se enwentra algún
pico,
se
actualizan
%los promedios
de
los periodos RR.
avel
l=mean(avel);
ave2=[ave2 (loc(j)-ultloc)];
ave22=mean(ave2);
cont=cont+l;
contcon=contcolI+l;
contdes=O;
posicion=loc(j);
ultloc=loc(j)
else,
Ipos=find(loc>(ultloc+nllm)
& loc<(ultloc+rhlm))
%Si encuentra
se
no
ningún
pico,
%se incrementanlos limites de búsqueda.
if -isempty(lpos),
[m,j]=max(pic(lpos(:)))
j=lpos(j)
%Si se
encuentra
algún
pico,
se
actualizan
avel=[avel (lm(j)-ultloc)];
%losproredios de los periodos RR.
avel
l=mean(avel);
ave2=[ave2 (loc(j)-ultloc)];
ave22=mean(ave2);
posicion=loc(j);
ultloc=loc(j)
else
Ipos=find(locl>(ultloc+nllrn)
& locl<(ultloc+rrhlm)))
%Si no se encuentra ningún pico,
if -isempty(lpos)
%se utiliza un umbral menor parala búsqueda
[m,j]=max(p!cl(Ipos(:)))
j=lpos(j)
%!3encuentra
se algún
pico,
se actualizan
avel=[avel (locl(j)-ultloc)];
%los promedios de los periodos RR.
avel 1=mean(avel);
ave2=[ave2 (loco)-ultloc)];
ave22=mean(ave2);
posil (k)=j;
k=k+l;
kk=l;
posicion=Iocl (j);
ultloc=locl(j)
else
[m,j]=max(senal(ultloc+nlltn:ultloc+rrhlm))
encuentra
se%Si
no ningún
pico,
amplitud
mayor de pico
alconsidera
j=j+ultloc+nllm-I
%se
R.
onda avel=[avel
la %como
(j-ultloc)];
avel l=mean(avel);
los periodos RR
loc2(km)=j;
promedio
aclualiza
%Se
de
el
km=km+l;
kk=l;
posicion=j:
ultloc=j
end
129
APENDICE
Rrpr0m.m (continuación)
end
contcon=O;
contdes=contdes+l;
end,
if kk==O,
posi(length(posi)+l)=j
end
rrll=0.85*ave22;
rrhl=1.25*ave22;
rrhlm=l.7*ave22;
rrll=floor(rrll);
rrhl=ceil(rrhl);
rrhlm=ceil(rrhlm);
%Se actualizan lo:; limites temporales
Ipos=[];
kk=O;
end
end,
i=length(posi);
puo=ultioc;
%Se buscan los siguientes complejos en la señal
while (posicion+rrhlnl) < length(senal),
Ipos=find(loc>(puo+rrll)& loc<(puo+rrhl));
%Se realiza la búsqueda utilizando
if -isempty(lpos),
%límites temporales.
[m,j]=max(pic(lpos(:)));
j=lpos(j);
%Si se encuentra algún pico, se actualizan
avel=(avel(2:8) (loc(j)-puo)];
%los promedios de los periodos RR.
avell=mean(ave?);
if cont < 8,
ave2=[ave2 (lotc(j)-puo)];
ave22=mean(ave2);
cont=cont+l;
else
ave2=[ave2(2:8) (loco)-puo)];
ave22=mean(ave2);
end,
contcon=contcon+l;
contdes=O;
posicion=loc(j);
else,
Ipos=find(loc>(puo+nllm)& locc(puo+rrhlm));
%Si no se encuentra ningún pico,
%se incrementan los límites de búsqueda.
if -isempty(lpos)
[m,j]=max(pic(lpos(:)));
j=lpos(i);
%Si se
encuentra algún pico, se actualizan
avel=(avel(2:8) (loco)-puo)];
ave1 l=mean(avel);
%los promedios de los periodos RR.
posicion=loc(j);
130
Rrpr0m.m (continuación)
else
Ipos=find(locl>(puo+nilm) & locl <(puo+rrhlm));
%Si no se encuentra ningún pico,
if -isempty(lpos)
%se utiliza un umbral menor parala búsqueda
[m,j]=max(p~cl(Ipos(:)));
j=lpos(j);
%Si se
encuentra algún pico, se actualizan
avel=[avel(2:8) (locl(j)-puo)];
%lospromedios
de
los periodos RR.
avel 1=mean(avel);
pos¡1(k)=j;
k=k+l;
kk=l;
posicion=Iocl(j);
else
[m,j]=max(~~nal(puo+rrllm:puo+rrhlm)); %Si noencuentra
se
ningún
pico,
j=j+puo+rrllm-I;
considera
al %se
mayor
pico de
amplitud
R.
avel=[avel(:2:8) (j-puo)];
%como
onda la
avel l=mean(avel);
loc2(km)=j;
%Se actualiza el promedio de los periodos RR
km=km+l;
kk=2;
posicion=j;
end
end
contcon=O;
contdes=contdes+l ;
i f contdes >= 8,
%Si se encuentran 8 intervalos que estén
ave2=avel;
%fuera de los límites iniciales de búsqueda,
ave22=avell;
%se substituyen lcls promedios.
contdes=O;
end,
end,
if kk==O,
posi(i+l)=j;
puo=loc(posi(i+l));
¡=¡+I;
elseif kk==l
p~~=l~~l(pOSil(k-.l));
elseif kk==2
puo=j;
end
rrll=0.85*ave22;
%Se actualizan los limites temporales
rrhl=l.25*ave22;
rrhIm=1.7*ave22;
rrll=floor(rrll);
rrhl=ceil(rrhl);
rrhlm=ceil(rrhlm);
Ipos=[];
kk=O;
end,
posi;
P~~~=~~~~~posi(:));locl(posil(:));loc2(:)];
posi=sort(posi);
pics=senal(posi(:));
locs=posi;
131
Segmenta.m
function segmenta(inped,finped)
%FUNCIóN QUE DELIMITA LA ZONA DE UN COMPLEJO.
%La función recibecomo parámetros de entrada elini1:io y el final de un segmento de la señal.
global tam cox¡ coxf b ti tf sena1 pos
global a b p cox¡ co li limat lifet j f ff
figura=figure('Narne','Selección de complejo.', . , .
'NumberTitle','off,...
'position',[ 120 1O0 560 4201);
%Sepresentaunanuevaventana
ejes=axes( . . .
'Units','normalized, ...
'Position',[O.130.15 0.775 0.8251):
p=o;
co=[];
a=[];
b=I1;
cox¡=[];
coxf=[];
inicial=O;
final=O;
sobre
l a ventana,
define
%%Se
la función del puntero al moverse
%%Cuando el punter(:, está sobrela gráfica, se puede almacenarla posición al presionar elbotón &I
set(figura,'units','nomlalized','WindowButtonMotionFcn',[
...
'global a b p cox¡ coxf co li h a t lifet pos,',...
'a=get(gcf,"currentpoint");',
...
'b=get(gca,"currentpoint");',.
,.
'if p==l,',...
' set(co,"xdata",[coxib(1) b(1) coxi]);',,,,
' set(co,"EraseMode","xor");
hold on,',. . ,
' set(pos,"String",nurn2str(round(b(l))));',.,.
'else,',...
' if a(lp0.13 & a(l)<0.905 & a(2p0.11 & a(2)<0.925,',...
' set(gcf,"pointer","crosshair");',,.
' li=get(gca,"ylim");',...
' li=li*O.999;',. . .
' set(gcf,"WindowButtonDownFcn","global
co,set(co," 'visible"",""off"");',.,,
coxi=b(l);p=l;co=fill([b(l)
b(1) b(1) b(l)],[li(l) li(1) li(2) li(2)],[0.50 O]);");',,,,
' set(gcf,"WindowButtonUpFcn","p=O;co~=b(l);");',,.,
' set(pos,"String",numZstr(round(b(l))));',.,,
' else,',, . ,
' set(gcf,"pointer","arrow");',
...
' set(gcf,"WindowBLttonDownFcn","");',,..
' set(gcf," WindowButtonUpFcn","");',...
' set(pos,"String",'"');',, . .
' end,',...
'end,']);
%%
ratón ohoh
132
Segmenta.m (:continuación)
%Se presenta la gr2Aca del tramo de la señal
x=inped:finped;
graf=plot(x,senal(inped:finped));
hold on
grid
tamtoda=length(senaI(inped:finped));
tam=inped:finped;
inicial=O;
final=O;
x=[];
Y=[];
n=O;
lin=[];
estado=[];
but=l;
%Se presentan los objetos que indican laposición del Juntero.
uicontrol(gcf,'HorizontalAlignment','right', ,..
'BackgroundColor',[0.80.8 0.81,...
'Style','text','Pos',[30
20 50 201,...
'ForegroundColor',[O O O], , , ,
'String','Muestra:', 'visible','on');
pos=uicontrol(gcf,'HorizontalAlignment','left',
'BackgroundColor',[O.80.8 0.81,...
'Style','text','Pos',[80
20 70 201,...
'ForegroundColor',[O O O], ...
'String', '0 'visible','on');
%Control "Contindar"
boton=uicontrol(gcf, ...
'BackgroundColor',[O O O], ...
'Style','pushbutton','Pos',[350
20 100 201,...
'ForegroundColor',[ 1 1 I],
..,
'String','Continuar', 'visible'.'on',
...
' global tam limat lifet cox¡ coxf f ff j,',,,.
'if ff==l,', ...
' limat(j)=round(coxi);',,,,
' limat(i+l)=roundlcoxf):',,..
,
,,
'elseif ff==2,',
...
' lifet(j)=round(coxi);',...
' lifet(j+l)=round(coxf);',,,
'end,',...
I
%Límites de un complejo materno,
I
%Limites de un complejo fetal
133
Segmenta.m (continuación)
'if f==2,',...
' close(gcf);f=l;',...
'else,',...
%Si se ha seleccionado
complejo
un
%se cierra la ventana.
' hold off,',...
' close(gcf);',. ,
%Si se selsccionado
ha
tramo
un
' f=2;',...
invoca
nuevamente
%se
' if ff==l,',...
%para
seleccionar
complejo.
el
'
segmenta(limat(j),limat(j+l));',,..
' elseif ff==2,',...
'
segmenta(lifet(j),lifet(j+l));',
,
end,',. , ,
'end,']);
de la señal
la función 'segmenta.m'
,,
I
134
4PENDICE
T0das.m
%PROCESO QUE PRESENTA LOS PATRONES DE TRASLAPAMIENTO
%Y EL CONTROL PARA LA BúSQUEDA DE LOS COMPLEJOS MATERNOS EN LA SEÑAL
global sena1
vari=size(M);
libgr=figure('NumberTitle','off','Name','as');
ejes=axes( . , ,
'Units','nomalized',...
'Positioni,[0.130.25 0.79 0.6951);
PWM(I,:M;
%Sepresenta la gráficadel
Ohprimer patrón
traslapamianto
de
%Se presenta el menú "Selecciónde picos" para la búsqueda de los complejos matemos en la señal.
menupic=uimenu(gcl','label','Selección
de picos','callback','polpicam');
%Se invoca al proceso 'po1picam.m'
uicontrol('string','Gra'ficar',
... %Control "Graficar"
'Callback',[...
'global M van,',... %Se presentan en ur'a secuencia
'for i=l:van(l),',... %todos los patrones de traslapamiento
'
plot((M(i,:)));',,..
' drawnow,
'end,']);
I,.
.,
uicontrol('string','Cerrar','position',[lOO20 60 201,... %Control "Cerrar"
'Callback','close(gcf),');
% S cierra
~ ~ la ventana
135
Ven2.m
%PROCESO PARA COLOCAR NUEVOS MENUS EN LA BARRA DE HERRAMIENTAS DE LA FIGURA
global sena1 limat lifet materno fetal frec
m=get(gcf,'children':l;
%Búsqueda
limat=[];
liiet=ij;
lon=length(m);
for k= 1 :Ion;
tipos=get(m(k), 'type');
s='uimenu';
es=strcmp(tipos,s);
if es==l;
delete(m(k));
end
end
de todo los objetos
de
la
figura
%Se eliminan los menús actuales dela figura
datos='Userdata';
ret=uimenu('Label','Iniciar','CallBack','clear
all,close all,matfwav');%Menú para reiniciar el proceso completo
pat=uirnenu('Label','Patrones');
%Menú
generar
para
los patrones
%MenD d e l patón materno.
patl =uimenu(pat,'label','Materno');
pat2=uimenu(pat,'label','Fetal');
%Menú del patrón fetal.
patl 1=uimenu(patl ,'label','Selección','callback,,
, %Opción "Selección" del menú materno.
invoca
'patmat;');
%Se
al proceso 'patmatm'.
,
... %Olxión "Promedio" del menú materno.
patl2=uimenu(patl ,'label','Promedio','callback',
'matfi;');
invoca
%Se
al prweso 'matfi.m'.
pat21=uimenu(pat2,'label','Selección','callback',
... %OIxión "Selección" del menú fetal.
'patfet;');
invoca
%Se
al prcceso 'patfet.m'.
pat22=uirnenu(pat2,'label','Mejor
señal','callback',... %Opción "Mejor Señal" delmenú fetal
'fetalfi;');
'feta1fi.m'.
procesoal invoca
%Se
fp=gcf;
136
Descargar