ANN: MaxMinFilters.jl - fast streaming maximum / minimum within moving window

What functionality are you talking about?
There are different sets of possible functionality extensions:

  1. Steteless functions (to process small data chunks at once) => stateful functions for (realtime or larger than memory) data streams, that can be stopped and resumed later, so function state can be saved and loaded. This is also related to delays and boundary conditions handling.

  2. Special function types:

    2.1. Moving window functions => moving window with decimation, if window step > 1 (or “jumping” window)
    2.2. Special filters, like sorting filter for fast moving median and moving percentiles, etc.
    2.3. Regularly sampled data => irregularly sampled data, constant window length => variable window length.
    2.4. Event detectors: local maxima peak detectors, zero-crossing and threshold detectors, step detectors and so on. Also related to data formats for irregularly sampled events.

  3. Functions for 1-dimensional signals => multi-diomensional signals, like video streams.

  4. Composing chains of processing steps, like: “filter1 > decimate > sliding function > detect events > calc features > …” and so on. It is related to using transducers to feed data, or making functions and data buffers compatible for possible use with transducers. You may be interested in this thread:
    Using Transducers.jl instead of stateful functions for stream processing
    Speaking of transducers, I just don’t fully understand, how to use them for complex processing chains, if you need branching and joining data streams, select to store some intermediate data, log intermediate data for debug purpose, and so on.

All that extensions are partly compatible with each other, but not all.

Also, I think we should start with as simple use cases as possible.

2 Likes