76
128 Apéndice A Código Fuente Debido a lo extenso que resulta la codificación de los algoritmos, solo se citará las partes más resaltantes, dejando toda la información de la tesis en un CD para mayor referencia. A.1. Código C y Matlab A.1.1. Codificación del Driver en GCC para Lectura de la BD Physionet - MIT Para poder utilizar la base de datos de señales ECG provenientes de Physionet-MIT se tuvo que desarrollar un driver en lenguaje C para el compilador GCC que permite pasar las señales del sistema operativo Linux hacia el sistema operativo Windows para procesarlo en Matlab. Instalación en entorno Linux de Physionet WFDB: A continuación (necesitamos ingresar como root), desempaquetamos el paquete con el comando: tar xfvz wfdb.tar.gz Esto crea un directorio de la forma: wfdb-10.m.n Luego ingresar a la carpeta: cd wfdb-10.m.n Seguidamente iniciar la instalación: ./configure Configurarlo en el sistema: make install Instalación de las librerías W3C libwww Del CD de la Tesis bajar el programa w3c-libwww-5.3.2.tar.gz tar xfvz w3c-libwww-5.3.2.tar.gz cd w3c-libwww-5.3.2 ./configure --with-zlib=z make make install

3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

Embed Size (px)

DESCRIPTION

Codigo de Estacion Meteorologica con Arduino, Raspberry Pi e interface Web con PHP.

Citation preview

Page 1: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

128

Apéndice A

Código Fuente

Debido a lo extenso que resulta la codificación de los algoritmos, solo se

citará las partes más resaltantes, dejando toda la información de la tesis en un

CD para mayor referencia.

A.1. Código C y Matlab

A.1.1. Codificación del Driver en GCC para Lectura de la BD Physionet - MIT

Para poder utilizar la base de datos de señales ECG provenientes de

Physionet-MIT se tuvo que desarrollar un driver en lenguaje C para el

compilador GCC que permite pasar las señales del sistema operativo Linux

hacia el sistema operativo Windows para procesarlo en Matlab.

Instalación en entorno Linux de Physionet WFDB:

A continuación (necesitamos ingresar como root), desempaquetamos el paquete con el comando: tar xfvz wfdb.tar.gz

Esto crea un directorio de la forma: wfdb-10.m.n Luego ingresar a la carpeta: cd wfdb-10.m.n Seguidamente iniciar la instalación: ./configure Configurarlo en el sistema: make install

Instalación de las librerías W3C libwww

Del CD de la Tesis bajar el programa w3c-libwww-5.3.2.tar.gz tar xfvz w3c-libwww-5.3.2.tar.gz cd w3c-libwww-5.3.2 ./configure --with-zlib=z make make install

Page 2: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

129

Nota: El tiempo aproximado para estos pasos es de aproximadamente 40 minutos. Compilación del programa Tesis.c

Para generar el archivo ejecutable tesis, empleamos el compilador ANSI C para Linux, esto es el gcc

Como primer paso, en un terminal ejecutar: gcc –c tesis.c Luego: gcc tesis.o –o tesis –lwfdb Para correrlo dar un nuevo nombre al archivo (ver codigo fuente de

tesis.c): ./tesis 100.txt

Cabe recalcar que todas las señales analizadas han sido obtenidas de la Base de Datos del MIT, el programa tesis.c elaborador por el autor fue compilado usando el gcc sobre Linux, instalando previamente las librerías propias de Physionet, como se especifica en el manual de esta base de datos. En concreto el código del programa es:

Page 3: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

130

/*Copyright Aland Bravo Vecorena II-FIEE-UNI-2003 */ #include <stdio.h> #include <malloc.h> #include <wfdb/wfdb.h> main(int argc,char *argv[]){ FILE *fp,*fp2; long int N=2400,var; char Ala1[33],cad[33];//long int tiene 32 bits int i,j,nsig; WFDB_Sample *v; WFDB_Siginfo *s; if(argc!=2){ printf("Olvido introducir el nombre del archivo a Crear \n"); return 1; } if((fp=fopen(argv[1],"w"))==NULL){ printf("No se puede abrir el archivo \n"); return 1; } nsig=isigopen("16786",NULL,0); if(nsig<1) exit(1); s=(WFDB_Siginfo *)malloc(nsig *sizeof(WFDB_Siginfo)); if(isigopen("16786",s,nsig)!=nsig) exit(1); v=(WFDB_Sample *)malloc(nsig *sizeof(WFDB_Sample)); for(i=0;i<N;i++){ if(getvec(v)<0) break; for(j=0;j<nsig;j++){ var=v[j]; sprintf(cad,"%d",var); fprintf(fp,"%s\n",cad); /*Visualizacion Externa*/ printf("%8d",var); } printf("\n"); } /*Rutina para adicionar informacion trascendente */ /*Numero de Canales */ sprintf(cad,"%i",nsig); fprintf(fp,"%s\n",cad); /*Numero Total de Muestras */ N=N*nsig;

Page 4: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

131

sprintf(cad,"%d",N); fprintf(fp,"%s\n",cad); /*INICIO->DATOS --Numero de Canales --Numero total de Muestras <-FIN */ /*Cerrar Archivo */ fclose(fp); /*Aqui empieza codigo de lectura del archivo */ if((fp2=fopen(argv[1],"r"))==NULL){ printf("No se puede abrir el archivo \n"); return 1; } printf("Leyendo del archivo ...\n"); /*Lee el archivo */ /*Mostrar el contenido */ fscanf(fp2,"%s",Ala1); while(!feof(fp2)){ printf("%s\n",Ala1); fscanf(fp2,"%s",Ala1); } /*Aqui termina código de comprobación */ exit(0); }

A.1.2. Codificación de los Algoritmos de las Wavelets y las Redes Neuronales en MATLAB

A continuación se muestras extractos de código en Matlab que

implementan los algoritmos de las Wavelet y las Redes Neuronales aplicadas a

las señales ECG.

Para lograr esto copiar la carpeta Uvi_Wave que viene en el CD de la Tesis, a la carpeta del Toolbox de Matlab, esto es: C:\matlabR12\toolbox\wavelet Como siguiente paso, correr el programa inicio.m, esto es:

%Rutina inicio.m tmq='cd '; %pwd; %tmp=ans;

Page 5: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

132

tmp='C:\matlabR12\work'; cd C:\matlabR12\toolbox\wavelet\Uvi_Wave startup; %Inicio de rutina q=length(tmq); p=length(tmp); N=p+q; s=q+1; tempo=tmq; for i=s:N tempo(i)=tmp(i-q); end eval(tempo); clear all; %El proposito de esta rutina es inicializar el paquete Uvi_Wave% A continuación se describe algunos programas utilizados en Matlab para la lectura de la BD del MIT previamente traducidos al formato establecido por el autor de la Tesis.

Código utilizado para lectura de datos: (lee.m) % Copy Right ABV % Lectura de Señales Normales % fid01 = fopen('16265.txt','r');

Page 6: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

133

A = fscanf(fid01,'%5d'); % reads 5-digit decimal integers. A = A'; p=length(A); N=p-2; % Numero total de muestras Ch=A(p-1); % Numero de Canales %Inicio Cadena IF% if Ch==2 % Se crean dos Subvariables for i=1:N/2 Nor_1(i)=A(2*i-1); Nor_2(i)=A(2*i); end elseif Ch==3 % Se crean tres Subvariables for i=1:N/3 Nor_1(i)=A(3*i-2); Nor_2(i)=A(3*i-1); Nor_3(i)=A(3*i); end elseif Ch==4 % Se crean cuatro Subvariables for i=1:N/4 Nor_1(i)=A(4*i-3); Nor_2(i)=A(4*i-2); Nor_3(i)=A(4*i-1); Nor_4(i)=A(4*i); end else % Caso Ch==1 for i=1:N Nor_1(i)=A(i); end end %FIN Cadena IF% % Lectura de Señales con Arritmia Supra Ventricular % fid01 = fopen('800.txt','r'); % Fs=128 Hz A = fscanf(fid01,'%5d'); % reads 5-digit decimal integers. A = A'; p=length(A); N=p-2; % Numero total de muestras Ch=A(p-1); % Numero de Canales %Inicio Cadena IF% if Ch==2 % Se crean dos Subvariables for i=1:N/2 Asv_1(i)=A(2*i-1); Asv_2(i)=A(2*i); end elseif Ch==3 % Se crean tres Subvariables for i=1:N/3 Asv_1(i)=A(3*i-2); Asv_2(i)=A(3*i-1); Asv_3(i)=A(3*i); end elseif Ch==4

Page 7: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

134

% Se crean cuatro Subvariables for i=1:N/4 Asv_1(i)=A(4*i-3); Asv_2(i)=A(4*i-2); Asv_3(i)=A(4*i-1); Asv_4(i)=A(4*i); end else % Caso Ch==1 for i=1:N Asv_1(i)=A(i); end end %FIN Cadena IF% % Lectura de Señales con Taqui Arritmia Ventricular % fid01 = fopen('cu03.txt','r'); % Fs=250Hz A = fscanf(fid01,'%5d'); % reads 5-digit decimal integers. A = A'; p=length(A); N=p-2; % Numero total de muestras Ch=A(p-1); % Numero de Canales %Inicio Cadena IF% if Ch==2 % Se crean dos Subvariables for i=1:N/2 Tav_1(i)=A(2*i-1); Tav_2(i)=A(2*i); end elseif Ch==3 % Se crean tres Subvariables for i=1:N/3 Tav_1(i)=A(3*i-2); Tav_2(i)=A(3*i-1); Tav_3(i)=A(3*i); end elseif Ch==4 % Se crean cuatro Subvariables for i=1:N/4 Tav_1(i)=A(4*i-3); Tav_2(i)=A(4*i-2); Tav_3(i)=A(4*i-1); Tav_4(i)=A(4*i); end else % Caso Ch==1 for i=1:N Tav_1(i)=A(i); end end %FIN Cadena IF% % Rutinas para normalizar la Señal de Entrada: % Procesa Señal Normal % Canal 1 P=length(Nor_1);

Page 8: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

135

Q=min(Nor_1); Nor_1=Nor_1-Q; Delta=max(Nor_1)-min(Nor_1); Nor_1=Nor_1/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Nor_1=Nor_1-(sum(Nor_1)/P); % Canal 2 P=length(Nor_2); Q=min(Nor_2); Nor_2=Nor_2-Q; Delta=max(Nor_2)-min(Nor_2); Nor_2=Nor_2/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Nor_2=Nor_2-(sum(Nor_2)/P); % Procesa Señal Taqui Arritmia Ventricular % Canal 1 P=length(Tav_1); Q=min(Tav_1); Tav_1=Tav_1-Q; Delta=max(Tav_1)-min(Tav_1); Tav_1=Tav_1/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Tav_1=Tav_1-(sum(Tav_1)/P); % Procesa Señal Arritmia Supra Ventricular % Canal 1 P=length(Asv_1); Q=min(Asv_1); Asv_1=Asv_1-Q; Delta=max(Asv_1)-min(Asv_1); Asv_1=Asv_1/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Asv_1=Asv_1-(sum(Asv_1)/P); % Canal 2 P=length(Asv_2); Q=min(Asv_2); Asv_2=Asv_2-Q; Delta=max(Asv_2)-min(Asv_2); Asv_2=Asv_2/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Tav_1=Tav_1-(sum(Tav_1)/P); % Inicio de Rutinas para mostrar las Señales Cardiacas... zoom on %figure(1) figure subplot(3,1,1), plot(Nor_1,'red'),title('Señal Normal') subplot(3,1,2), plot(Asv_1,'blue'),title('Arritmia Supra Ventricular')

Page 9: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

136

subplot(3,1,3), plot(Tav_1,'green'),title('Taquiarritmia Ventricular') %figure(2) figure subplot(3,1,1), plot(Nor_2,'red'),title('Señal Normal') subplot(3,1,2), plot(Asv_2,'blue'),title('Arritmia Supra Ventricular') %subplot(3,1,3), plot(Tav_2,'green'),title('Taquiarritmia Ventricular') % Considerar: % 1) 16265.txt --> Nor_1-->1900,Nor_2-->1900 % 2) 800.txt --> Asv_1-->640 ,Asv_2-->640 % 3) cu03.txt --> Tav_1-->1326 % Inicio del Procesamiento de la Red Neuronal... % figure % plot(Nor_1,'red') % title('Normal sinus rhythm') % title('Supraventricular Arrhythmia') % title('Ventricular Tachyarrhythmia') % xlabel('Time, s') % ylabel('ECG') % N=512; for i=1:N Nor(i)=Nor_1(i); Asv(i)=Asv_1(i); Tav(i)=Tav_1(i); end % Graficas de las diversas Wavelet madre: %[cA,cD]=dwt(Nor_1,'db2'); Lprima=dbaux(2); % Coeficientes del filtro L' Hprima=wrev(Lprima); % revierte el orden del vector Lt=round(length(Hprima)/2)-1; % cada 2da muestra -1 for i=0:Lt Hprima(2*(i+1))=-1*Hprima(2*(i+1)); end % obtenemos el filtro pasa alto H' HU=dyadup(Hprima,0); % upsample H' H2=conv(HU,Lprima); plot(H2) % Realizando una TW continua close all subplot(2,1,1), plot(Nor,'red'),title('Señal Normal') subplot(2,1,2) c=cwt(Nor_1,1:8:48,'db4','plot'); % 2D %c=cwt(Nor,1:12:61,'db4','3Dplot'); % 3D %subplot(3,1,3) %c=cwt(Nor_1,1:8:48,'db4','plot'); % 2D % Empleo de Wavelet Packets

Page 10: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

137

% para reduccion del Ruido

Es importante recordar, que para obtener estos resultados, se tuvieron que realizar diversas pruebas, por ejemplo el número de neuronas en las capas de entrada, oculta y salida; así como tipos de funciones de transferencia.. El código utilizado en esta parte tiene varios bloques: Por ejemplo la carpeta 371_1, significa que la red está compuesta de 3 neuronas en la capa de entrada, 7 en la oculta y 1 en la capa de salida. Asimismo esta carpeta tiene información sobre las funciones de transferencia de cada capa, en este caso: 1-> tansig 2-> tansig 3-> purelin

Esta carpeta contiene 2 carpetas dentro de ella, entrena371_1 y prueba371_1, como su propio nombre indica, estas carpetas contienen archivos *.m para realizar las etapas de entrenamiento y pruebas respectivamente. Contenido de la carpeta entrena371_1: # cd entrena371_1 # lee_371 # entrenamiento_371

Page 11: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

138

(lee_371.m) %Lee todas las señales de entrenamiento lee01_entrenamiento % Señal Nor 16265 Asv 800 Tav cu03 lee02_entrenamiento % Señal Nor 16265 Asv 801 Tav cu05 lee03_entrenamiento % Señal Nor 16265 Asv 802 Tav cu06 lee04_entrenamiento % Señal Nor 16265 Asv 803 Tav cu07 lee05_entrenamiento % Señal Nor 16272 Asv 804 Tav cu08 lee06_entrenamiento % Señal Nor 16272 Asv 806 Tav cu09 lee07_entrenamiento % Señal Nor 16272 Asv 807 Tav cu10 lee08_entrenamiento % Señal Nor 16272 Asv 808 Tav cu11 lee09_entrenamiento % Señal Nor 16273 Asv 809 Tav cu12 lee10_entrenamiento % Señal Nor 16273 Asv 810 Tav cu13 lee11_entrenamiento % Señal Nor 16273 Asv 811 Tav cu14 lee12_entrenamiento % Señal Nor 16273 Asv 812 Tav cu15 clear A Asv_1 Asv_2 Ch Delta N Nor_1 Nor_2 P Q Tav_1 i p fid01 (prewavelet250f.m) function y=prewavelet250(x) % Fs=250 Hz f=length(x); % se supone f=512 pts % Reduciendo la Linea Base [h,g,rh,rg] = daub(4); yt=wt(x,h,g,5); % descomposicion al 5to nivel isplit(yt,5,'','r.') %yt(1:16)=zeros(1,16); % 1-16:(0-7.8125Hz) 16-32:(7.8125-15.625Hz) 32-64:(15.625-31.25Hz)

Page 12: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

139

% 64-128:(31.25-62.5Hz) 128-256:(62.5-125Hz) for i=0:f/2-1 ytabv(i+1)=yt(i+1); end close all y=ytabv; ( prewavelet250.m ) function y=prewavelet250(x) % Fs=250 Hz f=length(x); % se supone f=512 pts % Reduciendo la Linea Base [h,g,rh,rg] = daub(4); yt=wt(x,h,g,5); % descomposicion al 5to nivel isplit(yt,5,'','r.') %yt(1:16)=zeros(1,16); % 1-16:(0-7.8125Hz) 16-32:(7.8125-15.625Hz) 32-64:(15.625-31.25Hz) % 64-128:(31.25-62.5Hz) 128-256:(62.5-125Hz) for i=0:f/2-1 ytabv(i+1)=yt(i+1); end close all y=iwt(ytabv,rh,rg,4); (lee12_entrenamiento.m) % Copy Right ABV % Lectura de Señales Normales % fid01 = fopen('16273.txt','r'); A = fscanf(fid01,'%5d'); % reads 5-digit decimal integers. A = A'; p=length(A); N=p-2; % Numero total de muestras Ch=A(p-1); % Numero de Canales %Inicio Cadena IF% if Ch==2 % Se crean dos Subvariables for i=1:N/2 Nor_1(i)=A(2*i-1); Nor_2(i)=A(2*i); end elseif Ch==3 % Se crean tres Subvariables for i=1:N/3 Nor_1(i)=A(3*i-2); Nor_2(i)=A(3*i-1); Nor_3(i)=A(3*i); end elseif Ch==4 % Se crean cuatro Subvariables for i=1:N/4

Page 13: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

140

Nor_1(i)=A(4*i-3); Nor_2(i)=A(4*i-2); Nor_3(i)=A(4*i-1); Nor_4(i)=A(4*i); end else % Caso Ch==1 for i=1:N Nor_1(i)=A(i); end end %FIN Cadena IF% % Lectura de Señales con Arritmia Supra Ventricular % fid01 = fopen('812.txt','r'); A = fscanf(fid01,'%5d'); % reads 5-digit decimal integers. A = A'; p=length(A); N=p-2; % Numero total de muestras Ch=A(p-1); % Numero de Canales %Inicio Cadena IF% if Ch==2 % Se crean dos Subvariables for i=1:N/2 Asv_1(i)=A(2*i-1); Asv_2(i)=A(2*i); end elseif Ch==3 % Se crean tres Subvariables for i=1:N/3 Asv_1(i)=A(3*i-2); Asv_2(i)=A(3*i-1); Asv_3(i)=A(3*i); end elseif Ch==4 % Se crean cuatro Subvariables for i=1:N/4 Asv_1(i)=A(4*i-3); Asv_2(i)=A(4*i-2); Asv_3(i)=A(4*i-1); Asv_4(i)=A(4*i); end else % Caso Ch==1 for i=1:N Asv_1(i)=A(i); end end %FIN Cadena IF% % Lectura de Señales con Taqui Arritmia Ventricular % fid01 = fopen('cu15.txt','r'); A = fscanf(fid01,'%5d'); % reads 5-digit decimal integers. A = A'; p=length(A); N=p-2; % Numero total de muestras

Page 14: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

141

Ch=A(p-1); % Numero de Canales %Inicio Cadena IF% if Ch==2 % Se crean dos Subvariables for i=1:N/2 Tav_1(i)=A(2*i-1); Tav_2(i)=A(2*i); end elseif Ch==3 % Se crean tres Subvariables for i=1:N/3 Tav_1(i)=A(3*i-2); Tav_2(i)=A(3*i-1); Tav_3(i)=A(3*i); end elseif Ch==4 % Se crean cuatro Subvariables for i=1:N/4 Tav_1(i)=A(4*i-3); Tav_2(i)=A(4*i-2); Tav_3(i)=A(4*i-1); Tav_4(i)=A(4*i); end else % Caso Ch==1 for i=1:N Tav_1(i)=A(i); end end %FIN Cadena IF% % Rutinas para normalizar la Señal de Entrada: % Procesa Señal Normal % Canal 1 P=length(Nor_1); Q=min(Nor_1); Nor_1=Nor_1-Q; Delta=max(Nor_1)-min(Nor_1); Nor_1=Nor_1/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Nor_1=Nor_1-(sum(Nor_1)/P); % Canal 2 P=length(Nor_2); Q=min(Nor_2); Nor_2=Nor_2-Q; Delta=max(Nor_2)-min(Nor_2); Nor_2=Nor_2/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Nor_2=Nor_2-(sum(Nor_2)/P); % Procesa Señal Taqui Arritmia Ventricular % Canal 1 P=length(Tav_1); Q=min(Tav_1);

Page 15: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

142

Tav_1=Tav_1-Q; Delta=max(Tav_1)-min(Tav_1); Tav_1=Tav_1/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Tav_1=Tav_1-(sum(Tav_1)/P); % Procesa Señal Arritmia Supra Ventricular % Canal 1 P=length(Asv_1); Q=min(Asv_1); Asv_1=Asv_1-Q; Delta=max(Asv_1)-min(Asv_1); Asv_1=Asv_1/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Asv_1=Asv_1-(sum(Asv_1)/P); % Canal 2 P=length(Asv_2); Q=min(Asv_2); Asv_2=Asv_2-Q; Delta=max(Asv_2)-min(Asv_2); Asv_2=Asv_2/Delta; % Rango de la Señal entre 0 y 1 % Si se desea un DC=0, agregar: % Tav_1=Tav_1-(sum(Tav_1)/P); % Inicio de Rutinas para mostrar las Señales Cardiacas... zoom on %figure(1) %figure %subplot(3,1,1), plot(Nor_1,'red'),title('Señal Normal') %subplot(3,1,2), plot(Asv_1,'blue'),title('Arritmia Supra Ventricular') %subplot(3,1,3), plot(Tav_1,'green'),title('Taquiarritmia Ventricular') %figure(2) %figure %subplot(3,1,1), plot(Nor_2,'red'),title('Señal Normal') %subplot(3,1,2), plot(Asv_2,'blue'),title('Arritmia Supra Ventricular') %subplot(3,1,3), plot(Tav_2,'green'),title('Taquiarritmia Ventricular') % Considerar: % 1) 16265.txt --> Nor_1-->1900,Nor_2-->1900 % 2) 800.txt --> Asv_1-->640 ,Asv_2-->640 % 3) cu03.txt --> Tav_1-->1326 % Inicio del Procesamiento de la Red Neuronal... % figure % plot(Nor_1,'red') % title('Normal sinus rhythm') % title('Supraventricular Arrhythmia') % title('Ventricular Tachyarrhythmia') % xlabel('Time, s') % ylabel('ECG')

Page 16: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

143

% N=512; for i=1:N Nor_16273(i)=Nor_1(i); Asv_812(i)=Asv_1(i); Tav_cu15(i)=Tav_1(i); End

A.2. Código Java y C Embebido para MPLAB

A.2.1. Codificación en Java del Servlet Para poder utilizar desplegar la aplicación en el servidor web Tomcat, se

utilizó la tecnología de los Servlets de Java, en donde se programó la lógica

interna para almacenar los archivos ECG en texto plano.

En el paquete signalAnalysis, en la clase FileUploadServlet.java: package signalAnalysis; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import com.oreilly.servlet.multipart.*; public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private File dir; String dirName = "C:" + File.separatorChar + "UNI5" + File.separatorChar + "feb5" + File.separatorChar + "apache-tomcat-5.5.12" + File.separatorChar + "database" + File.separatorChar + "users" + File.separatorChar + "temp"; String finaldirName = "C:" + File.separatorChar + "UNI5" + File.separatorChar + "feb5" + File.separatorChar + "apache-tomcat-5.5.12"+ File.separatorChar +"database" + File.separatorChar + "users" ;

Page 17: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

144

public void init(ServletConfig config) throws ServletException { super.init(config); // Read the uploadDir from the servlet parameters // = config.getInitParameter("uploadDir"); // if (dirName == null) { // throw new ServletException("Please supply uploadDir parameter"); // } dir = new File(dirName); if (!dir.isDirectory()) { throw new ServletException("Supplied uploadDir " + dirName + " is invalid"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); response.setContentType("text/plain"); System.out.println(" userid " + request.getParameter("userid")); out.println("The file was uploaded succesfully"); Part part = null; ParamPart paramPart = null; FilePart filePart = null; long size =0; String fileName = null; try { MultipartParser mp = new MultipartParser(request, 100 * 1024 * 1024); // 10MB while ((part = mp.readNextPart()) != null) { String name = part.getName(); System.out.println(" the name of the part is " + name); if (part.isParam()) { // it's a parameter part System.out.println(" a parameter got wow"); paramPart = (ParamPart) part; if ( name.equals("userid") ) { paramPart = (ParamPart) part; String value = paramPart.getStringValue(); } out.println("param; name=" + name + ", value=" + ((ParamPart) part).getStringValue()); }

Page 18: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

145

else if (part.isFile()) { System.out.println("part as file" + part.getName()); // it's a file part filePart = (FilePart) part; filePart.writeTo(new File(dirName)); fileName = filePart.getFileName(); out.println("file; " + "; filename=" + fileName + ", filePath=" + filePart.getFilePath() + ", content type=" + filePart.getContentType() + ", size=" + size); } } } catch (IOException lEx) { this.log( "error reading or saving file",lEx); } /* * MultipartRequest mr = new MultipartRequest(request , "D:\\test2"); * System.out.println(mr.getParameter("userid")); */ String userid = paramPart.getStringValue(); File finalFile = new File ( finaldirName + File.separatorChar + paramPart.getStringValue() + File.separatorChar + fileName); File tempFile = new File ( dirName + File.separatorChar + fileName); BufferedOutputStream buffer = null; FileOutputStream out2 = null; BufferedReader reader = null; try { out2 = new FileOutputStream(finalFile, true); buffer = new BufferedOutputStream(out2); reader = new BufferedReader(new FileReader(tempFile)); String temp2 = null; while ( (temp2 = reader.readLine())!= null) { temp2 = temp2 + "\n"; buffer.write(temp2.getBytes()); } buffer.close(); reader.close();

Page 19: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

146

tempFile.delete(); } catch( Exception e) { e.printStackTrace(); } /*if (fileName != null) { // the part actually contained a file String temp = dirName + File.separatorChar + paramPart.getStringValue(); System.out.println(" temp " + temp); size = filePart.writeTo(new File(temp)); } else { // the field did not contain a file out.println("file; name=" + "; EMPTY"); }*/ out.flush(); } } En cuanto a la implementación de los algoritmos de Redes Neuronales en Java, se ha visto conveniente utilizar el Framework JOONE engine, que provee un conjunto de librerías especialmente modelas y diseñadas para dicha tarea. Como primer paso, instalar dichas librerías ejecutando el instalador: JooneEditor1.2.1-Win.exe. En resumen, se ha investigado y desarrollado adaptaciones de aplicaciones en Java que permitan analizar las señales ECG utilizando diversas técnicas:

♦ Análisis en el Tiempo. ♦ Análisis en Frecuencia. ♦ Análisis Wavelet. ♦ Análisis empleando Redes Neuronales.

Asimismo se realizo el modelado web empleando Servlets para desplegar un site donde se gestiona la Base de Datos de los pacientes, en donde adicionalmente se pueden guardar las señales ECG, así como la información adicional requerida para su diagnostico.

Page 20: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

147

Apéndice B B.1: Glosario de Términos

A continuación se detalla algunos de los términos usados en la tesis:

Término Definición

SE Software Engineering o Ingeniería de Software.

FIIS Facultad de Ingeniería Industrial y de Sistemas.

UML Lenguaje de Modelado Unificado.

TIC Tecnología de Información y Comunicación.

J2EE Java para Edición Empresarial.

JVM Máquina Virtual de Java.

JSP Página de Servidor Java.

J2SE Java para Edición Estándar.

J2ME Java para Micro Edición.

W3C World Wide Web Consortium.

TCP/IP Protocolo de Control de Transmisión / Protocolo de Internet.

RPC Llamada a Procedimiento Remoto.

IEEE Instituto de Ingenieros Electricistas y Electrónicos.

AIC Advanced Industrialized Countries.

TIC Tecnologías de la información y la comunicación.

RPC Llamada a Procedimiento Remoto.

TCP Protocolo de Control de Transmisión.

IP Protocolo de Internet.

RMI Java Remote Method Invocation.

OMG Grupo de Gestión de Objetos.

DCOM Modelo de Objetos de Componentes Distribuidos.

RMI-IIOP Internet Inter-Orb Protocol.

JNDI Interfaz de Nombrado y Directorio Java.

JDBC Java Database Connectivity.

JTS Java Transaction Service.

Page 21: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

148

B.2: Nomenclatura y Acrónimos A continuación se detalla algunos de los términos usados en la tesis:

RuidoaalnSeRelaciónSNRinfinitalimpulsionarespuestadeFiltroIIRfinitalimpulsionarespuestadeFiltroFIR

diográficaElectrocaralnSeECGInversaWaveletdaTransformaIWT

WaveletdaTransformaWTFourierdeRápidadaTransformaFFT

FourierdedaTransformaFTtaSemidiscreWaveletdaTransformaSWT

DiscretaWaveletdaTransformaDWTContinuaWaveletdaTransformaCWT

~.

..~

..

..

...

Page 22: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

149

].[~][

].[~][).(~)(

..),(

..

.,,,..

..

.][.][

.][.)(

.][.)(

".""."

".".],[.),(

.][

.)(

:

2

2

22

,

,

,

,

nxdiscretaalnselademedioValornx

nsdiscretaalnseladeEnergíansxscontínuaalnseladeEnergíadxxs

WaveletescoeficientlosrecortarparaUmbralvarianzaymediadegausianoblancoRuidoN

WaveletMatrizWIdentidadMatrizI

anterioresoperadoreslosdematricialciónRepresentaHGHGdosporióninterpolacebajopasadeOperadorHdosporióninterpolacealtopasadeOperadorG

dospordiezmadoybajopasadeOperadorHdospordiezmadoyaltopasadeOperadorG

discretoaltopasaFiltrongdiscretobajopasaFiltronh

discretaescaladodeFunciónncontinuaescaladodeFunciónt

discretaWaveletncontinuaWavelett

aperteneceparaSmbolodeinclusiónparaSmbolo

deuniónparaSmbolodiscretaWaveletdatransformaladeesCoeficientjiCcontinuaWaveletdatransformaladeesCoeficientbaC

DiscretaFunciónnfcontinuaFuncióntf

raNomenclatu

Z

R

kj

ba

kj

ba

⟩⟨

ΨΨ∈⊂∪

∑∫δ

σµσµ

φφ

Page 23: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

150

Apéndice C Referencias de Internet

La siguiente lista es una recopilación de dominios públicos los cuales

fueron consultados durante el desarrollo de esta Tesis durante los primeros

meses del 2002 , algunos de ellos ya no estan disponibles debido al constante

cambio, motivo por el cual se adjunta su contenido en el CD elaborado por el

autor, el cual servirá como aporte para futuras investigaciones en esta área.

http://www.stats.bris.ac.uk/pub/reports/Wavelets/WavByTop.html

Artculos y papers de wavelet aplicado a problemas de estadstica principalmente.

http://www.oslo.sintef.no/wavelets/theory.html Descripción y Teora sobre Análisis Multi - Resolución.

http://www.cetaceanresearch.com/software.html

Software para análisis de señales acústicas.

http://www.ecgcorp.com/velav/index.html Información principalmente sobre acústica y vibraciones.

http://lcavwww.epfl.ch/∼ minhdo/wavelet _ course/

Información útil sobre procesamiento de señales digitales mediante wavelets, con ejercicios en Matlab.

http://www.cosy.sbg.ac.at/∼ uhl/wav.html

Links a otras páginas dedicadas a wavelets y procesamiento de señales.

http://www.che.utexas.edu/∼ misra/wavelet.html Pequeña gua de libros y software para utilización de wavelets.

http://www-stat.stanford.edu/∼ wavelab/

Completo Software para Matlab.

http://www.isye.gatech.edu/∼ brani/ Página de Brani Vidakovic, Profesor investigador en el campo de wavelets aplicado a problemas de estadstica y limpieza de ruido.

http://www.dsp.rice.edu/publications/

Completa guia de papers clasificada por temas.

http://www.prosoniq.com Software de Audio con implementaciones que utilizan algoritmos basados en wavelets.

http://cas.ensmp.fr/∼ chaplais/Wavetour _ presentation/Wavetour _ presentation _ US.html

Información sobre wavelet y Fourier, con tópicos tales como: análisis de frecuencia, wavelets diádicas y filtrado discreto, entre otros.

Page 24: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

151

http://www.spd.eee.strath.ac.uk/∼ interact/fourier/fft.html

Tutorial sobre la Transformada Rápida de Fourier.

http://users.ox.ac.uk/∼ ball0597/Fourier/ Información variada sobre análisis de Fourier.

http://www.spd.eee.strath.ac.uk/∼ interact/fourier/dft.html

Tutorial sobre la Transformada Discreta de Fourier.

http://www.med.harvard.edu/JPNM/physics/didactics/improc/intro/fourier1.html Introducción a la Transformada de Fourier.

http://archives.math.utk.edu/topics/fourierAnalysis.html

Lista de direcciones online dedicadas a diferentes aplicaciones que utilizan tanto teora de Fourier como de wavelets.

http://www.amara.com/current/wavelet.html

Completa página con links a software, libros, papers, dedicados tanto a teora como aplicaciones de wavelets.

http://www.mame.syr.edu/faculty/lewalle/tutor/tutor.html

Tutorial de Wavelets.

http://sepwww.stanford.edu/public/docs/pvi/toc _ html/index.html Información sobre Fourier y Wavelet.

http://www.wavelet.org

Completa página sobre el tema.

http://www.mathsoft.com/wavelets.html Gran lista de papers sobre wavelets clasificados por temas de investigación.

http://www.princeton.edu/∼ icd/

Página de Ingrid Daubechies, cuyo campo de interés se focaliza en el análisis tiempo-frecuencia utilizando wavelets.

http://www-stat.stanford.edu/∼ donoho/

Página de Dave Donoho, cuya principal campo de investigación es limpieza de ruido utilizando métodos estadsticos en conjunto con wavelets.

http://www.ukc.ac.uk/IMS/statistics/people/T.Sapatinas/

Página de Teophanis Sapatinas, cuyas áreas de interés son: Teora y aplicación de wavelets en el análisis estadstico de señales de tiempo, Utilización de wavelets en el procesamiento de señal e imágen.

http://euclides.uniandes.edu.co/∼ wavelets/

Página de la Universidad de los Andes, Colombia, con información teórica sobre wavelets.

http://www.public.iastate.edu/∼ rpolikar/WAVELETS/WTtutorial.html

Práctico tutorial wavelet.

Page 25: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

152

Apéndice D D.1: Generalidades de los Microprocesadores

En este anexo se presentan los conceptos de las tecnologías de los

sistemas web y se discuten algunas metodologías de construcción de software

así como la tecnología de los Microcontroladores de la familia Microchip.

Descripción del Hardware del Microcontrolador Para el prototipo en hardware hemos ajustado algunas restricciones, a

decir:

♦ Uso de la tarjeta de desarrollo Explorer 16 de Microchip que

contiene el microcontrolador DSPIC33FJ256GP710.

♦ La comunicación con la PC será a través del puerto serial RS232.

♦ Para obtener la señal ECG de simulación desde el

microcontrolador, previamente se grabarán las muestras desde la base

de datos ECG del MIT.

Características generales del DSPIC33FJ256GP710 Un microcontrolador es un computador completo (microprocesador + puertos de

E/S + memoria + otros periféricos) (Fig. D.1), aunque de limitadas prestaciones,

se destina a gobernar una sola tarea con el programa que reside en su memoria,

sus líneas de entrada/salida soportan el conexionado de los sensores y

actuadores del dispositivo a controlar. (Fig. D.1)

Page 26: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

153

Figura D.1: Componentes internos de un Microcontrolador.

Diferencia entre microprocesador y microcontrolador Las siguientes El microprocesador es un circuito integrado que contiene la

unidad de procesamiento central (CPU), también llamada procesador de un

computador. La CPU está formada por la unidad de control, que interpreta las

instrucciones, y el camino de datos que las ejecuta. Los pines de un

microprocesador sacan al exterior las líneas de sus buses de direcciones, datos

y control, para permitir conectarle con la Memoria y los módulos de E/S y

configurar un computador implementando por varios circuitos integrados. Se dice

que un microprocesador es un sistema abierto porque su configuración es

variable de acuerdo con la aplicación a la que destine.

Page 27: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

154

Figura D.2: Un Microprocesador dentro del Microcontrolador.

Arquitectura interna del Microcontrolador La arquitectura tradicional de computadoras y microprocesadores se basa en el esquema propuesto por John Von Neumann, en el cual la unidad de procesamiento central o CPU, esta conectada a una única memoria que contiene tanto las instrucciones del programa como los datos (Fig. D.4).

El tamaño de la unidad de datos o instrucciones esta fijado por el ancho del bus de la memoria. Es decir que un microprocesador de 8 bits, que tiene además un bus de 8 bits que lo conecta con la memoria, deberá manejar datos e instrucciones de una o más unidades de 8 bits (bytes) de longitud. Cuando deba acceder a una instrucción o dato de más de un byte de longitud, deberá realizar más de un acceso a la memoria. Por otro lado este bus único limita la velocidad de operación del microprocesador, ya que no se puede buscar en memoria una nueva instrucción, antes de que finalicen las transferencias de datos que pudieran resultar de la instrucción anterior.

Es decir que las dos principales limitaciones de esta arquitectura tradicional son:

Page 28: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

155

• Que la longitud de las instrucciones esta limitada por la unidad de longitud de los datos, por lo tanto el microprocesador debe hacer varios accesos a memoria para buscar instrucciones complejas. • Que la velocidad de operación (o ancho de banda de operación) esta limitada por el efecto de cuello de botella que significa un bus único para datos e instrucciones que impide superponer ambos tiempos de acceso.

La arquitectura von Neumann permite el diseño de programas con código automodificable mas no auto reconfigurable en cuanto a su arquitectura interna, es decir se puede reconfigurar el código de aplicación, mas no su arquitectura interna del microprocesador que se encuentra dentro del microcontrolador.

Figura D.3: Arquitectura Von Newman.

La arquitectura conocida como Harvard, consiste simplemente en un esquema en el que el CPU esta conectado a dos memorias por intermedio de dos buses separados. Una de las memorias contiene solamente las instrucciones del programa, y es llamada Memoria de Programa. La otra memoria solo almacena los datos y es llamada Memoria de Datos (Fig. D.3). Ambos buses son totalmente independientes y pueden ser de distintos anchos.

Para un procesador que utiliza un Conjunto de Instrucciones Reducidas

de Cómputo, o RISC (Reduced Instruction Set Computer), el conjunto de instrucciones y el bus de la memoria de programa pueden diseñarse de manera tal que todas las instrucciones tengan una sola posición de memoria de programa. Además, como los buses son independientes, el CPU puede estar accediendo a los datos para completar la ejecución de una instrucción, y al mismo tiempo estar leyendo la próxima instrucción a ejecutar.

Se puede observar claramente que las principales ventajas de esta arquitectura son: • Que el tamaño de las instrucciones no esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que cualquier instrucción ocupe una sola posición de memoria de programa, logrando así mayor velocidad y menor longitud de programa. • Que el tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando una mayor velocidad de operación.

CPU Memoria

Page 29: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

156

Una pequeña desventaja de los procesadores con arquitectura Harvard, es que deben poseer instrucciones especiales para acceder a tablas de valores constantes que pueda ser necesario incluir en los programas, ya que estas tablas se encontraran físicamente en la memoria de programa (por ejemplo en la EPROM de un microprocesador). (Fig. D.4)

Figura D.4: Arquitectura Harvard. El microcontrolador dsPIC33FJ256GP710 posee una arquitectura

Hardvard con una memoria de programa de 12MB, y una memoria de datos de

64 KB. Internamente posee un bus de comunicación de 16 bits entre la memoria

de Data y la CPU, y un bus de comunicación de 24 bits entre la Memoria de

Programa y la CPU. Una característica especial de los microcontroladores

Microchip es que cuentan con un mecanismo de ventana directo de 16 bits para

transferir data directamente desde la Memoria de Programa hacia la Memoria

de Data o viceversa, dicha técnica se conoce como PSV o visibilidad de espacio

de programa que en esencia segmenta la memoria de Programa en páginas que

encaja en tamaño con un segmento de memoria PSV previamente definido en la

Memoria de Data, de modo que a través de un puntero de Memoria de página en

la Memoria de Data pueda ser copiado a este segmento de memoria PSV

previamente definido en la Memoria de Data (Fig. D.5).

CPU Memoria De Datos

Memoria De Programa

Page 30: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

157

Figura D.5: Arquitectura Harvard de la familia dsPIC33F.

El Procesador Microchip

Es el elemento más importante del microcontrolador y determina sus

principales características, tanto a nivel hardware como software. Se encarga de

direccionar la memoria de instrucciones, recibir la instrucción en curso, su

descodificación y la ejecución de la operación que implica dicha instrucción, así

como la búsqueda de los operándoos y el almacenamiento del resultado. Existen

tres orientaciones en cuanto a la arquitectura u funcionalidad de los

procesadores actuales, estos son:

CISC (Computadores de Juego de Instrucciones Complejo): Un gran número de procesadores usados en los microcontroladores están basados en la filosofía CISC. Disponen de más de 80 instrucciones maquina en su repertorio algunas de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para una ejecución. RISC (Computadores de Juego de Instrucciones Reducido): Tanto la industria de los computadores comerciales como la de los microcontroladores están decantándose hacia la filosofía RISC. En estos procesadores el repertorio de instrucciones maquine es muy reducido y las instrucciones son simples y, generalmente, se ejecutan en un ciclo. La sencillez y rapidez de estas instrucciones permiten optimizar el hardware y el software del procesador.

SISC (Computadores de Juego de Instrucciones Especifico): En los microcontroladores destinados a aplicaciones muy concretas, el juego de

Memoria de Programa

(12MB) 1624

dsPIC33F RISC CPU

Memoria de Data

(64KB)

16 – bit window

MAC (dsPIC)

Page 31: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

158

instrucciones, además de ser muy reducido, es “especifico”, es decir, las instrucciones se adaptan a las necesidades de la aplicación prevista.

La familia del dsPIC33F tiene una velocidad de procesamiento máxima de 30 MIPS (millones de instrucciones por segundo), lo cual quiere decir que tiene un reloj interno de 120 MHz. La arquitectura del Hardware es una modificación de la Harvard, y requiere cuatro pulsos de reloj para incrementar el puntero de instrucciones. Todos los dsPIC vienen en diversas versiones: 20 MIPS, 30 MIPS ó 40 MIPS dependiendo de la familia seleccionada.

Figura D.6: Arquitectura de la Familia DSPIC33F. Las características básicas del dsPIC se señalan a continuación:

o El registro de instrucciones tiene 24 bits de tamaño con 16 bits para mantener los datos y 8 bits para la localización de comandos. La palabra en hardware tiene 16 bits o 2 bytes al igual que el bus de datos, lo que define al dsPIC como una maquina de 16 bits.

o Existen 30 fuentes de interrupciones, las cuales mapean a todos los

elementos internos y externos del microcontrolador.

o La fuente de tensión puede ir de 2.5 V a 5 V con voltaje regulado.

40 MIPS 16-bit

16b ALU 16 x 16b W Register Array

17b x 17b Multiply

Dual AGU X & Y

Barrel Shifter

JTAG Interface

DSP Engine Dual 40b

Accumulators

1 – 30 KB Data Memory

Memory Bus

12 – 256 KB Flash Memory

8-channel DMA

Inte

rrup

t C

ontr

ol

Perip

hera

l Bus

WDT & Pwr Mgmt.

18 - 100-pin Packages

(1-2) UART w/LIN & IrDA®

(1-2) SPI™

MC QEI

Codec I/F

(3-9) 16b/32b Timers

(4-8) MC PWM

INTRC w/PLL

(0-2) ECAN™

(1-2) I2C™

(1-2) 1.1Msps 10b ADC

(1-2) 500Ksps 12b ADC

Input Capture

Output Compare/PWM

Page 32: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

159

Figura D.7: Arquitectura de la Familia DSPIC30F.

Figura D.8: Arquitectura de la Familia PIC24H.

30 MIPS 16-bit

16b ALU 16 x 16b W Register Array

17b x 17b Multiply

Dual AGU X & Y

Barrel Shifter

JTAG Interface

DSP Engine Dual 40b

Accumulators

0.5 - 8 KB Data Memory

Memory Bus

12 - 144 KB Flash Memory

1 - 4 KB EEPROM

Perip

hera

l Bus

WDT & Pwr Mgmt.

18 - 80-pin Packages

(1-2) UART w/LIN & IrDA®

(1-2) SPI

MC QEI

Codec I/F

(2-5) 16b/32b Timers

-or- 200 Ksps 12b ADC

MC PWM

INTRC w/PLL

(0-2) CAN™

Inte

rrup

t C

ontr

ol

(1-2) I2C™

1 Msps 10b ADC

Output Compare/PWM

Input Capture

1 – 16 KB Data Memory

Memory Bus

12 – 256 KB Flash Memory

8 Channel DMA

Interrupt Control

40 MIPS 16-bit Core

16b ALU 16 x 16b W Register Array

17b x 17b Multiply

Address Generator

Multi-bit Shifter

JTAG Interface

Perip

hera

l Bus

WDT & Pwr Mgmt.

18 - 100-pin Packages

(1-2) UART w/LIN & IrDA®

(1-2) SPI

(3-9) 16b/32b TimersYY

1.1 Msps 10b ADC

INTRC w/PLL

(0-2) ECAN™

Inte

rrup

t C

ontr

ol

(1-2) I2C™

500 Ksps 12b ADC

Output Compare/PWM

Input Capture

Page 33: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

160

Figura 2.9: Arquitectura de la Familia PIC24F. o Se tiene pines de salidas o entradas generales, capaces de brindar o

soportar 25 mA cada uno. Nunca se debe usar el procesador para manejar cargas de potencia, a pesar de que el dsPIC pueda soportarlo. Incluso el dsPIC puede soportar disipar 1 watt de potencia.

o o También se tiene temporizadores de 16 bits y también permite

reagruparlos en un bloque de 32 bits. o o 9 pines conectados a módulos conversores analógico a digital de 10 bits,

que trabajan a 500 Ksps (kilo muestras por segundo) o o Debido a que el dsPIC es un procesador digital de señales, es capaz de

realizar operaciones matemáticas muy rápido, así la multiplicación, suma y resta se realizan en un ciclo de reloj.

o

Memoria de Datos y de Programa Como podemos observar (Fig. D.10 y Fig. D.11) la memoria del dsPIC

esta dividida en dos grandes partes: una es el espacio de memoria para el

4 – 8 KB Data Memory

Memory Bus

16 – 128 KB Flash Memory

Interrupt Control

16 MIPS 16-bit Core

16b ALU 16 x 16b W Register Array

17b x 17b Multiply

Address Generator Unit

Multi-bit Shifter

JTAG Interface

Perip

hera

l Bus

WDT & Pwr Mgmt.

28 - 100-pin Packages

(2) UART w/LIN & IrDA®

(2) I²C™

PMP

CRC

(5) 16b/32b Timers

Real Time CC

INTRC w/PLL

Inte

rrup

t C

ontr

ol

(2) SPI

500 Ksps 10b ADC

(2) Comparators

Perip

hera

l Pin

Sel

ect

Output Compare/PWM

Input Capture

Page 34: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

161

usuario y otro es el espacio de memoria para configuración. En el primer espacio

nos interesa particularmente el área de memoria de programa FLASH donde se

ubicará el programa, y el área de memoria EEPROM donde se ubicarán los

datos. En el área de registros de configuración se ubican los registros con los

cuales modificaremos el comportamiento del dsPIC.

Figura D.10: Organización de la Memoria del Programa.

000000000000hh

77FFFFFFFFEEhh

FFFFFFFFFFEEhh

PC<22:1> 0 0

No implementado

ID del Dispositivo

Registros de Configuración

Memoria Flash del Usuario en el Chip

Tabla Alternativa del Vector de Interrupción

Configuración Flash

Vector Reset Tabla del Vector de Interrupción 000000000044hh

000000110044hh

000000220000hh

23 0

Espacio de

Configuración

Espacio de Usuario

Page 35: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

162

Características de la Visibilidad del Espacio de Programa PSV Esta técnica ofrece ventajas tales como:

• No se necesita la asignación de recurso del CPU para transferir data de la

Memoria de Programa hacia la Memoria de Datos o viceversa.

• Libera recursos del CPU para tareas que realmente requieran dicho

recurso.

Figura D.11: Organización de la Memoria de Datos.

Interrupciones Las interrupciones constituyen quizá el mecanismo más importante para la

conexión del microcontrolador con el mundo exterior, sincronizando la ejecución

de programas con acontecimientos externos. El dsPIC33F tiene 30 fuentes de

interrupción y 4 excepciones de procesador, los cuales están basados en un

esquema de prioridades.

Memoria de Data Cercana

8 KB

0x8001

0xFFFF

0x8000

0xFFFE

Espacio SRAM

RAM Data X

0x0801 0x0800

RAM Data Y 0x1FFE

Espacio SFR 0x0001 0x0000

0x07FF 0x07FE

2 KB Espacio SFR

Dirección Byte MS

Dirección Byte LS

16-bits

MSB LSB

Puerto Dual RAM 2 KB Puerto-Dual

DMA RAM

No implementado

Mapeo opcional hacia la Memoria de Programa usando

PSV

Page 36: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

163

Figura D.12: Organización de la Memoria de Datos.

El funcionamiento de las interrupciones es similar al de las subrutinas de las cuales se diferencian principalmente en los procedimientos que las ponen en marcha. Así como las subrutinas se ejecutan cada vez que son llamadas por un comando escrito en el código fuente, las interrupciones se ponen en marcha al aparecer en cualquier instante un evento externo al programa, es decir por un mecanismo hardware.

Cuando se produce cualquiera de los sucesos indicados anteriormente, se origina una petición de interrupción, que si se acepta, guarda el valor del PC actual en la Pila. Cada causa de interrupción está controlada mediante dos bit. Uno de ellos actúa como señalizador o flag que indica si se ha producido o no la interrupción, y la otra funciona como bit de permiso o prohibición de la interrupción en sí.

En el dsPIC todos los flags de interrupción son muestreados en el comienzo de cada instrucción por el registro IFSx. Un requerimiento de interrupción pendiente (IRQ) es indicado por un bit de flag igual a ‘1’ en un

VVeeccttoorr ddee DDiirreecccciióónn

CCPPUU CCoonnttrroollaaddoorr ddee

IInntteerrrruuppcciióónn

IInntteerrrruuppcciióónn ddeell

CCPPUU

PPrriioorriiddaadd NNaattuurraall

IInntteerrrruuppttss

00

77 00

111177

PP RRII OO

RRII DD

AADD

DDEE LL CC

PP UU

00

77

1155

88

TTRRAAPPSS

DDiirreecccciióónn

PP rr ii oo

rr ii dd aa

dd SS e

e llee cc

cc iioo nn

aa bbll ee

pp oo

rr ee ll

UUss uu

aa rrii oo

PP r

r ii oorr ii d

d aadd

EE s

s ttáá tt

ii ccaa

Page 37: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

164

registro IFSx. El IRQ causa una interrupción que ocurre si el correspondiente bit en el registro de habilitación de interrupción IECx es igual a ‘1’.

Si hay una IRQ pendiente con una prioridad de mayor nivel que la prioridad del proceso actual en los bits del IPL, el proceso será interrumpido. El procesador entonces almacena el contador de programa y el byte bajo del registro de estado del procesador (SRL), como se muestra en la figura 5.2. El byte bajo del registro de estado contiene el nivel de prioridad del proceso actual.

El CPU es responsable de leer la Tabla de Vectores de Interrupción (IVT) y transferir la dirección que contiene el vector de interrupción al contador de programa. La tabla de vectores de interrupción (IVT) y la tabla de interrupciones alternativa (AIVT) están cerca del comienzo del programa de memoria (0x000004). EL IVT y el AIVT se ven en la figura 2.12. Las interrupciones y excepciones son habilitadas, priorizadas y controladas usando registros con funciones especiales:

o IFS0<15:0>, IFS1<15:0>, IFS2<15:0> Todas las banderas de petición de interrupción se encuentran en estos tres registros. Las banderas son activadas por sus respectivos periféricos o señales externas y son reseteadas vía software.

o IEC0<15:0>, IEC1<15:0>, IEC2<15:0> Todos los bits de control que habilitan interrupciones están en estos tres registros. Estos bits de control son usados para individualmente habilitar interrupciones desde los periféricos o señales externas.

o IPC<15:0>… IPC<7:0> El nivel de prioridad asignable por el usuario asociado con cada una de estas interrupciones esta centralmente en estos doce registros.

o IPL<3:0> El nivel actual de prioridad esta explícitamente almacenado en los bits IPL. IPL<3> esta presente en el registro CORCON, así como IPL<2:0> esta presente en el registro de estado (SR: Status Register) en el núcleo del procesador.

o INTCON1<15:0>, INTCON2<15:0> Funciones de control global de interrupciones se derivan de estos dos registros, INTCON1 contiene las banderas de control y estado para las excepciones del procesador. El registro INTCON2 controla el comportamiento de las señales de petición de interrupción externa y el uso de la tabla alternativa de interrupciones. Los bits de Prioridad de Interrupción asignable por el usuario (IP<2:0>) para cada fuente de interrupción individual están ubicadas en los bits LS 3 de cada nibble (1/2 byte) dentro del registro IPCx. El bit 3 de cada nibble no es usado y

Page 38: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

165

es leído como cero ‘0’. Estos bits definen el nivel de prioridad asignado a una interrupción en particular, por el usuario. Los niveles de prioridad elegibles empiezan en 0, como la prioridad más baja, y nivel 7, como la más alta prioridad. Dado que a más de una interrupción se le puede asignar la misma prioridad, se provee una tabla de prioridades con un nivel dado de prioridad, este método se llama orden natural de prioridades (Natural Order Priority), con lo que si una interrupción tiene la misma prioridad que otra, entonces se recurre a la prioridad dada en tabla natural de prioridades, y la que interrupción esta primero en esta tabla se ejecuta primero.

Interface de Comunicación Serial RS232 Para comprender el protocolo de comunicación serial, hay que tener en cuenta

que este tipo de comunicación eléctrica precede en bastantes años a la

aparición de los ordenadores electrónicos. La comunicación serie tiene sus

raíces en el telégrafo, que posteriormente derivó en el teleimpresor (Telex),

donde se utilizaron diversos protocolos de comunicación; los más famosos el

Morse el Baudot y el ASCII. Posteriormente las comunicaciones serie

informáticas adoptaron algunos de los usos y costumbres existentes

adaptándolos a las nuevas necesidades, empezando por su propio sistema de

códigos (ASCII), pero que conservando algunas reminiscencias de sus

ancestros telegráficos.

Tanto el sistema de codificación ASCII (American Standard Code for

Information Interchange, como el propio estándar RS-232, nacieron pensado en

transmisiones serie utilizadas casi exclusivamente para tele-impresión. Las

señales y protocolos empleados se referían a cuestiones tales como sonar una

campana para recabar la atención del operador, y enviar un retorno de carro CR

(Carriage Return) o un salto de línea LF (Line feed) -eran impresoras

electromecánicas-. La comunicación serie entre ordenadores no requiere tantas

señales. Sin embargo, se siguieron utilizando la terminología y muchas de las

señales del estándar primitivo.

Page 39: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

166

En la comunicación serie los bits se transmiten uno detrás de otro (de ahí

el nombre), lo que hace que sean mucho más lentas que sus homólogas

"paralelo" en las que se transmiten varios bits a la vez. La ventaja es que puede

utilizarse un solo par de hilos, o incluso uno solo (si el retorno se realiza por la

tierra).

Existen varias formas de transmisiones serie:

o Simplex: Un equipo transmite, el otro recibe. o Half-duplex: Transmiten ambos equipos pero no simultáneamente; los

equipos se alternan en la transmisión, uno transmite mientras el otro recibe.

o Full-duplex: Ambos equipos transmiten simultáneamente. Para ello se requieren dos líneas independientes, transmisión y recepción; la línea de transmisión de un equipo se conecta a la entrada de recepción del otro y viceversa. Los puertos serie del PC son capaces de utilizar este modo.

o Síncronas: Los dispositivos que comunican se sincronizan en el momento inicial de la transmisión y constantemente se intercambian información a una cadencia predefinida. Con objeto de mantener la sincronización, cuando no existen datos que enviar se transmiten caracteres sin valor ("idle characters). Esta transmisión es más rápida que la asíncrona porque no es necesario transmitir señales de inicio o fin de dato; constantemente se reciben caracteres que pueden ser de datos o sin valor (de relleno).

o Asíncronas: En este modo de transmisión no existe sincronización; no es necesario enviar caracteres de relleno, pero hay que indicar cuando empieza un dato y cuando termina. Esto se hace incluyendo en la transmisión señales de inicio y fin de dato (bits de "start" y "stop"). En la comunicación asíncrona, la información (cada carácter) es enviada en el interior de un cuadro ("Frame") de tamaño variable, que comienza con la mencionada señal de inicio y termina con la de final; es el tipo de comunicación utilizada en los puertos serie del PC.

En este tipo de comunicación, el estado de reposo (cuando no se transmite nada) se identifica con un "1" (marca). Cuando se recibe un bit de inicio, que es un "0" (espacio), el receptor toma nota que va a comenzar a recibir un dato.

Los parámetros que caracterizan estas comunicaciones son: velocidad, paridad, bits de datos y bits de parada. En la literatura sobre el tema es frecuente expresar estos datos en forma resumida. Por ejemplo: 1200 8 N 1 para indicar una transmisión de 1200 baudios con 8 bits de datos sin paridad y un bit de Stop.

Page 40: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

167

Los parámetros anteriores están relacionados con la forma en que se transmite la información serie. En esta comunicación cada carácter va incluido en un cuadro ("Frame"); generalmente el comienzo es un bit de inicio (siempre un 1); después le sigue el dato, que puede ser de 5 a 8 bits de longitud; después puede haber un bit de control de paridad, y por último un bit final (siempre es un 1) de longitud variable (el equivalente a 1, 1.5 o 2 bits). Velocidad de transmisión ("Connection speed") es la cantidad de datos transmitidos en unidad de tiempo. Se expresa en bits por segundo (bps). En las transmisiones serie a través de líneas telefónicas, en las que se emplean módems era frecuente utilizar como medida de velocidad el Baudio ("Baud rate"), en honor de Emile Baudot. Baudio se define como el número de veces que cambia la portadora en un segundo. La velocidad que puede emplearse depende en gran medida de la calidad del medio de transmisión (calidad de la línea), que si (como es frecuente) se trata de líneas telefónicas, depende a su vez de la distancia. Longitud del carácter ("Char length"). Se han utilizado caracteres de 5, 6, 7 y 8 bits, aunque actualmente los datos son enviados como caracteres ASCII, por lo que pueden utilizarse 7 u 8 bits según se trate del juego de caracteres US-ASCII o el extendido. El conjunto de bits que componen un carácter se denominan bits de dato ("Data bits") Paridad ("Parity"). Para poder comprobar la calidad de la transmisión se suele utilizar un sistema de control de paridad que añade un bit a los bits de datos. Los sistemas utilizados son:

o Paridad par ("Even") o Paridad impar ("Odd") o Paridad marca ("Marck") o Paridad espacio ("Space") o Sin paridad (no se añade ningún bit de paridad al datagrama)

Page 41: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

168

Figura D.13: Modo de Transmisión del UART.

RS-232.C significa literalmente "Recomended Standard232 revisión C" (también conocida como EIA 232). Es un estándar publicado en 1969 por la EIA ("Electronic Standard Association") que define las características eléctricas que deben presentar los elementos de conexión para la comunicación serie entre ordenadores y equipos periféricos. Su título dice exactamente: "Conexión entre un Equipo Terminal de Datos y un Equipo de Comunicación de Datos empleando un intercambio de datos binario serie", y comprende diversos apartados: Recordemos que en la comunicación serie, como en cualquier otra comunicación informática, existen dos aspectos complementarios: Uno relativo a las características físicas de la conexión; en este caso las características eléctricas y mecánicas, aspectos que están contemplados en el estándar RS-232 (a estos elementos los denominaremos capa física). Otros son los protocolos de comunicación, que incluyen los sistemas de codificación de la señal que se enviará por la capa física (los denominamos capa lógica).

UxCTS

(Start)

(Stop) UxTX

UTXBRK

Parity Generator

÷16 Divider

Transmit Shift Register UxTSR

UTX8 - Control UxTSR - Control Buffer -Generate Flags

Transmit Control

UxTXIF Load UxTSR

Transmit FIFO

Word Write Word/ByteWrite

Internal Data Bus16

UxMODE UxSTA

UxTXREG

Page 42: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

169

Figura D.14: Modo de Recepción del UART.

Las principales características del modulo UART son:

o Comunicación de datos de 8 o 9-bit, Full-duplex o Bit de paridad par, impar o sin paridad o Uno o dos bits de Stop o Generador de baudios con pre-escala de 16-bit o Tasas de baudio desde 38 bps a 1.875 Mbps con 30 MHz de ciclo de

instrucción. o Buffer de transmisión de 4 palabras o Buffer de recepción de 4 palabras o Detección de error de rebose de buffer y paridad o Interrupciones separadas para transmisión y recepción

El modulo UART se habilita seteando el bit UARTEN en el registro UxMODE (donde x = 1 or 2). Una vez habilitado, los pines UxTX y UxRX son configurados como salida y entrada respectivamente sobrescribiendo los bits de los registros TRIS y LATCH correspondientes. El pin UxTX se mantiene en estado lógico ‘1’ cuando no hay transmisión.

Para transmitir datos se deben seguir los siguientes pasos:

UUxxRRXX

UUxxTTXX

LLPPBBAACCKK

--SSttaarrtt bbiitt ddeetteecctt

--PPaarriittyy cchheecckk

÷÷1166 DDiivviiddeerr

RReecceeiivveeSShhiifftt RReeggiisstteerr UUxxRRSSRR

UUxxRRXXRREEGG UURRXX88 --GGeenneerraattee FFllaaggss --GGeenneerraattee IInntteerrrruupptt --SShhiifftt DDaattaa CChhaarraacctteerr

RReecceeiivvee CCoonnttrrooll

UUxxRRXXIIFF LLooaadd UUxxRRXXRREEGG

RReecceeiivvee FFIIFFOO

WWoorrdd RReeaadd WWoorrdd//BByyttee

RReeaadd

Internal Data Bus1166

UUxxMMOODDEE UUxxSSTTAA

UUEENN SSeelleeccttiioonn

BBCCLLKKxx//UUxxRRTTSS

UUxxCCTTSS

BBCCLLKKxx UUxxRRTTSS

UUxxCCTTSS

1166xx BBaauudd CClloocckk

Page 43: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

170

1. Configurar el UART: 2. Habilitar el UART seteando el bit UARTEN (UxMODE<15>). 3. Setear el bit UTXEN (UxSTA<10>), es decir habilitar la transmisión. 4. Escribir el byte a ser transmitido en UxTXREG. 5. Un bit de interrupción se genera UTXISEL (UxSTA<15>).

Para la recepción de datos se deben seguir los siguientes pasos: 1. Configurar el UART. 2. Habilitar el UART. 3. Una interrupción se genera. URXISEL bits (UxSTA<7:6>). 4. Leer el bit OERR para determinar si existen errores. 5. Leer el dato recibido de UxRXREG.

Figura D.15: Modos de Control de Transmisión del UART. El dsPIC tiene un generado de tasa de baudios de 16-bit que permite una flexibilidad máxima. El registro de generación de tasa de baudios (UxBRG) se puede leer y escribir. La tasa de baudios se calcula como sigue:

Tasa de Baudios = Fcy /(16*(BRG+1))

o BRG = registro UxBRG de 16-bit (0 hasta 65535) o FCY = Tasa del reloj de instrucción (1/TCY) FCY=Valor del cristal * PLL / 4

Máxima tasa de baudios: FCY /16 (si BRG = 0), Mínima tasa de baudios: FCY /16 / (16* 65536).

Entorno de Programación MPLAB IDE MPLAB IDE es un programa de software que corre en una PC

convencional para desarrollar aplicaciones para los microcontroladores

Microchip. Es denominado Entorno de Desarrollo Integrado (Integrated

Modo Simple

DDTTEE

1166--bbiitt

MMiiccrroo

DDCCEE

MMooddeemm

RRTT RRTT

CCTT CCTT

RS232

¿Puedo enviar

Ok, go ahead d d

Modo de Control de Flujo

DDTTEE

1166--bbiitt

MMiiccrroo

DDTTEE

PPCC

RRTT RRTT

CCTT CCTT

RS232

Listo para ibi

Listo para ibi

Page 44: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

171

Development Environment), IDE en adelante, debido a que provee un entorno

simple para desarrollar código para microcontroladores. Es recomendable utilizar

las actualizaciones de la ayuda On-line de MPLAB IDE para las últimas

versiones. Se puede descargar el software MPLAB de www.microchip.com. Es

recomendable bajarlo de la web del fabricante porque allí se encuentra la última

actualización del software mencionado.

Los principales componentes del MPLAB IDE son los siguientes:

o Administrador de Proyectos El administrador de proyectos provee integración y comunicación entre el entorno de desarrollo (simulación, configuración, emulación y depuración) con las herramientas de programación (lenguaje de programacion maquina, C30)

o Editor El editor es un editor de texto se utiliza para escribir los códigos fuente con muchas características para programación y también sirve como ventana para la depuración de los programas.

o Ensamblador/Enlazador y Herramientas de Lenguaje El ensamblador puede ser usado solo sin ayuda para ensamblar un archivo, o puede ser usado como enlazador o linker para construir un proyecto de diferentes archivos fuente, librerías y objetos recompilados. El enlazador es responsable de posicionar el código compilado en áreas de memoria del microcontrolador destino.

o Motores de Ejecución Existe software de simulación en MPLAB IDE para todos los dispositivos MCU PICmicro y dsPIC DSC. Estos simuladores utilizan una PC para simular las instrucciones y algunas funciones periféricas de los dispositivos MCU PICmicro y dsPIC DSC. Opcionalmente se tiene emuladores y depuradores en-circuito también disponibles para probar como corre la aplicación en el hardware.

o Herramientas de Lenguaje Compilador Los compiladores de MPLAB C18 y MPLAB C30 C de Microchip proveen código totalmente integrado y optimizado. Los compiladores de HI-TECH, IAR, micro Engineering Labs, CCS y Byte Craft, pueden ser invocados por el administrador de proyectos de MPLAB IDE para compilar código que es automáticamente cargado en el debugger destino para instancias de prueba y verificación.

o Depurador El depurador Microchip permite breakpoints, correr el programa paso a paso, ventanas de visualización (Watch Windows) y todas las características de un

Page 45: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

172

depurador moderno. Trabaja en conjunto con el editor para referirse a la información destino siendo el código fuente depurado en realimentación.

o Programador PICSTART Plus, PICkit 1 y 2, PRO MATE II, MPLAB PM3 tanto como MPLAB ICD 2 pueden programar código en los dispositivos destino. MPLAB IDE ofrece control total sobre programación de código y datos, tanto como de bits configuración para definir los diferentes modos de operación de los microcontroladores destino o dsPIC.

o Emulador en-Circuito MPLAB ICE 2000 y MPLAB ICE 4000 son emuladores con características completas para los dispositivos MCU PICmicro y dsPIC DSC. Ellos conectan la PC vía puertos I/O y permiten un control total sobre la operación de los microcontroladores en las aplicaciones destino.

o Depurador en-Circuito MPLAB ICD 2 provee una alternativa económica a un emulador. Usando algunos de los recursos sobre en chip, MPLAB ICD 2 puede descargar código en el microcontrolador destino insertado en la aplicación, fijar breakpoints, ejecutar en pasos simples y monitorear los registros y variables.

Figura D.16: Tarjeta de Desarrollo Explorer 16 de Microchip.

El IDE MPLAB permite escribir, compilar, depurar, simular y grabar los

programas desarrollados, para ello la aplicación MPLAB instalada en la PC

Page 46: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

173

utiliza un dispositivo hardware externo que se encarga de transferir el código

ejecutable desde la PC hacia la tarjeta re configurable de desarrollo Explorer 16

(Fig. 2.16), existen diversos modelos del grabador hardware tales como ICD2,

ICD3, Real ICE, ello dependiendo del tipo de familia de microcontrolador que se

está usando en el desarrollo de la aplicación.

Lenguaje de Programación del Microcontrolador MPLAB C-30 es una adaptación al ANSI x3.159-1989, optimizando el

compilador C que incluye extensiones para aplicaciones de control con el dsPIC

DSC. El compilador es una aplicación para entorno Windows que provee una

plataforma de desarrollo en código C.

Figura D.17: Estructura de Compilación del microcontrolador.

MPLAB C-30 compila archivos fuente en C, produciendo archivos en

lenguaje ensamblador. Estos archivos compilados y producidos por la

compilación se enlazan con otros archivos objeto y librerías para producir la

aplicación final en ejecutable en formato COFF o ELF. Los archivos COFF o ELF

pueden ser cargados por MPLAB IDE, donde pueden ser probados y depurados,

Fuente en C Fuente en Asembler Librerias

Compilador PA Asembler Enlazador

Archivo Asembler Archivo Objeto Archivo Ejecutable

Page 47: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

174

o también utilizar el utilitario de conversión para pasar de COFF o ELF a formato

hex de Intel, adecuado para cargarlo en la línea de comandos para la simulación

o el respectivo programador. En (Fig. 2.17) vemos el diagrama de flujo de

desarrollo del software.

o Estándar ANSI C

El compilador MPLAB C30 es un compilador totalmente validado que conforma el estándar ANSI C como fue definido por la especificación ANSI descrita por Kernighan y Ritchie’s. El estándar ANSI C incluye extensiones a la definición original C que ahora con características estándar del lenguaje. Estas extensiones incrementan la portabilidad y ofrece una mayor capacidad.

o Optimización El compilador utiliza un conjunto sofisticado de optimización que emplea muchas técnicas avanzadas para generar eficiente y compacto código desde código fuente C. Esta optimización toma ventaja determinadas particularidades del dsPIC.

o Soporte de librerías del Estándar ANSI C MPLAB C30 es distribuido con una completa librería del estándar ANSI C. Todas las funciones de la librería han sido validadas, y conforman el estándar de librería ANSI C. Las librerías incluyen funciones para manejo de caracteres, asignación de memoria dinámica, conversión de datos y funciones matemáticas. Las funciones estándar de Entrada/Salida para la manipulación de archivos también están incluidas y distribuidas, las cuales soportan acceso total al sistema de archivos usando el simulador de línea de comandos.

o Modelo de Memoria Flexible El compilador soporta modelo de código y datos, pequeño y grande. El modelo de código pequeño tiene la ventaja de tener formas más eficientes de instrucciones call y branch, mientras que el modelo de datos pequeño soporta el uso de instrucciones compactas para acceder a los datos.

o Driver del compilador MPLAB C30 incluye un potente driver de programa de línea comandos. Usando el driver de programa, programas de aplicación pueden ser compilados, ensamblados y enlazados en un simple paso.

Page 48: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

175

D.2: Generalidades de las Tecnologías Web

Tecnologías Web y Descripción del Software Para aplicaciones pequeñas en donde se requiera una comunicación

entre aplicaciones Java y dispositivos DSP en su mayoría programados en C, se

utiliza JNI, que en esencia es una interface nativa Java que mapea o enlaza los

tipos de datos entre el lenguaje de programación java y C a nivel de código

objeto, otra alternativa más simple es a través del uso de protocolos de

comunicación serial tal como el RS232 que permite independencia al momento

de seleccionar un entorno de programación gráfica en la Interface de usuario,

usualmente se usa Visual Basic ó Java por su fácil entorno de programación.

Antes de describir la arquitectura J2EE, es importante describir algunos

aspectos de Java y los estilos de arquitectura de las aplicaciones distribuidas

contemporáneas: las arquitecturas de nivel 2, nivel 3 y nivel n. Aunque estos

estilos de arquitectura se encuentran con bastante frecuencia en las empresas

de la actualidad, merece la pena señalar que estos estilos surgieron debido a la

llegada de nuevas plataformas de hardware para clientes y servidores más

baratas y de tecnología de redes. Anteriormente, los motores de las empresas

eran sistemas principales con todos los servicios informáticos (desde la

generación de usuario-interfaz hasta procesamiento de transacciones de gran

volumen) centralizados. Consecuentemente, la tecnología cliente servidor fue la

que provocó una automatización masiva de la empresa.

Dentro de la evolución de la tecnología Java, es importante mencionar

algunas diferencias:

Applet Es bajado desde un Servidor Web y es ejecutado en un Browser.

Java Beans

Son componentes de software hechos en Java, su desarrollo se basa en un

Page 49: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

176

modelo de programación de componentes, para su desarrollo hay que seguir

ciertos estándares y son reutilizables. Pueden ser utilizados en entornos visuales

de programación y auto describen sus propiedades y pueden ser vistas y

alteradas en una herramienta de desarrollo visual.

Características:

• Sus variables no se acceden directamente sino a través de métodos

estándares (getters y setters).

• La nomenclatura de estos métodos siguen ciertos estándares.

• Una clase BeanInfo acompaña a la clase principal.

• Esta clase describe al JavaBean y permite que se pueda utilizar en un

ambiente de desarrollo visual.

• Los JavaBeans pueden ser visuales (widgets) o no visuales (solo lógica).

Servlets Un servlet es una clase Java que corre en el Web Server (o un proceso

lógicamente vinculado al Web Server). Un servlet acepta los requerimientos

HTTP y responde con páginas HTML.

El HTML es normalmente dinámico y refleja información que el servlet

obtiene de varios sistemas empresariales.

Características:

• Son independientes del servidor utilizado y de su sistema operativo.

• Los servlets pueden llamar a otros servlets, e incluso a métodos

concretos de otros servlets.

• Los servlets pueden obtener fácilmente información acerca del cliente.

• Los servlets permiten la generación dinámica de código HTML Los

servlets son a los servidores, como los applets a los navegadores.

Page 50: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

177

JSP Los Java Server Pages son similares a un HTML solo que el contenido se

construye dinámicamente dentro de la página web. Los JSP soportan todos los

tags de HTML.

El diseño puede variar sin modificar el contenido dinámico y es una

extensión de la tecnología de los servlets y esta basado en la reutilización de

componentes.

Características:

• Separación entre generación de contenido y presentación.

• Con HTML o XML se da formato a la página.

• Mediante etiquetas JSP, script o Java Beans se añade el componente

dinámico.

• Independencia de la plataforma tanto cliente como servidor.

• Fácil de administrar y de usar.

Ventajas:

Frente a un ASP:

• El código está escrito en Java.

• Portable entre Sistemas Operativos.

• Se compilan y permanecen en memoria, no son interpretadas.

Frente a un Servlet:

• Permite separar el diseño de la página web del código.

• Facilita el mantenimiento.

Frente a Java Script:

• Java Script genera HTML dinámicamente en el cliente.

Page 51: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

178

• No puede acceder a recursos del servidor.

Tecnologías J2EE

Las tecnologías J2EE están basadas en componentes, servicios y

comunicaciones.

Componentes

• Componentes del lado del cliente

• Applets.

• Application Clients.

• Componentes del lado del servidor

• EJBs.

• Web Components (Servlets, JSP).

Servicios

• Funciones utilizadas por los componentes J2EE.

• APIs implementadas por el proveedor de la plataforma J2EE.

Comunicación

• Permite la comunicación entre componentes.

• Proveído por el contenedor.

Servicios y Comunicaciones J2EE

Page 52: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

179

• Servicios de Nombres:

• Java Naming and Directory Interface: JNDI.

• Servicios de Base de Datos:

• Java Data Base Connectivity: JDBC.

• Servicios de Transacciones:

• Java Transaction API: JTA.

• Java Transaction Service: JTS.

• Servicio de Comunicaciones:

• Remote Method Invocation over Internet InterORB Protocol: RMI-IIOP.

• Java Mail.

• Java Beans Activation Framework: JAF.

• Java Message Service: JMS.

Contenedor J2EE Cada componente corre dentro de un contenedor que es ofrecido por el

proveedor de la plataforma, este contenedor provee servicios específicos a la

implementación y ejecución del componente (ciclo de vida, seguridad,

transacciones, etc) Los servicios brindados dependen del tipo de contenedor.

Plataformas Soportadas

Sistemas Operativos:

• AIX 4.3.3 ML 10, 5.1 ML2, 5.2.

• Linux 2.4 Kernel.

• Red Hat Advanced Server 2.1.

• SuSE 7.3, SuSE 8, SLES 7.

• Solaris 8.

Page 53: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

180

• HP/UX 11.

• Microsoft (Windows NT 4.0 SP6a, W2K Server SP3, Advanced Server

SP3, Win2003).

• OS/400 OS/390, zOS,zLinux.

Servidores Web Soportados:

• Apache.

• Microsoft Internet Information Server.

• Sun One (iPlanet) Web Server.

• Domino Web Server.

Especificaciones implementadas:

• J2EE 1.3.

• Web Services

• SOAP 2.3, WSIF.

• UDDI clients.

• Web Services Gateway.

• UDDI Registry - for private UDDI registry.

• Seguridad.

• Java 2, JAAS, CSIv2.

• Soporte para crypto card Eracom CSA 8000.

Arquitectura de dos niveles Los sistemas cliente servidor típicos están basados en la arquitectura de

dos niveles, donde existe una clara separación entre los datos y la lógica de

presentación de la empresa. Estos sistemas están generalmente controlados por

datos, siendo el servidor, en gran cantidad de ocasiones, un servidor de base de

datos. Aunque este enfoque nos permite compartir datos en la empresa, tiene

Page 54: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

181

muchos inconvenientes.

En una aplicación tradicional de 2 niveles, la carga de procesamiento es

facilitada al PC cliente mientras que el servidor actúa simplemente como

controlador del tráfico entre la aplicación y los datos. Como resultado, el

rendimiento de la aplicación no sólo sufre debido a los recursos limitados de la

PC sino que el tráfico de la red también tiende a aumentar. Cuando la aplicación

completa es procesada en una PC, la aplicación es forzada a realizar múltiples

peticiones de datos antes incluso de presentar algo al usuario. Estas múltiples

peticiones de bases de datos pueden sobrecargar la red.

Otro problema típico relacionado con el enfoque de 2 niveles es el del

mantenimiento. Incluso el menor cambio realizado a una aplicación puede

conllevar una completa alteración en la base del usuario. Aunque sea posible

automatizar el proceso, todavía debe enfrentarse a la actualización de cada

instalación de cliente.

Es más, algunos usuarios pueden que no estén preparados para una

alteración total y posiblemente ignoren los cambios mientras que otro grupo

puede que insista en realizar los cambios de inmediato. Esto puede provocar

que diferentes instalaciones de cliente utilicen diferentes versiones de la

aplicación.

Arquitectura de tres niveles

Con el afán de solucionar estos inconvenientes, la comunidad de software

desarrolló la noción de una arquitectura de 3 niveles. Una aplicación se divide en

tres capas lógicas distintas, cada una de ellas con un grupo de interfaces

perfectamente definidas. La primera capa se denomina capa de presentación y

normalmente consiste en una interfaz gráfica de usuario de algún tipo. La capa

intermedia, o capa de empresa, consiste en la aplicación o lógica de empresa, y

la tercera capa, la capa de datos, contiene los datos necesarios para la

Page 55: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

182

aplicación.

La capa intermedia (lógica de aplicación) es básicamente el código al que

recurre el usuario (a través de la capa de presentación) para recuperar los datos

deseados. La capa de presentación recibe entonces los datos y los formatea

para su presentación. Esta separación entre la lógica de aplicación de la interfaz

de usuario añade una enorme flexibilidad al diseño de la aplicación. Pueden

construirse y desplegarse múltiples interfaces de usuario sin cambiar en

absoluto la lógica de aplicación, siempre que la lógica de aplicación presente

una interfaz claramente definida en la capa de presentación.

J2EE ofrece diversas abstracciones para satisfacer las necesidades de

cada uno de estos niveles. Por ejemplo, los EJB ofrecen mecanismos para

abstraer tanto el acceso a datos como la lógica de empresa. De un modo similar,

los servlets y las páginas Java Server permiten abstraer la capa de presentación

y su interacción con la capa de empresa.

La tercera capa contiene los datos necesarios para la aplicación. Estos

datos consisten en cualquier fuente de información, incluido una base de datos

de empresa como Oracle o Sybase, un conjunto de documentos XML o incluso

un servicio de directorio como el servidor LDAP.

Arquitectura de n niveles Este tipo de sistema puede dar cabida a varias configuraciones diferentes. En

una arquitectura de n niveles, la lógica de aplicación está lógicamente dividida

por funciones y no físicamente. Una arquitectura de n niveles se descompone en

las siguientes partes:

Una interfaz de usuario que maneja la interacción del usuario con la aplicación.

Esta puede ser un navegador Web que se transmite mediante la salida WAN de

un firewall, una aplicación de escritorio o incluso un dispositivo inalámbrico.

Page 56: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

183

Una lógica de presentación que define lo que muestra la interfaz de usuario y

como son gestionadas las demandas del usuario. Dependiendo de las interfaces

de usuario que se mantengan, puede que sea necesario contar con versiones de

la lógica de presentación ligeramente diferentes para satisfacer al cliente

adecuadamente.

Una lógica de empresa que modele las reglas de empresa de la aplicación, a

menudo a través de la interacción con los datos de la aplicación.

Servicios de infraestructura que proporcionen la funcionalidad adicional

requerida por los componentes de la aplicación, tales como mensajería y apoyo

transaccional.

La capa de datos donde residen los datos de la empresa.

Las aplicaciones basadas en esta arquitectura emplean esencialmente el

patrón Modelo-Vista-Controlador (MVC). Lo que esto significa fundamentalmente

es que los datos (el modelo) son independientes respecto de la presentación de

la información (la vista). En una posición intermedia se encuentra la lógica de

aplicación/empresa (el controlador) que controla el flujo de información. De este

modo, una aplicación es diseñada a partir de estos tres componentes

funcionales (modelo, vista y controlador) interactuando entre sí.

En el prototipo desarrollado se utiliza la plataforma J2EE sobre Tomcat

que permite la publicación de los Servlets que contiene la aplicación de analisis

computaciones de las muestras digitalizadas de señales ECG tomadas de la

base de datos del MIT a través del puerto serial RS232 simuladas como

entradas desde el microcontrolador dsPIC33FJ256GP710 contenida en la tarjeta

de desarrollo Explorer 16 de Microchip.

Patrones de Diseño de Software

Page 57: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

184

En el desarrollo del prototipo en el lenguaje de programación java se

utilizó técnicas avanzadas de ingeniería de software tanto a nivel metodológico

como el RUP ó Proceso Unificado Racional para el manejo del proyecto como tal,

así como a nivel de aplicación a través de los patrones de diseño de software

para garantizar un enfoque robusto de la aplicación. A continuación se listan los

más resaltantes:

Patrón de Diseño Iterator Contexto:

1. Un objeto agregado contiene elementos objetos.

2. Clientes necesitan acceder a los elementos de los objetos.

3. El objeto agregado no deberá exponer su estructura interna.

4. Múltiples clientes podrían desear acceso independiente.

Solución:

1. Definir un iterador que procesa un elemento en un determinado momento.

2. Cada objeto iterador mantiene grabación de la posición del siguiente elemento.

3. Si hay múltiples variaciones aggregate/iterator, es mejor que las clases

aggregate e iterator implementen tipos de interfaces comunes.

Patrón de Diseño Model/View/Controller Contexto:

1. Algunos programas tienen múltiples vistas que pueden ser editadas.

2. Ejemplo: Editor HTML.

• vista de la estructura.

• vista de la fuente.

Page 58: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

185

• vista de WYSIWYG (lo que vemos en pantalla es idéntico a lo que se

imprimirá).

3. Editando una vista actualiza la otra.

4. La actualización parece instantánea.

Solución:

1. Modelo: estructura de la data, no tiene representación visual.

2. Vista: representación visual.

3. Controlador: interacción con el usuario Patrón.

4. Las Vistas y los Controladores actualizan el modelo.

5. El Modelo le dice a las Vistas que la data ha cambiado.

6. Las Vistas se re dibujan a si mismas

Patrón de Diseño Observer

Contexto

1. Un objeto, llamado el sujeto (subject), es la fuente de eventos.

2. Uno o más objetos observadores (observers) desean ser notificados cuando

ese evento ocurra.

Solución:

1. Defina un tipo de interface observer. Todos los concrete observers lo deben

implementar.

2. El subject mantiene una colección de observadores.

3. El subject proporciona métodos para añadir y descartar observers.

4. En cualquier instante que un evento ocurra, el subject notifica a todos los

Page 59: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

186

observers.

5. El Modelo notifica a las Vistas cuando algo interesante sucede.

6. El Botón notifica a los oidores de acciones (action listeners) cuando algo

interesante sucede.

7. Las Vistas se adicionan ellas mismas al Modelo para poder ser notificadas.

8. Los Oidores de Acciones (Action listeners) se adicionan ellos mismos al Botón

para poder ser notificados.

9. Generalizar: Observadores se añaden por si mismos al sujeto.

Patrón de Diseño Strategy

Contexto

1. Una clase puede beneficiarse de las diferentes variantes para un algoritmo.

2. Los Clientes algunas veces desean reemplazar algoritmos estándar con

versiones a la medida.

Solución

1. Defina un tipo de interface que es una abstracción para el algoritmo.

2. Actualmente estas clases strategy implementan este tipo de interface.

3. Los Clientes pueden proporcionar objetos strategy.

4. En cualquier momento que el algoritmo necesite ser ejecutado, el contexto de

la clase llama al método apropiado del objeto strategy.

Patrón de Diseño Composite

Contexto

1. Objetos primitivos pueden ser combinados con objetos composite.

2. Clientes manejan un objeto composite como un objeto primitivo.

Page 60: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

187

Solución

1. Define un tipo de interface que es una abstracción para los objetos primitivos.

2. Los Objetos Composite coleccionan objetos primitivos.

3. Clases primitivas y Composite implementan el mismo tipo de interface.

4. Cuando se implementa un método desde el tipo de interface, la clase

composite aplica el método a sus objetos primitivos y combina el resultado.

Patrón de Diseño Decorator

Contexto

1. Los objetos Componentes pueden ser decorados (visual o con

comportamiento mejorado).

2. El objeto decorado puede ser usado del mismo modo que el objeto no

decorado.

3. La clase del componente no desea tomar responsabilidad de la decoración.

4. Ahí puede existir un conjunto abierto cerrado de posibles decoraciones.

Solución

1. Defina un tipo de interface que sea una abstracción para el componente.

2. Las clases Concrete Component implementan este tipo de interface.

3. Las clases Decorator también implementan este tipo de interface.

4. Un objeto decorador administra el objeto componente que este decora.

5. Cuando se implementa un método desde el tipo de interface component, la

clase decorator aplica el método al componente decorado y combina el

resultado con el efecto de la decoración.

Patrón de Diseño Template Method

Contexto

Page 61: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

188

1. Un algoritmo es aplicable para múltiples casos.

2. El algoritmo puede ser descompuesto en operaciones primitivas.

3. Las operaciones primitivas pueden ser diferentes para cada caso.

4. El orden de las operaciones primitivas no depende del caso Patrón Template

Method.

Solución

1. Defina una super clase que tenga un método para el algoritmo y métodos

abstractos para las operaciones primitivas.

2. Implemente el algoritmo para llamar a las operaciones primitivas en el orden

apropiado.

3. No defina las operaciones primitivas en la super clase, o en todo caso

defínalos para que tengan un comportamiento apropiado por defecto.

4. Cada subclase define las operaciones primitivas pero no el algoritmo.

Patrón de Diseño Facade

Contexto

1. Un sub sistema consiste de múltiples clases, haciendo su uso un tanto

complicado para los clientes.

2. El Implementador podría desear cambiar las clases del sub sistema.

3. Deseo de dar un punto de entrada coherente.

Solución

1. Defina una clase facade que exponga todas las capacidades del sub sistema

como métodos.

2. El método facade delega las solicitudes a las clases del sub sistema.

3. Las clases del sub sistema no conocen acerca de la clase facade.

Page 62: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

189

Patrón de Diseño Prototype Contexto

1. Un sistema instancia objetos de las clases que no son conocidas cuando el

sistema es construido.

2. No se desea requerir de una clase separada para cada tipo de objeto.

3. Se desea evitar una jerarquía separada de clases cuya responsabilidad es

crear los objetos.

Solución

1. Defina un tipo de interface prototipo que sea común a todos los objetos

creados.

2. Proporcione un objeto prototipo para cada tipo de objeto que el sistema crea.

3. Clone el objeto prototipo cada vez que el nuevo objeto del tipo dado sea

requerido.

Patrón de Diseño Adapter

Contexto

1. Se desea usar una clase existente (adaptee) sin necesidad de modificarla.

2. El contexto en el cual se desea usar la clase requiere la interface destino que

es diferente de la del adaptee.

3. La interface destino y la interface adaptee están conceptualmente

relacionadas.

Solución

1. Defina una clase adapter que implemente la interface objetivo.

2. La clase adapter mantiene una referencia al adaptee. Traslada los métodos

Page 63: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

190

objetivos para los métodos adaptee.

3. El cliente envuelve el adaptee en un objeto de la clase adapter.

Patrón de Diseño Command

Contexto

1. Se desea implementar comandos que se comporten como objetos:

• Debido a que se necesita almacenar información adicional con comandos.

• Debido a que se desea coleccionar comandos.

Solución

1. Definir un tipo de interface command con un método para ejecutar el

comando.

2. Proporcionar métodos en el tipo de interface command para manipular el

estado de los objetos command.

3. Cada clase concreta command implementa el tipo de interface command.

4. Para invocar el command, llamar al método execute.

Patrón de Diseño Factory Method Contexto

1. Un tipo (el creador) crea objetos de otro tipo (el producto).

2. Subclases del tipo creador necesitan crear diferentes especies de objetos

producto.

3. Los clientes no necesitan conocer el tipo exacto de los objetos producto.

Solución

1. Definir un tipo creator que exprese lo general de todos los creadores.

2. Definir un tipo product que expresa lo general de todos productos.

Page 64: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

191

3. Define un método, llamado el método factory, en el tipo creator. El método

factory emite un objeto product.

4. Cada clase concreta creator implementa el método factory de tal modo que

retorne un objeto de una clase concreta product.

Patrón de Diseño Proxy Contexto

1. Una clase (el sujeto real) proporciona un servicio que es especificado por un

tipo de interface (el tipo de sujeto).

2. Existe una necesidad de modificar el servicio para hacerlo más versátil.

3. Ni el cliente ni el sujeto real debe ser afectado por la modificación.

Solución

1. Defina una clase proxy que implemente el tipo de interface del sujeto. El Proxy

mantiene una referencia al sujeto real, o de otro modo conocer como

localizarlo.

2. El cliente debe usar un objeto proxy.

3. Cada método proxy debe invocar el mismo método en el sujeto real y

proporcionar las modificaciones necesarias.

Patrón de Diseño Singleton Contexto

1. Todos los clientes necesitan acceder a una única instancia compartida de una

clase.

2. Se desea asegurar que ninguna instancia adicional pueda ser creada

accidentalmente.

Solución

Page 65: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

192

1. Defina una clase con un constructor privado.

2. La clase construye una única instancia de si mismo.

3. Proporciona un método estático que retorna una referencia a la única

instancia.

Patrón de Diseño Visitor Contexto

1. La estructura de un objeto contiene elementos de clases de múltiples tipos, y

se desea llevar a cabo operaciones que dependen de los tipos de objetos.

2. El conjunto de operaciones debería ser extensible a través del tiempo.

3. El conjunto de los elementos de las clases es fijo.

Solución

1. Defina un tipo de interface visitor que tenga métodos para elementos

visitantes de cada uno de los tipos dados.

2. Cada clase element define un método accept que invoca el método del

elemento visitante enlazado en el parámetro del visitor.

3. Para implementar una operación, defina una clase que implemente el tipo de

interface visitor y proporcione las operaciones de acción para cada tipo de

elemento.

Adicionalmente existen otros Patrones de Diseño complementarios:

• Abstract Factory.

• Bridge.

• Builder.

• Chain of Responsibility.

• Flyweight.

• Interpreter.

• Mediator.

Page 66: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

193

• Memento.

• State.

Page 67: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

194

Bibliografía

[1] A. Bravo y E. Rodríguez: Wavelets aplicado a un sistema Neuronal para la

Identificación de Anomalías en Señales Electrocardiográficas. Libro de actas

XI Reunión de la Asamblea General ISTEC 2001, (Puerto Rico), Diciembre

2001 .

[2] A. Bravo, C. Calla, E. Rodríguez y V. Rojas: Aplicación de la Transformada

Wavelet al procesamiento digital de Señales. Libro de actas Sociedad

Peruana de Matemática Aplicada y Computacional SPMAC 2002, (Trujillo

Perú), Julio 2002.

[3] PhD. Karsten Urban: Wavelet Methods for Elliptic Partial Differential

Equations. Springer, 2003.

[4] PhD. Karsten Urban: Wavelets in Numerical Simulation. Springer, 2002.

[5] D. Novak, D. Cuesta, V. Eck, J.C. Pérez, G. Andreu: Denoising

Electrocardiographic Signals Using Adaptive Wavelets. Libro de actas

Biosignal 2000, pp 18-20, Brno (R. Checa), Junio 2000.

[6] Dr. Mervin J. Goldman : Principios de Electrocardiografia Clínica. Lange

Medical Publications, 1981.

[7] Anthony S. Fauci, Eugene Braunwald, Isselbacher, Jean D. Wilson, Joseph B.

Martin ,Stephen L. Hauser, and Dan L. Longo: Harrison's Principles of

Internal Medicine - 14Th Edition McGraw-Hill Health Professions

Division ,1998.

[8] David Cuesta Frau: Estudio de métodos para procesamiento y agrupación de

Señales Electrocardiográficas. Tesis Doctoral, Universidad Politécnica de

Valencia, Septiembre 2001.

[9] John G. Webster: Design of Cardiac Pacemakers. IEEE PRESS, 1995.

[10] Joseph D. Bronzino: The Biomedical Engineering Handbook. IEEE PRESS

and CRC PRESS, 1995.

[11] Eugenio Hernández y Guido Weiss: A First Course on Wavelets. CRC

PRESS, 1996.

[12] Mladen Victor Wickerhauser: Adapted Wavelet Analysis from Theory to

Page 68: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

195

Software. IEEE PRESS, 1994.

[13] Ripples in Mathematics: The Discrete Wavelet Transform. Springer, 2000.

[14] Ilkka Korhonen, Mark van Gils, and John Gade: The Challenges in Creating

Critical-Care Databases. IEEE Engineering in Medicine and Biology, pp

6258 − , May/June, 2001 .

[15] Robert S. H. Istepanian and Arthur A. Petrosian: Optimal Zonal Wavelet-

Based ECG Compression for a Mobile Telecardiology System. IEEE

Transactions on Information Technology in BioMedicine, VOL. 4, N° 3, pp.

200-211, September 2000.

[16] N. Nikolaev, Z. Nikolov, A. Gotchev, and K. Egiazarian: Wavelet Domain

Wiener Filtering for ECG Denoising using Improved Signal Estimate IEEE, pp.

35813578 − , 2000 .

[17] Rosaria Silipo and Carlo Marchesi: Artificial Neural Networks for Automatic

ECG Analysis IEEE Transactions on Signal Processing, vol. 46, N° 5, pp.

14251417 − , May 1998 .

[18] Valtino X. Afonso, Willis J. Tompkins, Truong Q. Nguyen, and Shen Luo :

ECG Beat Detection Using Filter Banks IEEE Transactions on Biomedical

Engineering, vol. 46, N° 2, pp. 202192 − , February 1999 .

[19] Jun Yao, Qiang Gan, Xue-dong Zhang, and Jin Li : Pruning Algorithm in

Wavelet Neural Network for ECG Signal Classification Proceedings of the

20th Annual International Conference of the IEEE Engineering in Medicine

and Biology Society, vol. 20, N° 3, pp. 14851482 − ,1998 .

[20] Shubha Kadambe, Robin Murray, and G. Faye Boudreaux-Bartels : Wavelet

Transform-Based QRS Complex Detector IEEE Transactions on Biomedical

Engineering, vol. 46, N° 7, pp. 848838 − , July ,1999 .

[21] Zümray Dokur, Tamer Ölmez, and Ertugrul Yazgan : ECG Waveform

Classification Using The Neural Network And Wavelet Transform

Proceedings of The First Joint BMES/EMBS Conference Serving Humanity,

Advancing Technology, Oct. 1613 − , pp. 273 , Atlanta, GA, USA ,1999 .

[22] HA. Kestler, F. Schwenker, G. Hafner, V Hombach, G. Palm, and M. Höher :

Page 69: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

196

Feasibility Study of Complete Neural Net Based Classification of Signal-

Averaged High-Resolution ECGs IEEE Computers in Cardiology, pp.

578575 − ,1999 .

[23] Kei-ichiro Minami, Hiroshi Nakajima, and Takeshi Toyoshima : Real-Time

Discrimination of Ventricular Tachyarrhythmia with Fourier-Transform Neural

Network IEEE Transactions on Biomedical Engineering, Vol. 46 , pp. 185179 − ,

N° 2 , February ,1999 .

[24] Li Gang, Ye Wenyu, Lin Ling, Yu Qilian, and Yu Xuemin: An Artificial-

Intelligence Approach to ECG Analysis IEEE Engineering in Medicine and

Biology, pp. 10095 − , March / April , 2000 .

[25] Zhitao Lu, Dong Youn Kim, and William A. Pearlman: Wavelet Compression

of ECG Signals by the Set Partitioning in Hierarchical Trees Algorithm IEEE

Transactions on Biomedical Engineering, Vol. 47, pp. 856849 − , N° 7,

July , 2000 .

[26] Daniel Lemire, Chantal Pharand, Jean-Claude Rajaonah, Bruce Dubé, and

A. Robert LeBlanc: Wavelet Time Entropy, T Wave Morphology and

Myocardial Ischemia IEEE Transactions on Biomedical Engineering, Vol. 47,

pp. 970867 − , N° 7 , July , 2000 .

[27] Rosli Besar, C. Eswaran, Shahrin Sahib, and R. J. Simpson: On The Choice

Of The Wavelets For ECG Data Compression IEEE, pp. 36173614 − .

[28] Partha Pratim Kanjilal, Sarbani Palit, and Goutam Saha: Fetal ECG

Extraction from Single-Channel Maternal ECG Using Singular Value

Decomposition IEEE Transactions on Biomedical Engineering, Vol. 44, pp.

51-59, N° 1, January 1997 .

[29] Qiuzhen Xue, and B. R. Shankara Reddy: Late Potential Recognition by

Artificial Neural Networks IEEE Transactions on Biomedical Engineering, Vol.

44 , pp. 143132 − , N° 2, February 1997 .

[30] Antti Ruha, Sami Sallinen, and Seppo Nissila: A Real-Time Microprocessor

QRS Detector System with a 1-ms Timing Accuracy for the Measurement of

Ambulatory HRV IEEE Transactions on Biomedical Engineering, Vol. 44 , pp.

Page 70: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

197

167159 − , N° 3 , March 1997 .

[31] Paul Lander and Edward J. Berbari: Time-Frequency Plane Wiener Filtering

of the High-Resolution ECG: Background and Time-Frequency

Representations IEEE Transactions on Biomedical Engineering, Vol. 44 , pp.

255247 − , N° 4 , April 1997 .

[32] Paul Lander and Edward J. Berbari: Time-Frequency Plane Wiener Filtering

of the High-Resolution ECG: Development and Application IEEE Transactions

on Biomedical Engineering, Vol. 44 , pp. 265256 − , N° 4, April 1997 .

[33] Ahmet Baykal, Ravi Ranjan, and Nitish V. Thakor: Estimation of the

Ventricular Fibrillation Duration by Autoregressive Modeling IEEE

Transactions on Biomedical Engineering, Vol. 44 , pp. 355349 − , N° 5 , May

1997 .

[34] Michael L. Hilton: Wavelet and Wavelet Packet Compression of

Electrocardiograms IEEE Transactions on Biomedical Engineering, Vol. 44 ,

pp. 402394 − , N° 5 , May 1997 .

[35] Pedro Gomis, Douglas L. Jones, Pere Caminal, Edward J. Berbari, and Paul

Lander : Analysis of Abnormal Signals Within the QRS Complex of the High-

Resolution Electrocardiogram IEEE Transactions on Biomedical Engineering,

Vol. 44 , pp. 693681− , N° 8 , August 1997 .

[36] Yu Hen Hu, Surekha Palreddy, and Willis J. Tompkins: A Patient-Adaptable

ECG Beat Classifier Using a Mixture of Experts Approach IEEE Transactions

on Biomedical Engineering, Vol. 44 , pp. 899891− , N° 9 , September 1997 .

[37] Brian Bradie: Wavelet Packet-Based Compression of Single Lead ECG IEEE

Transactions on Biomedical Engineering, Vol. 43 , pp. 501493 − , N° 5 , May

1996 .

[38] Cynthia J. Finelli: The Time-Sequenced Adaptive Filter for Analysis of

Cardiac Arrhythmias in Intraventricular Electrograms IEEE Transactions on

Biomedical Engineering, Vol. 43 , pp. 819811− , N° 8 , August 1996 .

[39] Antti Koski and Martti Juhola: Segmentation of Digital Signals Based on

Estimated Compression Ratio IEEE Transactions on Biomedical Engineering,

Page 71: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

198

Vol. 43 , pp. 938928 − , N° 9 , September 1996 .

[40] Silvio Cavalcanti and Enzo Belardinelli: Modeling of Cardiovascular

Variability Using a Differential Delay Equation IEEE Transactions on

Biomedical Engineering, Vol. 43 , pp. 989982 − , N° 10 , October 1996 .

[41] Vaibhava Goel, Ansgar M. Brambrink, Ahmet Baykal, Raymond C. Koehler,

Daniel F. Hanley, and Nitish V. Thakor: Dominant Frequency Analysis of

EEG Reveals Brain´s Response During Injury and Recovery IEEE

Transactions on Biomedical Engineering, Vol. 43 , pp. 10911083 − , N° 11 ,

November 1996 .

[42] Patrick S. Hamilton : A Comparison of Adaptive and Nonadaptive Filters for

Reduction of Power Line Interference in the ECG IEEE Transactions on

Biomedical Engineering, Vol. 43 , pp. 109105 − , N° 1, January 1996 .

[43] R. Martin Arthur, Neal G. Kavesh, H. Dieter Ambos, and Michael E. Cain:

Phase and Group-Delay Characteristics of Signal-Averaged

Electrocardiograms from Patients with Ventricular Tachycardia IEEE

Transactions on Biomedical Engineering, Vol. 42 , pp. 4129 − , N° 1, January

1995 .

[44] S. C. Tai: An Extensive Markov System for ECG Exact Coding IEEE

Transactions on Biomedical Engineering, Vol. 42 , pp. 232230 − , N° 2 ,

February 1995 .

[45] Luca T. Mainardi, Anna M. Bianchi, Giuseppe Baselli, and Sergio Cerutti:

Pole-Tracking Algorithms for the Extraction of Time-Variant Heart Rate

Variability Spectral Parameters IEEE Transactions on Biomedical Engineering,

Vol. 42 , pp. 259250 − , N° 3 , March 1995 .

[46] Y. Ziya Ider, M. Cem Saki, and H. Alper Gucer: Removal of Power Line

Interference in Signal-Averaged Electrocardiography Systems IEEE

Transactions on Biomedical Engineering, Vol. 42 , pp. 735731− , N° 7 , July

1995 .

[47] G. R. Shaw and P. Savard: On the Detection of QRS Variations in the ECG

Page 72: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

199

IEEE Transactions on Biomedical Engineering, Vol. 42, pp. 741736 − , N° 7 ,

July 1995 .

[48] Soo-Chang Pei and Chien-Cheng Tseng : Elimination of AC Interference in

Electrocardiogram Using IIR Notch Filter with Transient Suppression IEEE

Transactions on Biomedical Engineering, Vol. 42 , pp. 11321128 − , N° 11 ,

November 1995 .

[49] Riccardo Poli, Stefano Cagnoni, and Guido Valli: Genetic Design of

Optimum Linear and Nonlinear QRS Detectors IEEE Transactions on

Biomedical Engineering, Vol. 42 , pp. 11411137 − , N° 11, November 1995 .

[50] Wilfried Philips and Geert De Jonghe: Data Compression of ECG's by High-

Degree Polynomial Approximation IEEE Transactions on Biomedical

Engineering, Vol. 39 , pp. 337330 − , N° 4 , April 1992 .

[51] Padma Akkiraju and D. C. Reddy: Adaptive Cancellation Technique In

Processing Myoelectric Activity of Respiratory Muscles IEEE Transactions on

Biomedical Engineering, Vol. 39 , pp. 655652 − , N° 6 , June 1992 .

[52] I. S. N. Murthy and G. S. Durga Prasad: Analysis of ECG from Pole-Zero

Models IEEE Transactions on Biomedical Engineering, Vol. 39 , pp. 751741− ,

N° 7 , July 1992 .

[53] Bin He and Richard J. Cohen: Body Surface Laplacian ECG Mapping IEEE

Transactions on Biomedical Engineering, Vol. 39 , pp. 11911179 − , N° 11 ,

November 1992 .

[54] Christopher J. Wolfkiel and Bruce H. Brundage: Transfer-Function Analysis

of UFCT Myocardial Time-Density Curves by Time-Varying Recursive Least

Squares Analysis IEEE Transactions on Biomedical Engineering, Vol. 41 , pp.

7669 − , N° 1, January 1994 .

[55] Peter Strobach, Klaus Abraham-Fuchs, and Wolfgang Härer: Event-

Synchronous Cancellation of the Heart Interference in Biomedical Signals

IEEE Transactions on Biomedical Engineering, Vol. 41 , pp. 350343 − , N° 4 ,

April 1994 .

Page 73: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

200

[56] Seth Suppappola and Ying Sun: Nonlinear Transform for ECG Signals for

Digital QRS Detection: A Quantitative Analysis IEEE Transactions on

Biomedical Engineering, Vol. 41 , pp. 340397 − , N° 4 , April 1994 .

[57] Nitish V. Thakor, Ananth Natarajan and Gordon F. Tomaselli: Multiway

Sequential Hypothesis Testing for Tachyarrhythmia Discrimination IEEE

Transactions on Biomedical Engineering, Vol. 41 , pp. 487480 − , N° 5 , May

1994 .

[58] Mohammed Ferdjallah and Ronald E. Barr: Adaptive Digital Notch Filter

Design on the Unit Circle for the Removal of Powerline Noise from Biomedical

Signals IEEE Transactions on Biomedical Engineering, Vol. 41 , pp. 536529 − ,

N° 6 , June 1994 .

[59] Jurgen G. C. Kemmelings, André C. Linnenbank, Sylvia L. C. Muilwijk, Arne

SippensGroenewegen, Abraham Peper, and Cornelis A. Grimbergen:

Automatic QRS Onset and Offset Detection for Body Surface QRS Integral

Mapping of Ventricular Tachycardia IEEE Transactions on Biomedical

Engineering, Vol. 41 , pp. 835830 − , N° 9 , September 1994 .

[60] Kazuo Yana, J. Philip Saul, Ronald D. Berger, Michael H. Perrott, and

Richard J. Cohen: A Time Domain Approach for the Fluctuation Analysis of

Heart Rate Related to Instantaneous Lung Volume IEEE Transactions on

Biomedical Engineering, Vol. 40 , pp. 8174 − , N° 1, January 1993 .

[61] P. E. Trahanias: An Approach to QRS Complex Detection Using

Mathematical Morphology IEEE Transactions on Biomedical Engineering, Vol.

40 , pp. 205201− , N° 2 , February 1993 .

[62] Yasemin M. Akay, Metin Akay, Walter Welkowitz, John L. Semmlow, and

John B. Kostis : Noninvasive Acoustical Detection of Coronary Artery

Disease: A Comparative Study of Signal Processing Methods IEEE

Transactions on Biomedical Engineering, Vol. 40 , pp. 578571− , N° 6 , June

1993 .

[63] Gil Nave and Arnon Cohen: ECG Compression Using Long-Term Prediction

IEEE Transactions on Biomedical Engineering, Vol. 40 , pp. 885877 − , N° 9 ,

Page 74: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

201

September 1993 .

[64] T. Rolf Turner, Peter J. Thomson, and Murray A. Cameron: Statistical

Discriminant Analysis of Arrhythmias using Intracardial Electrograms IEEE

Transactions on Biomedical Engineering, Vol. 40 , pp. 989985 − , N° 9 ,

September 1993 .

[65] Wilfried Philips: ECG Data Compression with Time-Warped Polynomials

IEEE Transactions on Biomedical Engineering, Vol. 40 , pp. 11011095 − , N° 11,

November 1993 .

[66] Mario Merri, Michela Alberti, and Arthur J. Moss: Dynamic Analysis of

Ventricular Repolarization Duration From 24-Hour Holter Recordings IEEE

Transactions on Biomedical Engineering, Vol. 40 , pp. 12251219 − , N° 12 ,

December 1993 .

[67] Patrick S. Hamilton and Willis J. Tompkins: Compression of the Ambulatory

ECG by Average Beat Subtraction and Residual Differencing IEEE

Transactions on Biomedical Engineering, Vol. 38 , pp. 259253 − , N° 3 , March

1991.

[68] Patrick S. Hamilton and Willis J. Tompkins: Theoretical and Experimental

Rate Distortion Performance in Compression of Ambulatory ECG's IEEE

Transactions on Biomedical Engineering, Vol. 38 , pp. 266260 − , N° 3 , March

1991.

[69] G. Ramachandran, S. Swarnamani, and Megha Singh: Reconstruction of

Out-of-Plane Cardiac Displacement Patterns as Observed on the Chest Wall

During Various Phases of ECG by Capacitance Transducer IEEE

Transactions on Biomedical Engineering, Vol. 38 , pp. 385383 − , N° 4 , April

1991.

[70] Megha Singh and G. Ramachandran: Reconstruction of Sequential Cardiac

In-Plane Displacement Patterns on the Chest Wall by Laser Speckle

Interferometry IEEE Transactions on Biomedical Engineering, Vol. 38 , pp.

489483 − , N° 5 , May 1991.

Page 75: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

202

[71] Edward A. Clancy, Joseph M. Smith, and Richard J. Cohen: A Simple

Electrical-Mechanical Model of the Heart Applied to the Study of Electrical-

Mechanical Alternans IEEE Transactions on Biomedical Engineering, Vol. 38 ,

pp. 559551− , N° 6 , June 1991.

[72] Nitish V. Thakor, Yi-Sheng Zhu: Applications of Adaptive Filtering to ECG

Analysis: Noise Cancellation and Arrhythmia Detection IEEE Transactions on

Biomedical Engineering, Vol. 38 , pp. 793785 − , N° 8 , August 1991.

[73] Hans F. Schels, Ralph Haberl, Gerhard Jilge, Peter Steinbigler, and Gerhard

Steinbeck: Frequency Analysis of the Electrocardiogram with Maximum

Entropy Method for Identification of Patients with Sustained Ventricular

Tachycardia IEEE Transactions on Biomedical Engineering, Vol. 38 , pp.

826821− , N° 9 , September 1991.

[74] Stephane G. Mallat: A Theory for Multiresolution Signal Decomposition: The

Wavelet Representation IEEE Transactions on Pattern Analysis and Machine

Intelligence, Vol. 11, pp. 693674 − , N° 7 , July 1989 .

[75] Keshab K. Parhi, and Takao Nishitani: VLSI Architectures for Discrete

Wavelet Transforms IEEE Transactions on Very Large Scale Integration

(VLSI) Systems, Vol. 1, pp. 202191− , N° 2 , June 1993 .

[76] Jerome M. Shapiro: Embedded Image Coding Using Zerotrees of Wavelet

Coefficients IEEE Transactions on Signal Processing, Vol. 41 , pp. 34623445 − ,

N° 12 , December 1993 .

[77] Masahiko Okada: A Digital Filter for the QRS Complex Detection IEEE

Transactions on Biomedical Engineering, Vol. BME- 26 , N° 12 , December

1979 .

[78] Gary M. Friesen, Thomas C. Jannett, Manal Afify Jadallah, Stanford L. Yates,

Stephen R. Quint, and H. Troy Nagle : A Comparison of the Noise Sensitivity

of Nine QRS Detection Algorithms IEEE Transactions on Biomedical

Engineering, Vol. 37 , pp. 9385 − , N° 1, January 1990 .

[79] M. L. Ahlstrom and W. J. Tompkins : Digital Filters for Real-Time Signal

Processing Using Microprocessors IEEE Transactions on Biomedical

Page 76: 3. Contenido Tesis Ingeniero Electronico Anexo & Bibliografia

203

Engineering, Vol. BME-32 , pp. 713708 − , N° 9 , September 1985 .

[80] Thomas W. Parks and James H. McClellan : Chebyshev Approximation for

Nonrecursive Digital Filter with Linear Phase IEEE Transactions on Circuit

Theory, Vol. CT-19 , pp. 194189 − , N° 2 , March 1972 .

[81] Fritz G. Braun: Nonrecursive Digital Filters for Detecting Multifrequency

Code Signals IEEE Transactions on Acoustics, Speech, and Signal

Processing, pp. 256250 − , N° 9 , June 1975 .

[82] Lawrence R. Rabiner, James H. McClellan, and Thomas W. Parks: FIR

Digital Filter Design Techniques Using Weighted Chebyshev Approximation

Proceedings of the IEEE, Vol. 63 , pp. 610595 − , N° 4 , April 1975 .

[83] Cuiwei Li, Chongxun Zheng, and Changfeng Tai: Detection of ECG

Characteristics Points Using Wavelet Transform IEEE Transactions on

Biomedical Engineering, Vol. 42 , pp. 2821− , N° 1, January 1995 .

[84] Mario Merri, David C. Farden, Jack G. Mottley, and Edward L. Titlebaum:

Sampling Frequency of the Electrocardiogram for Spectral Analysis of the

Heart Rate Variability IEEE Transactions on Biomedical Engineering, Vol. 39 ,

pp. 10699 − , N° 1, January 1990 .