Wave Walker DSP

DSP Algorithms for RF Systems

New Posts Wednesday!

Most Popular

Digital Signal Processing through the Lens of the FIR Filter
September 1, 2021

Table of Contents

Introduction

Digital signal processing has two components: signals and filters.

A signal is a time-series which has information (RF vocabulary) and filters are useful in applying a desired affect to a signal. These affects can be:

  • enhancing information elements of a signal,
  • attenuating or minimizing noise,
  • or some other modification.

The following sections will highlight how an FIR filter can be used to minimize noise in a receive signal which enhances the information content. Trade-offs will be discussed between how much noise can be minimized with how much distortion can be applied to the underlying signal.

More posts on FIR filtering:

Time Invariant Filters

The introductory type of filter encountered in the undergraduate education is the time-invariant (TI) filter. A TI filter is one whose impulse-response does not change with time. Applying the filter against the same signal a nanosecond from now or 15 years from now will produce the same response. A signal x[n] is related to the filter output y[n] through discrete-time convolution,

(1)   \begin{equation*}y[n] = x[n] \circledast h[n],\end{equation*}

or equivalently,

(2)   \begin{equation*}y[n] = \sum_{k=-\infty}^{\infty} x[k]h[n-k],\end{equation*}

Delaying a signal x[n] by k samples, x[n-k], and passing it through a time-invariant filter h[n] results in the same delay of the output with no other modifications,

(3)   \begin{equation*}y[n-k] = x[n-k] \circledast h[n].\end{equation*}

Moving Average FIR Filters

There are two types of TI filters; infinite impulse response (IIR) filters which have feedback and finite impulse response (FIR) filters which do not have feedback. A moving average (MA) filter is an example of an FIR filter. Consider a length-3 moving average filter

(4)   \begin{equation*}y[n] = \left(x[n] + x[n-1] + x[n-2])\right /3,\end{equation*}

where x[n] is the input signal and y[n] is the output of the MA filter. Each output is the average of the three last inputs. For example,

(5)   \begin{equation*}y[0] = \left(x[0] + x[-1] + x[-2])\right /3,\end{equation*}

(6)   \begin{equation*}y[1] = \left(x[1] + x[0] + x[-1])\right /3,\end{equation*}

(7)   \begin{equation*}y[2] = \left(x[2] + x[1] + x[0])\right /3.\end{equation*}

Visually the filter can be represented by the blog diagram in Figure 1.

Figure 1: A moving average filter is implemented by delaying the input signal x[n] and then scaling by 1/3 and summing all results.
Figure 1: A moving average filter is implemented by delaying the input signal x[n] and then scaling by 1/3 and summing all results.

Each of the filter weights are 1/3 and the MA filter can be represented by

(8)   \begin{equation*}h[n] = \begin{cases}1, & n = 0, 1, 2 \\0, & \text{otherwise}.\end{cases}\end{equation*}

A moving average filter will reduce noise fluctuations in a receive signal. Figure 2 is an example of a pulse train signal. Noise is added to the pulse train and then the length-3 MA filter is applied to reduce the variations in the signal due to noise.

Figure 2: A pulse train signal without noise.
Figure 3: A pulse train corrupted by noise. A length-3 moving average filter is applied to reduce noise fluctuations.
Figure 3: A pulse train corrupted by noise. A length-3 moving average filter is applied to reduce noise fluctuations.

The impact of the MA filter can be seen in the time domain. How does it work in the frequency domain?

Moving Average Filter in Frequency Domain

The Z-transform Z{} can be used to translate the difference equation h[n] into the frequency domain H(z),

(9)   \begin{equation*}Z\{ y[n] \} = Z\left\{ \left( x[n] + x[n-1] + x[n-2] \right) /3 \},\end{equation*}

(10)   \begin{equation*}Z\{ y[n] \} = Y(z),\end{equation*}

(11)   \begin{equation*}Z\{ x[n-k] \} = X(z) z^{-k}.\end{equation*}

Substituting (10) and (11) into (9),

(12)   \begin{equation*}Y(z) = \frac{1}{3} X(z) + \frac{1}{3} X(z)z^{-1} + \frac{1}{3} X(z)z^{-2}.\end{equation*}

Gathering like terms in X(z)

(13)   \begin{equation*}Y(z) = \frac{1}{3} X(z) \left(1 + z^{-1} + z^{-2}\right)\end{equation*}

allows the transfer function H(z) to be written as

(14)   \begin{equation*}H(z) = \frac{Y(z)}{X(z)} = \frac{1}{3} \left(1 + z^{-1} + z^{-2}\right).\end{equation*}

Substituting

    \[z=e^{j\omega}\]

into (14),

(15)   \begin{equation*}H(e^{j\omega}) = \frac{1}{3} \left(1 + e^{-j\omega} + z^{-2j\omega})\right.\end{equation*}

The magnitude-squared response |H(e^{j\omega})|^2 can by found by

(16)   \begin{equation*}|H(e^{j\omega})|^2 = H(e^{j\omega}) \cdot H(e^{j\omega})^*\end{equation*}

where * is the conjugation operator. Substituting (15) into (16),

(17)   \begin{equation*}\begin{split}|H(e^{j\omega})|^2 & = \left( 1 + e^{-j\omega} + e^{-2j\omega}\right)/3 \cdot \left( 1 + e^{-j\omega} + e^{-2j\omega}\right)^* /3, \\& = \left( 1 + e^{-j\omega} + e^{-2j\omega}\right) \cdot \left( 1 + e^{-j\omega} + e^{-2j\omega}\right)/9, \\& = 1/3 + (2/9)\left(e^{j\omega} + e^{-j\omega}\right) + (1/9)\left(e^{2j\omega} + e^{-2j\omega}\right).\end{split}\end{equation*}

Substituting (reference)

    \[cos(\alpha) = (e^{j\alpha} + e^{-j\alpha})/2\]

into (17),

(18)   \begin{equation*}|H(e^{j\omega})|^2 = 1/3 + (4/9)cos(\omega) + (2/9)cos(2\omega),\end{equation*}

and converting into dB,

(19)   \begin{equation*}10\text{log}_{10}(|H(e^{j\omega})|^2) = 10\text{log}_{10}\left(1/3 + (4/9)cos(\omega) + (2/9)cos(2\omega)\right).\end{equation*}

Figure 4 gives the magnitude-squared response of the filter H(z) in dB

Figure 4: The length-3 moving average filter has a low-pass effect with about 9 dB worth of attenuation at high frequencies.
Figure 4: The length-3 moving average filter has a low-pass effect with about 9 dB worth of attenuation at high frequencies.

The low-pass nature of the MA filter reduces the impact of high frequency noise, which is the affect seen in Figure 3. The following section will analyze how the MA filter effects the signal and noise in the frequency domain.

Analyzing Filter Impact in Frequency Domain

The input signal x[n] contains both signal s[n] and noise w[n],

(20)   \begin{equation*}x[n] = s[n] + w[n].\end{equation*}

The filter h[n] low-pass filters both s[n] and w[n],

(21)   \begin{equation*}\begin{split}y[n] & = (s[n] + w[n]) \circledast h[n] \\& = (s[n] \circledast h[n]) + (w[n] \circledast h[n]),\end{split}\end{equation*}

or equivalently in the frequency domain,

(22)   \begin{equation*}Y(e^{j\omega}) = S(e^{j\omega}) H(e^{j\omega}) + W(e^{j\omega}) H(e^{j\omega}.\end{equation*}

Figure 5 shows how the MA filter reduces the noise at high frequencies in the frequency domain. Similarly Figure 6 shows the frequency response of the pulse train signal is much less effected by the MA filter.

Figure 5: The noise has a large amount of high frequency content and therefore is substantially effected by the MA filter.
Figure 6: The energy of the pulse train signal is mostly concentrated at low frequencies and is therefore only marginally effected by the MA filter.
Figure 6: The energy of the pulse train signal is mostly concentrated at low frequencies and is therefore only marginally effected by the MA filter.

Increasing Filter Length

The previous section showed that a length-3 MA filter reduces the impact of noise by filtering out the high frequency content with little impact to the pulse train signal. If 3 filter weights are good, more are better … right? What will happen if we increase to length 63? Will there be any unintended consequences? (Yes.)

Figure 7 gives the output of a length-63 MA filter in the time domain with the same input pulse train signal.

Figure 7: A length length-63 MA filter further reduces the noise fluctuations at the cost of distorting the underlying pulse train signal.
Figure 7: A length length-63 MA filter further reduces the noise fluctuations at the cost of distorting the underlying pulse train signal.

Increasing the filter length from 3 to 63 has created noticeable distortion of the underlying pulse train signal. A period of ramp up and ramp down between pulses can now be seen in the filtered signal as well as a time-shift. Where did this come from? Let’s look to the time domain first.

Analyzing Moving Average in Time Domain

An input signal x[n] is defined to have a single cycle of a pulse,

(23)   \begin{equation*}x[n] =\begin{cases}1 & 1 \le n \le 7 \\0 & \text{otherwise}. \\\end{cases}\end{equation*}

Figure 8 demonstrates the starting values for all elements in the block diagram.

Figure 8: The starting state of the MA filter when x[n] = 0 for n

The first 1 is passed into the filter for x[1] = 1 and Figure 9 shows the state of the filter. Figures 10 and 11 also show the response for x[2] = 1 and x[3] = 1.

Figure 9: The state of the filter at n=1 when x[1] = 1.
Figure 9: The state of the filter at n=1 when x[1] = 1.
Figure 10: The state of the filter at n=2 when x[2] = 1.
Figure 10: The state of the filter at n=2 when x[2] = 1.
Figure 10: The state of the filter at n=1 when x[1] = 1.
Figure 11: The state of the filter at n=3 when x[3] = 1.

Figure 12 gives the output y[n] for all x[n].

Figure 12: Filtering a pulse with an MA creates transition periods.
Figure 12: Filtering a pulse with an MA creates transition periods.

Correcting for Filter Delay

The input signal x[n] is 6 samples of 1’s. Figure 12 shows y[n] has has 4 samples of 1’s and multiple transition samples. The four 1 values obviously belong to the pulse train, as well as the two adjacent 2/3 samples at n=1 and n=6. The delay due to the filter can be corrected for by removing the first (3-1)/2 = 1 samples from y[n], shown in Figure 13.

Figure 13: The filter output y[n] has been realigned with the input x[n] by removing 1 sample of delay.
Figure 13: The filter output y[n] has been realigned with the input x[n] by removing 1 sample of delay.

Similarly, the delay of the length-63 filter can be corrected by removing the first (63-1)/2 samples from the time-series as shown in Figure 14.

Figure 14: The length-63 MA filter output has been realigned with the pulse train input by removing the filter delay.
Figure 14: The length-63 MA filter output has been realigned with the pulse train input by removing the filter delay.

Frequency Domain Analysis of Longer MA Filter

The distortion of the underlying pulse train is also due to the much narrower bandwidth of the MA filter. Figure 15 shows the length-63 MA filter has a much narrower bandwidth than the length-3 MA which results in more attenuation of the high frequency components of the pulse train signal. The noise at the output of the MA filter is also significantly reduced, shown in Figure 16. Also note the length-63 MA filter applies about 38 dB worth of attenuation at high frequencies as compared to 9 dB for the length-3 filter.

Figure 15: The pulse train is distorted by the MA filter due to the attenuation of high frequency components.
Figure 15: The pulse train is distorted by the MA filter due to the attenuation of high frequency components.
Figure 16: The noise is significantly attenuated due to the MA filter.
Figure 16: The noise is significantly attenuated due to the MA filter.

Takeaway

The analysis of the FIR filter was used to highlight major concepts within DSP:

  • Noise negatively impacts signals.
  • Filtering can be used to minimize noise in a receive signal to enhance the signal.
  • Trade-offs must be made to balance noise minimization and signal distortion when applying a filter.
  • Longer filters provide tend to provide more attenuation than shorter filters.
  • Time domain effects can also be viewed through the frequency domain.

More posts on FIR filtering:

Leave a Reply