%!PS % GONZO TABLEMAKER DEV FOURIER EQUATION GENERATOR V2.5 % ====================================================== % THIS VERSION SPECIFIC TO MSCAL108Q % Copyright c 2001 by Don Lancaster & Synergetics, Box 809, Thatcher, AZ, 85552 % (928) 428-4073 Email: don@tinaja.com Website: http://www.tinaja.com % Consulting services available http://www.tinaja.com/info01.html % All commercial rights and all electronic media rights ~fully~ reserved. % Linking usually welcome. Reposting expressly forbidden. Version 2.5 % This utility auto-generates JavaScript Magic Sinewave calculators as % JavaScript .asp files. To use, view in wp or editor, modify as needed, % and send to distiller. Upload generated .asp file to ISP for testing. % Detailed assistance is available per http://www.tinaja.com/info01.asp % The first portion of the calculator up to the table is easier handled with % word or GoLive, so it is prepended as a read disk file. The final portion is % handled by an existing include file. % The generated program is intended for ISP distribution as a .asp file for use % with Internet Exploder only. Setting Netscapeok and recompiling defeats the auto % carrier detector and display, but prevents some Netscape version Javascript errors. % Certain portions of the delta code still has to be hand coded. Search on "ZZZZZ" % to reach these three code areas. % IMPORTANT NOTE: Don Lancaster's file gonzo.ps is needed for this program. % After obvious location mods, uncomment ONE of the following two lines: (C:\\windows\\desktop\\gonzo\\gonzo.ps) run % use internal gonzo % (A:\\gonzo.ps) run % use external gonzo % NOTE THAT ALL PS FILENAME STRINGS !!!DEMAND!!! DOUBLE REVERSE SLASHES. % GONZO20A Guru Gonzo PostScript power tools (Interim release) % Includes gonzo justification and layout utilities. % Copyright c 1990,1996,2001 by Don Lancaster and Synergetics, Box 809, % Thatcher Arizona, 5552 (928) 428-4073 don@tinaja.com support % via http://www.tinaja.com All commercial rights and all electronic % media rights **FULLY** reserved. Reposting is expressly forbidden. %%%%%%%%%%%%%%% FILE CONTROL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /print {targ1 exch writestring} def % divert print from log file to new disk file /netscapeok false def % leave off IE color cells? Not recommended. /prefix (C:\\WINDOWS\\desktop\\Magsn 5\\forflush\\Q series\\) store % filename prefix /sname1(genheader.asp) store % short name of first BMP input file /sn1 prefix sname1 mergestr store sn1 (r) file /source1 exch store % create read file netscapeok {/tname1(mscal108N.asp) store} % short name of ms output {/tname1(mscal108Q.asp) store} ifelse /tn1 prefix tname1 mergestr store tn1 (w+) file /targ1 exch store % create read file /strx 64000 string store source1 strx readstring pop % transfer header targ1 exch writestring %%%%%%%%%%%%%%%% CONTROL VARIABLES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /pulsesperquadrant 27 store /harmsneeded pulsesperquadrant dup 6 lt {pop 6} if 1 sub 4 mul store % (\ \n) print % (\ \n) print % (\ \n\n) print % (\ \n) print % form colors /lime ("#33FF33") def % needs BGCOLOR= /magenta ("#FF99FF") def /skyblue ("#CCFFFF") def /orange ("#FF9900") def /teal ("#66FFCC") def /starttablerow {(\ \n) print } def /endtablerow {(\ \n) print } def /colrow { } def /morestuff {} def /datacell { /notblank exch store /bgcolor exch store /callout exch store /inname exch store /value exch store /size exch store (\\ ) mergestr callout mergestr ( \\) mergestr } if morestuff (\ \n) mergestr print } def /blankhcell {(\n \\\n) print } def % start the main selection table (\\ \n) print % start table /autotable {pulsesperquadrant 1 sub 2 mul dup 10 lt {pop 10 } if /totalrows exch store %% green headers starttablerow % 12 (0.000 ) (fp1s) ( p1s:) orange true datacell ( \n\n) print blankhcell ( \n) print blankhcell blankhcell endtablerow %% mixed orange-magenta ( \n) print % pad vertically starttablerow 12 (0.000 ) (fp1s) ( p1s:) orange true datacell blankhcell % magenta amplitude /colrow {( COLSPAN="2" )mergestr} def 12 (0.5300 ) (fa01) ( Fundamental Amplitude:) magenta true datacell /colrow { } def blankhcell blankhcell endtablerow /rowcol {} def /morestuff {} def starttablerow 12 (0.000) (fp1e) ( p1e:) orange true datacell blankhcell % magenta tdh /morestuff { (  is  \\  percent. ) mergestr } def /colrow {( COLSPAN="2" )mergestr} def 4 (2-??) (fzthd) ( THD ) magenta true datacell /colrow { } def blankhcell blankhcell /morestuff {} def endtablerow %% main size programmable portion of table 0 1 totalrows 1 sub { /currow exch store starttablerow 12 (0.000) (fp) currow 2 idiv 2 add 4 string cvs mergestr currow 2 mod 0 eq {(s)}{(e)} ifelse mergestr (p) currow 2 idiv 2 add 10 lt {( ) exch mergestr} if % prespace if less than 10 currow 2 idiv 2 add 4 string cvs mergestr currow 2 mod 0 eq {(s:)}{(e:)} ifelse mergestr currow 2 idiv 2 add 10 lt {( ) mergestr} if orange currow 2 idiv 2 mul pulsesperquadrant 1 sub 2 mul ge {false}{true} ifelse datacell blankhcell 12 (999.9) (fh) currow 2 mul 3 add 10 lt {(0) mergestr} if currow 2 mul 3 add 3 string cvs mergestr (h) currow 2 mul 3 add 10 lt {(0) mergestr} if currow 2 mul 3 add 3 string cvs mergestr (:) mergestr skyblue true datacell % high harms 12 (999.9) (fh) currow 2 mul 3 add totalrows 2 mul add 3 string cvs mergestr (h) currow 2 mul 3 add totalrows 2 mul add 3 string cvs mergestr (:) mergestr skyblue true datacell endtablerow } for } def autotable % end the main selection table (\n\ \n) print % end table %%%%%%%%%% %%%%%%%%%% SPLICE %%%%%%%%% (\n\ \n\n) print % end form (\ //script at end so form is defined \n\n) print % more script stuff %%%%%%%%%%%%%%%% CONTROL VARIABLES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% (var pulsesperquadrant = ) pulsesperquadrant 4 string cvs mergestr ( ; \n\n) mergestr print /harmsneeded pulsesperquadrant dup 6 lt {pop 6} if 1 sub 4 mul store % pulsenamearray generates p1s p1e , etc as matrix /pulsenamearray mark 1 1 pulsesperquadrant {10 string cvs /ppp exch store (p) ppp mergestr (s) mergestr (p) ppp mergestr (e) mergestr } for ] def % pulsenamearray == % generate variable defs (\n\n// ------> start Gonzo autogenerated code from build4a.psl\n) print (// ------> for ) pulsesperquadrant 10 string cvs mergestr ( pulses per quadrant.\n\n) mergestr print (var pi = Math.PI // good old pi for radian conversion and Fourier amp ; \n\n) print (//these attempt Fourier speedup by eliminating repeat calculations\n\n) print (var x1 = pi/180\n) print 1 1 harmsneeded {/harmloc exch store (var x) 1 harmloc 2 mul add 10 string cvs /xxx exch store xxx mergestr ( = ) mergestr xxx mergestr (*x1\n) mergestr print } for (\n) print flush % more variables (var thd = 1.0 // predefine variables to be passed\n) print (var xthd = 999.9 // old thd for one pass\n) print (var xxthd = 999.0 // old thd for full min\n\n) print (var p01 = 1.0\n)print (var a01 = 1.0\n)print 1 1 harmsneeded {/harmloc exch store (var h) 1 harmloc 2 mul add 10 string cvs /xxx exch store xxx cvi 10 lt {(0) mergestr} if xxx mergestr ( = 1.0\n) mergestr print } for (\n) print flush % sc variables 1 1 pulsesperquadrant {10 string cvs /xxx exch store (var p) xxx mergestr (sc = 1.0\n) mergestr print (var p) xxx mergestr (ec = 1.0\n) mergestr print } for (\n) print flush % main pulse variables 1 1 pulsesperquadrant { 10 string cvs /xxx exch store (var p) xxx mergestr (s = 1.0\n) mergestr print (var p) xxx mergestr (d = 1.0\n) mergestr print (var p) xxx mergestr (e = 1.0\n) mergestr print } for (\n) print flush % loose stuff (var zthd = "2-xx" ; \n\n) print (var ampdelta = 0.0\n) print (var incD5 = 0.00001 ;\n) print (var maxIncs = 70 ;\n) print (var roundAt = 100000000 ;\n\n) print (// low level routines \n\n) print % findharms (function findHarms (form) {\n\n) print 0 1 harmsneeded 2 div 1 add cvi {1 exch 2 mul add 10 string cvs /harpoint exch store (h) harpoint cvi 1 eq {pop (a)} if harpoint cvi 10 lt {(0) mergestr} if harpoint mergestr ( = \( \n) mergestr print 1 1 pulsesperquadrant {10 string cvs /pulsepoint exch store ( Math.cos \(p) pulsepoint mergestr (s*x) mergestr harpoint mergestr (\) -\n) mergestr print ( Math.cos \(p) pulsepoint mergestr (e*x) mergestr harpoint mergestr (\) +\n) mergestr print } for % each burst ( 0 \)) harpoint cvi 1 ne {( / \(a01 * ) harpoint mergestr (\)) mergestr mergestr} if ( ;\n\n) mergestr print } for % total bursts ( calcThd (form) ;\n\n }\n\n) print flush %% high harms (function hiHarms (form) {\n\n) print %%% experiment area for background color netscapeok not { 3 2 pulsesperquadrant 4 mul 4 add {/ccharm exch store (cfh) ccharm 10 lt {(0) mergestr} if ccharm 4 string cvs mergestr (.bgColor="#CCFFFF" ; \n) mergestr print } for (\n\n) print (eval ("cfh" + eval (highestZeroharm + 2).toString() + ".bgColor='#66FFCC'") ; \n) print (eval ("cfh" + eval (highestZeroharm + 4).toString() + ".bgColor='#66FFCC'") ; \n) print % ( cfh37.bgColor='#FF6699' ; \n) print } if % IE only %%%%% (zthd = "2-" + (highestZeroharm + 1).toString() ; \n ) print % moved from thdcalcs harmsneeded 2 div cvi 2 add 1 harmsneeded {1 exch 2 mul add 10 string cvs /harpoint exch store (h) harpoint cvi 1 eq {pop (a)} if harpoint cvi 10 lt {(0) mergestr} if harpoint mergestr ( = \( \n) mergestr print 1 1 pulsesperquadrant {10 string cvs /pulsepoint exch store ( Math.cos \(p) pulsepoint mergestr (s*x) mergestr harpoint mergestr (\) -\n) mergestr print ( Math.cos \(p) pulsepoint mergestr (e*x) mergestr harpoint mergestr (\) +\n) mergestr print } for % each burst ( 0 \)) harpoint cvi 1 ne {( / \(a01 * ) harpoint mergestr (\)) mergestr mergestr} if ( ;\n\n) mergestr print } for % total bursts ( ;\n\n }\n\n) print flush % fixpow and company (// fixPow and fixAmp update power on amplitude and vice versa\n\n) print (function fixPow (form) {form.fp00.value = (Math.round (1000000 * (Math.pow(form.fa00.value,2)))) / 1000000}\n\n) print (function fixAmp (form) {form.fa00.value = (Math.round (1000000 * (Math.sqrt(form.fp00.value)))) / 1000000}\n\n) print % report to form (function reportToForm (form) {\n\n) print ( hiHarms (form) ;\n) print ( form.fthd.value = thd ;\n) print ( form.fzthd.value = zthd ;\n\n) print ( form.fa01.value = a01 * (4 / pi) ; // only scalings used \n) print 1 1 harmsneeded { 1 exch 2 mul add 10 string cvs /harpoint1 exch store ( form.fh) harpoint1 cvi 10 lt {(0) mergestr} if harpoint1 mergestr (.value = h) mergestr harpoint1 cvi 10 lt {(0) mergestr} if harpoint1 mergestr ( ;\n) mergestr print } for (\n\n) print flush 1 1 pulsesperquadrant { 10 string cvs /pulsepoint1 exch store ( form.fp) pulsepoint1 mergestr (s.value = p) mergestr pulsepoint1 mergestr (s ;\n) mergestr print ( form.fp) pulsepoint1 mergestr (e.value = p) mergestr pulsepoint1 mergestr (e ;\n) mergestr print } for (}\n\n) print flush % predict best efficiency... (function preDictBesteff (form) { \n\n) print ( reportFromForm \n\n) print (a00 = (eval (document.mainform.fa00.value)) * (pi/4) // unnormalize\n\n) print (// best eff interval is 2x + 1 pulses per 180 with full zero offset \n\n) print (var ppqx = 180/ ((pulsesperquadrant *2) + 1)\n\n) print (// interval is 180/) pulsesperquadrant 2 mul 1 add 10 string cvs mergestr ( = ) mergestr /ppqx 180 pulsesperquadrant 2 mul 1 add div def 1 1 pulsesperquadrant { ppqx mul 10000 mul round 10000 div 15 string cvs mergestr ( ) mergestr } for (.\n\n) mergestr print 1 1 pulsesperquadrant {10 string cvs /ii exch store (var t) ii mergestr ( = ) mergestr ii mergestr (*ppqx ;\n) mergestr print } for (var sinsum = ) print 1 1 pulsesperquadrant {10 string cvs /jj exch store (Math.sin\(t) jj mergestr (*pi/180\) + ) mergestr print } for ( 0 ; \n\n) print 1 1 pulsesperquadrant {10 string cvs /kk exch store (var share) kk mergestr ( = Math.sin \(t) mergestr kk mergestr ( *pi/180\) / sinsum ; \n) mergestr print } for (\n) print flush (var a00x = 20 ; \n) print (a00x = a00 * 4/pi ; \n\n) print 1 1 pulsesperquadrant {10 string cvs /ll exch store (p) ll mergestr (s = \(180/pi\) * \(Math.acos \(Math.cos\(t) mergestr ll mergestr (*pi/180\)\) - \(a00x * share) mergestr ll mergestr (/2\)\) ; \n) mergestr print (p) ll mergestr (e = \(180/pi\) * \(Math.acos \(Math.cos\(t) mergestr ll mergestr (*pi/180\)\) + \(a00x * share) mergestr ll mergestr (/2\)\) ; \n) mergestr print } for (\n\n) print flush 1 1 pulsesperquadrant {10 string cvs /mm exch store (form.fp) mm mergestr (s.value = p) mergestr mm mergestr (s\n) mergestr print (form.fp) mm mergestr (e.value = p) mergestr mm mergestr (e\n) mergestr print } for (\n\n) print flush ( doStuffx (form) ;\n) print ( doStuffx (form) ;\n\n) print ( }\n\n) print %%%%%%%%%%%%%%%%%%%%%% % predict normal (function preDictNormal (form) { \n\n) print ( reportFromForm \n\n) print (a00 = (eval (document.mainform.fa00.value)) * (pi/4) // unnormalize\n\n) print (// best eff interval is 2x pulses per 180 with half zero offset \n\n) print (var ppqx = 180/ (pulsesperquadrant * 2)\n\n) print (// interval is 180/) pulsesperquadrant 2 mul 10 string cvs mergestr ( = ) mergestr /ppqx 180 pulsesperquadrant 2 mul div def 0 1 pulsesperquadrant 1 sub { ppqx mul ppqx 2 div add 10000 mul round 10000 div 15 string cvs mergestr ( ) mergestr } for (.\n\n) mergestr print 1 1 pulsesperquadrant {10 string cvs /ii exch store (var t) ii mergestr ( = ) mergestr ii mergestr (*ppqx ;\n) mergestr print } for (var sinsum = ) print 1 1 pulsesperquadrant {10 string cvs /jj exch store (Math.sin\(t) jj mergestr (*pi/180\) + ) mergestr print } for ( 0 ; \n\n) print 1 1 pulsesperquadrant {10 string cvs /kk exch store (var share) kk mergestr ( = Math.sin \(t) mergestr kk mergestr ( *pi/180\) / sinsum ; \n) mergestr print } for (\n) print flush (var a00x = 20 ; \n) print (a00x = a00 * 4/pi ; \n\n) print 1 1 pulsesperquadrant {10 string cvs /ll exch store (p) ll mergestr (s = \(180/pi\) * \(Math.acos \(Math.cos\(t) mergestr ll mergestr (*pi/180\)\) - \(a00x * share) mergestr ll mergestr (/2\)\) ; \n) mergestr print (p) ll mergestr (e = \(180/pi\) * \(Math.acos \(Math.cos\(t) mergestr ll mergestr (*pi/180\)\) + \(a00x * share) mergestr ll mergestr (/2\)\) ; \n) mergestr print } for (\n\n) print flush 1 1 pulsesperquadrant {10 string cvs /mm exch store (form.fp) mm mergestr (s.value = p) mergestr mm mergestr (s\n) mergestr print (form.fp) mm mergestr (e.value = p) mergestr mm mergestr (e\n) mergestr print } for (\n\n) print flush ( doStuffx (form) ;\n) print ( doStuffx (form) ;\n\n) print ( }\n\n) print %%%%%%%%% predict delta %%%%%%%% WARNING: MUST HAND PRECODE search: ZZZZZZZ %%%%%%%%% %% improved zzz version (// preDictDelta 1377 has 7 high triad pulses7 mid triad pulses, and 13 low \n) print (// triad pulses. The high seven have cos30 = .500 energy, proportionally split. \n) print (// The low thirteen have cos0 - cos30 = .133 energy proportionally split.\n\n) print (// There is no triad conflict, so this should be a good but excessive choice. \n\n) print (// locking diagram -- \n\n) print (// !21s 21e!22s 22e!23s 23e!24s 24e!25s 25e! 60-90 \n) print (// !20e 20s ! 19e 19s ! 18e 18s ! 17e 17s ! 16e 16s !60-30 \n) print (// ! 1s 1e! 2s 2e 3s 3e!4s 4e 5s 5e! 6s 6e 7s p7e! 8s 8e 9s 9e! 0-30 \n\n) print (// !26s 26e!27s 27e! 60-90 \n) print (// ! 15e 15s ! 14e 14s !60-30 \n) print (// !10s 10e 11s 11e!12s 12e 13s 13e!0-30 \n\n) print /deltavars [ (p14s)(p14e) (p15s)(p15e) (p16s)(p16e) (p17s)(p17e) (p18s)(p18e) (p19s)(p19e) (p20s) % no (p20e) (p21s)(p21e) (p22s)(p22e) (p23s)(p23e) (p24s)(p24e) (p25s)(p25e) (p26s)(p26e) (p27s)(p27e) ] def (// deltavars: p12s through p27e except for p20e locked \n) print /lockrulep14s (p13s = 60 - p14s) store /lockrulep14e (p12e = 60 - p14e) store /lockrulep15s (p11s = 60 - p15s) store /lockrulep15e (p10e = 60 - p15e) store /lockrulep16s (p9s = 60 - p16s) store /lockrulep16e (p8e = 60 - p16e) store /lockrulep17s (p7s = 60 - p17s) store /lockrulep17e (p6e = 60 - p17e) store /lockrulep18s (p5s = 60 - p18s) store /lockrulep18e (p4e = 60 - p18e) store /lockrulep19s (p3s = 60 - p19s) store /lockrulep19e (p2e = 60 - p19e) store /lockrulep20s (p1s = 60 - p20s) store % no lockrulep20e /lockrulep21s (p20e = 120 - p21s) store /lockrulep21e (p1e = p21e - 60) store /lockrulep22s (p2s = p22s - 60) store /lockrulep22e (p3e = p22e - 60) store /lockrulep23s (p4s = p23s - 60) store /lockrulep23e (p5e = p23e - 60) store /lockrulep24s (p6s = p24s - 60) store /lockrulep24e (p7e = p24e - 60) store /lockrulep25s (p8s = p25s - 60) store /lockrulep25e (p9e = p25e - 60) store /lockrulep26s (p10s = p26s - 60) store /lockrulep26e (p11e = p26e - 60) store /lockrulep27s (p12s = p27s - 60) store /lockrulep27e (p13e = p27e - 60) store /savelockruleforlater { ( //lockrulep14s (p13s = 60 - p14s) store //lockrulep14e (p12e = 60 - p14e) store //lockrulep15s (p11s = 60 - p15s) store //lockrulep15e (p10e = 60 - p15e) store //lockrulep16s (p9s = 60 - p16s) store //lockrulep16e (p8e = 60 - p16e) store //lockrulep17s (p7s = 60 - p17s) store //lockrulep17e (p6e = 60 - p17e) store //lockrulep18s (p5s = 60 - p18s) store //lockrulep18e (p4e = 60 - p18e) store //lockrulep19s (p3s = 60 - p19s) store //lockrulep19e (p2s = 60 - p19s) store //lockrulep20s (p1s = p20s - 60) store % no lockrulep20e //lockrulep21s (p20e = 120 - p21s) store //lockrulep21e (p1e = p21e - 60) store //lockrulep22s (p2s = p22s - 60) store //lockrulep22e (p3e = p22e - 60) store //lockrulep23s (p4s = p23s - 60) store //lockrulep23e (p5e = p23e - 60) store //lockrulep24s (p6s = p24s - 60) store //lockrulep24e (p7e = p24e - 60) store //lockrulep25s (p8s = p25s - 60) store //lockrulep25e (p9e = p25e - 60) store //lockrulep26s (p10s = p26s - 60) store //lockrulep26e (p11e = p26e - 60) store //lockrulep27s (p12s = p27s - 60) store //lockrulep27e (p13e = p27e - 60) store \n\n) print } def savelockruleforlater (// end delta hand recoding \n\n) print /p6090 pulsesperquadrant 3 sub 4 div cvi 1 add store /p6090inc 30 p6090 div store /p6090hinc p6090inc 2 div store (// high centers are ) 0 1 p6090 1 sub {p6090inc mul p6090hinc add 60 add 10 string cvs mergestr ( ) mergestr } for (degrees. \n) mergestr print (// mid centers are ) 0 1 p6090 1 sub {p6090inc mul p6090hinc add 30 add 10 string cvs mergestr ( ) mergestr } for (degrees. \n\n) mergestr print (function preDictDelta (form) { // delta 533\n\n) print (reportFromForm \n\n)print (a00 = (eval (document.mainform.fa00.value)) * (pi/4) // unnormalize \n\n) print (a00x = a00 * 4/pi ; // unnormalize \n\n) print (hinrgTot = ) 0 1 p6090 1 sub { /jjj exch store (Math.sin \() mergestr jjj p6090inc mul p6090hinc add 60 add 12 string cvs mergestr (*pi/180\) + ) mergestr } for ( 0 ; \n\n) mergestr print (midnrgTot = ) 0 1 p6090 1 sub {/jjj exch store (Math.sin \() mergestr jjj p6090inc mul p6090hinc add 30 add 12 string cvs mergestr (*pi/180\) + ) mergestr } for ( 0 ; \n\n) mergestr print 1 1 p6090 {/curadder exch store (p) pulsesperquadrant p6090 2 mul sub curadder add cvi 10 string cvs mergestr (nrg = a00x * 0.5 * Math.sin\() mergestr curadder 1 sub p6090inc mul p6090hinc add 30 add 10 string cvs mergestr (*pi/180\) /hinrgTot ; \n) mergestr print } for (\n) print 1 1 p6090 {/curadder exch store (p) pulsesperquadrant p6090 sub curadder add cvi 10 string cvs mergestr (nrg = a00x * 0.5 * Math.sin\() mergestr curadder 1 sub p6090inc mul p6090hinc add 60 add 10 string cvs mergestr (*pi/180\) /hinrgTot ; \n) mergestr print } for (\n) print 1 1 p6090 {/curadder exch store (p) pulsesperquadrant p6090 sub curadder add cvi 10 string cvs mergestr (s = (180/pi) * \(Math.acos \(Math.cos\() mergestr curadder 1 sub p6090inc mul p6090hinc add 60 add 10 string cvs mergestr (*pi/180\)\) - \(p) mergestr pulsesperquadrant p6090 sub curadder add cvi 10 string cvs mergestr (nrg/2 \)\) ;\n) mergestr print (p) pulsesperquadrant p6090 sub curadder add cvi 10 string cvs mergestr (e = (180/pi) * \(Math.acos \(Math.cos\() mergestr curadder 1 sub p6090inc mul p6090hinc add 60 add 10 string cvs mergestr (*pi/180\)\) + \(p) mergestr pulsesperquadrant p6090 sub curadder add cvi 10 string cvs mergestr (nrg/2 \)\) ;\n) mergestr print } for (\n) print %% forced single edge (lockrulep) pulsesperquadrant p6090 sub 1 add cvi 3 string cvs mergestr (s) mergestr cvn load ( ; \n) mergestr print (p) pulsesperquadrant p6090 sub cvi 10 string cvs mergestr (s = (180/pi) * \(Math.acos\(Math.cos\(p) mergestr pulsesperquadrant p6090 sub cvi 10 string cvs mergestr (e*pi/180\)\) - \(p) mergestr pulsesperquadrant p6090 sub cvi 10 string cvs mergestr (nrg \)\) \n\n) mergestr print % low guesses 1 1 p6090 1 sub {/curadder exch store (p) pulsesperquadrant p6090 2 mul sub curadder add cvi 10 string cvs mergestr (s = (180/pi) * \(Math.acos \(Math.cos\() mergestr curadder 1 sub p6090inc mul p6090hinc add 30 add 10 string cvs mergestr (*pi/180\)\) - \(p) mergestr pulsesperquadrant p6090 2 mul sub curadder add cvi 10 string cvs mergestr (nrg/2 \)\) \n) mergestr print (p) pulsesperquadrant p6090 2 mul sub curadder add cvi 10 string cvs mergestr (e = (180/pi) * \(Math.acos \(Math.cos\() mergestr curadder 1 sub p6090inc mul p6090hinc add 30 add 10 string cvs mergestr (*pi/180\)\) + \(p) mergestr pulsesperquadrant p6090 2 mul sub curadder add cvi 10 string cvs mergestr (nrg/2 \)\) \n) mergestr print } for (\n) print % lock rules deltavars { (lockrule) exch mergestr cvn load (; \n) mergestr print } forall (\n) print 1 1 pulsesperquadrant {10 string cvs /mm exch store (form.fp) mm mergestr (s.value = p) mergestr mm mergestr (s\n) mergestr print (form.fp) mm mergestr (e.value = p) mergestr mm mergestr (e\n) mergestr print } for (\n\n) print flush ( doStuffx (form) ;\n) print ( doStuffx (form) ;\n\n) print ( }\n\n) print % report from form (function reportFromForm (form) { \n\n ) print ( a00 = (eval (document.mainform.fa00.value)) * (pi/4) // unnormalize \n\n) print 1 1 pulsesperquadrant {10 string cvs /nn exch store (p)nn mergestr (e = eval \(document.mainform.fp) mergestr nn mergestr (e.value\)\n) mergestr print (p)nn mergestr (s = eval \(document.mainform.fp) mergestr nn mergestr (s.value\)\n) mergestr print } for ( }\n\n) print %% start high level procs % dostuff (// high level routines \n\n) print (function doStuffx (form) \n) print ( {reportFromForm (form); \n) print ( doStuff (form); \n) print ( reportToForm (form) ; \n) print ( } \n\n) print (function doStuff (form) \n) print ( {findHarms \(form\)} ; \n\n) print % harmonic calcs (function calcThd (form) { \n) print ( if (form.whichMS[0].checked){calcThdbeff (form) } ; // best efficiency \n) print ( if (form.whichMS[1].checked){calcThdnorm (form) } ; // normal sequence \n) print ( if (form.whichMS[2].checked){calcThddelta (form) } ; // delta friendly \n) print ( }\n\n) print % /calcthdgen accepts a name and a max harmonic value /calcthdgen {/highestharm exch store /functionname exch store (function ) functionname mergestr ((form) { \n\n) mergestr print (highestZeroharm = ) highestharm 4 string cvs mergestr ( ; \n\n) mergestr print % (zthd = "2-) highestharm 1 add 4 string cvs mergestr (" ; \n\n) mergestr print % (zthd = "2-" + highestZeroharm.toString() ; \n ) print (thd = Math.sqrt \( \n) print 3 2 highestharm {10 string cvs /curharmx exch store (\(h) curharmx cvi 10 lt {(0) mergestr} if curharmx mergestr (*h) mergestr curharmx cvi 10 lt {(0) mergestr} if curharmx mergestr (\) + \n) mergestr print } for ( 0 \) * 100 ; \n) print ( }\n\n) print } def (calcThdbeff) pulsesperquadrant 4 mul 1 sub cvi calcthdgen % best efficiency code (calcThdnorm) pulsesperquadrant 4 mul 3 sub cvi calcthdgen % normal code (calcThddelta) p6090 12 mul 3 sub cvi calcthdgen % delta code % redirect prediction (// redirects prediction per radio button \n\n) print (function preDict (form) { // this may be slow \n) print ( if (form.whichMS[0].checked){preDictBesteff (form) } ; // best efficiency \n) print ( if (form.whichMS[1].checked){preDictNormal (form) } ; // normal sequence \n)print ( if (form.whichMS[2].checked){preDictDelta (form) } ; // delta friendly \n) print ( } \n\n) print % automin code (var maxFirsttrips = 12 \n) print (var maxMintrips = 120 \n\n) print (function autoMin (form) {doStuff (form)\nxxthd = thd \n)print (self.status = "Optimizing first decimal place -- please wait" \n) print (reportToForm (form) \n\n) print ( for (j = 0 ; j < maxFirsttrips; j++) \n) print ( { addFirst (form) ; \n) print ( if (thd >= xxthd) break ; \n) print ( xxthd = thd ; \n ) print ( } \n\n) print ( if \((form.hominydp[1].checked) || \n) print ( (form.hominydp[2].checked) || \n) print ( (form.hominydp[3].checked) || \n) print ( (form.hominydp[4].checked) || \n) print ( (form.hominydp[5].checked) || \n) print ( (form.hominydp[6].checked) || \n) print ( (form.hominydp[7].checked) \n) print ( \) { \n\n) print (self.status = "Optimizing second decimal place -- please wait" \n) print (reportToForm (form) \n\n) print ( for (j = 0 ; j < maxMintrips; j++) \n) print ( {addSecond (form) ; \n) print ( if (thd >= xxthd) break ; \n) print ( xxthd = thd ; \n) print ( } \n\n) print ( if \((form.hominydp[2].checked) || \n) print ( (form.hominydp[3].checked) || \n) print ( (form.hominydp[4].checked) || \n) print ( (form.hominydp[5].checked) || \n) print ( (form.hominydp[6].checked) || \n) print ( (form.hominydp[7].checked) \n) print ( \) { \n\n) print (self.status = "Optimizing third decimal place -- please wait" \n) print (reportToForm (form) \n\n) print ( for (j = 0 ; j < maxMintrips; j++) \n) print ( { addThird (form) ; \n) print ( if (thd >= xxthd) break ; \n) print ( xxthd = thd ; \n) print ( } \n\n) print ( if \((form.hominydp[3].checked) || \n) print ( (form.hominydp[4].checked) || \n) print ( (form.hominydp[5].checked) || \n) print ( (form.hominydp[6].checked) || \n) print ( (form.hominydp[7].checked) \n) print ( \) { \n\n) print (self.status = "Optimizing fourth decimal place -- please wait" \n) print (reportToForm (form) \n\n) print ( for (j = 0 ; j < maxMintrips; j++) \n) print ( { addFourth (form) ; \n) print ( if (thd >= xxthd) break ; \n) print ( xxthd = thd ; \n) print ( } \n\n) print ( if \((form.hominydp[4].checked) || \n) print ( (form.hominydp[5].checked) || \n) print ( (form.hominydp[6].checked) || \n) print ( (form.hominydp[7].checked) \n) print ( \) { \n\n) print (self.status = "Optimizing fifth decimal place -- please wait" \n) print (reportToForm (form) \n\n) print ( for (j = 0 ; j < maxMintrips; j++) \n) print ( { addFifth (form) ; \n) print ( if (thd >= xxthd) break ; \n) print ( xxthd = thd ; \n) print ( } \n\n) print ( if \((form.hominydp[5].checked) || \n) print ( (form.hominydp[6].checked) || \n) print ( (form.hominydp[7].checked) \n) print ( \) { \n\n) print (self.status = "Optimizing sixth decimal place -- please wait" \n) print (reportToForm (form) \n\n) print ( for (j = 0 ; j < maxMintrips; j++) \n) print ( { addSixth (form) ; \n) print ( if (thd >= xxthd) break ; \n) print ( xxthd = thd ; \n) print ( } \n\n) print ( if \((form.hominydp[6].checked) || \n) print ( (form.hominydp[7].checked) \n) print ( \) { \n\n) print (self.status = "Optimizing seventh decimal place -- please wait" \n) print (reportToForm (form) \n\n) print ( for (j = 0 ; j < maxMintrips; j++) \n) print ( { addSeventh (form) ; \n) print ( if (thd >= xxthd) break ; \n) print ( xxthd = thd ; \n) print ( } \n\n) print ( if \((form.hominydp[7].checked) \n) print ( \) { \n) print (self.status = "Optimizing eighth decimal place -- please wait" \n) print (reportToForm (form) \n\n) print ( for (j = 0 ; j < maxMintrips; j++) \n) print ( { addEighth (form) ; \n) print ( if (thd >= xxthd) break ; \n) print ( xxthd = thd ; \n) print ( } \n\n) print ( } // if 8 \n) print ( } // if 7 or more \n) print ( } // if 6 or more \n) print ( } // if 5 or more \n) print ( } // if 4 or more \n) print ( } // if 3 or more \n) print ( } // if 2 or more \n\n) print ( reportToForm (form) \n) print ( self.status = "Done" \n) print ( } \n\n) print % adder codes (function addFirst (form) \n) print ({ \n) print ( incD5 = 0.1 ; \n) print ( maxIncs = 100 ; \n) print ( addAny (form); \n) print (} \n\n) print (function addSecond (form) \n) print ({ \n) print ( incD5 = 0.01 ; \n) print ( maxIncs = 100 ; \n) print ( addAny (form); \n) print (} \n\n) print (function addThird (form) \n) print ({ \n) print ( incD5 = 0.001 ; \n) print ( maxIncs = 100 ; \n) print ( addAny (form); \n) print (} \n\n) print (function addFourth (form) \n) print ({ \n) print ( incD5 = 0.0001 ; \n) print ( maxIncs = 100 ; \n) print ( addAny (form); \n) print (} \n\n) print (function addFifth (form) \n) print ({ \n) print ( incD5 = 0.00001 ; \n) print ( maxIncs = 100 ; \n) print ( addAny (form); \n) print (} \n\n) print (function addSixth (form) \n) print ({ \n) print ( incD5 = 0.000001 ; \n) print ( maxIncs = 100 ; \n) print ( addAny (form); \n) print (} \n\n) print (function addSeventh (form) \n) print ({ \n) print ( incD5 = 0.0000001 ; \n) print ( maxIncs = 100 ; \n) print ( addAny (form); \n) print (} \n\n) print (function addEighth (form) \n) print ({ \n) print ( incD5 = 0.00000001 ; \n) print ( maxIncs = 100 ; \n) print ( addAny (form); \n) print (} \n\n) print % addAny intercept from radio buttons ( function addAny (form) { \n) print ( if (form.whichMS[0].checked){addAnyreg (form) } ; // best efficiency \n) print ( if (form.whichMS[1].checked){addAnyreg (form) } ; // normal sequence \n) print ( if (form.whichMS[2].checked){addAnydelta(form) } ; // delta friendly \n) print ( } \n\n) print (// improved optimizer routines \n\n) print (function minimizethd (form, pzz, lockRule) { \n) print ( xthd = thd ; \n) print (for (i = 0 ; i < maxIncs ; i++) // pulse edge up \n\n) print ( {if (thd > xthd){ break} ; // quit after minimum \n) print ( xthd = thd ; \n) print ( eval( pzz + " += incD5 " ) ;\n) print ( eval(lockRule) ;\n) print ( doStuff (form) ;\n) print ( }\n\n) print (xthd = thd ; \n\n) print ( for (i = 0 ; i < maxIncs ; i++) // pulse edge down\n\n) print ( {if (thd > xthd){ break} ; // quit after minimum\n) print ( xthd = thd ;\n) print ( eval( pzz + " -= incD5 " ) ;\n) print ( eval(lockRule) ; \n) print ( doStuff (form) ;\n) print ( }\n\n) print ( eval( pzz + " += incD5 " ) // correct undershoot \n) print ( eval(lockRule) ;\n) print ( doStuff (form) ;\n) print ( }\n\n) print (//format: minimizethd (form, "p3e", "p1e = p3e - 60") or (form, "")\n\n) print % add any regular (function addAnyreg (form) \n\n) print ({ doStuff (form) \n\n) print 1 1 pulsesperquadrant {10 string cvs /oo exch store (minimizethd \(form, "p) oo mergestr (s",""\)) mergestr (\n) mergestr print (minimizethd \(form, "p) oo mergestr (e",""\)) mergestr (\n) mergestr print } for (\n) print (reportToForm (form) // leave one at end \n)print (}\n\n) print %%%% addany delta %%%%%% WARNING: MUST HAND ENTER LOCK RULES search: ZZZZZZZ %%%%%%%%% (function addAnydelta \(form\){ \n\n) print savelockruleforlater % repeat lock rules ( doStuff (form) \n\n) print deltavars { /kkkk exch store (minimizethd \(form, ") kkkk mergestr (", ") mergestr (lockrule) kkkk mergestr cvn load mergestr (" \) \n) mergestr print } forall (reportToForm (form) // leave one at end \n)print (}\n\n) print % guess new amp (// guessNewamp is the same for best eff, normal, and delta magic sinewaves. \n) print (// nothing special used for delta; automin forces locking. \n\n) print (function guessNewamp (form) { \n\n) print 1 1 pulsesperquadrant {10 string cvs /pp exch store (p)pp mergestr (s = p) mergestr pp mergestr (s - \(\(\(p) mergestr pp mergestr (d * ampdelta\) - p) mergestr pp mergestr (d\)/2\) ; \n) mergestr print (p)pp mergestr (e = p) mergestr pp mergestr (e + \(\(\(p) mergestr pp mergestr (d * ampdelta\) - p) mergestr pp mergestr (d\)/2\) ; \n) mergestr print } for ( } \n\n) print % adjust amplitude routines... (function adjAmpl (form) { \n\n) print ( reportFromForm (form) ; \n) print ( doStuff (form)\n) print 1 1 pulsesperquadrant {10 string cvs /qq exch store (p) qq mergestr (d = p) mergestr qq mergestr (e - p) mergestr qq mergestr (s ; \n) mergestr print } for ( \n\n) print ( a00 = (eval (document.mainform.fa00.value)) * (pi/4) // unnormalize \n) print ( ampdelta = a00 / a01 \n) print ( guessNewamp (form) \n\n ) print ( form.fa01.value = a01* (4 / pi) ; // only scaling used \n\n) print 1 1 pulsesperquadrant {10 string cvs /rr exch store (form.fp) rr mergestr (s.value = p) mergestr rr mergestr (s \n) mergestr print (form.fp) rr mergestr (e.value = p) mergestr rr mergestr (e \n) mergestr print } for ( \n) print (doStuffx (form) \n) print (reportToForm (form) \n) print (autoMin (form) ; \n) print ( } \n\n) print % quantization routines (// quantization routines find distortions for given number of amplitude data bits. \n\n) print (maxdegrees = 20 ; // number of degrees corresponding to "full scale" delay.\n\n) print (function adjQuant8 (form) {qincr = maxdegrees / 256 ; \nquantany (form)} ; \n) print (function adjQuant10 (form) {qincr = maxdegrees / 1024 ; \nquantany (form)} ; \n) print (function adjQuant12 (form) {qincr = maxdegrees / 4096 ; \nquantany (form)} ; \n) print (function adjQuant16 (form) {qincr = maxdegrees / (256 * 256); \n quantany (form) }; \n) print (function adjQuant24 (form) {qincr = maxdegrees / (256 * 256 * 256); \nquantany (form)} ; \n\n ) print (function quantany (form) { \n\n) print 1 1 pulsesperquadrant {10 string cvs /ss exch store (p) ss mergestr (s = qincr * \( Math.round \(p) mergestr ss mergestr (s /qincr \)\) \n) mergestr print (p) ss mergestr (e = qincr * \( Math.round \(p) mergestr ss mergestr (e /qincr \)\) \n) mergestr print } for ( \n) print 1 1 pulsesperquadrant {10 string cvs /tt exch store (form.fp) tt mergestr (s.value = p) mergestr tt mergestr (s ; \n) mergestr print (form.fp) tt mergestr (e.value = p) mergestr tt mergestr (e ; \n) mergestr print } for ( \n) print ( doStuffx (form) ; // update recalculation \n\n) print ( } \n\n) print (// end Gonzo autogenerated code \n\n) print flush % html trailer (\ \n\n) print (\ \n\n) print (\\
Pulse Positions
\n) print (in Degrees
                   Target Amplitude: 
                          Target Power: