To design a butterworth low-pass filter:

- Specify K (passband gain) ѡ
_{s}, ѡ_{s}(passband and stopband frequencies) and their required attenuations, α_{p}and α_{s}. - If K != 1, scale α
_{p}and α_{s}to correspond to K == 1. - Calculate the required filter order using eq 6.46 from [1]
- Calculate ѡ
_{0}from eq 6.42 or 6.47- Alternatively, skip the above steps and specify n and ѡ
_{0}

- Alternatively, skip the above steps and specify n and ѡ
- Find the pole positions and transfer functions from eq 6.30 (remember to multiply by K)

If using a Sallen-Key topology:

- TBD: Figure out how to order the stages
- For each stage:
- Pick the sub-topology:
- If K==1, use Figure 6.19(b)
- If K < 0 (inverting), use Figure 6.19(d)
- If K is don’t care, use Figure 6.19(a) to consolidate component values
- If you need a 3-pole stage, use the Geffe circuit of Figure 6.32
- If K < 1, use Figure 6.21(a)
- Otherwise use Figure 6.19(c) and follow the procedure for Design 3

- Calculate normalized component values based on Q and K
- scale component values up to ѡ
_{0} - magnitude scale to get practical values

- Pick the sub-topology:

- Specify requirements as in the low-pass procedure, step 1)
- Transform Ω
_{s}and Ω_{s}to ѡ_{s}and ѡ_{s}by the RC-CR transformation using eq 6.80 - Design the low-pass filter starting with step 2)
- Apply the RC-CR transformation to the resulting circuit using eq 6.82

- 4amp_tow-thomas_bs.sch, if R3 = R1 / 2, is allpass

Use svgfig library to do manipulations

- Find the terminal markers in each file with the regex
`path.*fill:n.*C.*C.*C.*C` - From the markers calculate the translation for each stage
- For each figure, apply a transformation like this:
`lp[1].attr[u'transform'] = u"translate(100,0)"` - From the translations and the original widths and heights, calculate the new widths and heights
- Combine stages like this:
`firstage[1].append(secondstage[1])`

sch2svg.pl has serious problems.

- Doesn’t read .gafrc to find the sym directory

- Needs rework to support multiple LIBPATH directories
- Clips part of the output image
- Just doesn’t look right

However, sch2svg does preserve as much structure as possible

gs has problems:

- convert with ‘gs -sDEVICE=svg -sOutputFile=foo.svg bar.eps
- gs always renders the text as lines
- gs produces large output files

pstoedit to .sk and then skconvert to svg has problems:

- It always splits text strings into individual characters, even for monospaced fonts. The man page says this will only happen if you use -pti or -pta , but it always happens.
- It also does this for the .fig output
- It also does this for the .dxf output
- the ps2ai output is not recognized as .ai by uniconvertor

pstoedit to .svg has problems.

- it’s nonfree and only available for i386

inkscape has problems:

- it calls pstoedit to import eps files

uniconvertor has problems:

- while it claims to support eps, it appears to only read adobe illustrator output.

To capture screen with vnc2swf.py, use these settings:
`clipping: 1250x980+330+95`

vnc2flv.py has been recently released. It probably will work better than vnc2swf.py .

- Add Cauer filters
- Make Horz and Vert markers make sense in ZPK display mode
- Solve filter synthesis equations numerically with scipy.optimize, instead of analytically. Then add features such as being able to choose different seed components
- Tooltips everywhere! Especially the columns of PartsStore. Use http://www.astro.umass.edu/~dpopowich/python/
- turn attributes into properties where appropriate
- Add bandpass, bandstop, and allpass filters
- Sort the components in SeedView and PartsView reasonably
- Replace LM324.MOD with a GPL-3 compatible file