BUTTER
The BUTTER node applies a butterworth filter to an input signal.It is designed to have a frequency response that is as flat as possible in the pass band.
Inputs
------
default : OrderedPair
    The data to apply the butter filter to.Params:filter_order : intThe intensity of the filter.critical_frequency : intThe frequency where the filter takes effect. For lowpass and highpass, it takes a scalar.
For bandpass and bandstop, it takes an array with the length of 2.btype : selectThe type of the filter.sample_rate : intThe sample rate of the input signal.Returns:out : OrderedPairx: time domain
y: filtered signal
Python Code
from scipy import signal
from flojoy import flojoy, OrderedPair
from typing import Literal, Union
@flojoy
def BUTTER(
    default: OrderedPair,
    filter_order: int = 1,
    critical_frequency: int = 1,
    btype: Literal["lowpass", "highpass", "bandpass", "bandstop"] = "lowpass",
    sample_rate: int = 10,
) -> OrderedPair:
    """The BUTTER node applies a butterworth filter to an input signal.
    It is designed to have a frequency response that is as flat as possible in the pass band.
    Inputs
    ------
    default : OrderedPair
        The data to apply the butter filter to.
    Parameters
    ----------
    filter_order : int
        The intensity of the filter.
    critical_frequency : int
        The frequency where the filter takes effect. For lowpass and highpass, it takes a scalar.
        For bandpass and bandstop, it takes an array with the length of 2.
    btype : select
        The type of the filter.
    sample_rate : int
        The sample rate of the input signal.
    Returns
    -------
    OrderedPair
        x: time domain
        y: filtered signal
    """
    sig = default.y
    order: int = filter_order
    wn: int = critical_frequency  # hz
    btype: str = btype
    fs: int = sample_rate  # hz
    sos = signal.butter(N=order, Wn=wn, btype=btype, fs=fs, output="sos")
    #    sos = signal.butter(10, 15, "hp", fs=1000, output="sos")
    filtered = signal.sosfilt(sos, sig)
    return OrderedPair(x=default.x, y=filtered)
Example
Having problem with this example app? Join our Discord community and we will help you out!
In this example, BASIC_OSCILLATOR node generates a signal that’s 10 seconds long with a sample rate of 50.
The generated signal is a sawtooth with a starting frequency of 1.
It is then sent to a BUTTER node that filters out frequencies above 5 with a filter_order of 4.
Since we want the lower frequencies to pass through, the lowpass option is selected for the btype option.