# Documentation

### This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English verison of the page.

# dsp.MovingVariance System object

Moving variance

## Description

The `dsp.MovingVariance` System object™ computes the moving variance of the input signal along each channel, independently over time. The object uses either the sliding window method or the exponential weighting method to compute the moving variance. In the sliding window method, a window of specified length is moved over the data, sample by sample, and the variance is computed over the data in the window. In the exponential weighting method, the object subtracts each sample of the data from the average, squares the difference, and multiplies the squared result with a weighting factor. The object then computes the variance by adding all the weighted data. For more details on these methods, see Algorithms.

The object accepts multichannel inputs, that is, m-by-n size inputs, where m ≥ 1, and n > 1. The object also accepts variable-size inputs. Once the object is locked, you can change the size of each input channel. However, the number of channels cannot change. This object supports C and C++ code generation.

To compute the moving variance of the input:

1. Create a `dsp.MovingVariance` object and set the properties of the object.

2. Call `step` to compute the moving variance.

### Note

Alternatively, instead of using the `step` method to perform the operation defined by the System object, you can call the object with arguments, as if it were a function. For example, ```y = step(obj,x)``` and `y = obj(x)` perform equivalent operations.

## Construction

`MovVar = dsp.MovingVariance` returns a moving variance object, `MovVar`, using the default properties.

`MovVar = dsp.MovingVariance(Len)` sets the `WindowLength` property to `Len`.

`MovVar = dsp.MovingVariance(Name,Value)` specifies additional properties using `Name,Value` pairs. Unspecified properties have default values.

Example:

`MovVar = dsp.MovingVariance('Method','Exponential weighting','ForgettingFactor',0.9);`

## Properties

expand all

• `'Sliding window'` — A window of length specified by `SpecifyWindowLength` is moved over the input data along each channel. For every sample the window moves by, the object computes the variance over the data in the window.

• `'Exponential weighting'` — The object subtracts each sample of the data from the average, squares the difference, and multiplies the squared result with a weighting factor. The object then computes the variance by adding all the weighted data. The magnitude of the weighting factors decreases exponentially as the age of the data increases, never reaching zero.

For more details on these methods, see Algorithms.

Flag to specify a window length, specified as a scalar Boolean.

• `true` — The length of the sliding window is equal to the value you specify in the `WindowLength` property.

• `false` — The length of the sliding window is infinite. In this mode, the variance is computed using the current sample and all past samples.

This property applies when you set `Method` to ```'Sliding window'```.

Length of the sliding window, specified as a positive scalar integer. This property applies when you set `Method` to ```'Sliding window'``` and `SpecifyWindowLength` to `true`.

Exponential weighting factor, specified as a positive real scalar in the range (0,1]. This property applies when you set `Method` to ```'Exponential weighting'```.

A forgetting factor of 0.9 gives more weight to the older data than does a forgetting factor of 0.1. A forgetting factor of 1.0 indicates infinite memory. All the past samples are given an equal weight.

This property is tunable. You can change its value even when the object is locked.

## Methods

 reset Reset internal states of System object step Moving Variance of input signal
Common to All System Objects
`clone`

Create System object with same property values

`getNumInputs`

Expected number of inputs to a System object

`getNumOutputs`

Expected number of outputs of a System object

`isLocked`

Check locked states of a System object (logical)

`release`

Allow System object property value changes

## Examples

expand all

Compute the moving variance of a noisy square wave signal with varying amplitude using the `dsp.MovingVariance` object.

Initialization

Set up `movvarWindow` and `movvarExp` objects. `movvarWindow` uses the sliding window method with a window length of 800. `movvarExp` uses the exponentially weighting method with a forgetting factor of 0.999. Create a time scope for viewing the output.

```FrameLength = 100; Fs = 100; movvarWindow = dsp.MovingVariance(800); movvarExp = dsp.MovingVariance('Method','Exponential weighting',... 'ForgettingFactor',0.999); scope = dsp.TimeScope('SampleRate',Fs,... 'TimeSpanOverrunAction','Scroll',... 'TimeSpan',1000,... 'ShowGrid',true,... 'BufferLength',1e7,... 'YLimits',[0 7e-4]); title = 'Actual (yellow) Sliding Window (blue) Exponentially Weighted (red) variance'; scope.Title = title; ```

Compute the Variance

Generate a noisy square wave signal. Vary the amplitude of the square wave after a given number of frames. Apply the sliding window method and the exponentially weighting method on this signal. The actual variance is np. This value is used while adding noise to the data. Compare the actual variance with the computed variances on the time scope.

```count = 1; noisepower = 1e-4 * [1 2 3 4]; index = 1; for index = 1:length(noisepower) np = noisepower(index); yexp = np*ones(FrameLength,1); for i = 1:250 x = 1 + sqrt(np) * randn(FrameLength,1); y1 = movvarWindow(x); y2 = movvarExp(x); scope([yexp,y1,y2]); end end ```

expand all

## References

[1] Bodenham, Dean. “Adaptive Filtering and Change Detection for Streaming Data.” PH.D. Thesis. Imperial College, London, 2012.