Skip to content
LIBRARY
ExponentialFilter.md

ExponentialFilter ​

Exponential filtering (first-order filter) with input-output relation     , transfer function

Parameters: ​

  • a: Filter parameter [0, 1], a small value implies stronger filtering.

Connectors: ​

  • u: Input signal

  • y: Output signal

Usage ​

DiscreteComponents.ExponentialFilter(a=0.1)

Parameters: ​

NameDescriptionUnitsDefault value
initialization–DiscreteCom...t(; y0=0.0)
aFilter parameter [0, 1], a small value implies stronger filtering–0.1

Connectors ​

  • u - This connector represents a real signal as an input to a component (RealInput)

  • y - This connector represents a real signal as an output from a component (RealOutput)

Behavior ​

Source ​

dyad
"""
Exponential filtering (first-order filter) with input-output relation ``y(z) = (1 - a) y(z-1) + a u(z)``, transfer function
```math
Y(z) = \\dfrac{a}{1 - (1 - a) z^{-1}} U(z)
```

# Parameters:
- `a`: Filter parameter `[0, 1]`, a small value implies stronger filtering.

# Connectors:
- `u`: Input signal
- `y`: Output signal
"""
component ExponentialFilter@[input clk extends Discrete]
  "Input signal"
  u = RealInput@[clk]() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": -100, "y1": 450, "x2": 0, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Output signal"
  y = RealOutput@[clk]() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 1000, "y1": 450, "x2": 1100, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Filter parameter [0, 1], a small value implies stronger filtering"
  parameter a::Real = 0.1
  structural parameter initialization::InitialCondition = DiscreteComponents.InitialCondition.InitialOutput(y0 = 0.0)
relations
  y@clk = (1 - a) * y@(clk-1) + a * u@clk
  switch initialization
    case InitialOutput
      initial y@(clk-1) = (initialization.y0 - a * u@clk) / (1 - a)
    case SteadyState
      initial y@(clk-1) = u@clk
    case InitialState
      initial y@(clk-1) = initialization.x0
  end
metadata {
  "Dyad": {"icons": {"default": "dyad://DiscreteComponents/ExponentialFilter.svg"}}
}
end
Flattened Source
dyad
"""
Exponential filtering (first-order filter) with input-output relation ``y(z) = (1 - a) y(z-1) + a u(z)``, transfer function
```math
Y(z) = \\dfrac{a}{1 - (1 - a) z^{-1}} U(z)
```

# Parameters:
- `a`: Filter parameter `[0, 1]`, a small value implies stronger filtering.

# Connectors:
- `u`: Input signal
- `y`: Output signal
"""
component ExponentialFilter
  "Input signal"
  u = RealInput@[clk]() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": -100, "y1": 450, "x2": 0, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Output signal"
  y = RealOutput@[clk]() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 1000, "y1": 450, "x2": 1100, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Filter parameter [0, 1], a small value implies stronger filtering"
  parameter a::Real = 0.1
  structural parameter initialization::InitialCondition = DiscreteComponents.InitialCondition.InitialOutput(y0 = 0.0)
relations
  y@clk = (1 - a) * y@(clk-1) + a * u@clk
  switch initialization
    case InitialOutput
      initial y@(clk-1) = (initialization.y0 - a * u@clk) / (1 - a)
    case SteadyState
      initial y@(clk-1) = u@clk
    case InitialState
      initial y@(clk-1) = initialization.x0
  end
metadata {
  "Dyad": {"icons": {"default": "dyad://DiscreteComponents/ExponentialFilter.svg"}}
}
end


Test Cases ​

No test cases defined.

  • Examples

  • Experiments

  • Analyses