ExponentialFilter Icon
ExponentialFilter
Exponential filtering (first-order filter) with input-output relation $y(z) = (1 - a) y(z-1) + a u(z)$, transfer function
\[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 signaly: Output signal
Usage
DiscreteComponents.ExponentialFilter(a=0.1)
Parameters:
| Name | Description | Units | Default value |
|---|---|---|---|
initialization | – | DiscreteCom...t(; y0=0.0) | |
a | Filter 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
using DiscreteComponents #hide
using ModelingToolkit #hide
@variables a #hide
@named sys = DiscreteComponents.ExponentialFilter(a=a) #hide
full_equations(sys) #hideSource
"""
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
"""
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"}}
}
endTest Cases
No test cases defined.
Related
- Examples
- Experiments
- Analyses