Ecg en Matlab

download Ecg en Matlab

of 40

Transcript of Ecg en Matlab

INGENIERA BIOMDICA

DESARROLLO DE UNA INTERFACE GRFICA PARA UN ELECTROCARDIGRAFO PORTTIL

ALUMNA: MARA EUGENIA CALVA ROJASASESOR: DONACIANO JIMNEZ VZQUEZ

_________________________ Asesor Donaciano Jimnez Vzquez

________________________ Alumna Mara Eugenia Calva Rojas

Julio de 2008

NDICE

Introduccin. 1 Antecedentes 2 Creando una GUI en Matlab 3 Propiedades de los controles 3 Tipos de Objetos.. 4 Editor de Mens... 5 Objetivo 6 Descripcin de la inteface.... 6 Interface Grfica (ECG Porttil).......... 8 Resultados... 21 Comentarios.... 27 Conclusiones... 28 Anexo A...... 29 Bibliografa. 38

2

INTRODUCCIN La herramienta Matlab nos proporciona la posibilidad de aprovechar todo su potencial operativo pero con grficos orientados al usuario. Sin duda esto presenta una ventaja para usuarios que no tienen experiencia en trabajar con Matlab debido a la sencillez de la interface grfica. Por parte del programador, todas las funciones se pueden implementar en dichos entornos. Las variables o valores se pueden asignar a funciones a travs de botones, barras de desplazamiento, checkbox, etc. Y los resultados se pueden mostrar en un cuadro de textos, en una lista de valores o incluso en una grfica enmarcada de la propia interface. El propsito de este proyecto consiste en desarrollar una interface grfica para un electrocardigrafo porttil*. El cual cuenta con las siguientes caractersticas: 1. Adquisicin de la seal. Mediante una terminal de 3 electrodos conectados al paciente y a la placa mediante un cable trenzado. 2. Etapa de amplificacin analgica. Una de las partes ms destacadas, puesto que la seal que recibe es muy dbil y debe ser amplificada, evitando el ruido. 3. Funcionamiento del microcontrolador PIC18F452. Se ha elaborado un programa escrito en ensamblador para hacer la conversin analgica-digital de la seal del ECG y configurado la USART del PIC para enviar los datos a la PC. 4. Interfaz de comunicacin entre el PC y la placa. Se utilizo el protocolo de comunicacin RS-232. Dentro de las caractersticas indispensables de la interface se encuentran las siguientes: Fcil manejo. Contar con las instrucciones adecuadas en tiempo de ejecucin. Amigable para el usuario final. Con esto aseguraremos un manejo ptimo y adecuado del software.

3

ANTECEDENTES MATLAB es un lenguaje de alto desempeo diseado para realizar clculos tcnicos. MATLAB integra el clculo, la visualizacin y la programacin en un ambiente fcil de utilizar donde los problemas y las soluciones se expresan en una notacin matemtica. MATLAB es un sistema interactivo cuyo elemento bsico de datos es el arreglo que no requiere de dimensionamiento previo. Esto permite resolver muchos problemas computacionales, especficamente aquellos que involucren vectores y matrices, en un tiempo mucho menor al requerido para escribir un programa en un lenguaje escalar no interactivo tal como C o Fortran. MATLAB se utiliza ampliamente en: Clculos numricos Desarrollo de algoritmos Modelado, simulacin y prueba de prototipos Anlisis de datos, exploracin y visualizacin Graficacin de datos con fines cientficos o de ingeniera. Desarrollo de aplicaciones que requieran de una interfaz grfica de usuario (GUI, Graphical User Interface). En el mbito acadmico y de investigacin, es la herramienta estndar para los cursos introductorios y avanzados de matemticas, ingeniera e investigacin. En la industria MATLAB es la herramienta usada para el anlisis, investigacin y desarrollo de nuevos productos tecnolgicos. La ventaja principal de MATLAB es el uso de familias de comandos de reas especficas llamadas toolboxes. Lo ms importante para los usuarios de MATLAB es que los toolboxes le permiten aprender y aplicar la teora. Los toolboxes son grupos de comandos de MATLAB (archivos M) que extienden el ambiente de MATLAB para resolver problemas de reas especficas de la ciencia e ingeniera. Por ejemplo, existen toolboxes para las reas de Procesamiento Digital de Seales, Sistemas de Control, Redes Neuronales, Lgica Difusa, Wavelets, etc. Acerca de GUIDE Las interfaces grficas de usuario (GUI-Graphical User Interface en Ingls), es la forma en que el usuario interacta con el programa o el sistema operativo de una computadora. Una GUI contiene diferentes elementos grficos tales como botones, campos de texto, mens, grficos, etc. Existen diferentes lenguajes de programacin que permiten crear una GUI tales como: C, Visual Basic, TK, etc., solo por mencionar algunos. Todos ellos permiten usar diferentes controles y maneras de programarlos, Matlab nos permite realizar GUIs de una manera sencilla usando GUIDE (Graphical User Interface Development Enviroment).

4

Creando una GUI en Matlab Una de las tantas herramientas con las que cuenta Matlab, es la creacin de GUIs. La forma de implementar las GUI con Matlab es crear los objetos y definir las acciones que cada uno va a realizar. Al usar GUIDE obtendremos dos archivos: Un archivo *.FIG: Contiene la descripcin de los componentes que contiene la interfase. Un archivo *.M: Contiene las funciones y los controles del GUI as como el callback. Un callback se define como la accin que llevar a cabo un objeto de la GUI cuando el usuario lo active. Para ejemplificarlo, suponga que en una ventana existe un botn el cual al presionarlo ejecutar una serie de acciones, a eso se le conoce como la funcin del callback. Iniciando GUIDE Para crear una GUI en Matlab tecleemos guide en la ventana de comandos de Matlab. Seleccionaremos la opcin Default GUI. Figura 1

Figura 1.

En la pantalla se aparecer la un rea de diseo similar a la de la Figura 2.

5

Figura 2.

En la parte superior se encuentran los mens y opciones de GUIDE, en la parte izquierda se aprecian los diferentes controles y en la parte central el rea de diseo donde pondremos los controles a usar. Propiedades de los controles: Las propiedades varan dependiendo del control a usar, a continuacin se explican las ms comunes (Figura 3): Background Color: Cambia el color del fondo del control. Callback: La propiedad ms importante del control, ya que le dice al control que hacer cuando este se active. Enable: Activa o desactiva un control String: En el caso de botones, cajas de texto, texto esttico; es el texto que muestra el control. Tag: Otra de las propiedades ms importantes ya que con este es posible regresar datos o identificar al control.

Figura 3.

6

Tipos de Objetos:

Activar Adquisicin Procesar ECG Identificar complejos QRS Desplegar FFT Para seleccionar que ventana de grfico quiero limpiar; la de ECG o FFT. Para desplegar el valor calculado de VFC Para visualizar todas las muestras del registro en la ventana. Para enmarcar los objetos con funciones relacionadas. Para colocar el nombre de la ventana de adquisicin. Editor de MensNuevo Submen Nombre que aparece en la interface

Nuevo men

Nombre que se maneja en el cdigo de programacin

7

Objetivo: Este proyecto es la continuacin de la tesis Electrocardigrafo Porttil*. El objetivo es el desarrollo de una interface grfica en Matlab para este electrocardigrafo porttil, la cual debe ser confiable, clara y amigable para el usuario: Descripcin de la Interface Invocacin de la portada de presentacin del ECG

Inicia la inteface del ECG porttil

Nueva adquisicin

(Cargar/Guardar) Adquisicin

Procesar adquisicin

Inicializacin del objeto (puerto) para la adquisicin

Definicin del men de opciones (Cargar/Guardar)

Definicin de los objetos para el procesamiento

Definicin de caractersticas: -Tipo de puerto -Nombre del puerto -Modo de adquisicin -Tamao del buffer de entrada

Definicin de los tipos de archivos que se pueden cargar (Load) y Guardar (Save). Tipo de extensiones y direcciones donde se leern los archivos en el Load y donde se almacenarn en el Save.

Se emplearn botones para activar las funciones, ejes para desplegar grficos y cuadros de texto esttico para desplegar valores obtenidos del procesamiento.

*

Jimnez Santiago Gonzalo, Meja Gonzlez Jaime. Electrocardigrafo Porttil. Tesis Lic. Ing. Biomdica UAM-I 2007

8

Adquirir un nuevo registro o El usuario elegir el tiempo de adquisicin con un tiempo lmite de 10 minutos. o Procesar el nuevo registro Cargar un archivo de datos (Registro de ECG) con extensin *.dat. o Desplegar la grfica en pantalla o Procesar la seal como si hubiera sido recin adquirida Guardar archivos o Se guardar en un archivo el registro de la seal como una tabla de nmeros. o Se podr guardar la pantalla desplegada en un archivo de imagen con extensin *.bmp. Procesamiento de la seal o Filtrado de la seal (para eliminar la mayor cantidad de interferencia posible) o Reconocer los complejos QRS a travs de un filtro tipo ventana o Graficar la Transformada Rpida de Fourier (FFT) o Calcular la Variabilidad de la Frecuencia Cardiaca (VFC) Con el editor de Mens construimos el que ser necesario para llevar a cabo las siguientes funciones: o Load: Carga un archivo que contenga datos que puedan graficarse o procesarse. o Save: Pantalla: Guarda un archivo con *.BMP con la imagen actual en la interface. Datos: Guarda un archivo *.DAT con los datos adquiridos del ECG Porttil. o Salir: Cierra la interfase y regresa a la pantalla principal de Matlab.

9

INTERFACE GRFICA (ECG PORTATL) % -------------------------------------------------------------------Men principal Options

% -------------------------------------------------------------------% --- Codigo del menu principal Options function Options_Callback(hObject, eventdata, handles) % hObject handle to Opciones (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -------------------------------------------------------------------Submen Save

% -------------------------------------------------------------------function Save_Callback(hObject, eventdata, handles) % hObject handle to Save (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -------------------------------------------------------------------Submen Pantalla

% -------------------------------------------------------------------% --- Guarda una impresion de la pantalla actual function Screen_Callback(hObject, eventdata, handles) % hObject handle to Screen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) print -dbitmap; msgbox(' Imagen en el portapapeles')

10

% -------------------------------------------------------------------Submen Load

% -------------------------------------------------------------------function Load_Callback(hObject, eventdata, handles) % hObject handle to Load (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)axes(handles.axes1) newplot; %prepara el axes1 para una nueva grfica colordef black; %Permite al usuario elegir el archivo de los datos que desea desplegar en pantalla. [filename, pathname] = uigetfile({'*.dat'},'File Selector'); if(filename~=0) archivo=[pathname filename]; ECG1=load(archivo);%Carga el archivo de datos a la variable ECG1 plot(ECG1,'b'); grid on; % Se etiquetan los ejes y se define el tamao de la letra ylabel('\bf Amplitud','Fontsize',8); xlabel('\bf Muestras','Fontsize',8); axis([0 3000 (min(ECG1)-1) (max(ECG1)+200)]); set(handles.Procesa,'enable','on'); % Se habilita el botn para procesar la seal handles.original=ECG1; guidata(hObject,handles); end;

11

% -------------------------------------------------------------------Submen Datos

% -------------------------------------------------------------------function Datos_Callback(hObject, eventdata, handles) % hObject handle to Datos (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) ecg=handles.original; % --- Pide al usuario el nombre para el archivo de datos y el path para guardarlo [file,path] = uiputfile({'*.dat'},'Save as'); if(file~=0) nom=[path file]; end if(file~=0) save(nom,'ecg','-ascii'); msgbox(' Archivo Listo!!','Aviso') end

12

% --------------------------------------------------------------------

Submen Salir

% -------------------------------------------------------------------function Salir_Callback(hObject, eventdata, handles) % hObject handle to Untitled_1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -- Solicita la confirmacin de salida ans=questdlg('Desea salir del programa?','SALIR','Si','No','No'); if strcmp(ans,'No') return; end clear,clc,close all % --------------------------------------------------------------------

Botn para iniciar adquisicin

% -------------------------------------------------------------------% --- Executes on button press in Play. % --- Solicita al usuario el tiempo de adquisicin en minutos % --- la respuesta se almacena en la variable resp %answer = inputdlg({'Tiempo de Adquisicin'}); resp = str2num(answer{1}); % % --- El tiempo en minutos se transforma en numero de muestras

13

% --- y este valor se almacena en la variable tam % numc=resp/0.05; tam=numc*3000; % % --- Configuracin del puerto % s=serial('COM1'); set(s,'ReadAsyncMode', 'continuous'); set(s,'InputBufferSize',3000); %tamao del buffer de entrada tiempo=[0:2999]; %vector del mismo tamao que le buffer fopen(s); %se abre el puerto fprintf(s,'*IND?'); set(hObject,'BackgroundColor',[0.99 0 0]); %Cambiando el color del botn PLAY % %Cambiando la etiqueta PLAY por ADQUIRIENDO % set(hObject,'String','ADQUIRIENDO'); set(hObject,'enable','off'); %Deshabilitar el botn PLAY para no interrumpir la adquisicin if ~isempty(answer) i=0; while i1 data=cat(2,data,datos); end end senial=reshape(data,1,tam); fclose(s); % Cierra el puerto delete(s); %Limpiamos la variable s despus de cerrar el puerto handles.tam=tam; handles.original=senial; % % Regresamos el botn PLAY a su color original % set(hObject,'BackgroundColor',[0 0.502 0.753]); % % Regresamos la etiqueta original PLAY % set(hObject,'String','PLAY'); set(hObject,'enable','on'); % Habilitamos el botn set(handles.Procesa,'enable','on'); %Habilitamos el botn para procesar la seal guidata(hObject,handles); end

14

% --------------------------------------------------------------------

Botn para procesar la seal

% -------------------------------------------------------------------% --- Executes on button press in Procesa. function Procesa_Callback(hObject, eventdata, handles) % hObject handle to Procesa (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)axes(handles.axes1) newplot; colordef black; ECG1=handles.original; N=size(ECG1); ECG=(ECG1-mean(ECG1))/(500); B=[1 0 0 0 0 0 -2 0 0 0 0 0 1]; A=[1 -2 1]; %s1 es la seal resultante del primer filtrado s1=filter(B,A,ECG); hold on; plot(s1/max(s1),'g'); grid on; %Se grafica s1 set(handles.FC,'enable','on'); % Habilita el botn para calcular la frecuencia cardiaca % Habilita el botn para graficar las ventanas que identican los complejos QRS set(handles.QRS,'enable','on'); % Habilita el botn para graficar el FFT set(handles.FFT,'enable','on'); handles.senial=s1; handles.ecg=ECG; guidata(hObject,handles);

15

% --------------------------------------------------------------------

Botn para identificar los complejos QRS

% -------------------------------------------------------------------% --- Executes on button press in QRS. function QRS_Callback(hObject, eventdata, handles) % hObject handle to QRS (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)axes(handles.axes1) newplot; colordef black; %Filtro Pasa-altas %Definimos las caractersticas del filtro pasa-bajas %Sabemos que un filtro puede ser definido con un par de %polinomios que caracterizaran %los polos y ceros de este y as definimos A, B y C. ECG=handles.ecg; s1=handles.senial; B=zeros(1,33); %Comando para generar una matriz de tamao 1* 33 B(1)=1; B(33)=-1; %Se definen el primer y ultimo elemento como 1 y -1 A=[1 -1]; C=zeros(1,17); C(17)=1; s2=filter(C,1,s1)-filter(B,A,s1)/32; %s2 es la seal resultante del segundo filtrado %Filtro Derivador %Definimos las caractersticas del filtro derivador. B=[0.2 0.1 0 -0.1 -0.2]; s3=filter(B,A,s2); %s3 es la seal resultante del tercer filtrado %Area bajo la curva QRS %Grfica para mostrar el rea bajo la curva QRS N=30;delay=30; B=ones(1,N)/N; s4=s3.^2; s4=filter(B,1,s4);%s4 es la seal resultante del segundo filtrado %Filtro Ventana (Duracion del QRS) %En este grafico podemos visualizar a travs de ventanas de tiempo la curva QRS. det=s4>(0.125*(max(s4)/2));%Operacin para definir el tiempo de duracin de la ventana det(1:delay)=[]; %Se define el retardo para que ocurra una nueva ventana plot(max(ECG)*det,'m:'); %Se grafica la ventana de tiempo hold off;

16

% --------------------------------------------------------------------

Botn para calcular la VFC y desplegarla en el cuadro de texto esttico en Lat/min

% -------------------------------------------------------------------% --- Executes on button press in VFC. %%%Calcula la variabilidad de la frecuencia cardiaca % Utilizando un algoritmo de deteccin de ondas R function VFC_Callback(hObject, eventdata, handles) % hObject handle to VFC (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)s=handles.ventana; s4=handles.segunda; cuenta=0; for n=1:5000 dif=s(n+1)-s(n); if dif==max(s) cuenta=cuenta+1; end end NumInt=cuenta; aint=int16(5000/NumInt); may=s4(1); t0=0; t1=0; ini=1; fin=aint; j=1; for i=1:NumInt for n=ini:fin if may