Previous SPTK Post: Ideal Filters Next SPTK Post: The Complex Envelope

We continue our basic signal-processing posts with one on the moving-average, or smoothing, filter. The moving-average filter is a linear time-invariant operation that is widely used to mitigate the effects of additive noise and other random disturbances from a presumably well-behaved signal. For example, a physical phenomenon may be producing a signal that increases monotonically over time, but our measurement of that signal is corrupted by noise, interference, or flaws in the measurement process. The moving-average filter can reveal the sought-after trend by suppressing the effects of the unwanted disturbances.

[Jump straight to ‘Significance of the Moving-Average Filter in CSP’ below.]

In this post we will use discrete time exclusively. So this post serves two purposes: continuing on with simple idealized filtering concepts and solidifying the discrete-time signal-processing notation and analysis.

The moving average filter is a procedure that involves a long time series and a short averaging window. The window is slid along the data (it ‘moves’ along the data, as all convolutions do), and we take an average of whichever elements of the time series are currently within the window. It is also called the running averaging, rolling average, moving mean, and rolling mean. Wikipedia says, “A moving average is commonly used with time series data to smooth out short-term fluctuations and highlight longer-term trends.” In this post I describe how that works in terms of our linear time-invariant signal processing machinery: impulse responses and frequency responses (transfer functions).

### The Discrete-Time Moving-Average Filter

Suppose we have some collected sampled data . The graph of versus reveals an erratic function that is difficult to interpret visually, as in Figure 1.

Intuitively, we would like to average out, somehow, the random fluctuations and leave only the true trends produced by the physical process that gave rise to the collected data: When is the data truly increasing? Decreasing? What is the rate of increase or decrease? When is it constant or zero?

To find answers to these questions, we can conceive of applying an averaging operation, knowing that if the additive noise at each sample is independent of the additive noise at the others, and the additive noise has a mean of zero, then such averaging will tend to suppress the effects of the noise while maintaining the presence of the non-noise component of the signal. If the signal component of the data is itself not independent sample-to-sample, then it will not be averaged away by the averaging process. The output of such an averaging operation is . We’ll define the value of to be the arithmetic average of the preceding points of and itself:

This is illustrated in Figure 2.

This averaging operation moves along with time, and so it is understandably called a moving average, as we mentioned at the top of the post.

Is this moving average operation a linear time-invariant system? First, let’s check for linearity. Let and . Then what is the output for ? If the system is linear, it must be . We have the output

So that the defined **moving-average operation is linear**.

Next we test for time-invariance (here, in discrete time, this is often called *shift invariance*). If the system is time invariant, then the output for a shifted version of an input is just the shifted output for the original unshifted input. Let . Then look at the output for input . If this is equal to , then the moving-average system is time-invariant. Let’s take a look.

Is ? Let’s perform a substitution for to find the answer. Let . Then if , . Similarly, if , then . Our output signal becomes

.

But the right side of (7) is, by definition, . So we have

and therefore the defined **moving-average operation is time-invariant**. Since the moving-average operation is equivalent to a linear time-invariant system, it can be represented by an impulse-response function or a frequency-response function (transfer function). Let’s find expressions for each of these key system input-output functions.

### Impulse Response Function

To find the impulse-response function, we simply apply an input that is equal to the discrete-time impulse , which is shown in Figure 3, and determine the value of for each possible . In this situation, we rename as , the conventional symbol used for impulse-response functions in both continuous and discrete time.

implies that the impulse response is given by

Since is zero except at , where it is equal to 1, will be zero whenever the summation interval does not contain . Thus, for all , we have the interval which is entirely to the left of zero, provided that (which we assume is true). Therefore, the impulse response is zero for all negative values of .

When , the summation interval is , which does contain zero at the right edge, and so we have

For , we have

which is equal to provided that , as already assumed. This pattern continues, with the value of being until . For , the summation interval is , which no longer contains zero, and so . For , the interval continues to slide to the right of zero, and will never again contain zero, so that . In summary, we have the impulse-response function

The impulse-response function for the moving-average filter with length is simply a rectangle with width and height . The impulse response is graphed in Figure 4. This is consistent with the intended operation of the filter: sum the previous signal values and the current signal value, and divide by the number of values you summed, which is .

### Frequency Response

The frequency-response function is defined as the response of the system to a sine-wave input, and can be computed, as we’ve shown in a previous post, using the Fourier transform applied to the impulse response.

This version of uses a continuous frequency variable . It is periodic with period equal to one. Let’s evaluate the transform in (14), then think about discretizing frequency in anticipation of using a computer to analyze the situation in both discrete time and discrete frequency.

where . This last summation is an example of the general geometric series

So the frequency response for the moving-average filter is given by

### Notes on the Frequency Response

We make the following observations about the frequency response.

- The derived frequency-response function is similar to the Fourier transform of a continuous-time rectangle function, which is a sinc function, but it is not identical to a sinc. In particular, the denominator contains the function instead of being proportional to .
- The derived frequency response is periodic with period . This periodicity follows from the periodicity of the discrete-time Fourier transform.
- For small values of , , and so . Therefore, the bulk of the energy in is concentrated near . The moving-average filter passes lower frequencies and attenuates or rejects higher frequencies.
- since .
- for . For example, , which implies that the moving-average filter output is zero for an input sine wave with frequency . (Can you see this from the time-domain operation of the filter?)

### Sampled Frequency Response and Zero-Padding

The frequency response we’ve derived is valid for any , but it is also periodic with period 1. So the important values of reside in a single period, say . We can look at samples of the frequency response by simply substituting into our general formula. Say we want to look at the frequency values

where . Then we have the sampled frequency-response function

for . How can we compute this set of values using a transform? We have

To use the power and efficiency of the FFT, we can extend the sum from to , and simply define the missing values of to be zero. That is, pad with zeros and compute

This is called *zero-padding*, and it allows us to flesh out the details of the shape of the frequency-response function. When we use, say, , we pad with zeros, and the effect (not proven here) is that the original values of are preserved, but a new value is inserted between each pair of them. Later in the post we will provide a plot of that uses and .

### Step Response

Let’s switch gears and go back to the time domain to look at the response of the moving-average filter to a unit-step input. Recall that the discrete-time unit-step function is denoted by , and is equal to one for and zero otherwise. Let’s evaluate the convolution sum to determine the step response.

For , has no non-zero samples for . That is, and have no overlap where is nonzero. Therefore, the step-response for negative values of .

For and , the overlap between and is partial. We obtain

Finally, when , the overlap is complete, and we have

The step response function is shown in Figure 5.

### Interconnection of Multiple MA Filters

Here we look at connecting multiple moving-average filters in series, which means that the equivalent linear time-invariant system has a frequency-response function that is the multiplication of the individual moving-average frequency responses. Assume that we connect identical moving-average filters, each having parameter and frequency-response function . Then the frequency response for the equivalent system is ,

On the other hand, the impulse response for the equivalent system is the convolution of the individual impulse-response functions,

What do the impulse responses and frequency responses look like as a function of ? We’ve already encountered the idea of convolving a rectangle with itself multiple times, so we know, for example, that for , the function will be a triangle. More importantly, the frequency response as a function of becomes more and more selective. That is, the attenuation of input frequency components far away from gets very large as grows. The impulse and frequency-response functions for various are shown in Figure 6. In this figure, the frequency responses were calculated by Fourier transforming a zero-padded version of the corresponding impulse responses. In terms of the variables defined above, we have and . This permits a relatively fine sampling of the frequency-response functions.

### A Look at the Residual of the MA Filter

The moving-average filter output reveals the trends, if any, exhibited by the underlying noise-free data, and so is useful as a way to “de-noise” arbitrary datasets. But it may also be of interest to determine the properties of the noise that is rejected by the filter. In this case we want to find the trends with the moving-average filter, then remove them from the input, leaving only the high-frequency fluctuations and no trending signals to contaminate them.

Mathematically, the signal we desire is the input minus the moving-average output,

This can be expressed as the following function of time

which isn’t particularly revealing. Instead, we can attempt to use previous results and approaches to simplify the analysis. The signal can be obtained by convolving itself with an impulse, and is obtained by convolving with as in Figure 7.

Since we know is a rectangle with height and width , we easily obtain as in Figure 8.

The frequency response is

The impulse response and corresponding frequency response are plotted in Figure 9. It is clear that this filter passes only relatively high frequencies, providing the desired inverse operation relative to a moving average.

### Significance of Moving-Average Filters in CSP

The main use I have for a moving-average filter is as a smoothing filter in the frequency-smoothing method (FSM) of spectral correlation function estimation. Certain kinds of specialized signal-to-noise ratio calculations can also benefit from the use of a fast smoothing operation, and the computational cost of a moving-average filtering operation is quite low because of the unique shape of the impulse response–a rectangle. This enables the use of a head-tail running sum to implement the convolution, avoiding having to do multiplications for each output point of the filter.

Previous SPTK Post: Ideal Filters Next SPTK Post: The Complex Envelope

Great explanation of a MA filter. Does a MA filter incorporate amplitude modulation automatically or is there an additional parameter, such as a constant, that can be used in your filter design?

Welcome to the CSP Blog Curt! Thanks for the comment.

The moving-average filter I examine in the post, with impulse-response function shown in Figure 4, is a true averager in that it preserves amplitude. Because the sum of the elements of the impulse response is one, if you apply the filter to a constant signal, the output is identical to the input. So a constant signal having value of 10 produces a constant signal with a value of 10 at the output. If you want to scale the signal as well as filter away the relatively high-frequency noise, you can definitely scale the impulse response function. But you could also just multiply the output of the filter by the desired constant.

A drawback of scaling the impulse-response function is that the ‘head-tail’ summation trick, mentioned in the final ‘Significance’ section of the post, is not straightforward. In fact, the way I described it is a bit unclear. To use the computationally low-cost ‘head-tail’ summation trick with the moving-average filter, you need to scale the impulse response in Figure 4 so that each non-zero element is equal to one. Then apply the filter, using ‘head-tail’ summation, and finally at the end multiply by 1/N.

Does my response address what you meant by ‘amplitude modulation?’

Yes it does Chad. It was very clear. Thanks!