Version 4 SHEET 1 1820 680 WIRE 1024 -672 960 -672 WIRE -112 -528 -144 -528 WIRE -32 -528 -64 -528 WIRE 128 -528 112 -528 WIRE -144 -512 -144 -528 WIRE 224 -480 208 -480 WIRE 320 -480 304 -480 WIRE 400 -480 320 -480 WIRE 496 -480 400 -480 WIRE 592 -480 496 -480 WIRE 640 -480 592 -480 WIRE 784 -480 736 -480 WIRE 896 -480 864 -480 WIRE 944 -480 896 -480 WIRE 1040 -480 944 -480 WIRE 128 -464 112 -464 WIRE 400 -448 400 -480 WIRE 736 -448 736 -480 WIRE 1040 -448 1040 -480 WIRE 592 -432 592 -480 WIRE -144 -416 -144 -432 WIRE 1040 -336 1040 -368 WIRE 320 -320 320 -336 WIRE 400 -320 400 -368 WIRE 592 -320 592 -352 WIRE -192 -288 -192 -448 WIRE 752 -288 736 -288 WIRE 880 -288 832 -288 WIRE 944 -288 880 -288 WIRE 1040 -288 944 -288 WIRE 192 -272 144 -272 WIRE 736 -256 736 -288 WIRE 1040 -256 1040 -288 WIRE -64 -240 -64 -528 WIRE -16 -240 -64 -240 WIRE 1040 -144 1040 -176 WIRE -128 -128 -128 -144 WIRE -128 -112 -128 -128 WIRE -64 -112 -64 -240 WIRE -64 -112 -128 -112 FLAG -112 -528 o IOPIN -112 -528 Out FLAG -144 -416 0 FLAG -128 -128 f FLAG 640 -480 fu FLAG -192 -496 S FLAG 736 -368 0 FLAG 896 -480 pd FLAG 736 -176 0 FLAG 880 -288 pfu FLAG 880 -672 0 FLAG 496 -128 0 FLAG 496 -208 vf FLAG 208 -480 o IOPIN 208 -480 In FLAG 1024 -672 THD IOPIN 1024 -672 Out FLAG 192 -272 S FLAG 1040 -336 0 FLAG 944 -336 0 FLAG 1040 -144 0 FLAG 944 -144 0 FLAG 400 -320 0 FLAG 320 -320 0 FLAG 592 -320 0 FLAG 496 -320 0 SYMBOL e -144 -528 R0 WINDOW 0 40 47 Left 0 WINDOW 3 37 75 Left 0 SYMATTR InstName E1 SYMATTR Value 1 SYMBOL SpecialFunctions\\modulate2 -128 -144 M270 WINDOW 3 -113 112 VLeft 0 WINDOW 123 -58 106 VLeft 0 WINDOW 39 -84 111 VLeft 0 WINDOW 0 51 29 Left 0 SYMATTR Value space=0 mark={2*f2} SYMATTR Value2 Vhigh={percnt/100} SYMATTR SpiceLine Vlow={-percnt/100} SYMATTR InstName A1 SYMBOL res 320 -496 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R1 SYMATTR Value {Rq} SYMBOL bv 736 -464 R0 WINDOW 3 -25 121 Left 0 SYMATTR Value V=(V(o)-V(fu))**2 SYMATTR InstName B1 SYMBOL res 768 -464 R270 WINDOW 0 32 56 VTop 0 WINDOW 3 0 56 VBottom 0 SYMATTR InstName R2 SYMATTR Value 1k SYMBOL bv 736 -272 R0 WINDOW 0 29 43 Left 0 SYMATTR InstName B2 SYMATTR Value V=V(fu)**2 SYMBOL res 736 -272 R270 WINDOW 0 32 56 VTop 0 WINDOW 3 0 56 VBottom 0 SYMATTR InstName R3 SYMATTR Value 1k SYMBOL bv 976 -672 R90 WINDOW 3 32 56 VTop 0 WINDOW 0 -32 56 VBottom 0 SYMATTR Value V=100*sqrt( V(pd)/V(pfu) ) SYMATTR InstName B3 SYMBOL bv 496 -224 R0 WINDOW 0 27 38 Left 0 SYMATTR InstName B4 SYMATTR Value V=V(f)*f2/1k SYMBOL SpecialFunctions\\modulate2 -32 -528 R0 WINDOW 3 0 112 Left 0 WINDOW 123 0 130 Left 0 WINDOW 39 0 148 Left 0 WINDOW 0 53 -10 Left 0 SYMATTR Value space=0 mark={sf*f2} SYMATTR Value2 Vhigh=1 SYMATTR SpiceLine Vlow=-1 SYMATTR InstName A3 SYMBOL bi 1040 -448 R0 WINDOW 3 13 86 Left 0 SYMATTR Value I=1/V(vf)*I(Vs)-I(Vs) SYMATTR InstName Bc1 SYMBOL cap 928 -480 R0 WINDOW 3 23 53 Left 0 WINDOW 0 35 20 Left 0 SYMATTR Value {Cf/2} SYMATTR InstName Cref1 SYMBOL voltage 944 -432 R0 WINDOW 0 -52 17 Left 0 WINDOW 3 -53 52 Left 0 SYMATTR InstName Vs SYMATTR Value 0 SYMBOL bi 1040 -256 R0 WINDOW 3 13 86 Left 0 SYMATTR Value I=1/V(vf)*I(Vs1)-I(Vs1) SYMATTR InstName Bc2 SYMBOL cap 928 -288 R0 WINDOW 3 23 53 Left 0 WINDOW 0 35 20 Left 0 SYMATTR Value {Cf} SYMATTR InstName Cref2 SYMBOL voltage 944 -240 R0 WINDOW 0 -52 17 Left 0 WINDOW 3 -53 52 Left 0 SYMATTR InstName Vs1 SYMATTR Value 0 SYMBOL bi 400 -448 R0 WINDOW 3 -156 165 Left 0 SYMATTR Value I=1/V(vf)*I(Vs2)-I(Vs2) SYMATTR InstName Bc3 SYMBOL cap 304 -480 R0 WINDOW 3 23 53 Left 0 WINDOW 0 35 20 Left 0 SYMATTR Value {Co} SYMATTR InstName Cref3 SYMBOL voltage 320 -432 R0 WINDOW 0 -52 17 Left 0 WINDOW 3 -53 52 Left 0 SYMATTR InstName Vs2 SYMATTR Value 0 SYMBOL bi 592 -432 R0 WINDOW 3 -96 150 Left 0 SYMATTR Value I=V(vf)*I(Vs3)-I(Vs3) SYMATTR InstName Bc4 SYMBOL voltage 496 -416 R0 WINDOW 0 -52 17 Left 0 WINDOW 3 -53 52 Left 0 SYMATTR InstName Vs3 SYMATTR Value 0 SYMBOL ind 480 -496 R0 SYMATTR InstName L2 SYMATTR Value {Lo} SYMBOL Swept_Sine3 64 -240 R0 WINDOW 39 -100 75 Left 0 SYMATTR SpiceLine f1={f1} f2={f2} kd={kd} fmul={fmul} ct={ct} SYMATTR InstName X1 TEXT 0 -336 Left 0 !.param f1=100/fmul f2=10k TEXT -232 -576 Left 0 !.param percnt=0 TEXT -224 -632 Left 0 ;Enter\n2f-Distortion %: TEXT 32 -648 Left 0 !.param fo=1k*(1+eps)\n.param Zo=1k Lo=Zo/2/pi/fo Q=5\n.param Co=1/4/pi**2/fo**2/Lo Rq=Zo*Q TEXT -220 -684 Left 0 !.tran 0 {To} {kd} TEXT 752 -544 Left 0 !.param Cf=3u TEXT 576 -536 Left 0 ;fundamental\nvoltage TEXT 512 -224 Left 0 ;V=kHz TEXT 784 -120 Left 0 !.ic V(pfu)=1 TEXT 400 -648 Left 0 !.param eps=2u TEXT 288 -704 Left 0 ;Trick: eps can be used to adjust "virtual"\nresonance frequency at big tmaxstep! TEXT -40 -496 Left 0 ;sample forcing TEXT -200 -744 Left 0 ;Continuous Sweep type THD-meter using a tracking filter and time optimal frequency sweep. TEXT 48 -112 Left 0 !.param kd=15/f1 ;time to start f-sweep TEXT 48 -80 Left 0 !.param To=kd+7.65 TEXT 72 -696 Left 0 !.save V(thd) V(f) TEXT 912 -544 Left 0 ;non charge-preserving\ncontrolled caps TEXT 1024 -712 Left 0 ;in % TEXT 48 -48 Left 0 !.param fmul=sqrt(2) TEXT 288 -80 Left 0 ;This THD-meter could be adjusted for much higher precision ("internal" THD)\nbut at the cost of slower sweep speed, i.e. longer simulation time\n(adjust ct and sample forcing sf).\nPresently it is set to 0.1% which is mainly due to sweep speed. TEXT 48 -16 Left 0 !.param sf=15 ct=32u