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:
and set the properties of the object.
step to compute the moving variance.
Alternatively, instead of using the
to perform the operation defined by the System
object, you can
call the object with arguments, as if it were a function. For example,
= step(obj,x) and
y = obj(x) perform
MovVar = dsp.MovingVariance returns a moving
MovVar, using the default properties.
MovVar = dsp.MovingVariance(Len) sets the
MovVar = dsp.MovingVariance(Name,Value) specifies
additional properties using
Name,Value pairs. Unspecified
properties have default values.
MovVar = dsp.MovingVariance('Method','Exponential weighting','ForgettingFactor',0.9);
Method— Method to compute the variance
'Sliding window'(default) |
'Sliding window' — A window
of length specified by
moved over the input data along each channel. For every sample the
window moves by, the object computes the variance over the data in
'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.
SpecifyWindowLength— Specify window length
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
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
WindowLength— Length of the sliding window
Length of the sliding window, specified as a positive scalar
integer. This property applies when you set
ForgettingFactor— Exponential weighting factor
Exponential weighting factor, specified as a positive real scalar
in the range (0,1]. This property applies when you set
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.
|reset||Reset internal states of System object|
|step||Moving Variance of input signal|
Compute the moving variance of a noisy square wave signal with varying amplitude using the
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
In the sliding window method, the output at the current sample is the variance of the current sample with respect to the data in the window. To compute the first Len - 1 outputs, when the window does not have enough data yet, the algorithm fills the window with zeros. As an example, to compute the variance when the second input sample comes in, the algorithm fills the window with Len - 2 zeros. Len is the length of the window. The data vector, x, is then the two data samples followed by Len - 2 zeros.
When you do not specify the window length, the algorithm chooses an infinite window length. In this mode, the output is the moving variance of the current sample with respect to all previous samples in the channel.
Consider an example of computing the moving variance of a streaming input data using the sliding window method. The algorithm uses a window length of 4. With each input sample that comes in, the window of length 4 moves along the data.
In the exponential weighting method, the moving variance is computed recursively using these formulas:
— Moving variance of the current data sample with respect to the rest of the data in the channel.
average at the current sample. For details on computing the moving
— Difference between each data sample and the average of the data, squared.
— Difference between each data sample and the average of the data, squared and multiplied with the forgetting factor. All the squared terms are added.
— Weighting factor applied to the sum.
λ — Forgetting factor you can specify
As the age of the data increases, the magnitude of the weighting factor decreases exponentially, and never reaches zero. In other words, the recent data has more influence on the current variance, than the older data.
The value of the forgetting factor determines the rate of change of the weighting factors. 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.
Consider an example of computing the moving variance using the exponential weighting method. The forgetting factor is 0.9.
 Bodenham, Dean. “Adaptive Filtering and Change Detection for Streaming Data.” PH.D. Thesis. Imperial College, London, 2012.
Usage notes and limitations:
See System Objects in MATLAB Code Generation (MATLAB Coder).