Está en la página 1de 76

Apndice A

Cdigo Fuente
Debido a lo extenso que resulta la codificacin de los algoritmos, solo se
citar las partes ms resaltantes, dejando toda la informacin de la tesis en un
CD para mayor referencia.

A.1. Cdigo C y Matlab


A.1.1. Codificacin del Driver en GCC para Lectura de la BD
Physionet - MIT
Para poder utilizar la base de datos de seales ECG provenientes de
Physionet-MIT se tuvo que desarrollar un driver en lenguaje C para el
compilador GCC que permite pasar las seales del sistema operativo Linux
hacia el sistema operativo Windows para procesarlo en Matlab.

Instalacin en entorno Linux de Physionet WFDB:

A continuacin (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 instalacin: ./configure
Configurarlo en el sistema: make install

Instalacin de las libreras 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

128

Nota: El tiempo aproximado para estos pasos es de aproximadamente 40


minutos.
Compilacin 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 seales 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 libreras propias de
Physionet, como se especifica en el manual de esta base de datos. En concreto
el cdigo del programa es:

129

/*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;

130

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 cdigo de comprobacin */
exit(0);
}

A.1.2. Codificacin de los Algoritmos de las Wavelets y las


Redes Neuronales en MATLAB
A continuacin se muestras extractos de cdigo en Matlab que
implementan los algoritmos de las Wavelet y las Redes Neuronales aplicadas a
las seales 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;

131

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

Cdigo utilizado para lectura de datos: (lee.m)


% Copy Right ABV
% Lectura de Seales Normales
fid01 = fopen('16265.txt','r');

132

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 Seales 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

133

% 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 Seales 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 Seal de Entrada:
% Procesa Seal Normal
% Canal 1
P=length(Nor_1);

134

Q=min(Nor_1);
Nor_1=Nor_1-Q;
Delta=max(Nor_1)-min(Nor_1);
Nor_1=Nor_1/Delta; % Rango de la Seal 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 Seal entre 0 y 1
% Si se desea un DC=0, agregar:
% Nor_2=Nor_2-(sum(Nor_2)/P);
% Procesa Seal 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 Seal entre 0 y 1
% Si se desea un DC=0, agregar:
% Tav_1=Tav_1-(sum(Tav_1)/P);
% Procesa Seal 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 Seal 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 Seal 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 Seales Cardiacas...
zoom on
%figure(1)
figure
subplot(3,1,1), plot(Nor_1,'red'),title('Seal Normal')
subplot(3,1,2), plot(Asv_1,'blue'),title('Arritmia Supra Ventricular')

135

subplot(3,1,3), plot(Tav_1,'green'),title('Taquiarritmia Ventricular')


%figure(2)
figure
subplot(3,1,1), plot(Nor_2,'red'),title('Seal 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('Seal 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

136

% para reduccion del Ruido


Es importante recordar, que para obtener estos resultados, se tuvieron que realizar
diversas pruebas, por ejemplo el nmero de neuronas en las capas de entrada, oculta y
salida; as como tipos de funciones de transferencia..
El cdigo 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
informacin 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

137

(lee_371.m)
%Lee todas las seales de entrenamiento
lee01_entrenamiento % Seal Nor 16265 Asv 800 Tav cu03
lee02_entrenamiento % Seal Nor 16265 Asv 801 Tav cu05
lee03_entrenamiento % Seal Nor 16265 Asv 802 Tav cu06
lee04_entrenamiento % Seal Nor 16265 Asv 803 Tav cu07
lee05_entrenamiento % Seal Nor 16272 Asv 804 Tav cu08
lee06_entrenamiento % Seal Nor 16272 Asv 806 Tav cu09
lee07_entrenamiento % Seal Nor 16272 Asv 807 Tav cu10
lee08_entrenamiento % Seal Nor 16272 Asv 808 Tav cu11
lee09_entrenamiento % Seal Nor 16273 Asv 809 Tav cu12
lee10_entrenamiento % Seal Nor 16273 Asv 810 Tav cu13
lee11_entrenamiento % Seal Nor 16273 Asv 811 Tav cu14
lee12_entrenamiento % Seal 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)

138

% 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 Seales 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

139

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 Seales 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 Seales 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

140

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 Seal de Entrada:
% Procesa Seal 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 Seal 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 Seal entre 0 y 1
% Si se desea un DC=0, agregar:
% Nor_2=Nor_2-(sum(Nor_2)/P);
% Procesa Seal Taqui Arritmia Ventricular
% Canal 1
P=length(Tav_1);
Q=min(Tav_1);

141

Tav_1=Tav_1-Q;
Delta=max(Tav_1)-min(Tav_1);
Tav_1=Tav_1/Delta; % Rango de la Seal entre 0 y 1
% Si se desea un DC=0, agregar:
% Tav_1=Tav_1-(sum(Tav_1)/P);
% Procesa Seal 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 Seal 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 Seal 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 Seales Cardiacas...
zoom on
%figure(1)
%figure
%subplot(3,1,1), plot(Nor_1,'red'),title('Seal 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('Seal 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')

142

%
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. Cdigo Java y C Embebido para MPLAB


A.2.1. Codificacin en Java del Servlet
Para poder utilizar desplegar la aplicacin en el servidor web Tomcat, se
utiliz la tecnologa de los Servlets de Java, en donde se program la lgica
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" ;
143

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());
}

144

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();

145

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 implementacin de los algoritmos de Redes Neuronales en Java,


se ha visto conveniente utilizar el Framework JOONE engine, que provee un
conjunto de libreras especialmente modelas y diseadas para dicha tarea.
Como primer paso, instalar dichas libreras ejecutando el instalador:
JooneEditor1.2.1-Win.exe.
En resumen, se ha investigado y desarrollado adaptaciones de aplicaciones en Java que
permitan analizar las seales ECG utilizando diversas tcnicas:

Anlisis en el Tiempo.
Anlisis en Frecuencia.
Anlisis Wavelet.
Anlisis 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 seales ECG, as como la informacin adicional requerida para su diagnostico.

146

Apndice B
B.1: Glosario de Trminos
A continuacin se detalla algunos de los trminos usados en la tesis:
Trmino

Definicin

SE

Software Engineering o Ingeniera de Software.

FIIS

Facultad de Ingeniera Industrial y de Sistemas.

UML

Lenguaje de Modelado Unificado.

TIC

Tecnologa de Informacin y Comunicacin.

J2EE

Java para Edicin Empresarial.

JVM

Mquina Virtual de Java.

JSP

Pgina de Servidor Java.

J2SE

Java para Edicin Estndar.

J2ME

Java para Micro Edicin.

W3C

World Wide Web Consortium.

TCP/IP

Protocolo de Control de Transmisin / Protocolo de Internet.

RPC

Llamada a Procedimiento Remoto.

IEEE

Instituto de Ingenieros Electricistas y Electrnicos.

AIC

Advanced Industrialized Countries.

TIC

Tecnologas de la informacin y la comunicacin.

RPC

Llamada a Procedimiento Remoto.

TCP

Protocolo de Control de Transmisin.

IP

Protocolo de Internet.

RMI

Java Remote Method Invocation.

OMG

Grupo de Gestin de Objetos.

DCOM
RMI-IIOP

Modelo de Objetos de Componentes Distribuidos.


Internet Inter-Orb Protocol.

JNDI

Interfaz de Nombrado y Directorio Java.

JDBC

Java Database Connectivity.

JTS

Java Transaction Service.

147

B.2: Nomenclatura y Acrnimos


A continuacin se detalla algunos de los trminos usados en la tesis:

CWT
DWT
SWT
FT
FFT
WT
IWT
ECG
FIR
IIR
SNR

Transformada Wavelet Continua.


Transformada Wavelet Discreta.
Transformada Wavelet Semidiscreta.
Transformada de Fourier.
Transformada Rpida de Fourier.
Transformada Wavelet.
Transformada Wavelet Inversa.
Sen~al Electrocardiogrfica.
Filtro de respuesta impulsional finita.
Filtro de respuesta impulsional infinita.
Relacin Sen~al a Ruido

148

Nomenclatura :
f (t )
f [ n]
C ( a, b)
C[i, j ]

Funcin continua.
Funcin Discreta.
Coeficientes de la transformada Wavelet continua.
Coeficientes de la transformada Wavelet discreta.
Smbolo para " unin de ".
Smbolo para " inclusin de ".
Smbolo para " pertenece a ".

a ,b (t )
j , k [n]
a ,b (t )
j , k [ n]

Wavelet continua.
Wavelet discreta.
Funcin de escalado continua.
Funcin de escalado discreta.

h[n]
g[ n ]

Filtro pasa bajo discreto.


Filtro pasa alto discreto.

G
H
G
H
G, H , G, H

Operador de pasa alto y diezmado por dos.


Operador de pasa bajo y diezmado por dos.
Operador de pasa alto e interpolacin por dos.
Operador de pasa bajo e interpolacin por dos.
Representacin matricial de los operadores anteriores.

I
W
N ( , 2 )

Matriz Identidad .
Matriz Wavelet.
Ruido blanco gausiano de media y varianza 2 .

s ( x)dx
s [n]

Umbral para recortar los coeficientes Wavelet.


Energa de la sen~al contnua s ( x).
Energa de la sen~al discreta s[n].

x[n]

Valor medio de la sen~al discreta x[n].

149

Apndice C
Referencias de Internet
La siguiente lista es una recopilacin de dominios pblicos 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

Descripcin y Teora sobre Anlisis Multi - Resolucin.


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

Software para anlisis de seales acsticas.


http://www.ecgcorp.com/velav/index.html

Informacin principalmente sobre acstica y vibraciones.


minhdo/wavelet _ course/
Informacin til sobre procesamiento de seales digitales mediante wavelets, con
ejercicios en Matlab.
http://lcavwww.epfl.ch/

http://www.cosy.sbg.ac.at/ uhl/wav.html
Links a otras pginas dedicadas a wavelets y procesamiento de seales.
http://www.che.utexas.edu/ misra/wavelet.html
Pequea gua de libros y software para utilizacin de wavelets.
http://www-stat.stanford.edu/ wavelab/
Completo Software para Matlab.
http://www.isye.gatech.edu/ brani/
Pgina 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.


chaplais/Wavetour _ presentation/Wavetour _ presentation _ US.html
Informacin sobre wavelet y Fourier, con tpicos tales como: anlisis de frecuencia,
wavelets didicas y filtrado discreto, entre otros.
http://cas.ensmp.fr/

150

http://www.spd.eee.strath.ac.uk/ interact/fourier/fft.html
Tutorial sobre la Transformada Rpida de Fourier.
http://users.ox.ac.uk/ ball0597/Fourier/
Informacin variada sobre anlisis 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

Introduccin 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 pgina 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.
_ html/index.html
Informacin sobre Fourier y Wavelet.
http://sepwww.stanford.edu/public/docs/pvi/toc

http://www.wavelet.org

Completa pgina sobre el tema.


http://www.mathsoft.com/wavelets.html

Gran lista de papers sobre wavelets clasificados por temas de investigacin.


http://www.princeton.edu/ icd/
Pgina de Ingrid Daubechies, cuyo campo de inters se focaliza en el anlisis tiempofrecuencia utilizando wavelets.

donoho/
Pgina de Dave Donoho, cuya principal campo de investigacin es limpieza de ruido
utilizando mtodos estadsticos en conjunto con wavelets.
http://www-stat.stanford.edu/

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

Pgina de Teophanis Sapatinas, cuyas reas de inters son: Teora y aplicacin de


wavelets en el anlisis estadstico de seales de tiempo, Utilizacin de wavelets en el
procesamiento de seal e imgen.
http://euclides.uniandes.edu.co/ wavelets/
Pgina de la Universidad de los Andes, Colombia, con informacin terica sobre
wavelets.

rpolikar/WAVELETS/WTtutorial.html
Prctico tutorial wavelet.

http://www.public.iastate.edu/

151

Apndice D
D.1: Generalidades de los Microprocesadores
En este anexo se presentan los conceptos de las tecnologas de los
sistemas web y se discuten algunas metodologas de construccin de software
as como la tecnologa de los Microcontroladores de la familia Microchip.

Descripcin 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 comunicacin con la PC ser a travs del puerto serial RS232.

Para

obtener

la

seal

ECG

de

simulacin

desde

el

microcontrolador, previamente se grabarn las muestras desde la base


de datos ECG del MIT.

Caractersticas generales del DSPIC33FJ256GP710


Un microcontrolador es un computador completo (microprocesador + puertos de
E/S + memoria + otros perifricos) (Fig. D.1), aunque de limitadas prestaciones,
se destina a gobernar una sola tarea con el programa que reside en su memoria,
sus lneas de entrada/salida soportan el conexionado de los sensores y
actuadores del dispositivo a controlar. (Fig. D.1)

152

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), tambin 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 lneas de sus buses de direcciones, datos


y control, para permitir conectarle con la Memoria y los mdulos de E/S y
configurar un computador implementando por varios circuitos integrados. Se dice
que un microprocesador es un sistema abierto porque su configuracin es
variable de acuerdo con la aplicacin a la que destine.

153

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 tamao 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
adems un bus de 8 bits que lo conecta con la memoria, deber manejar datos e
instrucciones de una o ms unidades de 8 bits (bytes) de longitud. Cuando deba
acceder a una instruccin o dato de ms de un byte de longitud, deber realizar
ms de un acceso a la memoria. Por otro lado este bus nico limita la velocidad
de operacin del microprocesador, ya que no se puede buscar en memoria una
nueva instruccin, antes de que finalicen las transferencias de datos que
pudieran resultar de la instruccin anterior.
Es decir que las dos principales limitaciones de esta arquitectura
tradicional son:

154

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 operacin (o ancho de banda de operacin) 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 diseo de programas con cdigo
automodificable mas no auto reconfigurable en cuanto a su arquitectura interna,
es decir se puede reconfigurar el cdigo de aplicacin, mas no su arquitectura
interna del microprocesador que se encuentra dentro del microcontrolador.

CPU

Memoria
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 Cmputo, o RISC (Reduced Instruction Set Computer), el conjunto de
instrucciones y el bus de la memoria de programa pueden disearse de manera
tal que todas las instrucciones tengan una sola posicin de memoria de
programa. Adems, como los buses son independientes, el CPU puede estar
accediendo a los datos para completar la ejecucin de una instruccin, y al
mismo tiempo estar leyendo la prxima instruccin a ejecutar.
Se puede observar claramente que las principales ventajas de esta
arquitectura son:
Que el tamao de las instrucciones no esta relacionado con el de los datos, y
por lo tanto puede ser optimizado para que cualquier instruccin ocupe una sola
posicin 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 operacin.

155

Una pequea 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 fsicamente en la memoria de programa (por ejemplo en la
EPROM de un microprocesador). (Fig. D.4)

Memoria
De Programa

Memoria
De Datos

CPU
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 comunicacin de 16 bits entre la memoria
de Data y la CPU, y un bus de comunicacin de 24 bits entre la Memoria de
Programa y la CPU. Una caracterstica 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 tcnica se conoce como PSV o visibilidad de espacio
de programa que en esencia segmenta la memoria de Programa en pginas que
encaja en tamao con un segmento de memoria PSV previamente definido en la
Memoria de Data, de modo que a travs de un puntero de Memoria de pgina en
la Memoria de Data pueda ser copiado a este segmento de memoria PSV
previamente definido en la Memoria de Data (Fig. D.5).

156

16 bit
window

Memoria de
Programa
(12MB)

24

dsPIC33F
RISC
MAC
CPU
(dsPIC)

16

Memoria de
Data
(64KB)

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

El Procesador Microchip
Es el elemento ms importante del microcontrolador y determina sus
principales caractersticas, tanto a nivel hardware como software. Se encarga de
direccionar la memoria de instrucciones, recibir la instruccin en curso, su
descodificacin y la ejecucin de la operacin que implica dicha instruccin, as
como la bsqueda de los operndoos 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 nmero de
procesadores usados en los microcontroladores estn basados en la filosofa
CISC. Disponen de ms de 80 instrucciones maquina en su repertorio algunas
de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para
una ejecucin.
RISC (Computadores de Juego de Instrucciones Reducido): Tanto la industria de
los computadores comerciales como la de los microcontroladores estn
decantndose hacia la filosofa 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

157

instrucciones, adems de ser muy reducido, es especifico, es decir, las


instrucciones se adaptan a las necesidades de la aplicacin prevista.
La familia del dsPIC33F tiene una velocidad de procesamiento mxima 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 modificacin 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.
INTRC w/PLL
12 256 KB
Flash Memory

1 30 KB
Data Memory

8-channel

(3-9) 16b/32b Timers

DMA

WDT & Pwr Mgmt.

Interrupt
Control

40 MIPS 16-bit

Peripheral Bus

(1-2) 1.1Msps 10b ADC

Memory Bus

(1-2) 500Ksps 12b ADC


(1-2) UART w/LIN & IrDA

(1-2) I2C

16b ALU

16 x 16b W
Register Array

17b x 17b
Multiply

Dual AGU
X&Y

JTAG
Interface

Barrel
Shifter

(0-2) ECAN

DSP Engine

Dual 40b
Accumulators

(4-8) MC PWM

(1-2) SPI
Input Capture
Output Compare/PWM

Codec I/F
MC QEI
18 - 100-pin Packages

Figura D.6: Arquitectura de la Familia DSPIC33F.


Las caractersticas bsicas del dsPIC se sealan a continuacin:
o El registro de instrucciones tiene 24 bits de tamao con 16 bits para
mantener los datos y 8 bits para la localizacin 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 tensin puede ir de 2.5 V a 5 V con voltaje regulado.

158

INTRC w/PLL
(2-5) 16b/32b Timers

12 - 144 KB

0.5 - 8 KB

1 - 4 KB

Flash Memory

Data Memory

EEPROM

WDT & Pwr Mgmt.


1 Msps 10b ADC

Memory Bus

16b ALU

16 x 16b W
Register Array

17b x 17b
Multiply

Dual AGU
X&Y

JTAG
Interface

Barrel
Shifter

DSP Engine

Dual 40b
Accumulators

Peripheral Bus

30 MIPS 16-bit

Interrupt
Control

-or- 200 Ksps 12b ADC


(1-2) UART w/LIN & IrDA

(1-2) I2C
(1-2) SPI
Input Capture
Output Compare/PWM

(0-2) CAN
Codec I/F
MC PWM
MC QEI
18 - 80-pin Packages

Figura D.7: Arquitectura de la Familia DSPIC30F.

12 256 KB
Flash Memory

1 16 KB
Data Memory

8 Channel

INTRC w/PLL

DMA

(3-9) 16b/32b TimersYY


WDT & Pwr Mgmt.

Memory Bus

16 x 16b W
Register Array

17b x 17b
Multiply

Address
Generator

JTAG
Interface

Multi-bit
Shifter

Peripheral Bus

Interrupt
16b ALU
Control

Interrupt
Control

40 MIPS 16-bit Core

1.1 Msps 10b ADC


500 Ksps 12b ADC
(1-2) UART w/LIN & IrDA

(1-2) I2C
(1-2) SPI
Input Capture
Output Compare/PWM

(0-2) ECAN
18 - 100-pin Packages

Figura D.8: Arquitectura de la Familia PIC24H.


159

INTRC w/PLL
16 128 KB
Flash Memory

WDT & Pwr Mgmt.

4 8 KB

500 Ksps 10b ADC

Data Memory

Memory Bus

16 x 16b W
Register Array

17b x 17b
Multiply

Address
Generator Unit

JTAG
Interface

Multi-bit
Shifter

Input Capture

Peripheral Bus

Interrupt
16b ALU
Control

Interrupt
Control

16 MIPS 16-bit Core

(5) 16b/32b Timers

Output Compare/PWM
(2) UART w/LIN & IrDA

(2) SPI
(2) IC

Peripheral Pin Select

(2) Comparators

CRC
Real Time CC
PMP
28 - 100-pin Packages

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 Tambin se tiene temporizadores de 16 bits y tambin permite
reagruparlos en un bloque de 32 bits.
o
o 9 pines conectados a mdulos conversores analgico 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 seales, es capaz de
realizar operaciones matemticas muy rpido, as la multiplicacin, 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

160

usuario y otro es el espacio de memoria para configuracin. 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 ubicarn los
datos. En el rea de registros de configuracin se ubican los registros con los
cuales modificaremos el comportamiento del dsPIC.

23
0

0
PC<22:1>

Espacio de Usuario

Vector Reset
Tabla del Vector de Interrupcin
Tabla Alternativa del Vector de
Interrupcin

0 0 0 0 0 0h
0 0 0 0 0 4h
0 0 0 1 0 4h
0 0 0 2 0 0h

Memoria Flash del


Usuario en el Chip
Configuracin Flash
No implementado

Espacio de
Configuracin

7 F F F F Eh
Registros de Configuracin

ID del Dispositivo
F F F F F Eh

Figura D.10: Organizacin de la Memoria del Programa.

161

Caractersticas de la Visibilidad del Espacio de Programa PSV


Esta tcnica ofrece ventajas tales como:

No se necesita la asignacin 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.
Direccin
Byte MS

2 KB
Espacio SFR

0x0001
0x07FF
0x0801

16-bits
MSB

LSB

Espacio SFR

Direccin
Byte LS
0x0000
0x07FE
0x0800

RAM Data X
Espacio SRAM

RAM Data Y
2 KB
Puerto-Dual
DMA RAM

Memoria de
Data Cercana
8 KB

0x1FFE

Puerto Dual RAM


0x8000

0x8001

No
implementado

Mapeo opcional
hacia la Memoria de
Programa usando
PSV

0xFFFF

0xFFFE

Figura D.11: Organizacin de la Memoria de Datos.

Interrupciones
Las interrupciones constituyen quiz el mecanismo ms importante para la
conexin del microcontrolador con el mundo exterior, sincronizando la ejecucin
de programas con acontecimientos externos. El dsPIC33F tiene 30 fuentes de
interrupcin y 4 excepciones de procesador, los cuales estn basados en un
esquema de prioridades.

162

Priorida
d
Esttica

CPU
Interrupcin
del
CPU

8
Interrupts
7
0
Prioridad
Natural

PRIORIDAD
DEL CPU

Prioridad Seleccionable
por el Usuario

TRAPS
15

Controlador de
Interrupcin

Direccin

Vector de
Direccin

117
Figura D.12: Organizacin 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 cdigo 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 peticin de interrupcin, que si se acepta, guarda el valor del PC
actual en la Pila. Cada causa de interrupcin est controlada mediante dos bit.
Uno de ellos acta como sealizador o flag que indica si se ha producido o no la
interrupcin, y la otra funciona como bit de permiso o prohibicin de la
interrupcin en s.
En el dsPIC todos los flags de interrupcin son muestreados en el
comienzo de cada instruccin por el registro IFSx. Un requerimiento de
interrupcin pendiente (IRQ) es indicado por un bit de flag igual a 1 en un

163

registro IFSx. El IRQ causa una interrupcin que ocurre si el correspondiente bit
en el registro de habilitacin de interrupcin 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 Interrupcin (IVT) y
transferir la direccin que contiene el vector de interrupcin al contador de
programa. La tabla de vectores de interrupcin (IVT) y la tabla de interrupciones
alternativa (AIVT) estn 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 peticin de interrupcin se encuentran en estos tres
registros. Las banderas son activadas por sus respectivos perifricos o seales
externas y son reseteadas va software.
o IEC0<15:0>, IEC1<15:0>, IEC2<15:0>
Todos los bits de control que habilitan interrupciones estn en estos tres
registros. Estos bits de control son usados para individualmente habilitar
interrupciones desde los perifricos o seales 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 explcitamente 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 ncleo 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 seales de
peticin de interrupcin externa y el uso de la tabla alternativa de interrupciones.

Los bits de Prioridad de Interrupcin asignable por el usuario (IP<2:0>) para


cada fuente de interrupcin individual estn 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

164

es ledo como cero 0. Estos bits definen el nivel de prioridad asignado a una
interrupcin en particular, por el usuario. Los niveles de prioridad elegibles
empiezan en 0, como la prioridad ms baja, y nivel 7, como la ms alta prioridad.
Dado que a ms de una interrupcin se le puede asignar la misma prioridad, se
provee una tabla de prioridades con un nivel dado de prioridad, este mtodo se
llama orden natural de prioridades (Natural Order Priority), con lo que si una
interrupcin tiene la misma prioridad que otra, entonces se recurre a la prioridad
dada en tabla natural de prioridades, y la que interrupcin esta primero en esta
tabla se ejecuta primero.

Interface de Comunicacin Serial RS232


Para comprender el protocolo de comunicacin serial, hay que tener en cuenta
que este tipo de comunicacin elctrica precede en bastantes aos a la
aparicin de los ordenadores electrnicos. La comunicacin serie tiene sus
races en el telgrafo, que posteriormente deriv en el teleimpresor (Telex),
donde se utilizaron diversos protocolos de comunicacin; los ms famosos el
Morse el Baudot y el ASCII.

Posteriormente las comunicaciones serie

informticas adoptaron algunos de los usos y costumbres existentes


adaptndolos a las nuevas necesidades, empezando por su propio sistema de
cdigos (ASCII), pero que conservando algunas reminiscencias de sus
ancestros telegrficos.

Tanto el sistema de codificacin ASCII (American Standard Code for


Information Interchange, como el propio estndar RS-232, nacieron pensado en
transmisiones serie utilizadas casi exclusivamente para tele-impresin. Las
seales y protocolos empleados se referan a cuestiones tales como sonar una
campana para recabar la atencin del operador, y enviar un retorno de carro CR
(Carriage Return) o un salto de lnea LF (Line feed) -eran impresoras
electromecnicas-. La comunicacin serie entre ordenadores no requiere tantas
seales. Sin embargo, se siguieron utilizando la terminologa y muchas de las
seales del estndar primitivo.

165

En la comunicacin serie los bits se transmiten uno detrs de otro (de ah


el nombre), lo que hace que sean mucho ms lentas que sus homlogas
"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 simultneamente; los
equipos se alternan en la transmisin, uno transmite mientras el otro
recibe.
o Full-duplex: Ambos equipos transmiten simultneamente. Para ello se
requieren dos lneas independientes, transmisin y recepcin; la lnea de
transmisin de un equipo se conecta a la entrada de recepcin del otro y
viceversa. Los puertos serie del PC son capaces de utilizar este modo.
o Sncronas: Los dispositivos que comunican se sincronizan en el
momento inicial de la transmisin y constantemente se intercambian
informacin a una cadencia predefinida. Con objeto de mantener la
sincronizacin, cuando no existen datos que enviar se transmiten
caracteres sin valor ("idle characters). Esta transmisin es ms rpida
que la asncrona porque no es necesario transmitir seales de inicio o fin
de dato; constantemente se reciben caracteres que pueden ser de datos
o sin valor (de relleno).
o Asncronas: En este modo de transmisin no existe sincronizacin; no es
necesario enviar caracteres de relleno, pero hay que indicar cuando
empieza un dato y cuando termina. Esto se hace incluyendo en la
transmisin seales de inicio y fin de dato (bits de "start" y "stop"). En la
comunicacin asncrona, la informacin (cada carcter) es enviada en el
interior de un cuadro ("Frame") de tamao variable, que comienza con la
mencionada seal de inicio y termina con la de final; es el tipo de
comunicacin utilizada en los puertos serie del PC.
En este tipo de comunicacin, 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
parmetros
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 transmisin de 1200 baudios con 8 bits de datos sin paridad
y un bit de Stop.

166

Los parmetros anteriores estn relacionados con la forma en que se transmite


la informacin serie. En esta comunicacin cada carcter va incluido en un
cuadro ("Frame"); generalmente el comienzo es un bit de inicio (siempre un 1);
despus le sigue el dato, que puede ser de 5 a 8 bits de longitud; despus
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 transmisin ("Connection speed") es la cantidad de datos
transmitidos en unidad de tiempo. Se expresa en bits por segundo (bps). En las
transmisiones serie a travs de lneas telefnicas, en las que se emplean
mdems era frecuente utilizar como medida de velocidad el Baudio ("Baud rate"),
en honor de Emile Baudot. Baudio se define como el nmero de veces que
cambia la portadora en un segundo. La velocidad que puede emplearse
depende en gran medida de la calidad del medio de transmisin (calidad de la
lnea), que si (como es frecuente) se trata de lneas telefnicas, depende a su
vez de la distancia.
Longitud del carcter ("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 segn se trate del juego de caracteres US-ASCII
o el extendido. El conjunto de bits que componen un carcter se denominan bits
de dato ("Data bits")
Paridad ("Parity"). Para poder comprobar la calidad de la transmisin se suele
utilizar un sistema de control de paridad que aade un bit a los bits de
datos. Los sistemas utilizados son:
o
o
o
o
o

Paridad par ("Even")


Paridad impar ("Odd")
Paridad marca ("Marck")
Paridad espacio ("Space")
Sin paridad (no se aade ningn bit de paridad al datagrama)

167

16

Internal Data Bus


Word Write

Word/Byte
Write
UTX8

UxMODE
UxTXREG

UxSTA

Transmit Control
- Control UxTSR

- Control Buffer
-Generate Flags

Transmit FIFO
Load UxTSR

UxTXIF

UTXBRK
(Start)

Transmit Shift Register


UxTSR

(Stop)
UxTX

Parity
Generator

16
Divider

UxCTS

Figura D.13: Modo de Transmisin del UART.


RS-232.C significa literalmente "Recomended Standard232 revisin C" (tambin
conocida como EIA 232). Es un estndar publicado en 1969 por la EIA
("Electronic Standard Association") que define las caractersticas elctricas que
deben presentar los elementos de conexin para la comunicacin serie entre
ordenadores y equipos perifricos. Su ttulo dice exactamente: "Conexin entre
un Equipo Terminal de Datos y un Equipo de Comunicacin de Datos
empleando un intercambio de datos binario serie", y comprende diversos
apartados:
Recordemos que en la comunicacin serie, como en cualquier otra
comunicacin informtica, existen dos aspectos complementarios: Uno relativo a
las caractersticas fsicas de la conexin; en este caso las caractersticas
elctricas y mecnicas, aspectos que estn contemplados en el estndar RS232 (a estos elementos los denominaremos capa fsica). Otros son los
protocolos de comunicacin, que incluyen los sistemas de codificacin de la
seal que se enviar por la capa fsica (los denominamos capa lgica).

168

16

Internal Data Bus


Word/Byte
R ead

Word Read

UxMODE

URX8UxRXREG

UxSTA

Receive Control

-Generate Flags
-Generate Interrupt
-Shift Data Character

Receive FIFO
Load UxRXREG

LPBACK

U x R X IF
UxTX

ReceiveShift Register
UxRSR
UxRX

-Start bit
detect

-Parity check

16 Divider

16x Baud Clock

BCLKx/UxRTS

BCLKx
UE N
Selection UxRTS

UxCTS

UxCTS

Figura D.14: Modo de Recepcin del UART.


Las principales caractersticas del modulo UART son:
o
o
o
o
o
o
o
o
o

Comunicacin de datos de 8 o 9-bit, Full-duplex


Bit de paridad par, impar o sin paridad
Uno o dos bits de Stop
Generador de baudios con pre-escala de 16-bit
Tasas de baudio desde 38 bps a 1.875 Mbps con 30 MHz de ciclo de
instruccin.
Buffer de transmisin de 4 palabras
Buffer de recepcin de 4 palabras
Deteccin de error de rebose de buffer y paridad
Interrupciones separadas para transmisin y recepcin

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 lgico 1
cuando no hay transmisin.
Para transmitir datos se deben seguir los siguientes pasos:

169

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 transmisin.
4. Escribir el byte a ser transmitido en UxTXREG.
5. Un bit de interrupcin se genera UTXISEL (UxSTA<15>).
Para la recepcin de datos se deben seguir los siguientes pasos:
1. Configurar el UART.
2. Habilitar el UART.
3. Una interrupcin se genera. URXISEL bits (UxSTA<7:6>).
4. Leer el bit OERR para determinar si existen errores.
5. Leer el dato recibido de UxRXREG.

Listo para
ibi

Puedo enviar
DTE

RT

RT

16bit
Mi c r
o

CT

CT

DCE

DTE

Mod
em

16bit
Mi c r
o

Listo para
ibi
RT

RT

DTE
PC

CT

CT

Ok, go ahead
d
d
RS232

Modo Simple

RS232

Modo de Control de Flujo

Figura D.15: Modos de Control de Transmisin del UART.


El dsPIC tiene un generado de tasa de baudios de 16-bit que permite una
flexibilidad mxima. El registro de generacin 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 instruccin (1/TCY) FCY=Valor del cristal * PLL / 4
Mxima tasa de baudios: FCY /16 (si BRG = 0),
Mnima tasa de baudios: FCY /16 / (16* 65536).

Entorno de Programacin 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


170

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


simple para desarrollar cdigo 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
actualizacin del software mencionado.

Los principales componentes del MPLAB IDE son los siguientes:


o Administrador de Proyectos
El administrador de proyectos provee integracin y comunicacin entre el
entorno de desarrollo (simulacin, configuracin, emulacin y depuracin) con
las herramientas de programacin (lenguaje de programacion maquina, C30)
o Editor
El editor es un editor de texto se utiliza para escribir los cdigos fuente con
muchas caractersticas para programacin y tambin sirve como ventana para la
depuracin 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, libreras y objetos recompilados. El enlazador es
responsable de posicionar el cdigo compilado en reas de memoria del
microcontrolador destino.
o Motores de Ejecucin
Existe software de simulacin en MPLAB IDE para todos los dispositivos MCU
PICmicro y dsPIC DSC. Estos simuladores utilizan una PC para simular las
instrucciones y algunas funciones perifricas de los dispositivos MCU PICmicro y
dsPIC DSC. Opcionalmente se tiene emuladores y depuradores en-circuito
tambin disponibles para probar como corre la aplicacin en el hardware.
o Herramientas de Lenguaje Compilador
Los compiladores de MPLAB C18 y MPLAB C30 C de Microchip proveen cdigo
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 cdigo que es automticamente
cargado en el debugger destino para instancias de prueba y verificacin.
o Depurador
El depurador Microchip permite breakpoints, correr el programa paso a paso,
ventanas de visualizacin (Watch Windows) y todas las caractersticas de un

171

depurador moderno. Trabaja en conjunto con el editor para referirse a la


informacin destino siendo el cdigo fuente depurado en realimentacin.
o Programador
PICSTART Plus, PICkit 1 y 2, PRO MATE II, MPLAB PM3 tanto como MPLAB
ICD 2 pueden programar cdigo en los dispositivos destino. MPLAB IDE ofrece
control total sobre programacin de cdigo y datos, tanto como de bits
configuracin para definir los diferentes modos de operacin de los
microcontroladores destino o dsPIC.
o Emulador en-Circuito
MPLAB ICE 2000 y MPLAB ICE 4000 son emuladores con caractersticas
completas para los dispositivos MCU PICmicro y dsPIC DSC. Ellos conectan la
PC va puertos I/O y permiten un control total sobre la operacin de los
microcontroladores en las aplicaciones destino.
o Depurador en-Circuito
MPLAB ICD 2 provee una alternativa econmica a un emulador. Usando algunos
de los recursos sobre en chip, MPLAB ICD 2 puede descargar cdigo en el
microcontrolador destino insertado en la aplicacin, 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 aplicacin MPLAB instalada en la PC

172

utiliza un dispositivo hardware externo que se encarga de transferir el cdigo


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

Lenguaje de Programacin del Microcontrolador


MPLAB C-30 es una adaptacin al ANSI x3.159-1989, optimizando el
compilador C que incluye extensiones para aplicaciones de control con el dsPIC
DSC. El compilador es una aplicacin para entorno Windows que provee una
plataforma de desarrollo en cdigo C.

Fuente en C

Compilador

Archivo Asembler

PA

Fuente en Asembler

Librerias

Asembler

Enlazador

Archivo Objeto

Archivo Ejecutable

Figura D.17: Estructura de Compilacin del microcontrolador.


MPLAB C-30 compila archivos fuente en C, produciendo archivos en
lenguaje ensamblador. Estos archivos compilados y producidos por la
compilacin se enlazan con otros archivos objeto y libreras para producir la
aplicacin 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,

173

o tambin utilizar el utilitario de conversin para pasar de COFF o ELF a formato


hex de Intel, adecuado para cargarlo en la lnea de comandos para la simulacin
o el respectivo programador. En (Fig. 2.17) vemos el diagrama de flujo de
desarrollo del software.

o Estndar ANSI C
El compilador MPLAB C30 es un compilador totalmente validado que conforma
el estndar ANSI C como fue definido por la especificacin ANSI descrita por
Kernighan y Ritchies. El estndar ANSI C incluye extensiones a la definicin
original C que ahora con caractersticas estndar del lenguaje. Estas
extensiones incrementan la portabilidad y ofrece una mayor capacidad.
o Optimizacin
El compilador utiliza un conjunto sofisticado de optimizacin que emplea muchas
tcnicas avanzadas para generar eficiente y compacto cdigo desde cdigo
fuente C. Esta optimizacin toma ventaja determinadas particularidades del
dsPIC.
o Soporte de libreras del Estndar ANSI C
MPLAB C30 es distribuido con una completa librera del estndar ANSI C. Todas
las funciones de la librera han sido validadas, y conforman el estndar de
librera ANSI C. Las libreras incluyen funciones para manejo de caracteres,
asignacin de memoria dinmica, conversin de datos y funciones matemticas.
Las funciones estndar de Entrada/Salida para la manipulacin de archivos
tambin estn incluidas y distribuidas, las cuales soportan acceso total al
sistema de archivos usando el simulador de lnea de comandos.

o Modelo de Memoria Flexible


El compilador soporta modelo de cdigo y datos, pequeo y grande. El modelo
de cdigo pequeo tiene la ventaja de tener formas ms eficientes de
instrucciones call y branch, mientras que el modelo de datos pequeo soporta el
uso de instrucciones compactas para acceder a los datos.
o Driver del compilador
MPLAB C30 incluye un potente driver de programa de lnea comandos. Usando
el driver de programa, programas de aplicacin pueden ser compilados,
ensamblados y enlazados en un simple paso.

174

D.2: Generalidades de las Tecnologas Web


Tecnologas Web y Descripcin del Software
Para aplicaciones pequeas en donde se requiera una comunicacin
entre aplicaciones Java y dispositivos DSP en su mayora 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 programacin java y C a nivel de cdigo
objeto, otra alternativa ms simple es a travs del uso de protocolos de
comunicacin serial tal como el RS232 que permite independencia al momento
de seleccionar un entorno de programacin grfica en la Interface de usuario,
usualmente se usa Visual Basic Java por su fcil entorno de programacin.
Antes de describir la arquitectura J2EE, es importante describir algunos
aspectos de Java y los estilos de arquitectura de las aplicaciones distribuidas
contemporneas: 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 sealar que estos estilos surgieron debido a la
llegada de nuevas plataformas de hardware para clientes y servidores ms
baratas y de tecnologa de redes. Anteriormente, los motores de las empresas
eran sistemas principales con todos los servicios informticos (desde la
generacin de usuario-interfaz hasta procesamiento de transacciones de gran
volumen) centralizados. Consecuentemente, la tecnologa cliente servidor fue la
que provoc una automatizacin masiva de la empresa.
Dentro de la evolucin de la tecnologa 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

175

modelo de programacin de componentes, para su desarrollo hay que seguir


ciertos estndares y son reutilizables. Pueden ser utilizados en entornos visuales
de programacin y auto describen sus propiedades y pueden ser vistas y
alteradas en una herramienta de desarrollo visual.

Caractersticas:

Sus variables no se acceden directamente sino a travs de mtodos


estndares (getters y setters).

La nomenclatura de estos mtodos siguen ciertos estndares.

Una clase BeanInfo acompaa 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 lgica).

Servlets
Un servlet es una clase Java que corre en el Web Server (o un proceso
lgicamente vinculado al Web Server). Un servlet acepta los requerimientos
HTTP y responde con pginas HTML.
El HTML es normalmente dinmico y refleja informacin que el servlet
obtiene de varios sistemas empresariales.

Caractersticas:

Son independientes del servidor utilizado y de su sistema operativo.

Los servlets pueden llamar a otros servlets, e incluso a mtodos


concretos de otros servlets.

Los servlets pueden obtener fcilmente informacin acerca del cliente.

Los servlets permiten la generacin dinmica de cdigo HTML Los


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

176

JSP
Los Java Server Pages son similares a un HTML solo que el contenido se
construye dinmicamente dentro de la pgina web. Los JSP soportan todos los
tags de HTML.
El diseo puede variar sin modificar el contenido dinmico y es una
extensin de la tecnologa de los servlets y esta basado en la reutilizacin de
componentes.

Caractersticas:

Separacin entre generacin de contenido y presentacin.

Con HTML o XML se da formato a la pgina.

Mediante etiquetas JSP, script o Java Beans se aade el componente


dinmico.

Independencia de la plataforma tanto cliente como servidor.

Fcil de administrar y de usar.

Ventajas:

Frente a un ASP:

El cdigo est escrito en Java.

Portable entre Sistemas Operativos.

Se compilan y permanecen en memoria, no son interpretadas.

Frente a un Servlet:

Permite separar el diseo de la pgina web del cdigo.

Facilita el mantenimiento.

Frente a Java Script:

Java Script genera HTML dinmicamente en el cliente.

177

No puede acceder a recursos del servidor.

Tecnologas J2EE
Las tecnologas J2EE estn 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.

Comunicacin

Permite la comunicacin entre componentes.

Provedo por el contenedor.

Servicios y Comunicaciones J2EE

178

Servicios de Nombres:

Servicios de Base de Datos:

Java Naming and Directory Interface: JNDI.

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 especficos a la
implementacin y ejecucin 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.

179

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 tpicos estn basados en la arquitectura de
dos niveles, donde existe una clara separacin entre los datos y la lgica de
presentacin de la empresa. Estos sistemas estn 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

180

muchos inconvenientes.

En una aplicacin tradicional de 2 niveles, la carga de procesamiento es


facilitada al PC cliente mientras que el servidor acta simplemente como
controlador del trfico entre la aplicacin y los datos. Como resultado, el
rendimiento de la aplicacin no slo sufre debido a los recursos limitados de la
PC sino que el trfico de la red tambin tiende a aumentar. Cuando la aplicacin
completa es procesada en una PC, la aplicacin es forzada a realizar mltiples
peticiones de datos antes incluso de presentar algo al usuario. Estas mltiples
peticiones de bases de datos pueden sobrecargar la red.

Otro problema tpico relacionado con el enfoque de 2 niveles es el del


mantenimiento. Incluso el menor cambio realizado a una aplicacin puede
conllevar una completa alteracin en la base del usuario. Aunque sea posible
automatizar el proceso, todava debe enfrentarse a la actualizacin de cada
instalacin de cliente.

Es ms, algunos usuarios pueden que no estn preparados para una


alteracin 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
aplicacin.

Arquitectura de tres niveles


Con el afn de solucionar estos inconvenientes, la comunidad de software
desarroll la nocin de una arquitectura de 3 niveles. Una aplicacin se divide en
tres capas lgicas distintas, cada una de ellas con un grupo de interfaces
perfectamente definidas. La primera capa se denomina capa de presentacin y
normalmente consiste en una interfaz grfica de usuario de algn tipo. La capa
intermedia, o capa de empresa, consiste en la aplicacin o lgica de empresa, y
la tercera capa, la capa de datos, contiene los datos necesarios para la

181

aplicacin.

La capa intermedia (lgica de aplicacin) es bsicamente el cdigo al que


recurre el usuario (a travs de la capa de presentacin) para recuperar los datos
deseados. La capa de presentacin recibe entonces los datos y los formatea
para su presentacin. Esta separacin entre la lgica de aplicacin de la interfaz
de usuario aade una enorme flexibilidad al diseo de la aplicacin. Pueden
construirse y desplegarse mltiples interfaces de usuario sin cambiar en
absoluto la lgica de aplicacin, siempre que la lgica de aplicacin presente
una interfaz claramente definida en la capa de presentacin.

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 lgica de empresa. De un modo similar,
los servlets y las pginas Java Server permiten abstraer la capa de presentacin
y su interaccin con la capa de empresa.

La tercera capa contiene los datos necesarios para la aplicacin. Estos


datos consisten en cualquier fuente de informacin, 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 lgica de aplicacin est lgicamente dividida
por funciones y no fsicamente. Una arquitectura de n niveles se descompone en
las siguientes partes:

Una interfaz de usuario que maneja la interaccin del usuario con la aplicacin.
Esta puede ser un navegador Web que se transmite mediante la salida WAN de
un firewall, una aplicacin de escritorio o incluso un dispositivo inalmbrico.

182

Una lgica de presentacin 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 lgica de presentacin ligeramente diferentes para satisfacer al cliente
adecuadamente.

Una lgica de empresa que modele las reglas de empresa de la aplicacin, a


menudo a travs de la interaccin con los datos de la aplicacin.

Servicios de infraestructura que proporcionen la funcionalidad adicional


requerida por los componentes de la aplicacin, tales como mensajera y apoyo
transaccional.
La capa de datos donde residen los datos de la empresa.

Las aplicaciones basadas en esta arquitectura emplean esencialmente el


patrn Modelo-Vista-Controlador (MVC). Lo que esto significa fundamentalmente
es que los datos (el modelo) son independientes respecto de la presentacin de
la informacin (la vista). En una posicin intermedia se encuentra la lgica de
aplicacin/empresa (el controlador) que controla el flujo de informacin. De este
modo, una aplicacin es diseada 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 publicacin de los Servlets que contiene la aplicacin de analisis
computaciones de las muestras digitalizadas de seales ECG tomadas de la
base de datos del MIT a travs del puerto serial RS232 simuladas como
entradas desde el microcontrolador dsPIC33FJ256GP710 contenida en la tarjeta
de desarrollo Explorer 16 de Microchip.

Patrones de Diseo de Software

183

En el desarrollo del prototipo en el lenguaje de programacin java se


utiliz tcnicas avanzadas de ingeniera de software tanto a nivel metodolgico
como el RUP Proceso Unificado Racional para el manejo del proyecto como tal,
as como a nivel de aplicacin a travs de los patrones de diseo de software
para garantizar un enfoque robusto de la aplicacin. A continuacin se listan los
ms resaltantes:

Patrn de Diseo 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. Mltiples clientes podran desear acceso independiente.

Solucin:

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


2. Cada objeto iterador mantiene grabacin de la posicin del siguiente elemento.
3. Si hay mltiples variaciones aggregate/iterator, es mejor que las clases
aggregate e iterator implementen tipos de interfaces comunes.

Patrn de Diseo Model/View/Controller


Contexto:
1. Algunos programas tienen mltiples vistas que pueden ser editadas.

2. Ejemplo: Editor HTML.

vista de la estructura.

vista de la fuente.
184

vista de WYSIWYG (lo que vemos en pantalla es idntico a lo que se


imprimir).

3. Editando una vista actualiza la otra.

4. La actualizacin parece instantnea.

Solucin:

1. Modelo: estructura de la data, no tiene representacin visual.


2. Vista: representacin visual.
3. Controlador: interaccin con el usuario Patrn.
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

Patrn de Diseo Observer


Contexto

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


2. Uno o ms objetos observadores (observers) desean ser notificados cuando
ese evento ocurra.

Solucin:

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


implementar.
2. El subject mantiene una coleccin de observadores.
3. El subject proporciona mtodos para aadir y descartar observers.
4. En cualquier instante que un evento ocurra, el subject notifica a todos los

185

observers.
5. El Modelo notifica a las Vistas cuando algo interesante sucede.
6. El Botn 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 Botn
para poder ser notificados.
9. Generalizar: Observadores se aaden por si mismos al sujeto.

Patrn de Diseo Strategy


Contexto

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


2. Los Clientes algunas veces desean reemplazar algoritmos estndar con
versiones a la medida.

Solucin

1. Defina un tipo de interface que es una abstraccin 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 mtodo apropiado del objeto strategy.

Patrn de Diseo Composite


Contexto
1. Objetos primitivos pueden ser combinados con objetos composite.
2. Clientes manejan un objeto composite como un objeto primitivo.

186

Solucin
1. Define un tipo de interface que es una abstraccin 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 mtodo desde el tipo de interface, la clase
composite aplica el mtodo a sus objetos primitivos y combina el resultado.

Patrn de Diseo Decorator


Contexto

1.

Los

objetos

Componentes

pueden

ser

decorados

(visual

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 decoracin.
4. Ah puede existir un conjunto abierto cerrado de posibles decoraciones.

Solucin

1. Defina un tipo de interface que sea una abstraccin para el componente.


2. Las clases Concrete Component implementan este tipo de interface.
3. Las clases Decorator tambin implementan este tipo de interface.
4. Un objeto decorador administra el objeto componente que este decora.
5. Cuando se implementa un mtodo desde el tipo de interface component, la
clase decorator aplica el mtodo al componente decorado y combina el
resultado con el efecto de la decoracin.

Patrn de Diseo Template Method


Contexto
187

1. Un algoritmo es aplicable para mltiples 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 Patrn Template
Method.

Solucin

1. Defina una super clase que tenga un mtodo para el algoritmo y mtodos
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
defnalos para que tengan un comportamiento apropiado por defecto.
4. Cada subclase define las operaciones primitivas pero no el algoritmo.

Patrn de Diseo Facade


Contexto
1. Un sub sistema consiste de mltiples clases, haciendo su uso un tanto
complicado para los clientes.
2. El Implementador podra desear cambiar las clases del sub sistema.
3. Deseo de dar un punto de entrada coherente.

Solucin

1. Defina una clase facade que exponga todas las capacidades del sub sistema
como mtodos.
2. El mtodo facade delega las solicitudes a las clases del sub sistema.
3. Las clases del sub sistema no conocen acerca de la clase facade.

188

Patrn de Diseo 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 jerarqua separada de clases cuya responsabilidad es
crear los objetos.

Solucin

1. Defina un tipo de interface prototipo que sea comn 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.

Patrn de Diseo 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 estn conceptualmente

relacionadas.

Solucin

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

2. La clase adapter mantiene una referencia al adaptee. Traslada los mtodos

189

objetivos para los mtodos adaptee.


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

Patrn de Diseo Command

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

Debido a que se necesita almacenar informacin adicional con comandos.

Debido a que se desea coleccionar comandos.

Solucin

1.

Definir un tipo de interface command con un mtodo para ejecutar el

comando.
2. Proporcionar mtodos 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 mtodo execute.

Patrn de Diseo 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.

Solucin

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.

190

3. Define un mtodo, llamado el mtodo factory, en el tipo creator. El mtodo


factory emite un objeto product.
4. Cada clase concreta creator implementa el mtodo factory de tal modo que
retorne un objeto de una clase concreta product.

Patrn de Diseo 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 ms verstil.
3. Ni el cliente ni el sujeto real debe ser afectado por la modificacin.

Solucin

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 mtodo proxy debe invocar el mismo mtodo en el sujeto real y
proporcionar las modificaciones necesarias.

Patrn de Diseo 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.

Solucin

191

1. Defina una clase con un constructor privado.


2. La clase construye una nica instancia de si mismo.
3. Proporciona un mtodo esttico que retorna una referencia a la nica
instancia.

Patrn de Diseo Visitor


Contexto
1. La estructura de un objeto contiene elementos de clases de mltiples tipos, y
se desea llevar a cabo operaciones que dependen de los tipos de objetos.
2. El conjunto de operaciones debera ser extensible a travs del tiempo.
3. El conjunto de los elementos de las clases es fijo.

Solucin

1.

Defina un tipo de interface visitor que tenga mtodos para elementos


visitantes de cada uno de los tipos dados.

2.

Cada clase element define un mtodo accept que invoca el mtodo del
elemento visitante enlazado en el parmetro del visitor.

3. Para implementar una operacin, defina una clase que implemente el tipo de
interface visitor y proporcione las operaciones de accin para cada tipo de
elemento.
Adicionalmente existen otros Patrones de Diseo complementarios:

Abstract Factory.

Bridge.

Builder.

Chain of Responsibility.

Flyweight.

Interpreter.

Mediator.

192

Memento.

State.

193

Bibliografa
[1] A. Bravo y E. Rodrguez: Wavelets aplicado a un sistema Neuronal para la
Identificacin de Anomalas en Seales Electrocardiogrficas. Libro de actas
XI Reunin de la Asamblea General ISTEC 2001, (Puerto Rico), Diciembre
2001 .

[2] A. Bravo, C. Calla, E. Rodrguez y V. Rojas: Aplicacin de la Transformada


Wavelet al procesamiento digital de Seales. Libro de actas Sociedad
Peruana de Matemtica 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. Prez, 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 Clnica. Lange

Medical Publications, 1981.


[7] Anthony S. Fauci, Eugene Braunwald, Isselbacher, Jean D. Wilson, Joseph B.
Martin ,Stephen L. Hauser, and Dan L. Longo:
Internal

Medicine

14Th

Edition

Harrison's Principles of

McGraw-Hill

Health

Professions

Division ,1998.
[8] David Cuesta Frau: Estudio de mtodos para procesamiento y agrupacin de
Seales Electrocardiogrficas. Tesis Doctoral, Universidad Politcnica 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 Hernndez y Guido Weiss:

A First Course on Wavelets. CRC

PRESS, 1996.
[12] Mladen Victor Wickerhauser:

Adapted Wavelet Analysis from Theory to

194

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
58 62 , May/June, 2001 .

[15] Robert S. H. Istepanian and Arthur A. Petrosian: Optimal Zonal WaveletBased 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.
3578 3581 , 2000 .

[17] Rosaria Silipo and Carlo Marchesi: Artificial Neural Networks for Automatic
ECG Analysis IEEE Transactions on Signal Processing, vol. 46, N 5, pp.
1417 1425 , 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. 192 202 , 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. 1482 1485 , 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. 838 848 , July , 1999 .
[21] Zmray Dokur, Tamer lmez, and Ertugrul Yazgan :
Classification

Using

The

Neural

Network

And

ECG Waveform

Wavelet

Transform

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


Advancing Technology, Oct. 13 16 , pp. 273 , Atlanta, GA, USA , 1999 .
[22] HA. Kestler, F. Schwenker, G. Hafner, V Hombach, G. Palm, and M. Hher :

195

Feasibility Study of Complete Neural Net Based Classification of SignalAveraged High-Resolution ECGs IEEE Computers in Cardiology, pp.
575 578 , 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. 179 185 ,
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. 95 100 , 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. 849 856 , 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. 867 970 , 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. 3614 3617 .
[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. 132 143 , 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.

196

159 167 , 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.


247 255 , 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. 256 265 , N 4, April 1997 .
[33] Ahmet Baykal, Ravi Ranjan, and Nitish V. Thakor:
Ventricular

Fibrillation

Duration

by

Autoregressive

Estimation of the
Modeling

IEEE

Transactions on Biomedical Engineering, Vol. 44 , pp. 349 355 , N 5 , May


1997 .

[34] Michael L. Hilton:

Wavelet and Wavelet Packet Compression of

Electrocardiograms IEEE Transactions on Biomedical Engineering, Vol. 44 ,


pp. 394 402 , 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 HighResolution Electrocardiogram IEEE Transactions on Biomedical Engineering,
Vol. 44 , pp. 681 693 , 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. 891 899 , N 9 , September 1997 .
[37] Brian Bradie: Wavelet Packet-Based Compression of Single Lead ECG IEEE
Transactions on Biomedical Engineering, Vol. 43 , pp. 493 501 , 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. 811 819 , N 8 , August 1996 .
[39] Antti Koski and Martti Juhola: Segmentation of Digital Signals Based on
Estimated Compression Ratio IEEE Transactions on Biomedical Engineering,
197

Vol. 43 , pp. 928 938 , 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. 982 989 , 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 Brains Response During Injury and Recovery IEEE
Transactions on Biomedical Engineering, Vol. 43 , pp. 1083 1091 , 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. 105 109 , N 1 , January 1996 .
[43] R. Martin Arthur, Neal G. Kavesh, H. Dieter Ambos, and Michael E. Cain:
Phase

and

Group-Delay

Electrocardiograms

Characteristics

from Patients with

of

Ventricular

Signal-Averaged
Tachycardia

IEEE

Transactions on Biomedical Engineering, Vol. 42 , pp. 29 41 , N 1 , January


1995 .

[44] S. C. Tai:

An Extensive Markov System for ECG Exact Coding IEEE

Transactions on Biomedical Engineering, Vol. 42 , pp. 230 232 , 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. 250 259 , 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. 731 735 , N 7 , July


1995 .

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

198

IEEE Transactions on Biomedical Engineering, Vol. 42, pp. 736 741 , 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. 1128 1132 , 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. 1137 1141 , N 11 , November 1995 .
[50] Wilfried Philips and Geert De Jonghe: Data Compression of ECG's by HighDegree Polynomial Approximation IEEE Transactions on Biomedical
Engineering, Vol. 39 , pp. 330 337 , 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. 652 655 , 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. 741 751 ,
N 7 , July 1992 .
[53] Bin He and Richard J. Cohen: Body Surface Laplacian ECG Mapping IEEE
Transactions on Biomedical Engineering, Vol. 39 , pp. 1179 1191 , 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.
69 76 , N 1 , January 1994 .

[55] Peter Strobach, Klaus Abraham-Fuchs, and Wolfgang Hrer:

Event-

Synchronous Cancellation of the Heart Interference in Biomedical Signals


IEEE Transactions on Biomedical Engineering, Vol. 41 , pp. 343 350 , N 4 ,
April 1994 .

199

[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. 397 340 , 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. 480 487 , 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. 529 536 ,
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. 830 835 , 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. 74 81 , 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. 201 205 , 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. 571 578 , N 6 , June
1993 .

[63] Gil Nave and Arnon Cohen: ECG Compression Using Long-Term Prediction
IEEE Transactions on Biomedical Engineering, Vol. 40 , pp. 877 885 , N 9 ,
200

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. 985 989 , N 9 ,
September 1993 .
[65] Wilfried Philips: ECG Data Compression with Time-Warped Polynomials
IEEE Transactions on Biomedical Engineering, Vol. 40 , pp. 1095 1101 , 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. 1219 1225 , 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. 253 259 , 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. 260 266 , 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. 383 385 , 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.
483 489 , N 5 , May 1991 .

201

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

A Simple

Electrical-Mechanical Model of the Heart Applied to the Study of ElectricalMechanical Alternans IEEE Transactions on Biomedical Engineering, Vol. 38 ,
pp. 551 559 , 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. 785 793 , 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.
821 826 , 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. 674 693 , 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. 191 202 , N 2 , June 1993 .
[76] Jerome M. Shapiro: Embedded Image Coding Using Zerotrees of Wavelet
Coefficients IEEE Transactions on Signal Processing, Vol. 41 , pp. 3445 3462 ,
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. 85 93 , 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
202

Engineering, Vol. BME- 32 , pp. 708 713 , 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. 189 194 , 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. 250 256 , 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. 595 610 , 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. 21 28 , 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. 99 106 , N 1 , January 1990 .

203