57 lines
1.5 KiB
Plaintext
57 lines
1.5 KiB
Plaintext
* Chebyshev low-pass filter
|
|
* code model s_xfer
|
|
* according to ngspice manual chapter 12.2.18
|
|
* and LCR versus Laplace comparison
|
|
|
|
a12 node1 node2 cheby1
|
|
.model cheby1 s_xfer(num_coeff=[1] den_coeff=[1 1.09773 1.10251]
|
|
+ int_ic=[0 0] denormalized_freq=1500)
|
|
|
|
a14 node1 node3 cheby_LP_3kHz
|
|
.model cheby_LP_3kHz s_xfer(in_offset=0.0 gain=1.0 int_ic=[0 0]
|
|
+ num_coeff=[1.0]
|
|
+ den_coeff=[1.0 1.42562 1.51620]
|
|
+ denormalized_freq=18850) ; for f = 3 kHz
|
|
|
|
* LCR bandpass filter
|
|
L1 node1 nint1 10m
|
|
C1 nint1 node4 10u
|
|
R1 node4 0 10
|
|
* equivalent filter by Laplace expression
|
|
a16 node1 node5 fil1
|
|
.model fil1 s_xfer gain=1000 int_ic=[0 0]
|
|
+ num_coeff=[1.0 0]
|
|
+ den_coeff=[1.0 1e3 1e7]
|
|
+ )
|
|
|
|
* input ac or pulse
|
|
Vin node1 0 dc 0 ac 1 pulse 0 5 0 1u 1u 3m 6m
|
|
|
|
.control
|
|
set xbrushwidth=2
|
|
ac dec 50 0.01 100k
|
|
let dbnode2=db(v(node2))
|
|
let dbnode3=db(v(node3))
|
|
let dbnode4=db(v(node4))
|
|
let dbnode5=db(v(node5))
|
|
plot dbnode2 dbnode3
|
|
plot dbnode4 dbnode5+1 ; +1 just to see both overlapping graphs
|
|
plot cph(node2) cph(node3)
|
|
let a12_0db = dbnode2[1]
|
|
let a14_0db = dbnode3[1]
|
|
* 1500/2/PI = 239 Hz
|
|
meas ac fa12_0db when dbnode2=a12_0db fall=last
|
|
* 18850/2/PI = 3 kHz
|
|
meas ac fa14_0db when dbnode3=a14_0db fall=last
|
|
* LCR bandpass 500 Hz BW=159 Hz
|
|
meas ac fil1max max dbnode4
|
|
meas ac fil1max max dbnode5
|
|
* -3dB bandwidth
|
|
let fil1max3db = fil1max - 3
|
|
meas ac bwfil1 TRIG dbnode5 VAL=fil1max3db RISE=1 TARG dbnode5 VAL=fil1max3db FALL=1
|
|
tran 1u 15m
|
|
plot node1 node2 node3 node5
|
|
.endc
|
|
|
|
.end
|