colour.volume.generate_pulse_waves#
- colour.volume.generate_pulse_waves(bins: int, pulse_order: Literal['Bins', 'Pulse Wave Width'] | str = 'Bins', filter_jagged_pulses: bool = False) NDArrayFloat [source]#
Generate the pulse waves of given number of bins necessary to totally stimulate the colour matching functions and produce the Rösch-MacAdam colour solid.
Assuming 5 bins, a first set of SPDs would be as follows:
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
The second one:
1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 1
The third:
1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1
Etc…
- Parameters:
bins (int) – Number of bins of the pulse waves.
pulse_order (Literal['Bins', 'Pulse Wave Width'] | str) – Method for ordering the pulse waves. Bins is the default order, with Pulse Wave Width ordering, instead of iterating over the pulse wave widths first, iteration occurs over the bins, producing blocks of pulse waves with increasing width.
filter_jagged_pulses (bool) –
Whether to filter jagged pulses. When
pulse_order
is set to Pulse Wave Width, the pulses are ordered by increasing width. Because of the discrete nature of the underlying signal, the resulting pulses will be jagged. For example assuming 5 bins, the center block with the two extreme values added would be as follows:0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 <-- 0 1 1 1 0 0 1 1 1 1 <-- 1 1 1 1 1
Setting the
filter_jagged_pulses
parameter to True will result in the removal of the two marked pulse waves above thus avoiding jagged lines when plotting and having to resort to excessivebins
values.
- Returns:
Pulse waves.
- Return type:
References
[Lin15], [Man18], [MartinezVerduPC+07]
Examples
>>> generate_pulse_waves(5) array([[ 0., 0., 0., 0., 0.], [ 1., 0., 0., 0., 0.], [ 0., 1., 0., 0., 0.], [ 0., 0., 1., 0., 0.], [ 0., 0., 0., 1., 0.], [ 0., 0., 0., 0., 1.], [ 1., 1., 0., 0., 0.], [ 0., 1., 1., 0., 0.], [ 0., 0., 1., 1., 0.], [ 0., 0., 0., 1., 1.], [ 1., 0., 0., 0., 1.], [ 1., 1., 1., 0., 0.], [ 0., 1., 1., 1., 0.], [ 0., 0., 1., 1., 1.], [ 1., 0., 0., 1., 1.], [ 1., 1., 0., 0., 1.], [ 1., 1., 1., 1., 0.], [ 0., 1., 1., 1., 1.], [ 1., 0., 1., 1., 1.], [ 1., 1., 0., 1., 1.], [ 1., 1., 1., 0., 1.], [ 1., 1., 1., 1., 1.]]) >>> generate_pulse_waves(5, "Pulse Wave Width") array([[ 0., 0., 0., 0., 0.], [ 1., 0., 0., 0., 0.], [ 1., 1., 0., 0., 0.], [ 1., 1., 0., 0., 1.], [ 1., 1., 1., 0., 1.], [ 0., 1., 0., 0., 0.], [ 0., 1., 1., 0., 0.], [ 1., 1., 1., 0., 0.], [ 1., 1., 1., 1., 0.], [ 0., 0., 1., 0., 0.], [ 0., 0., 1., 1., 0.], [ 0., 1., 1., 1., 0.], [ 0., 1., 1., 1., 1.], [ 0., 0., 0., 1., 0.], [ 0., 0., 0., 1., 1.], [ 0., 0., 1., 1., 1.], [ 1., 0., 1., 1., 1.], [ 0., 0., 0., 0., 1.], [ 1., 0., 0., 0., 1.], [ 1., 0., 0., 1., 1.], [ 1., 1., 0., 1., 1.], [ 1., 1., 1., 1., 1.]]) >>> generate_pulse_waves(5, "Pulse Wave Width", True) array([[ 0., 0., 0., 0., 0.], [ 1., 0., 0., 0., 0.], [ 1., 1., 0., 0., 1.], [ 0., 1., 0., 0., 0.], [ 1., 1., 1., 0., 0.], [ 0., 0., 1., 0., 0.], [ 0., 1., 1., 1., 0.], [ 0., 0., 0., 1., 0.], [ 0., 0., 1., 1., 1.], [ 0., 0., 0., 0., 1.], [ 1., 0., 0., 1., 1.], [ 1., 1., 1., 1., 1.]])