Signalabschnitte

Ein Signalabschnitt (Segment) ist die kleinste Einheit, welche den Signalverlauf für einen bestimmten Zeitabschnitt vollständig beschreibt. Jeder Signalabschnitt besitzt spezifische Eingenschaften, welche untenstehend näher erläutert werden.

Für die meisten Abschnitte kann ein Stopptrigger angegeben werden mit Hilfe derer in Abhängigkeit von anderen Signalwerten ein Segment beendet werden kann. Siehe dazu Stopptrigger.

Für alle anderen Eigenschaften von einfachen Abschnitten kann der Wert mittels Ausdrücken entsprechend der ASAM COMMON GES (Global Expression Syntax) angegeben werden (siehe dazu auch Datentypen und Dateiformate). Zu den sich davon abhebenden Abschnitten zählen die folgenden: Operations-, Loop-, SignalValue- und DataFileSegment.

Konstanter Abschnitt

Für einen konstanten Abschnitt gibt man Dauer und Wert an.

Das Signal nimmt für die angegebene Dauer den angegebenen Wert an.

../../../_images/Signal-Editor-Segment-Const.png

Im Stimulus-Testschritt wird ein konstanter Abschnitt wie folgt definiert:

ConstantSegment(duration=1.0, value=0.0)

Rampenförmiger Abschnitt (mit Start- und Endwert)

Für diese Art von Abschnitt gibt man eine Dauer, einen Start- (Start) und einen Endwert (Stop) an.

Das Signal steigt bzw. fällt linear über die angegebene Dauer hinweg vom Start- zum Endwert.

../../../_images/Signal-Editor-Segment-Ramp.png

Im Stimulus-Testschritt wird ein rampenförmiger Abschnitt wie folgt definiert:

RampSegment(duration=1.0, start=0.0, stop=1.0)

Rampenförmiger Abschnitt mit Steigung

Für einen rampenförmigen Abschnitt mit Steigung gibt man Dauer, Offset und Steigung an.

Das Signal steigt (bzw. fällt, falls die Steigung negativ ist) über die angegebene Dauer hinweg vom Startwert mit der angegebenen Steigung.

../../../_images/Signal-Editor-Segment-RampSlope.png

Im Stimulus-Testschritt wird ein rampenförmiger Abschnitt mit Steigung wie folgt definiert:

RampSlopeSegment(duration=1.0, offset=0.0, slope=1.0)

Sägezahnförmiger Abschnitt

Für einen sägezahnförmigen Abschnitt gibt man Dauer, Offset, Amplitude, Periode, Steigungsanteil (DutyCycle) und Phasenlage (Phase) an.

Das Grundsignal beginnt mit dem als Offset konfigurierten Startwert und steigt jeweils für die Dauer von (DutyCycle * Periode) wie ein rampenförmiger Abschnitt zum Wert (Offset + Amplitude) an. Danach fällt es für die Dauer ((1 - DutyCycle) * Periode) wie ein rampenförmiger Abschnitt ab zum Wert Offset. Dieses Grundsignal wird periodisch wiederholt.

Das letztendlich erzeugte Signal entspricht einem Ausschnitt aus dem Grundsignal, der beim Zeitpunkt (Phase * Periode) beginnt und beim Zeitpunkt (Phase * Periode + Dauer) endet.

../../../_images/Signal-Editor-Segment-Saw.png

Im Stimulus-Testschritt wird ein sägezahnförmiger Abschnitt wie folgt definiert:

SawSegment(duration=1.0, offset=0.0, amplitude=1.0, period=1.0, dutyCycle=0.5, phase=0.0)

Pulsförmiger Abschnitt

Für einen pulsförmigen Abschnitt gibt man Dauer, Offset, Amplitude, Oben-Anteil (DutyCycle) und Phasenlage (Phase) an.

Das Grundsignal beginnt mit dem Wert (Offset + Amplitude) und bleibt für die Dauer (DutyCycle * Periode) konstant. Danach wechselt es auf den Wert Offset und bleibt für die Dauer ((1 - DutyCycle) * Periode) konstant. Dieses Grundsignal wird periodisch wiederholt.

Das letztendlich erzeugte Signal entspricht einem Ausschnitt aus dem Grundsignal, der beim Zeitpunkt (Phase * Periode) beginnt und beim Zeitpunkt (Phase * Periode + Dauer) endet.

../../../_images/Signal-Editor-Segment-Pulse.png

Im Stimulus-Testschritt wird ein pulsförmiger Abschnitt wie folgt definiert:

PulseSegment(duration=1.0, offset=0.0, amplitude=1.0, period=1.0, dutyCycle=0.5, phase=0.0)

Exponentieller Abschnitt

Für einen exponentiellen Abschnitt gibt man Dauer, Startwert (Start), Endwert (Stop) und Zeitkonstante (Tau) an.

Das Signal nähert sich exponentiell an den Endwert an, gemäß der Formel

../../../_images/math_exponential.png

wobei t beim Beginn des Abschnitts mit 0 beginnt.

../../../_images/Signal-Editor-Segment-Exp.png

Im Stimulus-Testschritt wird ein exponentieller Abschnitt wie folgt definiert:

ExponentialSegment(duration=1.0, start=0.0, stop=1.0, tau=0.5)

Sinusförmiger Abschnitt

Für einen sinusförmigen Abschnitt gibt man Dauer, Offset, Amplitude, Periode und Phasenlage (Phase) an.

Das Signal entspricht einer Sinuskurve mit den angegebenen Parametern.

../../../_images/Signal-Editor-Segment-Sine.png

Im Stimulus-Testschritt wird ein sinusförmiger Abschnitt wie folgt definiert:

SineSegment(duration=1.0, offset=0.0, amplitude=1.0, period=1.0, phase=0.0)

Leerer Abschnitt

Für einen leeren Abschnitt gibt man lediglich eine Dauer an.

Für die angegebene Dauer hat das Signal keinen Wert.

../../../_images/Signal-Editor-Segment-Idle.png

Im Stimulus-Testschritt wird ein leerer Abschnitt wie folgt definiert:

IdleSegment(duration=1.0)

Verrauschter Abschnitt

Für einen verrauschten Abschnitt gibt man Dauer, Mittelwert, Standardabweichung (Sigma) und einen Initialisierungswert für den Zufallsgenerator (Seed) an.

Das Signal nimmt für die angegebene Dauer an jedem abgetasteten Punkt einen zufälligen Wert an. Die Werte entsprechen einer Normalverteilung mit der angegebenen Standardabweichung. Bei gleichem Seed hat das Rauschen stets die gleiche Form.

../../../_images/Signal-Editor-Segment-Noise.png

Im Stimulus-Testschritt wird ein verrauschter Abschnitt wie folgt definiert:

NoiseSegment(duration=1.0, mean=0.0, seed=1, sigma=1.0)

SignalValue-Abschnitt

Der SignalValue Abschnitt ermöglicht die direkte Angabe von Werten über die Zeit in einer Wertetabelle.

../../../_images/Signal-Editor-Segment-SignalValue.png

Um Werte zwischen zwei Datenpunkten interpolieren zu können, ist es außerdem möglich die Interpolation (siehe Eigenschaften) anzugeben.

Im Stimulus-Testschritt wird ein SignalValue Abschnitt wie folgt definiert:

SignalValueSegment(timeVector=[0.0, 0.1, 0.2, 0.3], dataVector=[0, 1, 2, 3], interpolationType='backward')

Zur Speicherung der Wertetabellen werden nach dem ASAM-Standard je Wertetabelle eine .mat-Datei erzeugt. Um sicherzustellen, dass die .mat-Dateien immer zur Verfügung stehen, sollte beim Speichern der Stimulationsdatei darauf geachtet werden, die Dateien im .stz Format zu speichern (siehe Datentypen und Dateiformate).

Hinweis: Beginnen die Zeitstempel in der Wertetabelle nicht mit dem Wert 0.0, werden die Zeitstempel bei der Ausführung des Signals (beim Anzeigen im Signal Editor) so angepasst, dass der erste Zeitstempel dem Wert 0.0 entspricht. Liegen die angegebenen Zeitstempel also im Bereich [1.0, 2.0] werden sie bei der Ausführung des Signals in den Bereich [0.0, 1.0] verschoben.

Im Signal Editor kann die Wertetabelle eines SignalValue-Abschnittes auf verschiedene Arten komfortabel gefüllt werden, statt alle Zeitstempel und Werte einzeln eingeben zu müssen. Zum einen können über das Kontextmenü des Workspaces beliebige Segmente in SignalValue-Abschnitte konvertiert werden. Dabei werden Zeitstempel und Werte nach Abfrage einer gewünschten Samplerate generiert. Zum anderen können Zeitstempel und Werte aus einer Exceldatei importiert werden. Aus Excel können Daten importiert werden, die zweispaltig sind und numerische Werte beinhalten. Dazu werden die Daten in Excel markiert und kopiert und anschließend nach Auswahl einer leeren Zelle in der Wertetabelle des SignalValue-Abschnitts eingefügt.

DataFile-Abschnitt

Im DataFile-Abschnitt kann eine externe Datei mit Daten referenziert werden. Dazu ist es notwendig den Dateipfad, das Zeitsignal sowie das Datensignal anzugeben. Genutzt werden können alle von ecu.test unterstützten Traceformate, wobei es seitens des Tools Einschränkungen bezüglich der unterstützten Dateiformate bei der Stimulation geben kann. Die Dateiformate MAT und MF4 sind meist kompatibel und daher wenn möglich zu bevorzugen.

Eine geeignete MAT-Datei kann beispielsweise mit dem Tool MATLAB wie folgt erzeugt werden:

time = [0.0, 0.1, 0.2, 0.3];
data = [1, 2, 3, 4];
save('stimulus.mat', 'time', 'data', '-v6');

Die referenzierten Dateien enthalten Signalwerte, die aus einem Zeitstempel und einem Wert bestehen. Um Werte zwischen zwei Datenpunkten der externen Datei interpolieren zu können, ist es außerdem möglich die Interpolation (siehe Eigenschaften) anzugeben.

../../../_images/Signal-Editor-Segment-DataFile.png

Im Stimulus-Testschritt wird ein DataFile Abschnitt wie folgt definiert:

DataFileSegment(filePath='path/to/datafile', timeVectorName='time', dataVectorName='signal', interpolationType='backward')

Für die Eigenschaften Dauer und Start gelten die Default eingestellten Werte inf bzw. -inf. In diesem Falle wird das Signal in der Referenzdatei komplett wiedergegeben.

Soll das referenzierte Signal eingeschränkt werden, kann der Start -Wert oder die Dauer geändert werden. Ist der Start -Wert expizit gesetzt startet das Signal an diesem Zeitstempel. Andernfalls beginnt das Signal am ersten Zeitstempel der referenzierten Datei. Analog wird das Signal bis zum Ende in der referenzierten Datei abgespielt, es sei denn, es ist ein expliziter Wert Dauer gesetzt. Dabei ist darauf zu achten, dass sich der durch die Attribute Start und Dauer ergebende Bereich nicht außerhalb des Bereichs der Zeitstempel des referenzierten Signals befinden darf.

Wie beim SignalValue-Abschnitt wird auch hier bei der Ausführung der erste Zeitstempel auf 0.0 korrigiert.

Darüberhinaus existieren noch die folgenden Einstellungen, welche insbesondere bei der Verwendung referenzierter MF4-Dateien relevant sind. Eine konkrete Auswahl bei diesen Einstellmöglichkeiten filtert die darin verfügbaren Signale und schränkt damit die bei Datensignal sichtbaren Elemente ein.

  • ChannelSource : Diese Eigenschaft enthält in der Regel den Namen des Netzwerkknotens oder den Task-Namen.

  • ChannelPath : Diese Eigenschaft enthält in der Regel den Geräte- oder Platform-Namen.

  • GroupName : Diese Eigenschaft enthält in der Regel den Task- Raster- oder Event-Namen.

  • GroupSource : Diese Eigenschaft enthält in der Regel den Namen des Netzwerkknotens, den Tool- oder Task-Namen.

  • GroupPath : Diese Eigenschaft enthält in der Regel den Geräte- oder Platform-Namen.

Operation-Abschnitt

Für einen durch Verknüpfung zweier Abschnitte definierten Abschnitt gibt man die gewünschte Operation (Addition add oder Multiplikation mult) an und fügt die zu verknüpfenden Abschnitte mithilfe der Icons in der Werkzeugleiste hinzu. Die Dauer ergibt sich automatisch aus der kürzesten Dauer der zu verknüpfenden Abschnitte.

Man kann auch als zu verknüpfenden Abschnitt wiederum einen durch Verknüpfung definierten Abschnitt verwenden, also die Operationen schachteln.

../../../_images/Signal-Editor-Segment-Operation.png

Loop-Abschnitt

Sollen sich bestimmte Signalverläufe wiederholen, kann das Loop-Segment eingesetzt werden. Mit diesem ist es möglich, mehrere enthaltene Signale zu definieren und so beispielsweise ein sich wiederholendes Trapez-Signal (Rampe - Konstante - Rampe) zu definieren. Die Schleifenanzahl legt dabei die Anzahl der Wiederholungen fest.

../../../_images/Signal-Editor-Segment-Loop.png