Professional Documents
Culture Documents
Exponential Moving Average
Exponential Moving Average
Exponential Moving Average
Difference equation
In this equation, y[n] is the current output, y[n − 1] is the previous output, and x[n] is the current input; α is a number between 0 and 1. If
α = 1 , the output is just equal to the input, and no ltering takes place
The lter is called 'exponential', because the weighting factor of previous inputs decreases exponentially. This can be easily demonstrated
by substituting the previous outputs:
n
k
= α ∑ (1 − α) x[n − k]
k=0
From the previous equation, we can now easily calculate the impulse and step response.
The impulse response is the output of the lter when a Kronecker delta function is applied to the input.
1 n = 0
δ[n] = {
0 n ≠ 0
n
k n
y impu lse [n] = h[n] = α ∑ (1 − α) δ[n − k] = α(1 − α)
k=0
The step response is the output of the lter when a Heaviside step function is applied to the input.
0 n < 0
H[n] = {
1 n ≥ 0
http://127.0.0.1:4654/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/Expo… 1/7
1/29/2019 Exponential Moving Average
n n
k k
y step [n] = α ∑ (1 − α) H[n − k] = α ∑ (1 − α)
k=0 k=0
Transfer function
You can express the output of discrete-time linear time-invariant systems, of which the EMA is an example, as the convolution of the input
with the impulse response.
+∞
x[k] = ∑ x[n]δ[k − n]
n=0
You can easily see that all terms where n ≠ k are zero, because the Kronecker delta is zero in that case. Only the term for n = k is non-
zero, in which case the Kronecker delta is one, so the result is just x[k].
If T is the transformation performed by the DTLTI system, and by using the fact that T is a linear transformation and that it is time-
invariant:
y[n] = T (x[n])
= T (∑ x[k]δ[k − n])
k=0
= ∑ T (x[k]δ[k − n])
k=0
k=0
= ∑ x[k]h[k − n]
k=0
= x[n] ∗ h[n]
Analysis of such systems is usually easier in the Z-domain, in which the convolution is reduced to a simple product.
The (unilateral) Z-transform is de ned as:
∞
−n
Z{x[n]} = ∑ x[n]z
n=0
If X(z) = Z{x[n]} , Y (z) = Z{y[n]} and H(z) = Z{h[n]} are the Z-transforms of the input, output and impulse response respectively, then:
http://127.0.0.1:4654/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/Expo… 2/7
1/29/2019 Exponential Moving Average
−n
Y (z) = ∑ x[n] ∗ h[n]z
n=0
∞ ∞
−n
Y (z) = ∑ ∑ x[i]h[n − i]z
n=0 i=0
∞ ∞
−n+i−i
Y (z) = ∑ ∑ x[i]h[n − i]z
i=0 n=0
∞ ∞
−i −(n−i)
Y (z) = ∑ x[i]z ∑ h[n − i]z
i=0 n=0
Y (z) = X(z)H(z)
Y (z)
H(z) =
X(z)
All you have to do is apply the time shifting property of the Z transform:
−n 0
Z{y[n − n 0 ]} = z Z{y[n]}
−1
= αZ{x[n]} + (1 − α)z Z{y[n]}
−1
Y (z) = αX(z) + (1 − α)z Y (z)
−1
Y (z) − (1 − α)z Y (z) = αX(z)
Y (z)
α
=
−1
X(z) 1 − (1 − α)z
α
H(z) =
−1
1 − (1 − α)z
H(z) = Z{h[n]}
∞
−n
= ∑ h[n]z
n=0
n −n
= α ∑(1 − α) z
n=0
∞ n
1 − α
= α∑( )
z
n=0
α
=
1−α
1 −
z
1−α
The last step is only valid if the sum converges, this is the case for | z
| < 1 . (See In nite Geometric Series)
αz
=
z − (1 − α)
By rewriting the transfer function, we can easily see that z = 0 is a zero, and z = 1 − α is a pole.
The poles and zeros determine the overall effect of the transfer function, so pole-zero plots are a very useful tool when describing lters.
This is the pole-zero plot of the same example EMA as before, with α = 0.25 .
http://127.0.0.1:4654/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/Expo… 3/7
1/29/2019 Exponential Moving Average
Frequency response
An important property of discrete-time linear time-invariant systems is that it preserves the pulsatance (frequency) of sinusoidal signals,
only the phase shift and the amplitude are altered.
This makes it relatively easy to express the frequency response (sometimes called magnitude response) of a lter.
We're interested in the spectrum of frequencies that a signal contains, so it makes sense to decompose it as a sum of sines and cosines.
That's exactly what the discrete-time Fourier transform does:
∞
−iωn
X2π (ω) = ∑ x[n]e
n=−∞
The frequency response of the lter describes how the spectrum of a signal is altered when it passes through the lter. It relates the
spectrum of the output signal Y (ω) to the spectrum of the input signal X(ω). We already had an expression for the spectrum of the
output divided by the spectrum of the input, we called it the transfer function H(z) = Y (z)/X(z). To get the frequency response of the
lter, we can just evaluate the transfer function for z = e . Also note that this is the DTFT of the impulse response h[k].
iω
−iωn
FDT F T {h[k]} = ∑ h[n]e
n=−∞
iω
= H(e )
α
=
−iω
1 − (1 − α)e
We can now calculate the amplitude of each frequency component in the output by taking the modulus of H(e ). For reasons that will iω
become apparent in a minute, we'll calculate the modulus squared. We use Euler's formula for writing the exponential as a sines and
cosines.
2
α
iω 2
|H(e )| =
−iω 2
|1 − (1 − α)e |
2
α
=
2
|1 − (1 − α) (cos(−ω) + i sin(−ω))|
2
α
=
2 2
(1 − (1 − α) cos(ω)) − ((1 − α) sin(ω))
2
α
=
2 2 2 2
1 − 2(1 − α) cos(ω) + (1 − α) cos (ω) + (1 − α) sin (ω)
2
α
=
2
1 − 2(1 − α) cos(ω) + (1 − α)
http://127.0.0.1:4654/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/Expo… 4/7
1/29/2019 Exponential Moving Average
2π f
ω is the normalized pulsatance in radians per sample. You can substitute it with ω = fs
where f is the frequency in Hertz, and f is the
s
We can now plot the lter's gain in function of the pulsatance. These plots often use a logarithmic scale, to show the gain in decibels. In
order to calculate the power gain, the amplitude is squared.
iω 2
A dB (ω) = 10 log |H (e )|
10
Note that when a frequency is not present in the output signal, the gain will be −∞ dB . If a frequency has an amplitude of one in the
output signal, the gain will be 0 dB .
You can clearly see the low-pass behavior of the EMA: low frequencies have a near-unit gain, and high frequencies are attenuated.
To get a better understanding of where this curve comes from, we can plot the entire |H(z)| surface in the Z-domain. As mentioned above,
the DTFT is just a special case of the Z-transform, where z = e , i.e. the unit circle in the complex plane. Remember that the point z = e
iω iω
is a point with a distance of 1 to the origin, and with an angle of ω rad between its position vector and the positive x axis.
http://127.0.0.1:4654/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/Expo… 5/7
1/29/2019 Exponential Moving Average
The image of the unit circle is shown in blue. Notice that this is the same curve as the blue curve in the magnitude response graph above:
close to 0 when ω → 0 (the right half of the circle) and negative when ω → π (the left half of the circle).
You can clearly see the effect of the pole at 0.75 + 0i. The zero in the origin has no effect on the frequency response, because it doesn't
alter the image of the unit circle, since |e | = 1 or log(|e |) = 0 .
iω iω
Cutoff frequency
The cutoff frequency is de ned as the frequency of the half-power point, where the power gain is a half. It's often called the −3 dB -point,
because 10 log .
1
( ) ≈ −3.01 dB
10 2
2
α 1
=
2 2
1 − 2(1 − α) cos(ωc) + (1 − α)
2
α + 2α − 2
ωc = arccos( )
2α − 2
fs
To convert it to a frequency in Hertz, you can multiply ω by 2π
, with f the sample frequency.
s
samples 23 fs
For example, if the sample frequency is f s = 1000
s
, then f = arccos(
24
)
2π
.
≈ 46.12 Hz
We can use the SciPy and Matplotlib modules to plot the frequency response in Python.
alpha = 0.25
http://127.0.0.1:4654/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/Expo… 6/7
1/29/2019 Exponential Moving Average
b = np.array(alpha)
a = np.array((1, alpha - 1))
http://127.0.0.1:4654/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/Expo… 7/7