Académique Documents
Professionnel Documents
Culture Documents
%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!'))
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];
%-------------------------------------------------------------------------------%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; %-----------------
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'); %--------
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.