I am trying to design, and later implement, a Butterworth high-pass filter with a cut-off frequency of 8kHz and a decay rate of 60dB/decade.

For this filter \$ \omega_c = 50265.4824 rad/s\$ (converting from Hz)

So far i have determined the order of the required filter as:

$$order = \frac{\text{desired roll off}}{20dB/decade}$$ $$=\frac{60dB/decade}{20dB/decade} = 3_{rd} \text{ order filter}$$

I will be using this equation for a normalised low pass third order filter:

$$H_{LN}(sL_n)=\frac{a_0}{b_0 +b1SL_n +b_2SL_n^2 +SL_n^3}$$

and i have obtained \$b_n\$ terms from the following table which comes from G.E Carlson signals and linear system analysis:

Filter Coefficients

so we have \$b_0 = 1, b_1 = 2,b_2 = 2\$

Next i want to frequency transform this transfer function to that of a high pass filter so i will replace $$SL_n$$ by $$\frac{\omega _c}{S}$$

with \$ a_0 = b_0 \times G_{DC} = 1 \times 1 = 1\$

resulting in $$HL_n(\frac{\omega_c}{S}) = \frac{1}{1 + \frac{2\omega_c}{S} + \frac{2{\omega_c}^2}{S^2} +\frac{\omega_c^3}{S^3}} $$

I'm a little lost here as we now have \$S^n\$ terms as 1 over in the denominator. To get the form of the transfer function back to normal i got the lowest common denominator which then gives:

$$HL_n(\frac{\omega_c}{S}) = \frac{S^3}{S^3 +2\omega_c S^2 + 2\omega_c ^2 S + \omega_c ^3}$$

Using the Bode plot function in Matlab:

wc = 50265.4824;
num = [1]
den = [1 2*wc 2*wc^2 wc^3]
opts = bodeoptions('cstprefs');
G = tf(num, den)
bode(G,opts), grid;

Bode plot of transfer function

This is clearly not correct as what is displayed in the magnitude plot is that of a low pass and not of a high pass so i have gone wrong somewhere. Any help would be greatly appreciated!

  • \$\begingroup\$ you meant low pass filter and how is GDC=1 \$\endgroup\$ Oct 1, 2017 at 21:51
  • \$\begingroup\$ I am clearly very confused. GDC is the gain at \$\omega = 0\$? So for a high pass filter we don't want any gain at 0? \$\endgroup\$
    – Blargian
    Oct 1, 2017 at 21:58
  • \$\begingroup\$ true but you show the response of a LPF \$\endgroup\$ Oct 1, 2017 at 22:00
  • \$\begingroup\$ I'm sure others can help with your academic exercise, but for practical solutions there are better ways. \$\endgroup\$ Oct 1, 2017 at 22:02
  • \$\begingroup\$ h = tf([1 0 0 0],[1 2 2 1]); \$\endgroup\$ Oct 1, 2017 at 22:20

2 Answers 2


Worth consulting the MATLAB reference for transfer functions.

If you wish to have s^3 in the numerator you must set

num = [ 1 0 0 0 ];

That will give you 3 zeros at the origin.


h = tf([1 0 0 0],[1 2 2 1]); (MATLAB)

A better way is to use TI's FilterPRO tool (free) and consider Bessel 8th order with a Quad Op Amp. Choose Component tolerances.

For single supply change gnd to Vcc/2.

Choose Rail to Rail input and output OA's, scale the values to 100K range and balance input R for offset currents if any.

enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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