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.294]),
  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', [1, 2, 3]).exponential(0.3).figure()

(Source code, html)