# Design of Butterworth high-pass filter

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:

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');
opts.FreqUnits='Hz';
G = tf(num, den)
bode(G,opts), grid;


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!

• you meant low pass filter and how is GDC=1 Oct 1 '17 at 21:51
• 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? Oct 1 '17 at 21:58
• true but you show the response of a LPF Oct 1 '17 at 22:00
• I'm sure others can help with your academic exercise, but for practical solutions there are better ways. Oct 1 '17 at 22:02
• h = tf([1 0 0 0],[1 2 2 1]); Oct 1 '17 at 22:20

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.