Zum Hauptinhalt springen

Hilfsfunktionen

Systemfunktionen

FunktionBeschreibung
time()Liefert den Auswertezeitpunkt des Moduls in Sekunden UTC

Zeitumwandlung "decodeTime"

Die Funktion decodeTime() nimmt einen skalaren Zeitstempel t in UTC und wandelt ihn mit dem optionalen Offset tzDif zur lokalen Uhrzeit in die zugehörige Datum und Zeitdarstellung um. Verschiedene Interpretationen und Ausgabeformate können eingestellt werden.

TM1 = decodeTime(t);
TM2 = decodeTime(t, tzDif);
// Optionale Konfiguration
TMx = decodeTime(..., { scale: <enum>
, epoch: unix|<date>
, tzDif: <int>
, format: <str>
});
EigenschaftWertBeschreibung
scale<enum>Bestimmt, was der ganzzahlige Anteil des Zeitstempels beschreibt:
auto: Größenordnung des Zeitstempels bestimmen die Auflösung (def.), oder
der ganzzahlige Teil von t zählt...
d: ... Tage
s: ... Sekunden
ms: ... Millisekunden
us: ... Microsekunden
ns: ... Nanosekunden
epochunix/<date>Der Startzeitpunkt der Zählung wird auf das gegebene UTC Datum festgelegt,
Format: 'yyyy-mm-dd',
optional mit Zeitangabe 'yyyy-mm-dd  HH:MM'
(def.: unix 1970-01-01)
tzDif<int>Zeitversatz in Minuten zur Ausgabe der lokalen Zeit, Beispiel MEZ: +60, MESZ: +120, EST: -300
format<str>Statt eines Vektors wird ein formatierter Datum/Zeit-String ausgegeben. Die Funktion verwendet intern die c++ Funktion strftime(). Die Formatierung der Ausgabe ist hier beschrieben.
Zusätzlich können folgende Platzhalter verwendet werden:
%FMS: 3-Ziffern milli-Sekunden
%FUS: 6-Ziffern micro-Sekunden
%FNS: 9-Ziffern nano-Sekunden
jeweils mit führenden Nullen

Sofern nicht mit der Eigenschaft format die Ausgabe eines formatierten Datum-Zeit-Textes angefordert wird, ist das Ergebnis ein Vektor mit folgenden <uint> Werten:

// Rückgabe der Datums-Zeit-Information als Vektor entsprechend
// folgendem Inhalt:
TM = [ year, month, day
, hour, minute, second, nanoseconds
, weekday             // 0..6, 0 := Sunday
, yearday];

Eigenschaften eines Wertes

FunktionBeschreibung
deltaT(x)Liefert den zeitlichen Abstand der letzten zwei Auswertezeitpunkte des Terms x in Sekunden
deltaY(x)Liefert die Wertedifferenz der letzten zwei Samples des Terms x, ist positiv bei ansteigendem Signalverlauf
sgn(x)Vorzeichen des Wertes x
1:x<0-1: x < 0
+1:x>0+1: x > 0
0:sonst\enspace0:sonst
sgn(x,eps)Vorzeichen des Wertes x mit Toleranz ϵ\epsilon (eps)
1:x<ϵ-1: x < -\epsilon
+1:x>ϵ+1: x > \epsilon
0:sonst\enspace0:sonst
abs(x)Absolutbetrag vom skalaren Wert x,
Für die Länge eines Vektors siehe Length(V)

Kenngrößen mehrerer Werte

FunktionBeschreibung
abs(x1, ..., xN)l2-Norm der Einzelwerte (x1, ..., xN),
=i=1Nxi2= \sqrt{\sum_{i=1}^N x_i^2}
min(x1, ..., xN)Minimum der Einzelwerte (x1, ..., xN)
max(x1, ..., xN)Maximum der Einzelwerte (x1, ..., xN)
mean(x1, ..., xN)Arithmetischer Mittelwert der Einzelwerte (x1, ..., xN)
=1Ni=1Nxi= \frac{1}{N} \sum_{i=1}^N x_i
rms(x1, ..., xN)Quadratwurzel des arithmetischen Mittelwerts der quadrierten Einzelwerte (x1, ..., xN)
=1Ni=1Nxi2= \sqrt{\frac{1}{N}\sum_{i=1}^N x_i^2}

Begrenzen und Runden

FunktionBeschreibung
range(x, ...)Begrenzt den Eingangswert auf einen bestimmten Wertebereich. Siehe nachfolgende Beschreibung.
ceil(x)kleinster ganzzahliger Wert i>=xi >= x (datentyperhaltend)
ceil2i(x)kleinster ganzzahliger Wert i>=xi >= x (Rückgabetyp int)
floor(x)größter ganzzahliger Wert i<=xi <= x (datentyperhaltend)
floor2i(x)größter ganzzahliger Wert i<=xi <= x (Rückgabetyp int)
trunc(x)falls x>=0x >= 0 dann größter ganzzahliger Wert i<=xi <= x, sonst kleinster ganzzahliger Wert i>=xi >= x
round(x)ganzzahliger Wert ii, so dass x0.5<i<=x+0.5x - 0.5 < i <= x + 0.5 (datentyperhaltend)
round2i(x)ganzzahliger Wert ii, so dass x0.5<i<=x+0.5x - 0.5 < i <= x + 0.5 (Rückgabetyp int)
nonZero(x, ...)Folgt x, sofern xxcritϵ\|x-x_{crit}\| \ge \epsilon, sonst
wenn xxcritx \ge x_{crit} wird xcrit+ϵx_{crit}+\epsilon gesetzt, im Übrigen xcritϵx_{crit}-\epsilon
Siehe nachfolgende Beschreibung.

Wertebereich "range"

Die Funktion schränkt den Wertebereich für ein gegebenes Eingangssignal x (Skalar oder Vektor) auf einen Bereich [min,max][min, max] ein und bietet über die optionale Konfiguration vielfältige Varianten.

Begrenzung Wertebereich

r1  = range(x);
r2 = range(x, [min, max]);        // bessere Lesbarkeit
r3 = range(x, min, max);         // nicht mehr verwenden
// Optionale Konfiguration für alle Varianten
rx = range(..., { min: off|<val>
, max: off|<val>
, lower: off|<val>|erase
, upper: off|<val>|erase
, mode: <enum>
, defXY: [<dbl>, <dbl>]
, limVar: <str>
});
EigenschaftWertBeschreibung
minoff/<val>Deaktivierung oder feste Konfiguration einer unteren (skalaren) Grenze. Wird der Funktionsparameter min genutzt, ist diese Eigenschaft ohne Funktion.
maxoff/<val>Deaktivierung oder feste Konfiguration einer oberen (skalaren) Grenze. Wird der Funktionsparameter max genutzt, ist diese Eigenschaft ohne Funktion.
loweroff/<val>/eraseFalls aktiviert, wird der Ersatzwert beim Überschreiten der unteren Grenze (x < min) ausgegeben oder das Sample entfernt
upperoff/<val>/eraseFalls aktiviert, wird der Ersatzwert beim Überschreiten der oberen Grenze (x > max) ausgegeben oder das Sample entfernt
mode<enum>Falls x ein Vektor ist, werden in Abhängigkeit von mode
- box: alle Koordinaten einzeln…
- length: die Länge des Vektors ( >= 0.0 )...
- azimuth: der Winkel des Vektors in der XY-Ebene...
- elevation: der Winkel des Vektors aus der XY-Ebene zur Z-Achse…
...auf den eingestellten Bereich [min,max][min, max] limitiert
defXY[<dbl>, <dbl>]Im elevation-Mode ist defXY ist die Standardrichtung, wenn der Vektor aus der senkrechten zurückgeschwenkt werden muss (def.: [1, 0, 0]).
limVar<str>limVar definiert optional den Namen einer lokalen <bool>-Variable, um die aktive Limitierung zu signalisieren

Nicht-Null "nonZero"

Die Funktion sorgt dafür, dass ein kritischer Wert (def.: 0.0) niemals ausgegeben wird. Statt dessen wird der Wertebereich mittels eine Größe ϵ\epsilon (def.: 1e-6) um die kritische Größe ausgespart. Die Anwendung der Funktion ist z.B. für Divisionen optimiert, bei denen eine Division durch Null möglich wäre und ausgeschlossen werden muss.

xnz1 = nonZero(x);                // eps := 1e-6, x_crit := 0.0
xnz2 = nonZero(x, eps);           // x_crit := 0.0
xnz3 = nonZero(x, eps, x_crit);
nonZero(x)={x:xxcritεxcrit+ε:x[xcrit,xcrit+ε[xcritε:x]xcritε,xcrit[.\rm{nonZero}(x) = \left\{ {\begin{array}{ll} {x:}&{\left| {x - {x_{crit}}} \right| \ge \varepsilon }\\ {{x_{crit}} + \varepsilon :}&{x \in [{x_{crit}},{x_{crit}} + \varepsilon [}\\ {{x_{crit}} - \varepsilon :}&{x \in ]{x_{crit}} - \varepsilon ,{x_{crit}}[} \end{array}} \right..

Schaltschwelle mit Hysterese "threshold"

Diese Funktion erzeugt ein Schaltsignal aus dem Vergleich eines Signals gegen einen festen Schwellenwert threshold. Mittels einer Hysterese hysteresis und Verzögerungszeiten delayOn, delayOff können Störungen auf dem Signalverlauf unterdrückt werden.

Threshold mit Hysterese

Die Funktion kann in verschiedenen Anwendungsformen verwendet werden:

trig1 = threshold(x);
trig2 = threshold(x, t);
trig3 = threshold(x, t, h);
// Optionale Konfiguration für alle Varianten
trigX = threshold(..., { threshold: <dbl>
, hysteresis: <dbl>
, delayOn: <dbl>
, delayOff: <dbl>
, logic: <enum>
                       , startup: inf|<bool>
});
EigenschaftWertBedeutung
threshold<dbl>Auslöseschwelle, def.: 0.55
Wird mit Argument t überschrieben
hysteresis<dbl>Breite der Hysteresezone, wird auf den threshold für den zweiten Grenzwert addiert, def.: -0.10
Wird mit Argument h überschrieben
delayOn<dbl>optionale Filterzeit in Sekunden für den Einschaltvorgang
delayOff<dbl>optionale Filterzeit in Sekunden für den Ausschaltvorgang
logic<enum>auto: Funktion wird durch das Vorzeichen der Hysterese bestimmt
- above: Auslösung oberhalb der Hysterese-Zone
- below: Auslösung unterhalb der Hysterese-Zone
startupinf|<bool>Startverhalten:
inf: Die Lage des ersten Samples bestimmt bezüglich des Thresholds den Ausgangswert (def.).
<bool>: Es wird angenommen, dass dieser Ausgangswert vor dem ersten Sample ausgegeben wurde.
  • Die Funktion liefert true für den Zeitpunkt, wo das Signal x die definierte Auslöseschwelle überschreitet und false für den Zeitpunkt, wo das Signal x in die Rückstellung fällt.

Threshold mit Hysterese

Werden die Verzögerungszeiten eingestellt, muss das Signal x kontinuierlich für das angegebene Intervall in der Auslösung oder Rückstellung verbleiben, bevor die Umschaltung realisiert wird. Die Umschaltung ist dadurch gegenüber dem Überschreiten des jeweiligen Grenzwertes verzögert.

In der Betriebsart auto (default) erfolgt die Auslösung in Abhängigkeit vom Vorzeichen der Hysterese:

HystereseAuslösung (true)Rückstellung (false)
hysterese<0hysterese < 0x>thresholdx > thresholdx<threshold+hysteresisx < threshold + hysteresis
hysterese>0hysterese > 0x<thresholdx < thresholdx>threshold+hysteresisx > threshold + hysteresis

In den Betriebsarten above und below definieren threshold und hysteresis zwei Grenzen einer Hysterese-Zone:

glow=min(threshold,threshold+hysteresis)g_{low} = min(threshold, threshold + hysteresis) ghigh=max(threshold,threshold+hysteresis)g_{high} = max(threshold, threshold + hysteresis) zone=[glow,ghigh]zone = [g_{low}, g_{high}]
BetriebsartAuslösung (true)Rückstellung (false)
abovex>ghighx > g_{high}x<glowx < g_{low}
belowx<glowx < g_{low}x>ghighx > g_{high}