Exponential Smoothing#
The signal samples
of a signal trace can be
processed with a second-order exponential smoothing algorithm.
Create the Trace Collection#
You can smooth the signal samples
with a second-order exponential
smoothing algorithm by calling the method exponential()
.
An exponential smoothing trace collection is returned.
>>> # smooth the signal samples [0.0:freeze..1.0:transparent]
>>> traces = Trace('Signal', [1, 2, 3]).exponential(0.3)
>>> traces
ExponentialSmoothingTraces(forecast=Trace(label='Signal:exponential:forecast',
samples=[1.0, 1.5999999999999999, 2.53]),
forecast_sign=Trace(label='Signal:exponential:forecast_sign',
samples=[1.0, 1.0, 1.0]),
level=Trace(label='Signal:exponential:level',
samples=[1.0, 1.5099999999999998, 2.3139999999999996]),
level_sign=Trace(label='Signal:exponential:level_sign',
samples=[1.0, 1.0, 1.0]),
prognosis1=Trace(label='Signal:exponential:prognosis1',
samples=[1.0, 1.0, 1.2999999999999998]),
prognosis2=Trace(label='Signal:exponential:prognosis2',
samples=[1.0, 1.0, 1.0899999999999999]),
prognosis=Trace(label='Signal:exponential:prognosis',
samples=[1.0, 1.0, 1.5099999999999998]),
smoothed1=Trace(label='Signal:exponential:smoothed1',
samples=[1.0, 1.2999999999999998, 1.8099999999999996]),
smoothed2=Trace(label='Signal:exponential:smoothed2',
samples=[1.0, 1.0899999999999999, 1.3059999999999996]),
trend=Trace(label='Signal:exponential:trend',
samples=[0.0, 0.09, 0.21600000000000003]),
trend_sign=Trace(label='Signal:exponential:trend_sign',
samples=[0.0, 1.0, 1.0]),
trend_inflection=Trace(label='Signal:exponential:trend_inflection',
samples=[0.0, 1.0, 1.0]),
error=Trace(label='Signal:exponential:error',
samples=[0.0, 1.0, 1.4000000000000001]),
correction=Trace(label='Signal:exponential:correction',
samples=[0.0, 0.3, 0.42000000000000004]),
absolute_error=Trace(label='Signal:exponential:absolute_error',
samples=[0.0, 0.21, 0.44099999999999995]),
variance=Trace(label='Signal:exponential:variance',
samples=[0.0, 0.21, 0.5586]),
deviation=Trace(label='Signal:exponential:deviation',
samples=[0.0, 0.458257569495584, 0.7473954776421918]),
skew=Trace(label='Signal:exponential:skew',
samples=[0.0, 2.182178902359923, 2.9077569539828634]),
kurtosis=Trace(label='Signal:exponential:kurtosis',
samples=[0.0, 4.76190476190476, 5.918744228993535]))
Note
The second-order exponential smoothing algorithm uses for the first prognosis the first signal sample as the initial level, and the initial trend is set by default to zero.
Figure#
You can visualize the trace collection with a figure containing the subplots of
the traces in the collection by calling the method
figure()
.
>>> figure = Trace('Signal', range(20)).exponential(0.3).figure()
(Source code, html)