MAL-Homepage
Inhaltsverzeichnis
MAL Dokumentation: Mathematik
1. ALLGEMEINES
In diesem Kapitel sind nur die wesentlichsten mathematischen und
statistischen Funktionen erläutert.
Eine vollständige Zusammenstellung aller mathematischen Worte kann unter
mathematics
gefunden werden.
Alle Funktionen die mit Zahlen arbeiten (z.B. sin,
n!,
cosh, ..) können auch für Zeitreihen
(=Verbunde von Realzahlen), Bilder (=Images),
EMED-Datensätze oder Verbunde von EMED-Datensätzen verwendet werden.
Auch Operatoren (wie z.B. +,
mod ..)
können für diese Datentypen oder Kombinationen davon
verwendet werden. Der Ergebnis-Datentyp
hängt von den Datentypen der Operatoren wie folgt ab:
MAL-Homepage Inhaltsverzeichnis
2. SIGNALVERARBEITUNG 2.1. Triggerpunkte
Für die Suche nach Schwellwertüber- oder -unterschreitungen existieren
die Worte +trigger und
-trigger.
Sie sind vor allem für die Synchronisation von mehreren Zeitreihen
(z.B. zum Suchen von Schrittbegin und Schrittende, Fußungsbeginn
und Fußungsende o.ä.) von großem Nutzen.
Syntax:
zeitreihe
schwelle hyst -> indizes
Die Zeitreihe ist als Verbund von Realzahlen anzugeben.
Als Ergebnis erhält man einen Verbund von Indizes, an denen
der Schwellwert über- bzw. unterschritten wurde. Um wiederholtes
Triggern durch das Signalrauschen zu unterdrücken, dient die
Hysterese, die mit dem Wert ´hyst´ anzugeben ist.
Beispiel:
Berechnung von Testdaten:
: zeitreihe
1 random 1 , 10 * >> verschiebung
1 random 1 , 1 + >> amplitude
200 ramp 10 / verschiebung + sin amplitude * ;
[ zeitreihe zeitreihe zeitreihe ] >> testdaten
testdaten draw screen
Suche der Nulldurchgänge und Ausschneiden der ersten Periode:
: erste_periode >> zeitreihe
zeitreihe 0 0.1 +trigger >> triggerpunkte
zeitreihe triggerpunkte 2 , cut drop
triggerpunkte 1 , 1 - cut swap drop ;
[ testdaten each erste_periode ] draw screen
MAL-Homepage Inhaltsverzeichnis
2.2. Zeitabschnitte
Die Klasse timeslices_class dient
zum Zerteilen und Bearbeiten von Zeitabschnitten. Ihre Funktionen können für beliebige
Verbunde oder Instanzen von Klassen, die die Funktionen count und cut kennen, verwendet
werden. Insbesondere gilt dies neben eindimensionalen Zeitreihen (Realverbund) auch
für Instanzen der Klassen trajectory_class und
trajectories_class.
Es gibt zwei Konstruktoren für Instanzen der Klasse
timeslices_class:
Einen, bei dem die Beginn- und Endzeitpunkte der Zeitabschnitte
angegeben werden (from-to>timeslices) und einen, bei
dem nur die Beginnzeitpunkte angegeben werden (from>timeslices),
die Zeitabschnitte also dicht liegen.
Beispiel:
Aus der Datei gangdat.met
wird die Vertikalbewegung der linken Ferse gelesen:
public \ 3d \ interfaces >voc
"gangdat.met" meta> z \ Ferse_L 100 400 |--| >> signal
Bestimmen der Zeitpunkte, zu denen die Ferse vom
Boden abhebt
signal 0.1 0.05 +trigger from>timeslices >> ab_fussungsende
Die Funktion draw kann für die Kontrollanzeige
der Zeitabschnitte verwendet werden:
signal ab_fussungsende draw screen
MAL-Homepage Inhaltsverzeichnis
2.3. Resampling
Um Zeitreihen auf eine bestimmte Anzahl von Samples zu normalisieren,
kann das Wort normalize
verwendet werden. Es kann für Verbunde von Realzahlen oder
EMED-Bildern verwendet werden. Für Trajektorien existieren
gleichlautende Member-Functions, sodass die Normalisierung für
diese Datensätze syntaktisch gleich ist.
Syntax von normalize:
zeitreihe sampleanz -> norm_zeitreihe
Die Berechnung der für das Resampling erforderlichen Zwischenwerte
erfolgt mittels linearer Interpolation.
Beispiel:
1000 ramp 100 / sin >> signal
[ signal dup 500 normalize ] draw screen
MAL-Homepage Inhaltsverzeichnis
2.4. Glätten
Folgende Funktionen können für das Glätten von
Zeitreihen verwendet werden:
MAL-Homepage Inhaltsverzeichnis
2.5. Fourier-Transformation
Die Worte fft und
ifft führen eine
Fast-Fourier-Transformation bzw. inverse Fast-Fourier-Transformation durch,
die Worte dft und
idft eine diskrete
Fourier-Transformation/Rücktransformation.
Syntax für fft und dft:
zeitreihe -> real imag
Syntax für ifft und idft:
real imag -> zeitreihe
Der Algorithmus für die Berechnung der Fast-Fourier-Transformations
verlangt, daß die Anzahl der Samples in der Zeitreihe oder den
Feldern ´real´ und ´imag´ einer ganzahligen Zweierpotenz
(also .. 64,128 .. 1024..) entsprechen muß. Nötigenfalls
kann man dies mit dem Wort ´normalize´ erreichen.
Bei beiden Worten wird der Gleichanteil (üblicherweise mit a0
bezeichnet) nicht berechnet bzw. nicht verwendet. D.h das Feld
´real´ enthält die Koeffizienten a1,a2... und das
Feld ´imag´ die Koeffizienten b1,b2 .....
Der Koeffizient a0 entspricht dem Mittelwert der Zeitreihe.
Er kann im Bedarfsfall jederzeit mit dem Wort
mean aus der Zeitreihe
berechnet werden.
MAL-Homepage Inhaltsverzeichnis
2.6. Differenzieren und Integrieren
Die Worte diff und
integrate führen
eine einfache numerische Differentiation bzw. Integration einer
Zeitreihe durch. diff
bildet jeweils die Differenzen zwischen zwei aufeinanderfolgenden
Werten der Zeitreihe und integrate
summiert aufeinanderfolgende Werte auf. Daher wird die Zeitreihe
bei diff um einen Wert kürzer. Bei integrate wird
mit dem Startwert 0 begonnen, womit die Zeitreihe um einen Wert
verlängert wird.
Das Wort diff kann nicht nur für die numerische Ableitung, sondern
generell für die Bestimmung von Differenzen zwischen Zahlen
verwendet werden, was zum Beispiel für die Berechnung von
Periodenlängen von Vorteil ist.
Beispiel:
500 ramp 10 / sin >> zeitreihe
zeitreihe 0 0.1 +trigger diff .
[ 63 63 63 63 62 <- 5
63 ]
MAL-Homepage Inhaltsverzeichnis
2.7. Interpolieren
Folgende Worte könne für die Interpolation von Zeitreihe
verwendet werden:
MAL-Homepage Inhaltsverzeichnis
3. MATRIZEN UND VEKTOREN
Für die Bearbeitung von 3d-Zeitreihen und Orientierungsdaten
existieren eigene Klassen, die auf den hier vorgestellten
Funktionen basieren
(siehe Klassen für die 3d-Bearbeitung)
Matrizen werden in MAL in Form eines Verbundes der Zeilenvektoren dargestellt.
Also zum Beispiel eine 3x3 Matrix R wird in der Form
[ [ r11 r12 r13 ] [ r21 r22 r23 ] [ r31 r32 r33 ] ]dargestellt.
[ x y z ]wobei für ´x´, ´y´ und ´z´ entweder Realzahlen oder (gleich lange) Verbunde von Realzahlen (bei Zeitreihen) verwendet werden können.
MAL-Homepage Inhaltsverzeichnis
3.1. Orientierungsdaten
Statische Orientierungsdaten werden in der Form
[ R v ]wobei R die Drehmatrix und v der Verschiebungsvektor ist dargestellt.
MAL-Homepage Inhaltsverzeichnis
3.2. Gelenkswinkel
Sind von einem Gelenk die Raumkoordinaten von drei Punkten
bekannt (Markierungspunkt am ersten Glied, Gelenksachse und
Markierungspunkt am zweiten Glied), so kann mit dem Wort
angle3d der
dreidimensionale Gelenkswinkel berechnet werden.
Syntax:
x1 y1 z1
x2 y2 z2 x3 y3 z3 -> winkel
Die Koordinatenwerte ´x1´..´z3´ können Realzahlen oder Realfelder
mit Zeitreihen sein. Das Ergebnis ist stets ein Realfeld mit den
Winkelwerten in rad.
Das Wort angle2d
kann für die Berechnung von zweidimensionalen Gelenkwinkeln
verwendet werden.
MAL-Homepage Inhaltsverzeichnis
3.3. Kamerakalibrierung
Kinematische Meßsysteme (=Tracking Systeme) erfordern im
allgemeinen eine Berechnung von Raumkoordinaten von
Meßpunkten aus gegebenen Bildkoordinatenwerten.
Diese Berechnung erfordert zuvor die Bestimmung der
Kameraorientierungen (=Kamerakalibrierung). Bei der
Kalibrierung werden zuerst Meßpunkte mit bekannten
Raumkoordinaten vermessen (sog. ´Passpunkte´). Aus
den bekannten Raumkoordinaten und den gemessenen
Bildkoordinaten werden Parametersätze berechet, die in
der Folge für die Rücktransformation von Bild- in
Raumkoordinaten verwendet werden.
Glossar:
MAL-Homepage Inhaltsverzeichnis
4. KOMPLEXE ZAHLEN 4.1. Einführung
Sämtliche für das Rechnen mit komplexen Zahlen erforderlichen
Worte sind unter Topic complex
beschrieben.
Das Rechnen mit komplexen Zahlen wie es in der Elektronik
üblich ist, kann für die Biomechanik überall dort, wo
man mit periodischen Vorgängen zu tun hat, von großem
Nutzen sein. Man betrachte die Gleichung
du
i = C -----
dt
und ihr mechanisches Pendant
dv
f = M -----
dt
Daraus läßt sich unmittelbar schließen, dass man sämtliche
für elektronische Schaltungen üblichen Berechnungen auch für
mechanische Zusammenhänge anwenden kann, wenn man statt Strom
Kraft, statt Kapazität Masse und statt Spannung Geschwindigkeit
einsetzt.
Ebenso wie in der Elektronik beschreiben komplexe Zahlen immer
nur das Verhalten einer Schaltung (eines mechanischen Systems)
bei einer sinusförmigen Schwingung. Nicht-sinusförmige
Schwingungen müssen durch eine Summe sinusförmiger Schwingungen
dargestellt werden. Dieser Tatsache trägt die Klasse
complex_class
Rechnung, indem sie auch die Definition von komplexen
Zahlen für ganze Frequenzbänder zulässt.
Man kann also periodische Zeitreihen egal welcher Kurvenform
per Fouriertransformation in ein Frequenzband umwandeln und diese
mit den entsprechenden komplexen Zahlen verknüpfen (Multiplizieren,
Addieren usw.). Damit diese Verknüpfungen korrekt durchgeführt
werden ist Voraussetzung, dass sowohl für die Transformation
der Zeitreihen das gleiche Frequenzspektrum wie für die
komplexen Zahlen verwendet wird.
Im Folder complex_folder
ist daher eine Variable frequenzen
(und omega) definiert, die
die einzelnen Frequenzen des Frequenzspektrums am Stack
übergibt. Die Frequenzen werden dynamisch aufgrund der
mit dem Wort set_config
eingestellten (in der Variablen
config gespeicherten)
Grundeinstellungen berechnet.
MAL-Homepage Inhaltsverzeichnis
4.2. Die Klasse complex_class
Die Konstruktoren >complex der Klasse
complex_class
erwarten alle zwei Parameter, nämlich den Realteil
und den Imaginärteil am Stack. Nachdem es möglich ist
für beide Parameter sowohl einzelne Realzahlen als auch
Realverbunde anzugeben, existieren vier gleichlautende
Konstruktoren für alle möglichen Kombinationen.
Die Funktionen time>complex und complex>time dienen
zur Konverierung von Zeitreihen in komplexe Zahlen und
umgekehrt. Nachdem für die Konverierung eine
Fast-Fourier-Transformation verwendet wird
(siehe Wort fft), ist
Voraussetzung, dass die Sampleanzahl der Zeitreihe
eine ganzzahlige Zweierpotenz ist (2, 4, 8, 16 .. 512, 1024 ...).
Man beachte die mit set_config
gemachten Voreinstellungen
bezüglich der Grundfrequenz und er Anzahl der Oberwellen.
Die Anzahl der Oberwellen ist die halbe Sampleanzahl der
Zeitreihe, die Grundfrequenz die Frequenz, mit der
die Zeitreihe sich wiederholt.
Nebst den Standardoperatoren (+, -, *, /) ist noch der Operator
|| erwähnenswert, der die Parallelschaltung zweier komplexer
Widerstände berechnet. Die Funktionen betrag und phase
sprechen für sich. Die Funktion frequenzgang erzeugt eine
Graphik mit dem Frequenzgang der komplexen Zahl.
Beispiel:
Zeitverhalten eines RC-Hochpassfilters mit 100 Ohm und
1 uFarad bei Ansteuerung mit einem 1kHz Rechtecksignal.
private \ complex >voc
interface_of complex_class >voc
512 ramp 1 + 1000 * >> frequenzen
256 ramp 0 * dup 1 + & time>complex >> rechteck
100 Ohm >> R
1.0e-6 Farad >> C
R R C + / >> hochpass
rechteck hochpass * complex>time draw screen
MAL-Homepage Inhaltsverzeichnis
5. STATISTIK
Eine Auflistung aller statistischen Funktionen kann
unter statistics
gefunden werden.
MAL-Homepage Inhaltsverzeichnis
5.1. Grundfunktionen
Die Worte min,
max,
mean,
variance und
median bedürfen
vermutlich keiner weiteren Erklärung. Wichtig ist, dass
die Worte min, max, mean und variance auch
für Zeitreihen und Bilder, min und max auch für
EMED-Datensätze verwendet werden können.
Ein Wort für die Berechnung der
Standardabweichung kann einfach mit
: standard_deviation variance sqrt ;
definiert werden.
Ein Student T-Test kann mit dem Wort
ttest durchgeführt werden.
Es erwartet zwei Stichproben und legt als Ergebnis den Signifikanzwert
am Stack. Will man zum Beispiel auf 95% Signifikanz prüfen, so
genügt es, zu überprüfen, ob das Ergebnis von ´ttest´ größer 0.95 ist.
Zum Sortieren von Verbunden beliebiger Art nach beliebigen
Sortierkriterien existiert das Wort
sort. Es arbeitet mit
einem binären Sortierbaum und ist daher am schnellsten, wenn
die Eingangsdaten gut gemischt sind. Das Sortierkriterium kann
bei Bedarf in Form eines Codestrings definiert werden.
MAL-Homepage Inhaltsverzeichnis
5.2. Histogramme
Das Wort ahisto
berechnet aus einer Stichprobe direkt eine Graphik mit
einem Histogramm. Die Bestimmung der erforderlichen
Klassenanzahl, wird dabei mit einem nach DIN genormten
Algorithmus durchgeführt. Dieser ist leider nicht in allen Fällen ideal.
Im Bedarfsfall kann man sich auf der Basis des Codes von
ahisto
(zu finden im Public-Folder,
´startup_folder´)
ein entsprechendes Wort mit frei wählbaren Klassengrenzen definieren.
Für die automatische Klasseneinteilung bei
ahisto wird das
Wort aclass verwendet.
Das Wort classification
hingengen ermöglicht eine parameterisierbare Klasseneinteilung.
Beispiel:
1000 random 0.5 - 1000 random 0.5 - *
ahisto screen
MAL-Homepage Inhaltsverzeichnis
5.3. Regressionen
Mit den Worten regress
und polynom kann eine
Regressionsrechnung basierend auf einem Polynommodell mit beliebig
wählbarem Grad (Grad 1 = lineare Regression) durchgeführt werden.
regress berechnet aus den
Daten der unabhängigen und der abhängigen Stichprobe, sowie der
Angabe des Grades, die Parameter des Polynoms. Mit
polynom können die
Funktionswerte des Polynoms berechnet werden.
Das Wort regress_plot
erzeugt aus den gleichen Eingangsdaten wie regress
eine Graphik.
Beispiel:
10 ramp dup 10 nrandom + 1 regress_plot screen
MAL-Homepage Inhaltsverzeichnis
5.4. Zweidimensionale Regressionen
Für die Entzerrung zweidimensionaler Funktionen (z.B. Korrektur
von nichtlinearen Linsenfehlern oder Korrektur von Linearitätsfehlern
bei der Schwerpunktberechnung bei Kraftmeßplatten) existieren die
Worte regress_2d
und polynom_2d.
Das Verfahren ist ähnlich der Regressionsrechnung mit Polynommodellen
in der Statistik: Es wird eine Polynomfunktion (im zweidimensionalen
Fall zwei Funktionen) nach der Kleinstquadratmethode bestmöglich
an gegebene Stützpunkte angepaßt.
Die verwendeten Polynomfunktionen haben folgende Form:
fx(x,y) = a00 + a01x + a02x2 + a03x3 .... a10y + a11xy + a12x2y + a13x3y .... a20y2 + a21xy2 + a22x2y2 + a23x3y2 .... . . fy(x,y) = b00 + b01x + b02x2 + b03x3 .... b10y + b11xy + b12x2y + b13x3y .... b20y2 + b21xy2 + b22x2y2 + b23x3y2 .... . .Die Berechnung der Parameter aij und bij erfolgt mit dem Wort regress_2d. Mit dem Wort polynom_2d kann aus einem (verzerrten) Koordinatenpaar x,y eine korrigierte Koordinate fx oder fy berechnet werden, je nachdem, ob es mit den Parametern aij oder bij versorgt wird.
MAL-Homepage Inhaltsverzeichnis