Signal processing#

arim.signal provides common signal processing operations usable with arim core objects.

To call a filter, first initiliase a arim.signal.Filter object. The parameters depends on the kind of filter, for example cutoff frequencies and order. Once initialised, a arim.signal.Filter works as a regular function whose argument is the data to filter:

from arim.signal import Hilbert
f_hil = Hilbert()
filtered_data = f_hil(raw_data)

Filters can be composed:

from arim.signal import Hilbert
f_hil = Hilbert()
f_abs = Abs()

f_abs_hil = f_abs + f_hil

filtered_data = f_abs_hil(raw_data)

# This is equivalent to:
filtered_data = f_abs(f_hil(raw_data))

To filter timetraces, the recommended approach is to call arim.core.frame.Frame.apply_filter():

frame.apply_filter(f_abs_hil)

# filtered timetraces:
frame.timetraces

# raw timetraces:
frame.timetraces_raw

To create a new filter, create a class derived from arim.signal.Filter():

class PlusSomethingFilter(arim.signal.Filter):
    """A filter that adds a given value to the signals."""

    def __init__(self, value_to_add=1.0):
        self.value_to_add = value_to_add

    def __call__(self, arr):
        return arr + self.value_to_add

plus_one_filter = PlusSomethingFilter(1.0)
filtered_data = plus_one_filter(raw_data)

See also

Full reference: arim.signal