Hola!, como estan?.
En las ultimas clases practicas, al procesar las señales con el algoritmo qrs_detection, nos dimos cuenta que no estaba claro que información debe recibir dicho algoritmo. El algoritmo espera recibir como entrada un vector que es distinto de cero solo en las posiciones en las que se encuentran los picos de la señal de entrada. En dichas posiciones el vector debe contener las amplitudes de los picos. De esta manera, el algoritmo determina que picos corresponden a un complejo qrs y elimina los restantes. Si 'y' es la señal filtrada, derivada y finalmente integrada, entonces en MATLAB el codigo seria el siguiente:
% QRS_detection
[peaks, locs] = findpeaks(y, 'MinPeakDistance', 20); % se obtienen los picos y sus posiciones
input(1:length(y)) = 0;
input(locs(1:end)) = peaks;
result = qrs_detection(input);
result (result == 0) = NaN;
De esta manera, el vector 'result' deberia ser distinto de cero solo en las posiciones donde se detecta un complejo qrs.
Por otra parte, nos dimos cuenta que el algoritmo qrs_detection suministrado originalmente asume una frecuencia de muestreo de 360Hz. Esto se observa en el codigo donde aparecen los de numeros de muestras 720 y 72 asociados a los tiempos 2s y 200ms. Se envia adjunto el algoritmo qrs_detection_200 para ser usado con señales muestreadas a 200Hz.
Estas correcciones son necesarias para poder comparar resultados contra el archivo de marcas que posee la ubicacion de los complejos qrs en numero de muestras.
Dicho esto, es importante recalcar que la parte mas importante del trabajo no es la deteccion final, sino el analisis de la señal de entrada mediante Transformada de Fourier y espectrogramas y la implementacion de las estapas de filtrado, derivacion e integracion. Los que puedan incorporar las correcciones obtendran mejores resultados finales pero, de nuevo, esta no es la parte que mas nos interesa evaluar del trabajo.
Saludos y disculpen los inconvenientes.