WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

EMG Verarbeitung

 

ertl87
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 28.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2013, 11:50     Titel: EMG Verarbeitung
  Antworten mit Zitat      
Hallo,

Ich bräuchte ganz dringend eure Hilfe:

ich arbeite an einem Projekt (EMG) und bin eigentlich ein Matlab - Frischling, und hab mit Programmierung (noch) wenig am Hut. Die Frage ist, ob ihr mir vielleicht helfen könnt! Hab in den Ganzen Foren viel gesehen, und ich bin mir sicher dass es grundsätzlich möglich ist, aber leider weiß ich nicht wie:

Ich habe ein EMG Signal (20 Minuten lang - beim Radfahren). Ich möchte nur die Muskelkontraktionen herausfiltern und pro Muskelkontration möchte ich dann die Medianfrequenz und den RMS Wert(e) haben! Ich könnte mit dem Programm manuell Events generieren, so wie ich mir das vorstelle, Problem ist, dass ich etwa 9 Muskeln pro Probanden habe und etwa 10 Messungen - das heißt ich würde manuell wortwörtlich alt werden - zusätzlich kann ich nur subjektiv entscheiden wann eine Kontraktion (burst) stattfindet und wann diese wieder aufhört wodurch die Genauigkeit und der Messfehler stark variiert.

als Ergenis wünsche ich mir dann einen Spaltenfektor, der mir zur zeit x einen y-Wert (Medianfrequenz, gemittelte RMS) liefert und zur zeit xn die n te Medianfrequenz bzw. gemittelte RMS).

Meine Frage ist: ist das überhaupt möglich Wink ???

Es wäre natürlich eine große Hilfe, könnte ich das automatisch machen! Lt. Literatur wird der "Onset" definiert: die schwingung größer als 3*std über ein Zeitfenster von 50ms.

Würde mich sehr freuen, wenn mir jemand helfen könnte!

Vielen dank

meine Email:
p.ertl@gmx.net
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.10.2013, 13:56     Titel: Re: EMG Verarbeitung
  Antworten mit Zitat      
Hallo ertl87,

Zitat:
Ich habe ein EMG Signal

Ab genau diesem Satz ist die Frage nicht mehr klar. Was heißt "ein Signal haben" genau?

Zitat:
Meine Frage ist: ist das überhaupt möglich ;) ???

Ich bin fest überzeugt, dass "das" möglich ist. Aber die Beschreibung ist noch viel zu allgemein um nachvollziehen zu können, welches konkrete Problem Du lösen möchtest.

Das Anfügen der Mail-Adresse ist im Forum nicht gerne gesehen. Ein Forum lebt davon, dass auch andere von der Lösung profitieren können. Wenn Du das Problem privat besprechen möchtest und den Helfer für seine Arbeiten auch entlohnen möchtest, wäre die "Programmieraufträge"-Kategorie passend.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 29.10.2013, 14:18     Titel:
  Antworten mit Zitat      
Hallo ertl,

da ich mit EMG auch nicht wirklich was anfangen konnte habe ich mal kurz gegoogelt.

Für die Auswertung von "EMG Signalen" bin ich auf ein paar Seiten gestoßen. Also ist eine Auswertung generell möglich Wink

http://www.biomed.drexel.edu/labs/biomechanics/emg_analy.htm
http://www.emglab.net/emglab/Software/Software.php

Grüße Chris
_________________

--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Wink
Richtig fragen!
Private Nachricht senden Benutzer-Profile anzeigen
 
ertl87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 28.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2013, 19:55     Titel:
  Antworten mit Zitat      
Hallo Jan, Hallo Chris,

Danke für eure Antwort!

Man sieht dass ich ein absoluter Frischling bin, und mich damit ganz wenig auskenne Mein Problem ist, dass ich dass was ich will nicht wirklich in Wort fassen kann, aber ich versuche es einmal!

Was ich mit dem EMG messe, sind Muskelaktivitäten. Wenn ein Muskel ruht, rauscht das Signal um die Nulllinie (geht ganz wenig auf und ab) und in der aktiven Phase, wenn der Muskel innerviert sind die Spannungen bedeutend höher! (Habe ein Bild hochgeladen und rot eingekreist - und ist die aktive Innervaionsphase)

Im Internet habe ich einen Code gefunden, der für eine Muskelkontraktion den On und Offset bestimmen kann:

Code:
function onoff = emgonoff(rawemg, fs, ws, sd)
% EMGONOFF - Find on/off times and indicies of raw EMG data.
% Calculate average(mean) value of resting EMG
% Define "on" EMG as the sample where average value of EMG in a given window
% range around the sample is a given # of std. dev. above avg. resting EMG.
%
% onoff = emgonoff(rawemg, fs, ws, sd)
%
% Use the mouse to select two ranges of "resting" EMG from a graph of the
% full-wave rectified EMG data.  Click four times: start and end of 1st
% resting range, and start and end of 2nd resting range.  Mouse clicks need
% to be consecutive and in order of increasing time (i.e. left-to-right on
% the graph).  The first range should precede the EMG burst associated with
% the muscle contraction under consideration.  The sedond range should be
% the resting EMG data immediately following the EMG burst.
%
% rawemg = input file raw emg data (1-column vector)
% fs = sampling rate of raw EMG data in Hz
% ws = window size in milliseconds (50ms @ 2400Hz = 120 samples)
% sd = number of std. deviations above resting rms emg to trigger an "ON"
% Default values:
%   ws = 50ms
%   sd = 1

% Algorythm for EMG onset & offset taken from
% Hodges, P.W. and B.H. Bui, _A comparison of computer-based methods for
% the determination of onset of muscle contraction using electromyography._
% Electroencephalography & Clinical Neurophysiology, 1996. 101(6): p. 511-9
%
% Created by: Kieran A. Coghlan, BSME, MSES
% SUNY at Buffalo, New York
% <kc_news@sonic.net>
% Last modified: 1 May, 2006

%% Check inputs for defaults
if nargin < 2, error('Not enough inputs. Type "help emgonoff" for help.'); end
if nargin < 3, ws = 50; end
if nargin < 4, sd = 1; end;
%% Full-Wave-Rectify the raw data
fwlo = abs(rawemg(:,1));
%% prepare for loop
% Get two ranges for resting emg (before & after burst) using ginput
R = input('\nUse the mouse to select FOUR points to define the begining and \nend of two data ranges that will be used to calculate average\nresting EMG values before and after the EMG burst (muscle contraction)\nPress [RETURN] to begin: ');
clear R;
f1 = figure;
plot(fwlo);
[x y] = ginput(4); %click four times: two for start/end of resting emg before burst two for resting emg after burst
x = round(x);
clear y;
%close(f1);clear f1; % Leave commented if you want to keep EMG graph up to
%                    % do a visual QA of on/off results.
%% preallocate arrays
mvgav = zeros(x(4)-x(1),1);
onoff(1,1) = 0;
i=0;
restav = mean(fwlo(x(1):x(2))); %average value of rest EMG before ON
reststd = std(fwlo(x(1):x(2))); %std. dev. of rest EMG before ON
restav2 = mean(fwlo(x(3):x(4))); %average value of rest EMG after OFF
reststd2 = std(fwlo(x(3):x(4))); %std. dev. of rest EMG after OFF
%% window size (in samples) = ws*fs e.g. 50ms*2400Hz = 120 samples
sws2 = fs*(0.001*ws);
sws = 0.5*(sws2);
sws = round(sws);
%% find "ON" index:
% for xi, change from x(1) to x(2) if you want to ignore any "blips"
% within the resting range.
%xi = x(1);
xi = x(2);
xi = round(xi);
for n = 2:length(mvgav);
    mvgav(n,1) = mean(fwlo((xi-sws):(xi+sws)));
    if mvgav(n) > restav+sd*reststd;
        i = i+1;
        onoff(i,1) = xi;
        break
    end
    xi = xi+1;
end
%% find "OFF" index:
clear n xi i
mvgav2=zeros(x(4)-x(1),1);
i=0;
xi=onoff(1,1)+(1/2)*(x(3)-onoff(1,1)); %start OFF search approx. 1/2 way through ON burst.
%% OFF loop:
xi=round(xi);
for n=2:length(mvgav2);
    mvgav2(n,1)=mean(fwlo((xi-sws):(xi+sws)));
    if mvgav2(n)<restav2+sd*reststd2;
        i=i+1;
        onoff(i,2)=xi;
        break
    end
    xi=xi+1;
end


Betrachte ich dann nur die aktive Phase, aber im Prinzip nur für eine Kontraktion --> ein rot eingekreister Bereich

Bei meiner Messung habe ich ein Signal über 20 Minuten lang, mit wechselndem On/Offset. Da ich jetzt über die gesamte Zeitdauer die neuromuskuläre Ermüdung (FFT/medianfrequenz) betrachten will, möchte ich die Medianfrequenz NUR in der aktiven Kontraktionsphase des Muskels betrachten!

WAS ICH BRAUCHE:

Eine Funktion, die mir automatisch die jeweiligen Muskelkontraktionen erkennt, und in diesem ON/OFFSET-Intervall (rot eingekreister Bereich) die Medianfrequenz berechnet und als Datenpunkt einzeichnet und am Besten in eine Array Dataset ('Filename'<(n) x 1> double) einträgt! und das Punkt für Punkt, Kontraktion für Kontraktion bis das Signal vorbei ist:
Code:


Hoff ich habe es jetzt einigermaßen hinbekommen!!!

glg Peter

Burst.jpg
 Beschreibung:

Download
 Dateiname:  Burst.jpg
 Dateigröße:  114.23 KB
 Heruntergeladen:  458 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.