Generic Filter

class gpype.backend.filters.base.generic_filter.GenericFilter[source]

Bases: IONode

Generic Linear Time-Invariant (LTI) digital filter for real-time use.

Implements a flexible LTI filter using transfer function coefficients (numerator ‘b’ and denominator ‘a’ polynomials). For IIR filters, converts to second-order sections for numerical stability. For FIR filters, uses direct form implementation to avoid unnecessary decomposition overhead. Maintains state for streaming data.

class Configuration[source]

Bases: Configuration

Configuration class for GenericFilter parameters.

class Keys[source]

Bases: Keys

Configuration keys for filter coefficients.

B = 'b'

Numerator coefficients configuration key

A = 'a'

Denominator coefficients configuration key

__init__(b=None, a=None, **kwargs)[source]

Initialize the generic filter with transfer function coefficients.

Parameters:
  • b (ndarray) – Numerator coefficients of the transfer function.

  • a (ndarray) – Denominator coefficients of the transfer function.

  • **kwargs – Additional arguments passed to parent IONode class.

Raises:

ValueError – If coefficients are empty or invalid.

setup(data, port_context_in)[source]

Setup the generic filter before processing begins.

Converts transfer function to second-order sections for numerical stability and initializes filter state based on channel configuration.

Parameters:
  • data (dict[str, ndarray]) – Initial data dictionary (not used in setup).

  • port_context_in (dict[str, dict]) – Input port context containing channel_count and other metadata.

Return type:

dict[str, dict]

Returns:

Output port context dictionary with updated metadata.

Raises:

ValueError – If required context keys are missing or coefficients are invalid.

step(data)[source]

Apply the generic filter to input data.

Processes input data through the filter while maintaining filter state for continuous operation across processing steps.

Parameters:

data (dict[str, ndarray]) – Dictionary containing input data with key PORT_IN. Input should be 2D array (samples x channels).

Return type:

dict[str, ndarray]

Returns:

Dictionary with filtered data under key PORT_OUT.

Raises:

ValueError – If input data is not 2D array.