# dsp.MovingVariance

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 `dsp.MovingVariance` object and the `movvar` function both compute the moving variance of the input signal. However, the object can process large streams of real-time data and handle system states automatically. The function performs one-time computations on data that is readily available and cannot handle system states. For a comparison between the two, see System Objects vs MATLAB Functions.

To compute the moving variance of the input:

1. Create the `dsp.MovingVariance` object and set its properties.

2. Call the object with arguments, as if it were a function.

## Creation

### Syntax

``MovVar = dsp.MovingVariance``
``MovVar = dsp.MovingVariance(Len)``
``MovVar = dsp.MovingVariance(Len,Overlap)``
``MovVar = dsp.MovingVariance(Name,Value)``

### Description

````MovVar = dsp.MovingVariance` returns a moving variance object, `MovVar`, using the default properties.```
````MovVar = dsp.MovingVariance(Len)` sets the `WindowLength` property to `Len`.```

example

````MovVar = dsp.MovingVariance(Len,Overlap)` sets the `WindowLength` property to `Len` and the `OverlapLength` property to `Overlap`.```
````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);``````

example

## Properties

expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the `release` function unlocks them.

If a property is tunable, you can change its value at any time.

• `'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.

#### Dependencies

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

Length of the sliding window in samples, specified as a positive scalar integer.

#### Dependencies

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

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64`

Overlap length between sliding windows, specified as a nonnegative integer. The value of overlap length varies in the range [0, `WindowLength` − 1]. If not specified, the overlap length is set to `WindowLength` − 1.

#### Dependencies

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

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64`

Exponential weighting factor, specified as a non-negative real scalar in the range [0,1].

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 and all the past samples are given an equal weight. A forgetting factor of 0 indicates no memory and the past samples have no weight on the current computation.

Since this property is tunable, you can change its value even when the object is locked.

Tunable: Yes

#### Dependencies

This property applies when you set `Method` to `'Exponential weighting'`.

Data Types: `single` | `double`

## Usage

### Syntax

``y = movVar(x)``

### Description

````y = movVar(x)` computes the moving variance of the input signal, `x`, using either the sliding window method or exponential weighting method.```

example

### Input Arguments

expand all

Data input, specified as a vector or a matrix. If `x` is a matrix, each column is treated as an independent channel. The moving variance is computed along each channel.

The object accepts variable-size inputs. Once the object is locked, you can change the size of each input channel, but you cannot change the number of channels.

Data Types: `single` | `double`
Complex Number Support: Yes

### Output Arguments

expand all

Moving variance of the input signal, returned as a vector or a matrix.

When you input a signal of size m-by-n to the object, and if you set `Method` to ```'Sliding window'``` and `SpecifyWindowLength` to `true`, the output has an upper bound size of `ceil`(m/hop size)-by-n. Hop size is window length − overlap length. In other cases, the output has a size of m-by-n.

When you generate code from this object, the variable-size behavior of the output in the generated code depends on the input frame length and whether the size of the input signal is fixed or variable. For more details, see Code Generation.

Data Types: `single` | `double`
Complex Number Support: Yes

## Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named `obj`, use this syntax:

`release(obj)`

expand all

 `step` Run System object algorithm `release` Release resources and allow changes to System object property values and input characteristics `reset` Reset internal states of System object

## Examples

collapse all

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

Initialization

Set up `movvarWindow`, `movvarWindow_overlap`, and `movvarExp` objects. `movvarWindow` uses the sliding window method with a window length of 800 samples and a default overlap length of 799 samples, which is 1 sample less than the specified window length. `movvarWindow_overlap` uses a window length of 800 samples and an overlap length of 700 samples. `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); movvarWindow_overlap = dsp.MovingVariance(800,700); movvarExp = dsp.MovingVariance('Method','Exponential weighting',... 'ForgettingFactor',0.999); scope = timescope('SampleRate',[Fs,Fs,Fs/(800-700),Fs],... 'TimeSpanOverrunAction','Scroll',... 'TimeSpanSource','Property',... 'TimeSpan',1000,... 'ShowGrid',true,... 'BufferLength',1e7,... 'YLimits',[0 7e-4]); title = 'Moving Variance'; scope.Title = title; scope.ChannelNames = {'Original Signal',... 'Sliding window of 800 samples with default overlap',... 'Sliding window of 800 samples with an overlap of 700 samples',... 'Exponential weighting with forgetting factor of 0.999'}; ```

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]; 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 = movvarWindow_overlap(x); y3 = movvarExp(x); scope(yexp,y1,y2,y3); end end ```

expand all

## References

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

## Version History

Introduced in R2016b

expand all