Given I have coefficients a0, a1, a2, b1, and b2, defining the difference equation for a digital filter as:

y[n] = a0 * x[n] + a1 * x[n - 1] + a2 * x[n - 2] - b1 * y[n - 1] - b2 * y[n - 2]

Which defines a low-pass filter with particular cutoff frequency, how can I obtain the coefficients A0, A1, A2, B1, B2, which similarly define a high-pass filter with the same cutoff frequency? I'm aware there are so-called "bandform transformations" for converting a prototype low-pass into a high-pass, but to my knowledge, these are not directly applicable to discrete-time/digital filters, so I am unaware of any way to apply them to this problem.

If these coefficients are derived from a complex-conjugate pair of zeros and/or of poles given the discrete transfer function for the low-pass filter would be:

H(z) = (z - Zero[0]) * (Z - Zero[1])/[(Z - Pole[0]) * (Z - Pole[1])]

Is there then a way to transform this function to the corresponding high-pass filter I'm looking for to get the poles and zeros from the new transfer function?


You can apply a so-called all-pass transformation to a discrete-time low-pass prototype filter in order to convert it to other standard filters (such as high-pass, band-pass, and band-stop). This is accomplished by transforming the complex variable $z$ in the transfer function of the prototype filter by a function $G(z)$ which satisfies $|G(e^{j\omega})|=1$, i.e., $G(z)$ is an all-pass function. This makes sure that the transformation maps the unit circle onto itself, i.e., the frequency response of the new filter is just a shifted and/or warped version of the prototype frequency response.

The most straightforward way to transform a discrete-time low-pass filter to a high-pass filter is to use the trivial transform $G(z)=-z$, i.e.,


If $H_{LP}(z)$ is given by

$$H_{LP}(z)=\frac{\displaystyle\sum_{k=0}^Nb[k]z^{-k}}{\displaystyle 1+\sum_{k=1}^{N}a[k]z^{-k}}\tag{2}$$

then $H_{HP}(z)$ becomes

$$H_{HP}(z)=\frac{\displaystyle\sum_{k=0}^N(-1)^kb[k]z^{-k}}{\displaystyle 1+\sum_{k=1}^{N}(-1)^ka[k]z^{-k}}\tag{3}$$

This transformation shifts the low-pass frequency response by $\pi$ (i.e., by half the sampling frequency). Consequently, if $\omega_c$ is the cut-off frequency of the low-pass prototype filter, the cut-off frequency of the resulting high-pass filter is given by $\omega'_c=\pi-\omega_c$.

Other cut-off frequencies can be obtained by applying the more general lowpass-to-highpass transformation

$$G(z)=-\frac{z+\alpha}{1+\alpha z},\qquad |\alpha|<1\tag{4}$$

The simple transformation shown above is obtained from $(4)$ by the choice $\alpha=0$.

This and other frequency transformations applicable to discrete-time filters are treated in some detail in Chapter $7.4$ of the third edition of Oppenheim and Schafer's Discrete-Time Signal Processing.

Also take a look at these related questions and their answers: Q1, Q2.

  • $\begingroup$ +1 FYI, your filter explanations are exceedingly helpful to me as I delve into this area of DSP. Thanks. $\endgroup$ – Cedron Dawg Jul 29 '20 at 18:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.