Está en la página 1de 6

Se elabor el cdigo en Matlab, el cual nos permita llevar a cabo la simulacin y el control del dispositivo con base a la herramienta

Data Acquisition Toolbox y las funciones analoginput(),addchannel(),filter(),butter(),ellip(),fft(),freqz().

%Programa que captura y filtra un electrocardiograma. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%% % Gabriel Resndiz Fernndez % Cabrera Ronquillo Roberto Carlos % Quezada Fragoso Rubn % Romero Arenas Alejandro Fernando %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

clear; close all; clc; duration=input('Cuantos segundos de captura necesitas (5-30)?'); duration=duration*2; disp(sprintf('\n\n\n\n La adquisicin se detendr a los %d ciclos',duration*8)) disp(sprintf('\n\n\n\nListo?, 5 segundos para iniciar')) %pause(5); disp(sprintf('\n\n\n\n\n\n\n\nINICIADO!'))

%Creacion un objeto que pueda leer el puerto de la tarjeta de sonido AI = analoginput('winsound');

% aadir canales al objeto

addchannel(AI,1);

% configurar los valores de la adquisicin, configuracin de la grfica y almacenamiento de los datos ActualRate = get(AI,'SampleRate');%8000 set(AI,'SamplesPerTrigger',duration*ActualRate); muestras_totales=duration*ActualRate; figure(1) set(gcf,'doublebuffer','on') %Reduce el parpadeo en la grfica colordef black muestras=1000; P = plot(zeros(muestras,1),'g');% aadir el color verde ,'g' T = title([sprintf('Ciclos: '), num2str(0)]); xlabel('ELECTROCARDIOGRAFO'), axis([0 muestras -0.025 0.025]), grid on

% Esta es la declaracin de filtros que eliminan la interferencia de la red elctrica [b,a] = butter(5,[60/(ActualRate/2)]); [c,d] = butter(4,[30/(ActualRate/2) 95/(ActualRate/2)],'stop'); [e,f] = butter(4,[1/(ActualRate/2)],'high');

% adquisicin de datos inicia AI y actualiza la grafica por cada 1000 muestras adquiridas % el comando drawnow obliga a generar la actualizacin de la grfica start(AI); i = 1;

resultado=0; % en esta variable se van concatenando los bloques de n muestras while AI.SamplesAcquired < AI.SamplesPerTrigger while AI.SamplesAcquired < muestras*i end data = peekdata(AI,muestras); resultado=[resultado;data];

%insertar el filtro aqu filtrados = filter(b,a,data); %-----------------

set(P,'ydata',filtrados); set(T,'String',[sprintf('Ciclos: '),num2str(i)]); drawnow i = i + 1; end stop(AI);

%-------------------------------------------------------------------------------%FILTROS: datos=resultado; limite_de_rango=0.05; %bloque que elimina los picos que no pertenecen a la seal longitud=length(datos); for n=1:longitud

if abs(datos(n))>limite_de_rango datos(n)=0; end end % grfica del primer conjunto de datos. figure(1); subplot(2,1,1); plot(resultado,'g'); title('Datos originales'); fourier_de_original=abs(fft(resultado)); clear resultado; %-----------------

resultado=datos*100; clear datos; z=filter(b,a,resultado); x=filter(c,d,z); q=filter(e,f,x); clear z; clear x; %-------

subplot(2,1,2); plot(q,'g'); axis([0 muestras_totales -1.5 1.5]) title('Datos filtrados');

fourier_de_filtrados=abs(fft(q)); % ---------------------------------------------------------------------

figure(6) subplot(2,1,1); plot(fourier_de_original,'g'); title('Transformada de Fourier de los datos originales'); subplot(2,1,2); plot(fourier_de_filtrados,'g'); title('Transformada de Fourier de los datos filtrados'); %------------------------------------

scrsz = get(0,'ScreenSize'); figure('Name','Electrocardiograma','Position',[9 scrsz(4)/3 scrsz(3)/3 scrsz(4)/3],'MenuBar','none'); plot(q,'g'); grid; axis([0 muestras_totales (min(q)-0.1) (max(q)+0.1)]) title('ELECTROCARDIOGRAMA'); set(gca,'XTick',[0:4000:muestras_totales]); set(gca,'XTickLabel',[0:0.5:duration/2]); set(get(gca,'Title'),'Color','y') xlabel('Segundos'); %--------

figure('Name','Electrocardiograma 4s','Position',[9 scrsz(4)/3 scrsz(3)/3 scrsz(4)/3],'MenuBar','none');

plot(q(1:32000),'g'); grid; axis([0 32000 (min(q)-0.1) (max(q)+0.1)]) title('ELECTROCARDIOGRAMA 4 SEGUNDOS'); set(gca,'XTick',[0:2000:32000]); set(gca,'XTickLabel',[0:0.25:4]); set(get(gca,'Title'),'Color','g') xlabel('Segundos'); clc disp(sprintf('\n\n\n\n Finalizado')); disp(sprintf('\n\n\n La grafica corresponde a %d segundos',duration/2)); % FIN DEL PROGRAMA.