LIBRARY
ExponentialFilter ​
Exponential filtering (first-order filter) with input-output relation
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 ​
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"}}
}
endFlattened 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"}}
}
endTest Cases ​
No test cases defined.
Related ​
Examples
Experiments
Analyses