matlab:mat03
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
matlab:mat03 [01.01.2013 21:27] – [MAT3 Kugelstoßen] Filip Cengic | matlab:mat03 [27.11.2022 23:55] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ====== |
+ | |||
+ | ^ Autor | Martin Grimmer | | ||
+ | ^ Letzte Bearbeitung | 14. Jan 2014 | | ||
+ | ^ Matlab Datei | {{: | ||
+ | |||
+ | |||
+ | In diesem Wiki werden wesentliche Schritte zur Auswertung und Darstellung von Messdaten einer Bewegungsanalyse (Kräfte, EMG, etc.) mit Hilfe von MATLAB beschrieben. | ||
+ | |||
+ | |||
+ | ===== Programmoberfläche bereinigen ===== | ||
+ | Für den Beginn eines Quellcodes sind folgende Befehle zu empfehlen. | ||
+ | |||
+ | < | ||
+ | clc; | ||
+ | clear all; | ||
+ | close all; | ||
+ | </ | ||
+ | |||
+ | ===== Datensatz laden ===== | ||
+ | Als erster Arbeitsschritt werden die Messdaten geleden. Dazu kann man vorerst das Verzeichnis öffnen in welchem die Daten vorliegen. | ||
+ | |||
+ | < | ||
+ | cd(' | ||
+ | </ | ||
+ | Nachfolgend kann der Datensatz geladen werden. | ||
+ | |||
+ | **Methode V1** | ||
+ | |||
+ | |||
+ | < | ||
+ | load Testdaten.mat | ||
+ | </ | ||
+ | |||
+ | **Methode V2** | ||
+ | Komfortabler geht dies über eine grafische Benutzeroberfläche. | ||
+ | |||
+ | < | ||
+ | [FileName, | ||
+ | cd(PathName); | ||
+ | load(FileName); | ||
+ | </ | ||
+ | |||
+ | ===== Schritte, Wiederholungen ausschneiden ===== | ||
+ | Zum ausschneiden von Schritten sollen 2 Methoden vorgestellt werden. Die erste erfolgt manuell ist aber eher ungenau. Die zweite erfolgt automatisch und ist wesentlich reproduzierbarer. | ||
+ | |||
+ | **Methode V1** | ||
+ | Hier wird vorerst der Datensatz als Vollbildgrafik ausgegeben. Anschließend können über einen Cursor die entsprechenden Start- und Endpunkte angeklickt werden. | ||
+ | < | ||
+ | hfig=(figure); | ||
+ | set(hfig,' | ||
+ | plot(Fz); | ||
+ | |||
+ | ginput(2); | ||
+ | Start_End=round(ans(:, | ||
+ | </ | ||
+ | |||
+ | **Methode V2** | ||
+ | Für die zweite Methode sollte als erstes die Definition einer Kraftschwelle erfolgen, bei welcher der Bodenkontakt als solcher erkannt werden soll. | ||
+ | < | ||
+ | Level=50; | ||
+ | i=1; %running variable that increases from 1 to the maximum number of frames of Fz | ||
+ | pos=1; | ||
+ | while i < length(Fz) | ||
+ | i=i+1; | ||
+ | if Fz(i) > Level %if force of Fz higher than the detection level | ||
+ | Start_End(pos, | ||
+ | pos=pos+1; | ||
+ | while Fz(i) > Level && i < length(Fz) %after finding a value higher than Level the system continious searching for a value smaller than the level | ||
+ | %in addition the system should stop if the increasing variable i reaches the value of the length of Fz (to avoid error) | ||
+ | i=i+1; | ||
+ | end; | ||
+ | Start_End(pos, | ||
+ | pos=pos+1; | ||
+ | end; | ||
+ | end; | ||
+ | </ | ||
+ | |||
+ | ===== Daten interpolieren ===== | ||
+ | Je nach Versuch sind die ausgeschnittenen Daten unterschiedlich lang. Die Anzahl der Frames unterscheidet sich. Um die Länge der Datensätze zu standartisieren werden diese auf eine einheitliche Länge von 100 Prozent d.h. entsprechend 100 Werte interpoliert. | ||
+ | |||
+ | Dies kann für die Gangdaten von der Landung bis zum Abheben des Fußes (Standphase) oder von der Landung bis zur nächsten Landung (Gangzyklus) erfolgen. Im Beispiel wird der komplette Zyklus ausgeschnitten. | ||
+ | < | ||
+ | Number_of_Steps=length(Start_End)/ | ||
+ | |||
+ | for i=1: | ||
+ | data=Fz(Start_End(i*2-1): | ||
+ | |||
+ | Fz_100(:,i) = interp1(1 : length(data) | ||
+ | | ||
+ | end; | ||
+ | </ | ||
+ | |||
+ | ===== Mittelwerte und Standartabweichung ===== | ||
+ | Zur Bildung von Mittelwert und Standartabweichung werden die Befehle mean und std genutzt. | ||
+ | < | ||
+ | Mean_Fz_100=mean(Fz_100, | ||
+ | STD_Fz_100=std(Fz_100, | ||
+ | </ | ||
+ | < | ||
+ | |||
+ | ===== Datensatz speichern ===== | ||
+ | cd ' | ||
+ | save(' | ||
+ | </ | ||
+ | |||
+ | ===== Bearbeitung EMG Daten ===== | ||
+ | EMG Daten können in einem ersten Schritt durch einen Bandpassfilter z.B. zwischen 5-20Hz und 400-450Hz von unnötigen Störsignalen befreit werden. | ||
+ | |||
+ | In einem zweiten Schritt werden EMG Daten gleichrichtet. Dies bedeutet, dass der Betrag gebildet wird und somit alle negativen Werte positiv werden. | ||
+ | < | ||
+ | EMG_abs=abs(EMG); | ||
+ | </ | ||
+ | |||
+ | Um Verläufe grafisch besser darzustellen wird meist ein Filter genutzt. Hier als Beispiel ein Butterworth Filter. | ||
+ | < | ||
+ | fc = 3; % Cut-off frequency (Hz) | ||
+ | fs = 1000; % Sampling rate (Hz) | ||
+ | order = 2; % Filter order | ||
+ | [B,A] = butter(order, | ||
+ | |||
+ | EMG_abs_filt = filtfilt(B, | ||
+ | </ | ||
+ | |||
+ | Zur grafischen Darstellung der 3 Varianten kann folgender Code verwendet werden. | ||
+ | < | ||
+ | figure(2); | ||
+ | plot(EMG,' | ||
+ | plot(EMG_abs,' | ||
+ | plot(EMG_abs_filt,' | ||
+ | legend(' | ||
+ | </ | ||
+ | |||
+ | ===== Erfassung mehrerer Probanden ===== | ||
+ | Um mehrere Probanden zu erfassen empfielt es sich das Programm in eine Schleife einzubinden. Diese könnte dann wie folgt aussehen. | ||
+ | |||
+ | **Programmoberfläche bereinigen** | ||
+ | < | ||
+ | for subject = 1:5 %start of for loop, when there are for example 5 subjects 1:5 - 1 to 5 | ||
+ | </ | ||
+ | |||
+ | **Datensatz laden** | ||
+ | |||
+ | **Schritte, Wiederholungen ausschneiden** | ||
+ | |||
+ | **Daten interpolieren** | ||
+ | |||
+ | **Mittelwerte und Standartabweichung** | ||
+ | |||
+ | Hier müssen nun die errechnetten Mittelwerte der einzelnen Probanden in eine neue Variable übergeben werden, um im Anschluss ein Mittel aller Probanden zu berechnen. | ||
+ | < | ||
+ | ALL_Subjects_Mean_Fz_100(:, | ||
+ | |||
+ | end; %end of for loop | ||
+ | |||
+ | Mean_ALL_Subjects_Mean_Fz_100=mean(ALL_Subjects_Mean_Fz_100); | ||
+ | </ | ||
+ | **Datensatz speichern** | ||
+ | |||
+ | |||
+ | ===== Weitere Infos zu MATLAB ===== | ||
+ | |||
+ | * [[http:// | ||
- | ^ Modul | [[MATLAB: | ||
- | ^ Kategorie | [[:MATLAB| Matlab]]| | ||
- | ^ Autor | [[: | ||
- | ^ Voraussetzung | [[: | ||
- | ^ Bearbeitungsdauer | ca. 30 Minuten | | ||
- | ^ Matlab Datei | {{: | ||
- | < | ||
- | Aufgabe war den **optimalen Winkel** herauszufinden bei einer **Abwurfhöhe von 2,5 m**. Dabei ist die **Weite** des Kugelstoßers vorgegeben (10 m). Im zweiten Aufgabenteil sollte ebenfalls der **optimale Winkel** und die **maximale Weite** bei einer **Abwurfhöhe von 5 m** ermittelt werden. | ||
- | < | ||
- | < | ||
- | Die beiden Lösungen zu den Aufgabenteilen sind in folgender Grafik aufgetragen. Die x-Achse (Winkel) ist bei beiden Grafiken dieselbe, allerdings nicht die y-Achse: Im ersten Aufgabenteil bezeichnen die Funktionswerte die minimale Abwurfgeschwindigkeit (in m/s) für verschiedene Winkel (bei einer vorgegebenen Weite von 10 m). | ||
- | < | ||
- | Aufgabe b) gibt Auskunft über die maximale Wurfweite für verschiedene Abwurfwinkel. Dabei entspricht die Abwurfgeschwindigkeit der errechneten Geschwindigkeit aus dem ersten Aufgabenteil. Somit haben wir 2 Parameter gegeben für die Gleichung des schrägen Wurfs und können nach dem Winkel (3. Parameter) auflösen. Die maximal erreichbare Weite wird pro Iteration zwischengespeichert. Mittels der p-q-Formel lassen sich die Nullstellen (Schnittpunkt der Parabel mit der x-Achse = Wurfweite) bestimmen. Uns interessiert in diesem Fall nur die positive Nullstelle, da wir nicht nach hinten werfen. | ||
- | < | ||
- | < | ||
- | Den optimalen Winkel können wir nun aus beiden Grafen ablesen. Dieser entspricht dem x-Wert der jeweiligen Extrempunkte. In Aufgabe a) liegt ein Tiefpunkt vor und der Hochpunkt im 2. Aufgabenteil gibt uns Informationen über den gesuchten Winkel für die maximale Wurfweite. | ||
- | < | ||
- | < | ||
- | {{: | ||
- | < | ||
- | < | ||
- | ===== Video - Mathe & Matlab | ||
- | Folgendes Video zeigt einen möglichen Lösungsweg der 3. Übungsaufgabe. | ||
- | < | ||
- | < | ||
- | {{youtube> | ||
- | < | ||
- | < | ||
{{indexmenu_n> | {{indexmenu_n> |
matlab/mat03.1357072067.txt.gz · Zuletzt geändert: 27.11.2022 23:54 (Externe Bearbeitung)