Version 4 SHEET 1 1368 680 WIRE -144 352 -144 336 WIRE -128 96 -128 64 WIRE -16 64 -128 64 WIRE 208 128 128 128 WIRE 240 368 240 336 WIRE 272 160 272 112 WIRE 384 64 128 64 WIRE 384 112 272 112 WIRE 480 368 480 336 WIRE 608 368 608 336 FLAG -128 176 0 FLAG 384 64 A IOPIN 384 64 Out FLAG 208 128 2 FLAG 272 240 0 FLAG 384 112 B IOPIN 384 112 Out FLAG 608 448 0 FLAG 608 336 f2 FLAG 480 448 0 FLAG 480 336 s1a FLAG -144 432 0 FLAG -144 336 phi FLAG 240 448 0 FLAG 240 336 s1c SYMBOL SpecialFunctions\\modulate2 -16 64 R0 WINDOW 3 16 -20 Left 0 SYMATTR Value mark=1 space=0 SYMATTR InstName A1 SYMBOL voltage -128 80 R0 WINDOW 123 0 0 Left 0 WINDOW 39 0 0 Left 0 WINDOW 3 37 43 Left 0 SYMATTR Value 1 SYMATTR InstName V1 SYMBOL bv 272 144 R0 SYMATTR InstName B1 SYMATTR Value V=SGN(V(s1c))*(V(A)+V(f2)*V(2))/sqrt(1+V(f2)**2) SYMBOL voltage 608 352 R0 WINDOW 3 32 90 Left 0 SYMATTR Value V=SQRT(1-V(s1a)*V(s1a))/V(s1a) SYMATTR InstName B2 SYMATTR Prefix B SYMBOL voltage 480 352 R0 WINDOW 3 -237 134 Left 0 SYMATTR Value V=if(ABS(V(s1c))>eps,V(s1c),SGN(V(s1c))*eps) SYMATTR InstName B3 SYMATTR Prefix B SYMBOL voltage -144 336 R0 WINDOW 123 0 0 Left 0 WINDOW 39 0 0 Left 0 SYMATTR InstName Vph SYMATTR Value PULSE(0 {pi} 0 10 1n 1n) SYMBOL voltage 240 352 R0 WINDOW 3 39 55 Left 0 SYMATTR Value V=cos(V(phi)) SYMATTR InstName B6 SYMATTR Prefix B TEXT -106 -70 Left 0 !.tran 12 TEXT -104 -40 Left 0 !.options plotwinsize=0 TEXT 208 -128 Left 0 ;360 deg linearly controlable phase shift for V(B)\nMethod: add sine+cosine TEXT 208 -64 Left 0 ;Problem: tan(): too many datapts when V(phi) close to pi/2, 3pi/2,...,\nreduces performance severely. TEXT 496 8 Left 0 !;--cure the performance problem:\n;V(f2)=tan() amplitude-limited\n;eps=0 -> no improvement, eps\n;too big will distort the sine V(B)\n.param eps=0.005 TEXT -120 320 Left 0 ;V(phi) controls phase of V(B) TEXT 240 512 Left 0 ;theoretically should be: V(f2)=tan(V(phi)) TEXT -88 376 Left 0 ;0...180 deg, then\njump back to 0 TEXT -144 216 Left 0 ;V1 usable for\nfrequency sweep