Reduktionsverhalten

Die folgenden Reduktionsverhalten können verwendet werden:

Accumulate_Rolling

Berechnet die Reduktion von einem sich bewegenden Fenster.

Syntax:

  • result = Accumulate_Rolling_<reduction function>(input, range)

Argumente:

  • T result: die Reduktionsfunktion auf den gegebenen Bereich angewandt
  • T input: das zu reduzierende Signal
  • double range: eine Folge von Bereichen

Hinweis: T kann jeder durch die gegebene Reduktionsfunktion unterstützte Typ sein.

Accumulate_Rolling(input, windowStart)

Das Verhalten "Accumulate_Rolling" wendet die Reduktionsfunktion auf ein sich bewegendes Fenster an. Das Signal windowStart spezifiziert ein Fenster (siehe Bereiche). Für jeden Bereich werden die Abtastwerte in diesem Bereich des Eingangssignals entsprechend der Reduktionsfunktion reduziert und erzeugen einen Ausgangsabtastwert, der den gleichen Zeitstempel wie das Ende des Bereichs hat.

Beispiele:

  • Gleitender Mittelwert der letzten 2 Sekunden:

    Accumulate_Rolling_Average(input, Master()-2)

  • Gleitender Mittelwert der letzten 10 Messpunkte:

    Accumulate_Rolling_Average(input, State_Delay(Master(), 0, 10))

Hinweise:

  • Der Speicherverbrauch des Verhalten von Accumulate_Rolling steigt mit der Anzahl der Messpunkte im Fenster. Es ist möglich windowStart = 0 zu verwenden, aber jeder neue Messpunkt wird den Speicher erhöhen. Abhängig vom Eingangssignal kann das zu einem signifikantem Speicherverbrauch führen.
  • Für eine korrekte Funktionalität müssen die Startzeiten der Bereiche monoton ansteigend sein.

Window_Signal

Berechnet ein Fenster mit einer gegebenen "Größe".

Syntax:

  • Window_Signal_<reduction function>(input, limit)

Argumente:

  • double result: Inputbereiche, die die gegebene Limitgröße haben
  • T input: das Eingangssignal, das reduziert wird, um die Fenstergröße zu bestimmen
  • T limit: gewünschte "Größe" der berechneten Bereiche

Hinweis: T kann jeder durch die gegebene Reduktionsfunktion unterstützte Typ sein.

Window_Signal(input, limit)

Das Verhalten "Window_Signal" berechnet für jeden Eingabemesspunkt einen Bereich, der an diesem Messpunkt endet. Die Größe und damit der Start des Bereichs wird so gewählt, dass, wenn die Reduktionsfunktion auf die Werte des Inputs in diesem Bereich angewandt wird, die Reduktion ungefähr dem Grenzwert entspricht. Genauer gesagt, wird das kleinste Intervall gewählt, bei dem die Reduktion größer oder gleich dem Grenzwert ist.

Als Beispiel können wir Accumulate_Rolling auf das Ergebnis anwenden, um die für das Fenster tatsächlich akkumulierten Werte zu sehen.

result = Accumulate_Rolling_<function>(input, Window_Signal_<function>(input, limit))

Das Ergebnis ist größer oder gleich dem Grenzwert außer zu Beginn des Signals, wenn es noch nicht genügend Messpunkte gibt.

Beispiel:

  • Bewegendes Fenster erzeugen, das immer mindestens 80 Gramm CO2-Ausstoß enthält:

    movingWindow = Window_Signal_Integral(CO2, 80)

    movingWindow kann nun dazu verwendet werden, andere Signale normalisiert auf den CO2-Ausstoß auszuwerten.

Accumulate_Prefix

Berechnet die Reduktion eines gegebenen Signals vom Start bis zum aktuellen Messwert.

Syntax:

  • result = Accumulate_Prefix_<reduction_function>(input)

Argumente:

  • T result: die Reduktion des Signals vom Start bis zum aktuellen Messwert
  • T input: das zu reduzierende Signal

Hinweis: T kann jeder durch die gegebene Reduktionsfunktion unterstützte Typ sein.

Das Reduktionsverhalten Accumulate_Prefix akkumuliert die Eingabemesswerte mit der gegebenen Reduktion. Das Ergebnis ist ein Signal mit allen Zwischenergebnissen, d. h. result[i] = reduce(signal[1], …, signal[i]).

Hinweis: result = Accumulate_Rolling(signal, -Infinity) außer der Speicherverbrauch ist konstant.

Accumulate_Reset

Berechnet die Reduktion eines gegebenen Signals vom letzten Reset bis zum aktuellen Messwert.

Syntax:

  • result = Accumulate_Reset_<reduction_function>(input, reset)

Argumente:

  • T result: die Reduktion über das Signal seit dem letzten Reset
  • T input: das zu reduzierende Signal
  • bool reset: Reduktion wird erneut gestartet, wenn wahr

Hinweis: T kann jeder durch die gegebene Reduktionsfunktion unterstützte Typ sein.

Das Reduktionsverhalten Accumulate_Reset akkumuliert die Eingabemesswerte mit der gegebenen Reduktion. Die Reduktion wird erneut gestartet, wenn der Reset-Input wahr ist. Das Ergebnis ist ein Signal mit allen Zwischenergebnissen, d. h. result[i] = reduce(signal[k], …, signal[i]), wo k der Index der letzten Zeit ist, als Reset wahr oder 1 war, falls es nie wahr war.

Example: Accumulate_Reset_Maximum

Signal

Reset

Ergebnis

1

Wahr

1

5

Wahr

5

3

Wahr

5

2

Falsch

2

Accumulate_Samples

Berechnet eine gleitende Reduktion über eine gegebene Anzahl von Messwerten.

Syntax:

  • result = Accumulate_Samples_<reduction_function>(input, count)

Argumente:

  • T result: Reduktion über die zuletzt gezählten Messwerten

  • T input: das zu reduzierende Signal

  • const int count: die zu reduzierende Anzahl von Messwerten

Hinweis: T kann jeder durch die gegebene Reduktionsfunktion unterstützte Typ sein.

Die Funktion Accumulate_Samples berechnet die Reduktion über die zuletzt gezählten Messwerte vor und inklusive des aktuellen Messwerts. Zu Beginn, wenn es weniger als gezählte Messwerte gibt, werden alle Messwerte reduziert.

Hinweis: Accumulate_RollingSample<R>(input, count) = Accumulate_Rolling<R>(input, State_Delay(Master(), -Infinity, count))