diff --git a/examples/xspice/various/x_fer.cir b/examples/xspice/various/x_fer.cir new file mode 100644 index 000000000..11b04089e --- /dev/null +++ b/examples/xspice/various/x_fer.cir @@ -0,0 +1,56 @@ +* 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