Skip to main content
Engineering LibreTexts

6.4: Moving Averages

  • Page ID
    9985
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Moving averages are generalizations of weighted averages. They are designed to “run along an input sequence, computing weighted averages as they go.” A typical moving average over \(N\) inputs takes the form

    \[\begin{align}
    x_{n} &=\qquad \qquad \qquad \sum_{k=0}^{N-1} w_{k} u_{n-k} \nonumber\\
    &=w_{0} u_{n}+w_{1} u_{n-1}+\cdots+w_{N-1} u_{n-(N-1)}
    \end{align} \nonumber \]

    The most current input, \(u_n\), is weighted by \(w_0\); the next most current input, \(u_{n-1}\), is weighted by \(w_1\) ; and so on. This weighting is illustrated in Figure 1. The sequence of weights, \(w_0\) through \(w_{N-1}\), is called a “window,” a “weighting sequence,” or a “filter.” In the example illustrated in Figure 6.8, the current value \(u_n\) is weighted more heavily than the least current value. This is typical (but not essential) because we usually want \(x_n\) to reflect more of the recent past than the distant past.

    Screen Shot 2021-08-24 at 11.20.46 PM.png
    Figure \(\PageIndex{1}\): Moving Average

    Example \(\PageIndex{1}\)

    When the weights \(w_{0}, w_{1}, \ldots, w_{N-1}\) are all equal to \(\frac{1}{N}\), then the moving average \(x_n\) is a “simple moving average”:

    \[x_{n}=\frac{1}{N}\left[u_{n}+u_{n-1}+\cdots+u_{N-1}\right] . \nonumber \]

    This is the same as the simple average, but now the simple average moves along the sequence of inputs, averaging the \(N\) most current values.

    Exercise \(\PageIndex{1}\)

    Evaluate the moving average \(x_{n}=\sum_{k=0}^{N-1} \frac{1}{N} u_{n-k}\) for the inputs

    1. \(u_{n}= \begin{cases}0, & n<0 \\ u, & n \geq 0\end{cases}\)
    2. \(u_{n}= \begin{cases}0, & n \leq 0 \\ n, & n>0\end{cases}\)

    Interpret your findings.

    Exercise \(\PageIndex{2}\)

    Evaluate the simple moving average \(x_{n}=\sum_{k=0}^{N-1} \frac{1}{N} u_{n-k}\) when \(u_n\) is the sequence

    \(u_{n}= \begin{cases}0, & n<0 \\ a^{n}, & n \geq 0\end{cases}\)

    Interpret your result.

    Example \(\PageIndex{2}\)

    When the weights \(w_n\) equal \(w_0a^n\) for \(n=0,1,...,N−1\), then the moving average \(x_n\) takes the form

    \[x_{n}=w_{0} \sum_{k=0}^{N-1} a^{k} u_{n-k} . \nonumber \]

    When \(a < 1\), then \(u_n\) is weighted more heavily than \(u_{n−(N−1)}\); when \(a>1\), \(u_{n−(N−1)}\) is weighted more heavily than \(u_n\); when \(a=1\), \(u_n\) is weighted the same as \(u_{n−(N−1)}\).

    Exercise \(\PageIndex{3}\)

    Evaluate \(w_0\) so that the exponential weighting sequence \(w_{n}=w_{0} a^{n}(n=0,1, \ldots, N-1)\) is a valid window (i.e., \(\sum_{n=0}^{N-1} w_{n}=1\)).

    Exercise \(\PageIndex{4}\)

    Compute the moving average \(x_{n}=\sum_{k=0}^{N-1} w_{0} a^{k} u_{n-k}\) when the input sequence \(u_n\) is

    \(u_{n}= \begin{cases}b^{n}, & n \geq 0 \\ 0, & n<0\end{cases}\)

    What happens when \(b=a?\) Can you explain this?


    This page titled 6.4: Moving Averages is shared under a CC BY 3.0 license and was authored, remixed, and/or curated by Louis Scharf (OpenStax CNX) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.