This is a detailed review of low pass Butterworth analog filter design. The goal is to generate Butterworth transfer function \(H(s)\) from frequency specifications. The following are the four specifications of the design
\(f_{p}\) | The passband corner frequency in Hz |
\(f_{s}\) | The stopband corner frequency in Hz |
\(A_{p}\) | The attenuation in db at \(\Omega _{p}\) |
\(A_{s}\) | The attenuation in db at \(\Omega _{s}\) |
The specifications are given in db (the left diagram above) and not in magnitude (right diagram above).
The specifications are given with reference to the transfer function magnitude. The phase is not taken into account in the specifications. Butterworth analog transfer function transfer function magnitude is given by\[ \left \vert H\left ( j\Omega \right ) \right \vert =\frac {1}{\sqrt {1+\left ( \frac {\Omega }{\Omega _{c}}\right ) ^{2N}}}\] Where \(\Omega _{c}\) is the cutoff frequency. This is the frequency at which \(\left \vert H\left ( j\Omega \right ) \right \vert =\frac {1}{\sqrt {2}}=0.707.\)
The goal of the design is to determine \(N\) and \(\Omega _{c}\) from the specifications. Once \(N\) and \(\Omega _{c}\) are found, \(H(s)\) poles are found. Once the poles are found, then \(H\left ( s\right ) \) is now determined.
The following diagram outlines the design algorithm
Let \(\Omega _{p}=1\) rad/sec, and let \(\Omega _{s}=\frac {f_{s}}{f_{p}}\) rad/sec.
\[ A_{p}=-20\log \left \vert H\left ( j\Omega _{p}\right ) \right \vert =-20\log \frac {1}{\sqrt {1+\left ( \frac {\Omega _{p}}{\Omega _{c}}\right ) ^{2N}}}=10\log \left [ 1+\left ( \frac {1}{\Omega _{c}}\right ) ^{2N}\right ] \] Solving for \(\Omega _{c}\) from the above gives \begin {equation} \Omega _{c}=\frac {1}{\left ( 10^{\frac {A_{p}}{10}}-1\right ) ^{\frac {1}{2N}}} \tag {1} \end {equation} Using \(A_{s}\) gives \[ A_{s}=-20\log \left \vert H\left ( j\Omega _{s}\right ) \right \vert =-20\log \frac {1}{\sqrt {1+\left ( \frac {\Omega _{s}}{\Omega _{c}}\right ) ^{2N}}}=10\log \left [ 1+\left ( \frac {\Omega _{s}}{\Omega _{c}}\right ) ^{2N}\right ] \] Solving for \(\Omega _{s}\) from the above results in \begin {equation} \Omega _{s}=\Omega _{c}\left ( 10^{\frac {A_{s}}{10}}-1\right ) ^{\frac {1}{2N}} \tag {2} \end {equation} Substituting \(\Omega _{c}\) found in (1) into the above \(\Omega _{s}\) gives \begin {equation} \Omega _{s}=\left [ \frac {\left ( 10^{\frac {A_{s}}{10}}-1\right ) }{\left ( 10^{\frac {A_{p}}{10}}-1\right ) }\right ] ^{\frac {1}{2N}} \tag {3} \end {equation} Solving for \(N\) in the above by taking logs gives \begin {equation} N=\frac {\log \left [ \frac {\left ( 10^{\frac {A_{s}}{10}}-1\right ) }{\left ( 10^{\frac {A_{p}}{10}}-1\right ) }\right ] }{2\log \Omega _{s}} \tag {4} \end {equation} Since the order of filter is an integer, the above value is rounded upwards to the next integer if it is not an integer. Let this new \(N\) be \(N^{\prime }\) to make it clear that this is an updated \(N\) from the original \(N\).
Since Butterworth magnitude square of the transfer function is \[ \left \vert H\left ( s\right ) \right \vert ^{2}=\frac {1}{1+\left ( \frac {s}{j\Omega _{c}^{\prime }}\right ) ^{2N^{\prime }}}\] Hence \(H(s)\) poles are found by setting the denominator of the above to zero. Setting \(\Omega _{c}=1\) gives \begin {align} 1+\left ( \frac {s}{j}\right ) ^{2N^{\prime }} & =0\nonumber \\ \left ( \frac {s}{j}\right ) ^{2N^{\prime }} & =-1\nonumber \\ \left ( \frac {s}{j}\right ) ^{2N^{\prime }} & =e^{j\left ( \pi +2\pi k\right ) }\ \ \ \ \ \nonumber \\ \frac {s}{j} & =e^{j\left ( \frac {\pi +2\pi k}{2N^{\prime }}\right ) \ \ \ \ \ \ \ \ \ \ \ \ }k=0,1,2,\cdots 2N^{\prime }-1\nonumber \\ s_{k} & =j\ e^{j\left ( \frac {\pi +2\pi k}{2N^{\prime }}\right ) }\nonumber \\ s_{k} & =\ e^{j\frac {\pi }{2}}e^{j\left ( \frac {\pi +2\pi k}{2N^{\prime }}\right ) }\nonumber \\ s_{k} & =\ e^{j\left ( \frac {\pi +2\pi k}{2N^{\prime }}+\frac {\pi }{2}\right ) } \tag {5} \end {align}
Only the LHS poles are needed, which are located at \(k=0\cdots N^{\prime }-1\), because these are the stable poles.
Now that the poles are found, \(H(s)\) becomes \begin {equation} H(s)=\frac {1}{{\prod \limits _{k=0}^{N^{\prime }-1}}s-s_{k}}=\frac {1}{\left ( s-s_{0}\right ) \left ( s-s_{1}\right ) \cdots \left ( s-s_{N^{\prime }-1}\right ) } \tag {6} \end {equation}
Either \(A_{p}\) or \(A_{s}\) have to be adjusted depending on if the excess tolerance is to be assigned to the passband or to the stop band and \(\Omega _{c}\) is calculated based on this.
If the excess tolerance is to be assigned to the passband, then (3) is solved for \(A_{p}\) and this new found value is called \(A_{p}^{\prime }\) \begin {equation} A_{p}^{\prime }=10\log \left ( \frac {\left ( 10^{\frac {A_{s}}{10}}-1\right ) }{\Omega _{s}^{2N^{\prime }}}+1\right ) \tag {6.1} \end {equation} Also \(\Omega _{c}\) needs to be determined from (1). Calling this \(\Omega _{c}^{\prime }\) to reflect that this goes with the updated \(A_{p}^{\prime }\) and not the original \(A_{p}\) \begin {equation} \Omega _{c}^{\prime }=\frac {1}{\left ( 10^{\frac {A_{p}^{\prime }}{10}}-1\right ) ^{\frac {1}{2N^{\prime }}}} \tag {6.2} \end {equation} However, if the excess tolerance is to be assigned to the stopband, then (3) is solved for \(A_{s}\) and this new found value is called \(A_{s}^{\prime }\)\begin {equation} A_{s}^{\prime }=10\log \left ( \Omega _{s}^{2N^{\prime }}\left ( 10^{\frac {A_{p}}{10}}-1\right ) +1\right ) \tag {6.3} \end {equation} \(\Omega _{c}\) is adjusted to \(\Omega _{c}^{\prime }\).
From (2), and using the above new value of \(A_{s}^{\prime }\) gives \begin {equation} \Omega _{c}^{\prime }=\frac {\Omega _{s}}{\left ( 10^{\frac {A_{s}^{\prime }}{10}}-1\right ) ^{\frac {1}{2N^{\prime }}}} \tag {6.4} \end {equation} \(H\left ( s\right ) \) found above in (6) is now adjusted since that was found for \(\Omega _{c}=1\) and now an updated \(\Omega _{c}^{\prime }\) is found. To do that \(s\) is replaced by \(\frac {s}{\Omega _{c}^{\prime }}\), hence \(H(s)\) becomes\begin {align} H(s) & =\frac {1}{\left ( \frac {s}{\Omega _{c}^{\prime }}-s_{0}\right ) \left ( \frac {s}{\Omega _{c}^{\prime }}-s_{1}\right ) \cdots \left ( \frac {s}{\Omega _{c}^{\prime }}-s_{N^{\prime }-1}\right ) }\nonumber \\ & =\frac {\left [ \Omega _{c}^{\prime }\right ] ^{\left ( N^{\prime }-1\right ) }}{\left ( s-\Omega _{c}^{\prime }s_{0}\right ) \left ( s-\Omega _{c}^{\prime }s_{1}\right ) \cdots \left ( s-\Omega _{c}^{\prime }s_{N^{\prime }-1}\right ) } \tag {7} \end {align}
The first part of the design is now complete. \(N^{\prime },\Omega _{c}^{\prime }\) is found and adjusted \(A_{p}\) or \(A_{s}\) depending on the requirements for excess tolerance. All the parts needed are found to design \(H\left ( s\right ) \) by finding its poles. Adjusted values must be used from now on.
The above \(H(s)\) found in (7) was designed for frequency \(\Omega _{p}=1\) and \(\Omega _{s}=\frac {2\pi f_{s}}{2\pi f_{p}}\). The above \(H\left ( s\right ) \) is called the normalized transfer function. It is a low pass analog filter, which needs to be mapped to a low pass analog filter, but un-normalized based on the actual frequencies specified (Since the above was designed based on using \(\Omega _{p}=1\)).
Adjustment is now made to obtain \(H(s)\) for \(\Omega _{p}=2\pi f_{p}\) and \(\Omega _{s}=2\pi f_{s}\).
To do this, \(s\) above is replaced by \(\frac {s}{2\pi f_{p}}\). Equation (7) becomes\begin {align} H\left ( s\right ) & =\frac {\left [ \Omega _{c}^{\prime }\right ] ^{\left ( N^{\prime }-1\right ) }}{\left ( \frac {s}{2\pi f_{p}}-\Omega _{c}^{\prime }s_{0}\right ) \left ( \frac {s}{2\pi f_{p}}-\Omega _{c}^{\prime }s_{1}\right ) \cdots \left ( \frac {s}{2\pi f_{p}}-\Omega _{c}^{\prime }s_{N^{\prime }-1}\right ) }\nonumber \\ & \nonumber \\ & =\frac {\left [ \Omega _{c}^{\prime }\times 2\pi f_{p}\right ] ^{\left ( N^{\prime }-1\right ) }}{\left ( s-2\pi f_{p}\Omega _{c}^{\prime }s_{0}\right ) \left ( s-2\pi f_{p}\Omega _{c}^{\prime }s_{1}\right ) \cdots \left ( s-2\pi f_{p}\Omega _{c}^{\prime }s_{N^{\prime }-1}\right ) } \tag {8} \end {align}
The zeros of \(H(s)\) are located at \(\infty \) and there are \(N^{\prime }\) of them.
When simplifying the denominator above, the complex conjugate terms are multiplied with each others to obtain real coefficients.
Given
\(f_{p}=1000\) hz, \(f_{s}=2000\) hz, \(A_{p}=1\) db, \(A_{s}=20\) db, and Excess tolerance at stopband, determine \(H(s)\)
\begin {align*} \Omega _{p} & =1\text { rad/sec}\\ \Omega _{s} & =\frac {f_{s}}{f_{p}}=2\text { rad/sec} \end {align*}
From (4)\begin {align*} N & =\frac {\log \left [ \frac {\left ( 10^{\frac {A_{s}}{10}}-1\right ) }{\left ( 10^{\frac {A_{p}}{10}}-1\right ) }\right ] }{2\log \Omega _{s}}\\ & \\ & =\frac {\log _{10}\left [ \frac {\left ( 10^{\frac {20}{10}}-1\right ) }{\left ( 10^{\frac {1}{10}}-1\right ) }\right ] }{2\log _{10}2}=4.289\,4 \end {align*}
Hence \[ N^{\prime }=5 \]
From (5), and since \(N^{\prime }=5\)\begin {align*} s_{k} & =\ e^{i\left ( \frac {\pi +2\pi k}{2N^{\prime }}+\frac {\pi }{2}\right ) }\\ & =e^{i\left ( \frac {\pi +2\pi k}{2\left ( 5\right ) }+\frac {\pi }{2}\right ) } \end {align*}
Find the poles
\(k\) | \(s_{k}\) |
\(0\) | \(e^{i\left ( \frac {\pi }{10}+\frac {\pi }{2}\right ) }=-0.309+0.951i\) |
\(1\) | \(e^{i\left ( \frac {\pi +2\pi }{10}+\frac {\pi }{2}\right ) }=-0.809+0.587i\) |
\(2\) | \(e^{i\left ( \frac {\pi +4\pi }{10}+\frac {\pi }{2}\right ) }=-1.0\) |
\(3\) | \(e^{i\left ( \frac {\pi +6\pi }{10}+\frac {\pi }{2}\right ) }=-0.809-0.587i\) |
\(4\) | \(e^{i\left ( \frac {\pi +8\pi }{10}+\frac {\pi }{2}\right ) }=-0.309-0.951i\) |
Hence from (6)\begin {align*} H(s) & =\frac {1}{\left ( s-s_{0}\right ) \left ( s-s_{1}\right ) \left ( s-s_{2}\right ) \left ( s-s_{3}\right ) \left ( s-s_{4}\right ) }\\ & \\ & =\frac {1}{\left ( s-\left ( -0.309\,02+0.951\,06i\right ) \right ) \left ( s-\left ( -0.809+0.587i\right ) \right ) \left ( s-\left ( -1\right ) \right ) }\times \\ & \frac {1}{\left ( s-\left ( -0.809-0.587i\right ) \right ) \left ( s-\left ( -0.309-0.951i\right ) \right ) } \end {align*}
Excess tolerance is in the stopband, hence from (6.3)\begin {align*} A_{s}^{\prime } & =10\log \left ( \Omega _{s}^{2N^{\prime }}\left ( 10^{\frac {A_{p}}{10}}-1\right ) +1\right ) \\ & =10\log _{10}\left ( 2^{2\left ( 5\right ) }\left ( 10^{\frac {1}{10}}-1\right ) +1\right ) =24.251\text { db} \end {align*}
Hence new \(\Omega _{c}^{\prime }\) is found from (6.4) \begin {align*} \Omega _{c}^{\prime } & =\frac {\Omega _{s}}{\left ( 10^{\frac {A_{s}^{\prime }}{10}}-1\right ) ^{\frac {1}{2N^{\prime }}}}\\ & \\ & =\frac {2}{\left ( 10^{\frac {24.251}{10}}-1\right ) ^{\frac {1}{2\left ( 5\right ) }}}=1.144 \end {align*}
Hence the above \(H\left ( s\right ) \) becomes (using equation 7 as reference)\begin {align*} H(s) & =\frac {1.1447^{5}}{\left ( s-1.144\left ( -0.309+0.951\, i\right ) \right ) \left ( s-1144\left ( -0.809+0.587 \, i\right ) \right ) \left ( s-1.144\left ( -1\right ) \right ) }\times \\ & \frac {1}{\left ( s-1.144\left ( -0.809-0.587 i\right ) \right ) \left ( s-1.1447\left ( -0.309-0.951\, i\right ) \right ) } \end {align*}
replace \(s\) by \(\frac {s}{2\pi f_{p}}\), hence \(H\left ( s\right ) \) becomes (using equation 8 as reference), and noting that \(2\pi f_{p}=2\pi \left ( 1000\right ) =\allowbreak 6283.\,\allowbreak 2\)\begin {align*} H(s) & =\frac {\left ( 1.144\times 6283.2\right ) ^{5}}{\left ( s-1.144\times 6283.2\left ( -0.309+0.951 i\right ) \right ) }\times \\ & \frac {1}{\left ( s-1.144\times 6283.2\left ( -0.809+0.587 i\right ) \right ) \left ( s-1.144\times 6283.2\left ( -1\right ) \right ) }\times \\ & \frac {1}{\left ( s-1.144\times 6283.2\left ( -0.809-0.587 i\right ) \right ) \left ( s-1.144\times 6283.2\left ( -0.309-0.951i\right ) \right ) } \end {align*}
Now multiplying the complex conjugate terms with each others (to remove the complex terms) gives \[ H\left ( s\right ) =\frac {7192.4^{5}}{\left ( s+7192.2\right ) \left ( s^{2}+4445.2s+5.173\times 10^{7}\right ) \left ( s^{2}+11638.s+5.173\times 10^{7}\right ) }\]