ezmsg-sigproc 1.8.2__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ezmsg/sigproc/__version__.py +2 -2
- ezmsg/sigproc/activation.py +36 -39
- ezmsg/sigproc/adaptive_lattice_notch.py +231 -0
- ezmsg/sigproc/affinetransform.py +169 -163
- ezmsg/sigproc/aggregate.py +119 -104
- ezmsg/sigproc/bandpower.py +58 -52
- ezmsg/sigproc/base.py +1242 -0
- ezmsg/sigproc/butterworthfilter.py +37 -33
- ezmsg/sigproc/cheby.py +29 -17
- ezmsg/sigproc/combfilter.py +163 -0
- ezmsg/sigproc/decimate.py +19 -10
- ezmsg/sigproc/detrend.py +29 -0
- ezmsg/sigproc/diff.py +81 -0
- ezmsg/sigproc/downsample.py +78 -84
- ezmsg/sigproc/ewma.py +197 -0
- ezmsg/sigproc/extract_axis.py +41 -0
- ezmsg/sigproc/filter.py +257 -141
- ezmsg/sigproc/filterbank.py +247 -199
- ezmsg/sigproc/math/abs.py +17 -22
- ezmsg/sigproc/math/clip.py +24 -24
- ezmsg/sigproc/math/difference.py +34 -30
- ezmsg/sigproc/math/invert.py +13 -25
- ezmsg/sigproc/math/log.py +28 -33
- ezmsg/sigproc/math/scale.py +18 -26
- ezmsg/sigproc/quantize.py +71 -0
- ezmsg/sigproc/resample.py +298 -0
- ezmsg/sigproc/sampler.py +241 -259
- ezmsg/sigproc/scaler.py +55 -218
- ezmsg/sigproc/signalinjector.py +52 -43
- ezmsg/sigproc/slicer.py +81 -89
- ezmsg/sigproc/spectrogram.py +77 -75
- ezmsg/sigproc/spectrum.py +203 -168
- ezmsg/sigproc/synth.py +546 -393
- ezmsg/sigproc/transpose.py +131 -0
- ezmsg/sigproc/util/asio.py +156 -0
- ezmsg/sigproc/util/message.py +31 -0
- ezmsg/sigproc/util/profile.py +55 -12
- ezmsg/sigproc/util/typeresolution.py +83 -0
- ezmsg/sigproc/wavelets.py +154 -153
- ezmsg/sigproc/window.py +269 -211
- {ezmsg_sigproc-1.8.2.dist-info → ezmsg_sigproc-2.0.0.dist-info}/METADATA +2 -1
- ezmsg_sigproc-2.0.0.dist-info/RECORD +51 -0
- ezmsg_sigproc-1.8.2.dist-info/RECORD +0 -39
- {ezmsg_sigproc-1.8.2.dist-info → ezmsg_sigproc-2.0.0.dist-info}/WHEEL +0 -0
- {ezmsg_sigproc-1.8.2.dist-info → ezmsg_sigproc-2.0.0.dist-info}/licenses/LICENSE.txt +0 -0
ezmsg/sigproc/bandpower.py
CHANGED
|
@@ -1,76 +1,82 @@
|
|
|
1
1
|
from dataclasses import field
|
|
2
|
-
import typing
|
|
3
2
|
|
|
4
|
-
import numpy as np
|
|
5
3
|
import ezmsg.core as ez
|
|
6
4
|
from ezmsg.util.messages.axisarray import AxisArray
|
|
7
|
-
from ezmsg.util.generator import consumer, compose
|
|
8
5
|
|
|
9
|
-
from .spectrogram import
|
|
10
|
-
from .aggregate import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
) -> typing.Generator[AxisArray, AxisArray, None]:
|
|
22
|
-
"""
|
|
23
|
-
Calculate the average spectral power in each band.
|
|
24
|
-
|
|
25
|
-
Args:
|
|
26
|
-
spectrogram_settings: Settings for spectrogram calculation.
|
|
27
|
-
bands: (min, max) tuples of band limits in Hz.
|
|
28
|
-
|
|
29
|
-
Returns:
|
|
30
|
-
A primed generator object ready to yield an :obj:`AxisArray` for each .send(axis_array)
|
|
31
|
-
with the data payload being the average spectral power in each band of the input data.
|
|
32
|
-
"""
|
|
33
|
-
msg_out = AxisArray(np.array([]), dims=[""])
|
|
34
|
-
|
|
35
|
-
f_spec = spectrogram(
|
|
36
|
-
window_dur=spectrogram_settings.window_dur,
|
|
37
|
-
window_shift=spectrogram_settings.window_shift,
|
|
38
|
-
window_anchor=spectrogram_settings.window_anchor,
|
|
39
|
-
window=spectrogram_settings.window,
|
|
40
|
-
transform=spectrogram_settings.transform,
|
|
41
|
-
output=spectrogram_settings.output,
|
|
42
|
-
)
|
|
43
|
-
f_agg = ranged_aggregate(
|
|
44
|
-
axis="freq", bands=bands, operation=AggregationFunction.MEAN
|
|
45
|
-
)
|
|
46
|
-
pipeline = compose(f_spec, f_agg)
|
|
47
|
-
|
|
48
|
-
while True:
|
|
49
|
-
msg_in: AxisArray = yield msg_out
|
|
50
|
-
msg_out = pipeline(msg_in)
|
|
6
|
+
from .spectrogram import SpectrogramSettings, SpectrogramTransformer
|
|
7
|
+
from .aggregate import (
|
|
8
|
+
AggregationFunction,
|
|
9
|
+
RangedAggregateTransformer,
|
|
10
|
+
RangedAggregateSettings,
|
|
11
|
+
)
|
|
12
|
+
from .base import (
|
|
13
|
+
BaseProcessor,
|
|
14
|
+
CompositeProcessor,
|
|
15
|
+
BaseStatefulProcessor,
|
|
16
|
+
BaseTransformerUnit,
|
|
17
|
+
)
|
|
51
18
|
|
|
52
19
|
|
|
53
20
|
class BandPowerSettings(ez.Settings):
|
|
54
21
|
"""
|
|
55
22
|
Settings for ``BandPower``.
|
|
56
|
-
See :obj:`bandpower` for details.
|
|
57
23
|
"""
|
|
58
24
|
|
|
59
25
|
spectrogram_settings: SpectrogramSettings = field(
|
|
60
26
|
default_factory=SpectrogramSettings
|
|
61
27
|
)
|
|
28
|
+
"""
|
|
29
|
+
Settings for spectrogram calculation.
|
|
30
|
+
"""
|
|
31
|
+
|
|
62
32
|
bands: list[tuple[float, float]] | None = field(
|
|
63
33
|
default_factory=lambda: [(17, 30), (70, 170)]
|
|
64
34
|
)
|
|
35
|
+
"""
|
|
36
|
+
(min, max) tuples of band limits in Hz.
|
|
37
|
+
"""
|
|
38
|
+
|
|
65
39
|
|
|
40
|
+
class BandPowerTransformer(CompositeProcessor[BandPowerSettings, AxisArray, AxisArray]):
|
|
41
|
+
@staticmethod
|
|
42
|
+
def _initialize_processors(
|
|
43
|
+
settings: BandPowerSettings,
|
|
44
|
+
) -> dict[str, BaseProcessor | BaseStatefulProcessor]:
|
|
45
|
+
return {
|
|
46
|
+
"spectrogram": SpectrogramTransformer(
|
|
47
|
+
settings=settings.spectrogram_settings
|
|
48
|
+
),
|
|
49
|
+
"aggregate": RangedAggregateTransformer(
|
|
50
|
+
settings=RangedAggregateSettings(
|
|
51
|
+
axis="freq",
|
|
52
|
+
bands=settings.bands,
|
|
53
|
+
operation=AggregationFunction.MEAN,
|
|
54
|
+
)
|
|
55
|
+
),
|
|
56
|
+
}
|
|
66
57
|
|
|
67
|
-
class BandPower(GenAxisArray):
|
|
68
|
-
""":obj:`Unit` for :obj:`bandpower`."""
|
|
69
58
|
|
|
59
|
+
class BandPower(
|
|
60
|
+
BaseTransformerUnit[BandPowerSettings, AxisArray, AxisArray, BandPowerTransformer]
|
|
61
|
+
):
|
|
70
62
|
SETTINGS = BandPowerSettings
|
|
71
63
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
64
|
+
|
|
65
|
+
def bandpower(
|
|
66
|
+
spectrogram_settings: SpectrogramSettings,
|
|
67
|
+
bands: list[tuple[float, float]] | None = [
|
|
68
|
+
(17, 30),
|
|
69
|
+
(70, 170),
|
|
70
|
+
],
|
|
71
|
+
) -> BandPowerTransformer:
|
|
72
|
+
"""
|
|
73
|
+
Calculate the average spectral power in each band.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
:obj:`BandPowerTransformer`
|
|
77
|
+
"""
|
|
78
|
+
return BandPowerTransformer(
|
|
79
|
+
settings=BandPowerSettings(
|
|
80
|
+
spectrogram_settings=spectrogram_settings, bands=bands
|
|
76
81
|
)
|
|
82
|
+
)
|