Source code for tonic.functional.refractory_period
import numpy as np
[docs]def refractory_period_numpy(
events: np.ndarray,
refractory_period: float,
):
"""Sets a refractory period for each pixel, during which events will be ignored/discarded. We
keep events if:
.. math::
t_n - t_{n-1} > t_{refrac}
Parameters:
events: ndarray of shape [num_events, num_event_channels]
refractory_period: refractory period for each pixel in microseconds
Returns:
filtered set of events.
"""
assert "t" and "x" and "y" in events.dtype.names
events_copy = np.zeros_like(events)
copy_index = 0
width = int(events["x"].max()) + 1
height = int(events["y"].max()) + 1
timestamp_memory = np.zeros((width, height)) - refractory_period
for event in events:
time_since_last_spike = (
event["t"] - timestamp_memory[int(event["x"]), int(event["y"])]
)
if time_since_last_spike > refractory_period:
events_copy[copy_index] = event
copy_index += 1
timestamp_memory[int(event["x"]), int(event["y"])] = event["t"]
return events_copy[:copy_index]