A math channel is a signal computed from other signals. You build it as a small graph — source nodes, operations, one output — and udpscope then treats the result as an ordinary channel.
Open the
The heading's
Inside the editor,
The graph is evaluated as an ordered list, so a node may only read ones above it. A wire drawn right to left re-sorts the list silently so the graph stays valid. A cycle is unrepresentable: the connection is refused rather than created, and the line beneath the form says why — a loop, or a node asked to read itself.
A derived channel is a channel. It is listed with the signals, gets a badge once computed, can be plotted, measured, exported, and used as a source for another math channel.
The math runs on the stored samples — decimated and averaged — so a cutoff you type in Hz means the rate the filter will actually run at. Change the window across a decimation boundary and the coefficients are rebuilt for the new rate.
A source may only name an acquired channel. The stream's timestamp signal is not one: a graph sourced from it validates and then reads NaN for ever, so the dropdown does not offer it.
The output defaults to the last node, and a node added to a linear graph becomes the output. Choosing an earlier node explicitly is respected.
Every numeric field starts at its own identity value — gain 1, offset 0 — not at the bottom of its range.
A graph's output is the node whose value becomes the channel, and it is drawn
as the orange dot. A new graph is built source, then operation, and the last node added
becomes the output — but a graph whose output is left on the source is valid and simply
passes its input through, which is the usual reason a gain or a filter appears to have no
effect.
The filters are real filters. A math channel's samples are produced as the stream arrives, once per stored slot, so a low pass carries the history a filter needs. A cutoff typed in hertz is against the stored rate, which is the wire rate until a wide window makes the buffer decimate — the status line's rate is that number, and the filters are rebuilt whenever it changes.
A sine source wired through a gain into a filter, with the output on the last node.
[sine] → [gain x2] gives a channel reading y=[-2, 2]. A
100 Hz low pass on the same source passes 50 Hz at 0.97 and 2 kHz at 0.002; a 1 kHz band
pass with Q=2 passes 200 Hz at 0.05, 1 kHz at 0.95 and 4 kHz at 0.05. Each derived channel
must hold exactly as many samples as the shared clock has time slots.