Intel® Integrated Performance Primitives (Intel® IPP) Developer Guide and Reference

ID 790148
Date 3/22/2024
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

IIRIIR Filter Functions

The functions described in this section initialize an infinite impulse response (IIR) filter and perform a zero-phase digital filtering of input data in both forward and backward directions. The formulas below explain why the filtered signal has zero-phase distortion. Consider the following case in the frequency domain: if x(n) is the input sequence and h(n) is the IIR filter's impulse response, then the result of the forward filter pass is:



where

  • X(e) is the Fourier transform of x(n)
  • H(e) is the Fourier transform of h(n)
  • Y1(e) is the Fourier transform of the forward filter pass

Backward filtering corresponds to filtering of time-reversed signal. Time reversal corresponds to replacing φ with -φ in the frequency domain, so the result of time reversal is:



When the filter is applied for the second time, the above formula is multiplied by the Fourier transform of the filter's impulse response function H(e):



The final time reversal in the frequency domain results in:



You can see from the resulting equation that:

  • The filtered signal has zero-phase distortion (as the filtering was done with |H(e)|2, which is purely real-valued)
  • The filter transfer function has the squared magnitude of the original filter transfer function
  • The filter order is double the order of the initialized IIR filter

To initialize and use an IIRIIR filter, follow this general scheme:

  1. Call ippsIIRIIRInit to initialize the IIRIIR filter in the external buffer. To compute the size of the buffer, use the ippsIIRIIRGetStateSize function.
  2. Call ippsIIRIIR to filter a vector.
  3. Call ippsIIRIIRGetDlyLine and ippsIIRIIRSetDlyLine to get and set the delay line values in the IIRIIR state structure.