ezmsg.sigproc.synth#
Module Attributes
Functions
- aclock(dispatch_rate)[source]#
Construct an async generator that yields events at a specified rate.
- Returns:
A
ClockProducerobject.- Parameters:
dispatch_rate (float | None)
- Return type:
- acounter(n_time, fs, n_ch=1, dispatch_rate=None, mod=None)[source]#
Construct an asynchronous generator to generate AxisArray objects at a specified rate and with the specified sampling rate.
NOTE: This module uses asyncio.sleep to delay appropriately in realtime mode. This method of sleeping/yielding execution priority has quirky behavior with sub-millisecond sleep periods which may result in unexpected behavior (e.g. fs = 2000, n_time = 1, realtime = True – may result in ~1400 msgs/sec)
- clock(dispatch_rate)#
Alias for
aclockexpected by synchronous methods. ClockProducer can be used in sync or async.- Parameters:
dispatch_rate (float | None)
- Return type:
- sin(axis='time', freq=1.0, amp=1.0, phase=0.0)[source]#
Construct a generator of sinusoidal waveforms in AxisArray objects.
- Returns:
A primed generator that expects .send(axis_array) of sample counts and yields an AxisArray of sinusoids.
- Parameters:
- Return type:
Classes
- class Add(*args, settings=None, **kwargs)[source]#
Bases:
UnitAdd two signals together. Assumes compatible/similar axes/dimensions.
- Parameters:
settings (Settings | None)
- INPUT_SIGNAL_A = InputStream:unlocated[<class 'ezmsg.util.messages.axisarray.AxisArray'>]()#
- INPUT_SIGNAL_B = InputStream:unlocated[<class 'ezmsg.util.messages.axisarray.AxisArray'>]()#
- OUTPUT_SIGNAL = OutputStream:unlocated[<class 'ezmsg.util.messages.axisarray.AxisArray'>](self.num_buffers=32, self.force_tcp=False)#
- async initialize()[source]#
Runs when the
Unitis instantiated. This is called from within the same process this unit will live. This lifecycle hook can be overridden. It can be run asasyncfunctions by simply adding theasynckeyword when overriding.- Return type:
None
- class AddState(queue_a: 'asyncio.Queue[AxisArray]' = <factory>, queue_b: 'asyncio.Queue[AxisArray]' = <factory>)[source]#
Bases:
object- Parameters:
queue_a (Queue[AxisArray])
queue_b (Queue[AxisArray])
- queue_a: Queue[AxisArray]#
- queue_b: Queue[AxisArray]#
- __init__(queue_a=<factory>, queue_b=<factory>)#
- Parameters:
queue_a (Queue[AxisArray])
queue_b (Queue[AxisArray])
- Return type:
None
- class BaseCounterFirstProducerUnit(*args, settings=None, **kwargs)[source]#
Bases:
BaseProducerUnit[SettingsType,MessageOutType,ProducerType],Generic[SettingsType,MessageInType,MessageOutType,ProducerType]Base class for units whose primary processor is a composite producer with a CounterProducer as the first processor (producer) in the chain.
- Parameters:
settings (Settings | None)
- INPUT_SIGNAL = InputStream:unlocated[~MessageInType]()#
- class Clock(*args, settings=None, **kwargs)[source]#
Bases:
BaseProducerUnit[ClockSettings,Flag,ClockProducer]- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
ClockSettings
- class ClockProducer(*args, **kwargs)[source]#
Bases:
BaseStatefulProducer[ClockSettings,Flag,ClockState]Produces clock ticks at specified rate. Can be used to drive periodic operations.
- class ClockSettings(dispatch_rate=None)[source]#
Bases:
SettingsSettings for clock generator.
- class Counter(*args, settings=None, **kwargs)[source]#
Bases:
BaseProducerUnit[CounterSettings,AxisArray,CounterProducer]Generates monotonically increasing counter. Unit for
CounterProducer.- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
CounterSettings
- INPUT_CLOCK = InputStream:unlocated[<class 'ezmsg.core.message.Flag'>]()#
- async produce()[source]#
Generate counter output. This is an infinite loop, but we will likely only enter the loop once if we are self-timed, and twice if we are using an external clock.
When using an internal clock, we enter the loop, and wait for the event which should have been reset upon initialization then we immediately clear, then go to the internal loop that will async call __acall__ to let the internal timer determine when to produce an output.
When using an external clock, we enter the loop, and wait for the event which should have been reset upon initialization then we immediately clear, then we hit continue to loop back around and wait for the event to be set again – potentially forever. In this case, it is expected that on_clock will be called to produce the output.
- Return type:
- class CounterProducer(*args, **kwargs)[source]#
Bases:
BaseStatefulProducer[CounterSettings,AxisArray,CounterState]Produces incrementing integer blocks as AxisArray.
- class CounterSettings(n_time, fs, n_ch=1, dispatch_rate=None, mod=None)[source]#
Bases:
SettingsSettings for
Counter. Seeacounterfor a description of the parameters.
- class EEGSynth(*args, settings=None, **kwargs)[source]#
Bases:
CollectionA
Collectionthat chains aClockto bothPinkNoiseandOscillator, thenAdds the result.Unlike the Oscillator, WhiteNoise, and PinkNoise composite processors which have linear flows, this class has a diamond flow, with clock branching to both PinkNoise and Oscillator, which then are combined in Add.
- Optional: Refactor as a ProducerUnit, similar to Clock, but we manually add all the other
transformers.
- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
EEGSynthSettings
- OUTPUT_SIGNAL = OutputStream:unlocated[<class 'ezmsg.util.messages.axisarray.AxisArray'>](self.num_buffers=32, self.force_tcp=False)#
- CLOCK = <ezmsg.sigproc.synth.Clock object>#
- NOISE = <ezmsg.sigproc.synth.PinkNoise object>#
- OSC = <ezmsg.sigproc.synth.Oscillator object>#
- ADD = <ezmsg.sigproc.synth.Add object>#
- class EEGSynthSettings(fs=500.0, n_time=100, alpha_freq=10.5, n_ch=8)[source]#
Bases:
SettingsSee
OscillatorSettings.- __init__(fs=500.0, n_time=100, alpha_freq=10.5, n_ch=8)#
- class NoiseSettings(n_time, fs, n_ch=1, dispatch_rate=None, loc=0.0, scale=1.0)[source]#
Bases:
SettingsSee
CounterSettingsandRandomGeneratorSettings.- Parameters:
- __init__(n_time, fs, n_ch=1, dispatch_rate=None, loc=0.0, scale=1.0)#
- class Oscillator(*args, settings=None, **kwargs)[source]#
Bases:
BaseCounterFirstProducerUnit[OscillatorSettings,AxisArray,AxisArray,OscillatorProducer]Generates sinusoidal waveforms using a counter and sine transformer.
- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
OscillatorSettings
- class OscillatorProducer(*args, **kwargs)[source]#
Bases:
CompositeProducer[OscillatorSettings,AxisArray]
- class OscillatorSettings(n_time, fs, n_ch=1, dispatch_rate=None, freq=1.0, amp=1.0, phase=0.0, sync=False)[source]#
Bases:
SettingsSettings for
Oscillator- Parameters:
- class PinkNoise(*args, settings=None, **kwargs)[source]#
Bases:
BaseCounterFirstProducerUnit[NoiseSettings,AxisArray,AxisArray,PinkNoiseProducer]chains
WhiteNoiseandButterworthFilter.- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
NoiseSettings
- class PinkNoiseProducer(*args, **kwargs)[source]#
Bases:
CompositeProducer[NoiseSettings,AxisArray]
- PinkNoiseSettings#
alias of
NoiseSettings
- class RandomGenerator(*args, settings=None, **kwargs)[source]#
Bases:
BaseTransformerUnit[RandomGeneratorSettings,AxisArray,AxisArray,RandomTransformer]- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
RandomGeneratorSettings
- class RandomGeneratorSettings(loc: float = 0.0, scale: float = 1.0)[source]#
Bases:
Settings- loc: float = 0.0#
loc argument for
numpy.random.normal
- scale: float = 1.0#
scale argument for
numpy.random.normal
- class RandomTransformer(*args, settings=None, **kwargs)[source]#
Bases:
BaseTransformer[RandomGeneratorSettings,AxisArray,AxisArray]Replaces input data with random data and returns the result.
- Parameters:
settings (SettingsType)
- __init__(*args, settings=None, **kwargs)[source]#
- Parameters:
settings (RandomGeneratorSettings | None)
- class SinGenerator(*args, settings=None, **kwargs)[source]#
Bases:
BaseTransformerUnit[SinGeneratorSettings,AxisArray,AxisArray,SinTransformer]Unit for generating sinusoidal waveforms.
- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
SinGeneratorSettings
- class SinGeneratorSettings(axis='time', freq=1.0, amp=1.0, phase=0.0)[source]#
Bases:
SettingsSettings for
SinGenerator. Seesinfor parameter descriptions.
- class SinTransformer(*args, settings=None, **kwargs)[source]#
Bases:
BaseTransformer[SinGeneratorSettings,AxisArray,AxisArray]Transforms counter values into sinusoidal waveforms.
- Parameters:
settings (SettingsType)
- class WhiteNoise(*args, settings=None, **kwargs)[source]#
Bases:
BaseCounterFirstProducerUnit[NoiseSettings,AxisArray,AxisArray,WhiteNoiseProducer]chains a
CounterandRandomGenerator.- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
NoiseSettings
- class WhiteNoiseProducer(*args, **kwargs)[source]#
Bases:
CompositeProducer[NoiseSettings,AxisArray]
- WhiteNoiseSettings#
alias of
NoiseSettings
- class AddState(queue_a: 'asyncio.Queue[AxisArray]' = <factory>, queue_b: 'asyncio.Queue[AxisArray]' = <factory>)[source]#
Bases:
object- Parameters:
queue_a (Queue[AxisArray])
queue_b (Queue[AxisArray])
- queue_a: Queue[AxisArray]#
- queue_b: Queue[AxisArray]#
- __init__(queue_a=<factory>, queue_b=<factory>)#
- Parameters:
queue_a (Queue[AxisArray])
queue_b (Queue[AxisArray])
- Return type:
None
- class Add(*args, settings=None, **kwargs)[source]#
Bases:
UnitAdd two signals together. Assumes compatible/similar axes/dimensions.
- Parameters:
settings (Settings | None)
- INPUT_SIGNAL_A = InputStream:unlocated[<class 'ezmsg.util.messages.axisarray.AxisArray'>]()#
- INPUT_SIGNAL_B = InputStream:unlocated[<class 'ezmsg.util.messages.axisarray.AxisArray'>]()#
- OUTPUT_SIGNAL = OutputStream:unlocated[<class 'ezmsg.util.messages.axisarray.AxisArray'>](self.num_buffers=32, self.force_tcp=False)#
- async initialize()[source]#
Runs when the
Unitis instantiated. This is called from within the same process this unit will live. This lifecycle hook can be overridden. It can be run asasyncfunctions by simply adding theasynckeyword when overriding.- Return type:
None
- class ClockSettings(dispatch_rate=None)[source]#
Bases:
SettingsSettings for clock generator.
- class ClockProducer(*args, **kwargs)[source]#
Bases:
BaseStatefulProducer[ClockSettings,Flag,ClockState]Produces clock ticks at specified rate. Can be used to drive periodic operations.
- aclock(dispatch_rate)[source]#
Construct an async generator that yields events at a specified rate.
- Returns:
A
ClockProducerobject.- Parameters:
dispatch_rate (float | None)
- Return type:
- clock(dispatch_rate)#
Alias for
aclockexpected by synchronous methods. ClockProducer can be used in sync or async.- Parameters:
dispatch_rate (float | None)
- Return type:
- class Clock(*args, settings=None, **kwargs)[source]#
Bases:
BaseProducerUnit[ClockSettings,Flag,ClockProducer]- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
ClockSettings
- class CounterSettings(n_time, fs, n_ch=1, dispatch_rate=None, mod=None)[source]#
Bases:
SettingsSettings for
Counter. Seeacounterfor a description of the parameters.
- class CounterProducer(*args, **kwargs)[source]#
Bases:
BaseStatefulProducer[CounterSettings,AxisArray,CounterState]Produces incrementing integer blocks as AxisArray.
- acounter(n_time, fs, n_ch=1, dispatch_rate=None, mod=None)[source]#
Construct an asynchronous generator to generate AxisArray objects at a specified rate and with the specified sampling rate.
NOTE: This module uses asyncio.sleep to delay appropriately in realtime mode. This method of sleeping/yielding execution priority has quirky behavior with sub-millisecond sleep periods which may result in unexpected behavior (e.g. fs = 2000, n_time = 1, realtime = True – may result in ~1400 msgs/sec)
- class Counter(*args, settings=None, **kwargs)[source]#
Bases:
BaseProducerUnit[CounterSettings,AxisArray,CounterProducer]Generates monotonically increasing counter. Unit for
CounterProducer.- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
CounterSettings
- INPUT_CLOCK = InputStream:unlocated[<class 'ezmsg.core.message.Flag'>]()#
- async produce()[source]#
Generate counter output. This is an infinite loop, but we will likely only enter the loop once if we are self-timed, and twice if we are using an external clock.
When using an internal clock, we enter the loop, and wait for the event which should have been reset upon initialization then we immediately clear, then go to the internal loop that will async call __acall__ to let the internal timer determine when to produce an output.
When using an external clock, we enter the loop, and wait for the event which should have been reset upon initialization then we immediately clear, then we hit continue to loop back around and wait for the event to be set again – potentially forever. In this case, it is expected that on_clock will be called to produce the output.
- Return type:
- class SinGeneratorSettings(axis='time', freq=1.0, amp=1.0, phase=0.0)[source]#
Bases:
SettingsSettings for
SinGenerator. Seesinfor parameter descriptions.
- class SinTransformer(*args, settings=None, **kwargs)[source]#
Bases:
BaseTransformer[SinGeneratorSettings,AxisArray,AxisArray]Transforms counter values into sinusoidal waveforms.
- Parameters:
settings (SettingsType)
- class SinGenerator(*args, settings=None, **kwargs)[source]#
Bases:
BaseTransformerUnit[SinGeneratorSettings,AxisArray,AxisArray,SinTransformer]Unit for generating sinusoidal waveforms.
- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
SinGeneratorSettings
- sin(axis='time', freq=1.0, amp=1.0, phase=0.0)[source]#
Construct a generator of sinusoidal waveforms in AxisArray objects.
- Returns:
A primed generator that expects .send(axis_array) of sample counts and yields an AxisArray of sinusoids.
- Parameters:
- Return type:
- class RandomGeneratorSettings(loc: float = 0.0, scale: float = 1.0)[source]#
Bases:
Settings- loc: float = 0.0#
loc argument for
numpy.random.normal
- scale: float = 1.0#
scale argument for
numpy.random.normal
- class RandomTransformer(*args, settings=None, **kwargs)[source]#
Bases:
BaseTransformer[RandomGeneratorSettings,AxisArray,AxisArray]Replaces input data with random data and returns the result.
- Parameters:
settings (SettingsType)
- __init__(*args, settings=None, **kwargs)[source]#
- Parameters:
settings (RandomGeneratorSettings | None)
- class RandomGenerator(*args, settings=None, **kwargs)[source]#
Bases:
BaseTransformerUnit[RandomGeneratorSettings,AxisArray,AxisArray,RandomTransformer]- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
RandomGeneratorSettings
- class OscillatorSettings(n_time, fs, n_ch=1, dispatch_rate=None, freq=1.0, amp=1.0, phase=0.0, sync=False)[source]#
Bases:
SettingsSettings for
Oscillator- Parameters:
- class OscillatorProducer(*args, **kwargs)[source]#
Bases:
CompositeProducer[OscillatorSettings,AxisArray]
- class BaseCounterFirstProducerUnit(*args, settings=None, **kwargs)[source]#
Bases:
BaseProducerUnit[SettingsType,MessageOutType,ProducerType],Generic[SettingsType,MessageInType,MessageOutType,ProducerType]Base class for units whose primary processor is a composite producer with a CounterProducer as the first processor (producer) in the chain.
- Parameters:
settings (Settings | None)
- INPUT_SIGNAL = InputStream:unlocated[~MessageInType]()#
- class Oscillator(*args, settings=None, **kwargs)[source]#
Bases:
BaseCounterFirstProducerUnit[OscillatorSettings,AxisArray,AxisArray,OscillatorProducer]Generates sinusoidal waveforms using a counter and sine transformer.
- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
OscillatorSettings
- class NoiseSettings(n_time, fs, n_ch=1, dispatch_rate=None, loc=0.0, scale=1.0)[source]#
Bases:
SettingsSee
CounterSettingsandRandomGeneratorSettings.- Parameters:
- __init__(n_time, fs, n_ch=1, dispatch_rate=None, loc=0.0, scale=1.0)#
- WhiteNoiseSettings#
alias of
NoiseSettings
- class WhiteNoiseProducer(*args, **kwargs)[source]#
Bases:
CompositeProducer[NoiseSettings,AxisArray]
- class WhiteNoise(*args, settings=None, **kwargs)[source]#
Bases:
BaseCounterFirstProducerUnit[NoiseSettings,AxisArray,AxisArray,WhiteNoiseProducer]chains a
CounterandRandomGenerator.- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
NoiseSettings
- PinkNoiseSettings#
alias of
NoiseSettings
- class PinkNoiseProducer(*args, **kwargs)[source]#
Bases:
CompositeProducer[NoiseSettings,AxisArray]
- class PinkNoise(*args, settings=None, **kwargs)[source]#
Bases:
BaseCounterFirstProducerUnit[NoiseSettings,AxisArray,AxisArray,PinkNoiseProducer]chains
WhiteNoiseandButterworthFilter.- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
NoiseSettings
- class EEGSynthSettings(fs=500.0, n_time=100, alpha_freq=10.5, n_ch=8)[source]#
Bases:
SettingsSee
OscillatorSettings.- __init__(fs=500.0, n_time=100, alpha_freq=10.5, n_ch=8)#
- class EEGSynth(*args, settings=None, **kwargs)[source]#
Bases:
CollectionA
Collectionthat chains aClockto bothPinkNoiseandOscillator, thenAdds the result.Unlike the Oscillator, WhiteNoise, and PinkNoise composite processors which have linear flows, this class has a diamond flow, with clock branching to both PinkNoise and Oscillator, which then are combined in Add.
- Optional: Refactor as a ProducerUnit, similar to Clock, but we manually add all the other
transformers.
- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
EEGSynthSettings
- OUTPUT_SIGNAL = OutputStream:unlocated[<class 'ezmsg.util.messages.axisarray.AxisArray'>](self.num_buffers=32, self.force_tcp=False)#
- CLOCK = <ezmsg.sigproc.synth.Clock object>#
- NOISE = <ezmsg.sigproc.synth.PinkNoise object>#
- OSC = <ezmsg.sigproc.synth.Oscillator object>#
- ADD = <ezmsg.sigproc.synth.Add object>#