This chapter describes some basic principles of how signals are represented in impulse. These are not necessary for the use of impulse, but convey a better understanding.
Signals are value changes (samples) in relation to a specific domain (e.g., time), which can be represented in a real application as log or trace data over time, a transformation result over frequency or statistical data over an index.
Value changes (samples) can be at any point (discrete), even several at one point, or continuously at a fixed rate.
This could be time, date, frequency, index, voltage, current or generic etc.
Signals may grow over time to support online data visualization.
Signal samples may have a relation to a position in the same signal or any other signal. Labels may also be attached to a sample.
Samples may be grouped, for example, transactions where at least two samples (start and end) cover a period.
Logic values consist of 1...N bits. The bits are stored as 2-, 4- or 16-state data (normally nine states are used).
Typical uses cases: Digital simulation, logic analyzers.
Enumeration values consist of an integer value and its text representation.
Typical uses cases: Digital simulation, logic analyzers, logs and traces.
Integer value of any size.
Typical uses cases: Digital simulation, scopes, logs and traces.
32- or 64-bit real values.
Typical uses cases: Analouge simulation, scopes, logs and traces.
Text values of any size.
Typical uses cases: Logs.
Structured data with elements of type Text, Integer, Float, Binary and Enumeration.
Typical uses cases: Logs , traces.
Binary data of any size.
Typical uses cases: Image data.
impulse identifies a resource file by its extension and its content data. To change the file extension for a support record type:
Independent from its source and type, impulse organizes all signal data by using these elements:
Represents a group of signals and scopes as a whole. Stands usually for a wave file (if you make the child elements of a wave file visible in the Project Explorer, you will find all its scopes and signals).
The possible child elements are:
A Scope is a generic element used by the reader to organize the elements in a useful way, usually inspired by the wave file (module, subsystem, processes,..). Scopes do not have any other meaning.
Scopes consist of:
The possible child elements are:
A signal can contain up to 2^31 samples.
A signal contains:
Signals may be discrete or continuous. Discrete means that each sample can be at any position of the given domain base with the restriction:
position(sample(idx)) <= position(sample(idx+1)
Continuous signal have a start, end and rate indicator. Therefor the position of each sample is definite. Discrete signal just have start and end indicators. Each sample contains the delta position to its predecessor.
impulse supports the following signal types:
Struct signals can be used for logs, transaction, chart data, gant events, and ... . A struct sample is a combination of key value pairs (members), with values of type string , integer, float and enum.
The signal descriptor contains additional information about the signal.
The signal descriptor is usally given in the following form:
'content specifier'<'optional format and scale specifier'>
Optional format and scale specifier:
Examples:
The domain class of a signal can be time, frequency, index, etc. The domain base represents the minimum distance between two samples (e.g. ns or ps). The domain position is the product of the domain base and a 64-bit signed integer value.
Domain Classes:
The first four domain classes (Time,Frequency,Volts, Amps) represent physical quantities. FloatBase is similar to the first one, but does not point to a physical unit. IndexBase assumes a simple index as domain base.
DateBase represents the date as milliseconds after January 1, 1970 00:00:00 GMT. Its three domain bases (dateTime, time, timeMs) just differ in different representations.
TimeBase:
ys, ys10, ys100, zs, zs10, zs100, as, as10, as100, fs, fs10, fs100, ps, ps10, ps100, ns, ns10, ns100, us, us10, us100, ms, ms10, ms100, s, s10, s100, ks, ks10, ks100, Ms, Ms10, Ms100, Gs, Gs10, Gs100, Ts, Ts10, Ts100, Ps, Ps10, Ps100, Es, Es10, Es100, Zs, Zs10, Zs100, Ys;
FrequencyBase:
yHz, yHz10, yHz100, zHz, zHz10, zHz100, aHz, aHz10, aHz100, fHz, fHz10, fHz100, pHz, pHz10, pHz100, nHz, nHz10, nHz100, uHz, uHz10, uHz100, mHz, mHz10, mHz100, Hz, Hz10, Hz100, kHz, kHz10, kHz100, MHz, MHz10, MHz100, GHz, GHz10, GHz100, THz, THz10, THz100, PHz, PHz10, PHz100, EHz, EHz10, EHz100, ZHz, ZHz10, ZHz100, YHz;
VoltsBase:
yV, yV10, yV100, zV, zV10, zV100, aV, aV10, aV100, fV, fV10, fV100, pV, pV10, pV100, nV, nV10, nV100, uV, uV10, uV100, mV, mV10, mV100, V, V10, V100, kV, kV10, kV100, MV, MV10, MV100, GV, GV10, GV100, TV, TV10, TV100, PV, PV10, PV100, EV, EV10, EV100, ZV, ZV10, ZV100, YV;
AmpsBase:
yA, yA10, yA100, zA, zA10, zA100, aA, aA10, aA100, fA, fA10, fA100, pA, pA10, pA100, nA, nA10, nA100, uA, uA10, uA100, mA, mA10, mA100, A, A10, A100, kA, kA10, kA100, MA, MA10, MA100, GA, GA10, GA100, TA, TA10, TA100, PA, PA10, PA100, EA, EA10, EA100, ZA, ZA10, ZA100, YA;
FloatBase:
yX, yX10, yX100, zX, zX10, zX100, aX, aX10, aX100, fX, fX10, fX100, pX, pX10, pX100, nX, nX10, nX100, uX, uX10, uX100, mX, mX10, mX100, X, X10, X100, kX, kX10, kX100, MX, MX10, MX100, GX, GX10, GX100, TX, TX10, TX100, PX, PX10, PX100, EX, EX10, EX100, ZX, ZX10, ZX100, YX;
IndexBase:
n;
DateBase:
dateTime, time, timeMs;
Each sample can be a none value or non-none value of a given signal type. Additionally each sample may have a tag.
Samples may be grouped and layered, for example, transactions where at least two samples (start and end) cover a period. Grouping means that that all events of a group have the same group id and an order descriptor (first, intermediate {multiple, optional}, last). Layering means that each group (defined in the first event) has a layer id (0..255). This layer id may be used to draw parallel transactions in raws.
Markers are a concept for user annotations. Associations and Labels on the other side, are an integral part of the signal and are bound to its samples.
The marker concept is a known feature of eclipse. impulse allows users to add markers (bookmarks, tasks and annotation) to any signal at any domain position. If you add a bookmark to a signal, you will find that bookmark in the bookmark view of eclipse. If you double-click on the bookmark in that view, eclipse will open the record that contains the bookmark and set the cursor to its position.
Proxies are used to share equal signal data between different logical or physical signals. They are links that give an existing signal a new name or an existence somewhere else within the record hierarchy.
Struct signals are made of members. Each member has:
Arrays may have members too. In this case, the members dont have a type information are optional and informative.
Content definitions can be found as part of signal and member descriptors. The content describes what the actual data contains (e.g if binary data contains an image or if an enumeration contains and event or state).
This information may be used:
The following standard descriptors are defined (ISample class).
public static final String CONTENT_DEFAULT = "default";
public static final String CONTENT_GANTT = "gantt";
public static final String CONTENT_TRANSACTION = "transaction";
public static final String CONTENT_LOG = "log";
public static final String CONTENT_CHART = "chart";
public static final String CONTENT_IMAGE = "image";
public static final String CONTENT_STATE = "state";
public static final String CONTENT_EVENT = "event";
public static final String CONTENT_EVENTPARM = "evtparam";
public static final String CONTENT_LABEL = "label";
The format specifier defines the textual representation of sample values in plots and value table.
Value format specifier:
Sample information specifier:
Instead of the sample value, you might want to display the following sample information:
Multiple value specifier (in case of arrays and struct values):