Vorbereitungsaufgaben
This commit is contained in:
parent
a9f58b9609
commit
61cec126d3
Binary file not shown.
@ -54,12 +54,83 @@ Entwickeln Sie eine Strategie zur EKG-Vorverarbeitung (Filterung)! Bedenken Sie
|
||||
|
||||
\subsection{QRS-Detektion}
|
||||
\subsubsection{}
|
||||
Entwickeln Sie einen Algorithmus zur adaptiven QRS-Detektion, von dem Sie ein möglichst gutes Detektionsergebnis erwarten! Achten Sie dabei besonders auf dessen prinzipielle Online-Fähigkeit. 250 ms Zeitvorlauf sollen dabei nicht überschritten werden, d.h. zur Entscheidungsfindung, ob ein Abtastwert zum Zeitpunkt t eine R-Zacke darstellt oder nicht, können maximal die Abtastwerte der nächsten 250 ms einbezogen werden. Notieren und erklären Sie die verwendeten Operatoren/Formeln und beschreiben Sie den Block der Entscheidungsfindung in einem Programmablaufplan bzw. Entscheidungsbaum!
|
||||
\textbf{Entwickeln Sie einen Algorithmus zur adaptiven QRS-Detektion, von dem Sie ein möglichst gutes Detektionsergebnis erwarten! Achten Sie dabei besonders auf dessen prinzipielle Online-Fähigkeit. 250 ms Zeitvorlauf sollen dabei nicht überschritten werden, d.h. zur Entscheidungsfindung, ob ein Abtastwert zum Zeitpunkt t eine R-Zacke darstellt oder nicht, können maximal die Abtastwerte der nächsten 250 ms einbezogen werden. Notieren und erklären Sie die verwendeten Operatoren/Formeln und beschreiben Sie den Block der Entscheidungsfindung in einem Programmablaufplan bzw. Entscheidungsbaum!}
|
||||
|
||||
Wir definieren drei Signale: $f_1$ stellt das hochfrequente Rauschen dar, bei $f_2$ handelt es sich um das QRS und Frequenz $f_3$ ist der langsam schwankender Inhalt des EKGs. Die Beziehung zwischen diesen drei Frequenzen ist $f_1>f_2>f_3$.
|
||||
Ziel ist es, alle R-Peaks zu erhalten und alle anderen Frequenzen zu eliminieren, also $f_1$ und $f_3$ eliminieren aber $f_2$ beibehalten. Dies wird als Bandpassfilterung bezeichnet. Sie wird mithilfe der Wavelet-Transformation erreicht. Die Wavelet-Transformation gruppiert Signale mit denselben Frequenzbändern. Daher kann eine Bandpassfilterung durchgeführt werden, indem einige Frequenzbänder eliminiert werden.
|
||||
|
||||
Diese Bandpassfilterung kann durch die Eliminierung von Wavelet-Koeffizienten einiger niedriger Skalen (hohe Frequenzen) und höherer Skalen (niedrige Frequenzen) von EKG-Signalen erreicht werden. Zu diesem Zweck wird eine nicht dezimierte Wavelet-Transformation verwendet, um Wavelet-Koeffizienten zu erhalten.
|
||||
|
||||
Ein Echtzeit-QRS-Erkennungsalgorithmus wird in Simulink unter der Annahme entwickelt, dass die Abtastfrequenz des EKG-Eingangssignals immer 200 Hz (oder 200 Samples/s) beträgt. Die aufgezeichneten realen EKG-Daten können jedoch unterschiedliche Abtastfrequenzen haben, die von 200 Hz bis 1000 Hz reichen. Um die unterschiedlichen Abtastfrequenzen zu überbrücken, wird ein Abtastratenwandlerblock verwendet, der die Abtastrate in 200 Hz umwandelt. Ein Pufferblock wird eingefügt, um sicherzustellen, dass die Länge des EKG-Eingangssignals ein Vielfaches des berechneten Dezimierungsfaktors des Abtastratenwandlerblocks ist.
|
||||
|
||||
Das EKG-Signal wird gefiltert, um eine gefensterte Schätzung der Energie im QRS-Frequenzband zu erhalten. Die Erkennungsschwelle wird automatisch auf der Grundlage der mittleren Schätzung der durchschnittlichen QRS-Spitze und der durchschnittlichen Rauschspitze angepasst. Die Filterung erfolgt in folgenden Schritten:
|
||||
\begin{itemize}
|
||||
\item FIR-Bandpassfilter mit einem Durchlassbereich von 5 bis 26 Hz
|
||||
\item Ableitung des bandgefilterten Signals
|
||||
\item Bestimmung des Absolutwerts des Signals
|
||||
\item Mittelwertbildung des Absolutwerts über ein 80 ms-Fenster
|
||||
\end{itemize}
|
||||
|
||||
Die folgenden QRS-Erkennungsregeln beziehen sich auf einen PIC-basierten QRS-Detektor:
|
||||
\begin{itemize}
|
||||
\item Alle Peaks, die größeren Peaks um weniger als 196 ms vorausgehen oder folgen, werden ignoriert.
|
||||
\item Wenn eine Spitze auftritt, prüfe, ob das Rohsignal sowohl positive als auch negative Steigungen enthält. Wenn dies der Fall ist, melde, dass ein Peak gefunden wurde. Andernfalls handelt es sich um eine Grundlinienverschiebung.
|
||||
\item Ist der Peak größer als die Erkennungsschwelle, wird er als QRS-Komplex klassifiziert. Andernfalls wird er als Rauschen eingestuft.
|
||||
\item Wenn innerhalb von $1,5$ R-zu-R-Intervallen kein QRS erkannt wurde, aber eine Spitze vorhanden ist, die größer als die halbe Erkennungsschwelle ist, und diese Spitze mindestens 360 ms auf die vorhergehende Erkennung folgt, wird diese Spitze als QRS-Komplex eingestuft.
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{}
|
||||
Entwickeln Sie zu diesem Algorithmus die zugehörige(n) MATLAB-Funktion(en) und bringen Sie den Quelltext schriftlich zum Praktikum mit! Benutzen Sie folgende Funktionsschnittstelle:
|
||||
\begin{lstlisting}[basicstyle=\tiny]
|
||||
Entwickeln Sie zu diesem Algorithmus die zugehörige(n) MATLAB-Funktion(en) und bringen Sie den Quelltext schriftlich zum Praktikum mit! Benutzen Sie die gegebene Funktionsschnittstelle:
|
||||
\begin{lstlisting}[basicstyle=\tiny, language=matlab]
|
||||
function [R_Positionen, Entscheidungssignal, Schwellwertverlauf, Lernphase] = QRS_Detektion (EKG_Signal, fa);
|
||||
|
||||
fs = fa; % 200; % sampling rate or frequency
|
||||
% sze = length(EKG_Signal); % find the length of the data per second
|
||||
%necg = EKG_Signal/max(EKG_Signal); % normalize the maximum value to unity (amplitude)
|
||||
t = [1 : sze]/fs; % sampling rate time
|
||||
|
||||
% compute the undecimated wavelet transform of the 4-level using sym4
|
||||
% this ensures that the length of the signal remains the same
|
||||
wt = modwt(EKG_Signal, 4, 'sym4'); %4-level undecimated DWT using sym4
|
||||
wtrec = zeros(size(wt));
|
||||
% do not need the approximated and high-frequency coefficients d1 and d2; extract d3 and d4
|
||||
wtrec(3:4, :)= wt(3:4,:)
|
||||
% inverse discrete wavelet transform (IDWT), will have a signal that has only the r-peaks
|
||||
y=imodwt(wtrec, 'sym4'); %IDWT with only d3 and d4.
|
||||
y=abs(y).^2; %magnitude square
|
||||
% find the average of the signal; will be used as the threshold when finding the signal peak
|
||||
avg = mean(y); % getting average of y^2 as threshold
|
||||
[Rpeaks, locs] = findpeaks(y,t, 'MinPeakHeight', 8*avg, 'MinPeakDistance', 50); % finding peaks
|
||||
% find the location of the R-peaks in consideration of the length of the signal. It represents the number of beats
|
||||
nohb = length(locs); %No. of beats
|
||||
timelimit = length(EKG_Signal)/Fs; %getting the time function of the signal
|
||||
hbpermin = (nohb*60)/timelimit; %Getting Beat per minute.
|
||||
disp(strcat('HeartRate= ', num2str(hbpermin))) %displaying the heartrate
|
||||
|
||||
%displaying ecg signal and detected R-peaks
|
||||
subplot(211)
|
||||
plot(tx, EKG_Signal);
|
||||
xlim([0, timelimit])
|
||||
grid on
|
||||
xlabel('seconds')
|
||||
ylabel('ECG signal')
|
||||
|
||||
% plot filtered signal with detected peaks
|
||||
subplot(212)
|
||||
plot(t,y)
|
||||
grid on
|
||||
xlim([0, length(EKG_Signal)]);
|
||||
hold on
|
||||
plot(locs, Rpeaks, 'ro')
|
||||
xlabel('samples')
|
||||
title(strcat('R peaks found and heartrate: ', num2str(hbpermin)))
|
||||
|
||||
R_Positionen = locs;
|
||||
Entscheidungssignal = y;
|
||||
Schwellwertverlauf = avg;
|
||||
Lernphase = 0; % Bedeutung unklar?
|
||||
|
||||
end
|
||||
\end{lstlisting}
|
||||
|
||||
\section{Praktikumsaufgaben}
|
||||
@ -106,5 +177,17 @@ Interpretieren Sie die Unterschiede in den Ergebnissen der einzelnen Phasen der
|
||||
\subsubsection{}
|
||||
Vergleichen Sie die HRV-Ergebnisse des Praktikumsprobanden mit den Ergebnissen eines Polyneuropathie-Patienten (Datei: zwickau.dat).
|
||||
|
||||
|
||||
\section{Hilfreiche Links und Infos}
|
||||
\href{https://eleceng.dit.ie/dorran/matlab/resources/Matlab%20Signal%20Processing%20Examples.pdf}{eleceng.dit.ie}
|
||||
|
||||
\href{https://biomedicalsignalandimage.blogspot.com/2016/02/matlab-code-to-plot-ecg-signal.html}{biomedicalsignalandimage.blogspot.com}
|
||||
|
||||
\href{https://github.com/Aburas98/MATLAB/}{GitHub.com/Aburas98}
|
||||
|
||||
\href{https://www.section.io/engineering-education/electrocardiograms-qrs-peak-and-heart-rate-detection-using-dwt-in-matlab/}{}section.io
|
||||
|
||||
\href{https://de.mathworks.com/help/dsp/ug/real-time-ecg-qrs-detection.html}{Mathworks.com}
|
||||
|
||||
\end{document}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user