SvdEntropy
SVD entropy: how many independent components the signal's history spans.
data
entropy
- Type name
signal:SvdEntropy- Plane
signal- Tags
analysis- Language
python- Tier
in-process- Bundle
complexity- Source
node-bundles/complexity/svd_entropy.py- Availability
- available
Slots
| Slot | Direction | Type | |
|---|---|---|---|
data | input | ARRAY | |
entropy | output | ARRAY |
Parameters
svd
| Name | Type | Default | Range | Doc |
|---|---|---|---|---|
order | int | 3 | 2 … 20 | Dimension of the delay embedding. |
delay | int | 1 | 1 … 100 | Samples between embedding coordinates. |
normalize | bool | true | Scale to 0..1 against an even spread. |
common
| Name | Type | Default | Range | Doc |
|---|---|---|---|---|
autotrigger | bool | false | Run on the node's own schedule, instead of waiting for an input frame. Turn this on for sources; leave it off for transforms driven by their input. | |
max_frequency | float | 0 | 0 … 100 | Rate cap for this node, read through `frequency_mode`. 0 means uncapped — the node runs as often as the scheduler and its inputs allow. |
frequency_mode | string | updates_per_second | updates_per_second | seconds_per_update | How to read `max_frequency`: as a rate in Hz (updates per second), or as a period in seconds between updates — convenient for very slow nodes. |
Source
The current source of this node, as it stands in the goofi repository at node-bundles/complexity/svd_entropy.py.
"""SvdEntropy — how many independent components a signal's own history has, from antropy.
Embeds the signal in a delay space and reads the spread of its singular values: a rhythm needs
few, noise needs all. The last axis is time and is consumed; every axis before it survives.
"""
import antropy
import numpy as np
import goofi
class SvdEntropy(goofi.Node):
"""SVD entropy: how many independent components the signal's history spans."""
TAGS = ["analysis"]
INPUTS = {"data": goofi.InputSlot(goofi.DataType.ARRAY, required=True)}
OUTPUTS = {"entropy": goofi.DataType.ARRAY}
PARAMS = {
"svd": {
"order": goofi.IntParam(3, 2, 20, doc="Dimension of the delay embedding."),
"delay": goofi.IntParam(1, 1, 100, doc="Samples between embedding coordinates."),
"normalize": goofi.BoolParam(True, doc="Scale to 0..1 against an even spread."),
}
}
def process(self, data):
p = self.params.svd
return np.apply_along_axis(
antropy.svd_entropy,
-1,
np.asarray(data.data, dtype=np.float64),
order=p.order,
delay=p.delay,
normalize=p.normalize,
).astype(np.float32)This reference describes goofi 3.1.0(537cd394), generated from a running instance on 2026-09-06.