# control::AvgN

    sys::Obj
      sys::Virtual
        sys::Component
          control::AvgN

`public class AvgN` `[niagaraIcon="module://icons/x16/control/math/average.png"]`

Modified Moving Average math object

      out = [(n-1)*out + in]/n = (total + in - avg)/n

      where total = approx. running total of last n samples
            avg   = last computed average = total/n

      Note: 1) the "avg" value is "seeded" with the "in"
               value at startup or whenever "n" changes
            2) the "total" value is "seeded" with (in * n)
               at startup or whenever "n" changes
            3) boolean input "reset" resets the object to
               return to first execute cycle state, and avg
               and total are re "seeded".  This may be useful
               to invoke in an application where large step changes
               of "in" are expected and "n" is a high value, to prevent
               output lag of the input.

      For large step changes in values, the "out" value will asymptotically
      approach the "in" value.

in

  `public property float in`

  value of in is added to average computation every execute cycle

numSamplesToAvg

  `public property int numSamplesToAvg [min=1, config]`

  number of samples to average. One new sample is read every execute cycle.

out

  `public property float out [readonly]`

  the average value updated every execute cycle

reset

  `public property bool reset [readonly]`

  reset is invoked to re-initialize the averaging

changed

  `public virtual override void changed(Slot slot)`

  Behavior to execute when a property is changed externally

computeAverage

  `public void computeAverage()`

  average in a new sample

execute

  `public virtual override void execute()`

  Execute is called once every scan.

start

  `public virtual override void start()`

  Callback when component is first started in an app, before the first call to propagateLinksTo() or execute().