.PS
# OpAmpFilter.m4
cct_init
command "{\small\sf"

  define(`SpecOpAmp',`$1: [ right_
    lwtmp = linewid; linewid = 1*scale
  H: opamp
    "$2" at H.In1 below rjust
    "$3" at H.In2 below rjust
    "$4" at H.E below ljust
    "V${-}$" at H.E1 below
    line up_ dimen_/3 from H.E1 "4" rjust; dot(,,1) 
    "$\hbox{V}_{\hbox{CC}}$" rjust at last [].w
    "V${+}$" at H.E2 above
    line down_ dimen_/3 from H.E2 "11" ljust; dot(,,1)
    "${-}\hbox{V}_{\hbox{CC}}$" ljust at last [].e
    linewid = lwtmp
    ifelse($1,U1,,`line left_ jog from H.In2 then down_ jog/2; zground ')
    "$1" at H.S below ljust
  In1: H.In1; In2: H.In2; Out: H.Out
  D: dot(at Out)
  V: circle diam 12bp__ "V" at Out+(dimen_/4,dimen_/3)
    "V$_{\hbox{\scriptsize $5}}$" at V.n above
    open_arrow(from V to D chop last circle.rad chop dotrad_) ] ')
  define(`zground',`ground(`$1',,S); "0" at Here+(dimen_/6,-dimen_/2)')

    cscale = 5/4 
    linewid = linewid*cscale
    jog = dimen_*0.3
    vstep = dimen_*5/4
    SpecOpAmp(U1,2,3,1,hp)
  R1: resistor(right_ elen_*3/4 from U1.Out); llabel(,"R1"); rlabel(,"1`\,'k")
    dot; line right_ jog 
    SpecOpAmp(U2,5,6,7,bp) with .In1 at Here
  R2: resistor(right_ elen_*3/4 from U2.Out); llabel(,"R2"); rlabel(,"1`\,'k")
    dot; line right_ jog 
    SpecOpAmp(U3,9,10,8,lp) with .In1 at Here
    SpecOpAmp(U4,13,12,14,n) with .Out at U3.Out+(0,-dimen_*3.05)
    line up vstep from U4.Out
  Rf: resistor(left_); rlabel(,"R$_{\hbox{f}}$"); llabel(,"1`\,'k")
    line to (U4.In1,Here)-(jog,0) then to U4.In1-(jog,0); dot
    line from U3.Out down_ vstep+5bp__ then left_ jog
  RL: resistor; rlabel(,"RL"); llabel(,"100")
    line to (U4.In1-(2*jog,0),Here) then to U4.In1-(2*jog,0); dot
    line from U1.Out to (U1.Out,Here); right_
  R42: resistor(to U4.In1); llabel(,"R42"); rlabel(,"1`\,'k")
    line from U2.Out down_ vstep
  R41: resistor(left_ to (U1.In2-(jog,0),Here))
    llabel(,"2.2`\,'k"); rlabel(,"R41")
    line to (Here,U1.In2); dot; { line to U1.In2 }
    line left_ jog; dot
    { resistor(down_ elen_); rlabel(,"R0" rjust "10`\,'k"); zground }
  R3: resistor(left_ dimen_); rlabel(,"R3","in"); llabel(,"1`\,'k")
    source(down_ elen_,AC); llabel("V$_{\hbox{\scriptsize in}\;}$"); zground
    line up_ vstep from U1.Out
  R5: resistor(left_ to (U1.In1-(jog,0),Here)); rlabel(,"R6\enskip 10`\,'k")
    dot
    line from U1.In1 left_ jog then to Here+(0,dimen_/2)
    resistor(right_ to (U3.Out,Here)); llabel(,"R5"); rlabel(,"1`\,'k")
    line to U3.Out; dot(at Here+(0,vstep))
    capacitor(left_ to (U3.In1-(jog,0),Here)); rlabel(,"C2\enskip 100`\,'n")
    line to (Here,U3.In1)
    line from U2.Out up_ vstep
    capacitor(left_ to (U2.In1-(jog,0),Here)); rlabel(,"C1\enskip 100`\,'n")
    line to (Here,U2.In1)

command "}%"
.PE
