.MCAD 304010000 1 74 49 0 .CMD PLOTFORMAT 0 0 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 NO-TRACE-STRING 0 2 1 0 1 1 NO-TRACE-STRING 0 3 2 0 1 1 NO-TRACE-STRING 0 4 3 0 1 1 NO-TRACE-STRING 0 1 4 0 1 1 NO-TRACE-STRING 0 2 5 0 1 1 NO-TRACE-STRING 0 3 6 0 1 1 NO-TRACE-STRING 0 4 0 0 1 1 NO-TRACE-STRING 0 1 1 0 1 1 NO-TRACE-STRING 0 2 2 0 1 1 NO-TRACE-STRING 0 3 3 0 1 1 NO-TRACE-STRING 0 4 4 0 1 1 NO-TRACE-STRING 0 1 5 0 1 1 NO-TRACE-STRING 0 2 6 0 1 1 NO-TRACE-STRING 0 3 0 0 1 1 NO-TRACE-STRING 0 4 1 0 1 1 NO-TRACE-STRING 0 1 1 21 15 0 0 3 .CMD FORMAT rd=d ct=10 im=i et=3 zt=15 pr=3 mass length time charge temperature tr=0 vm=0 .CMD SET ORIGIN 0 .CMD SET TOL 0.001000000000000 .CMD SET PRNCOLWIDTH 8 .CMD SET PRNPRECISION 4 .CMD PRINT_SETUP 1.200000 1.218750 1.200000 1.200000 0 .CMD HEADER_FOOTER 1 1 *empty* *empty* *empty* 0 1 *empty* *empty* *empty* .CMD HEADER_FOOTER_FONT fontID=14 family=Arial points=10 bold=0 italic=0 underline=0 colrid=-1 .CMD HEADER_FOOTER_FONT fontID=15 family=Arial points=10 bold=0 italic=0 underline=0 colrid=-1 .CMD DEFAULT_TEXT_PARPROPS 0 0 0 .CMD DEFINE_FONTSTYLE_NAME fontID=0 name=Variables .CMD DEFINE_FONTSTYLE_NAME fontID=1 name=Constants .CMD DEFINE_FONTSTYLE_NAME fontID=2 name=Text .CMD DEFINE_FONTSTYLE_NAME fontID=4 name=User^1 .CMD DEFINE_FONTSTYLE_NAME fontID=5 name=User^2 .CMD DEFINE_FONTSTYLE_NAME fontID=6 name=User^3 .CMD DEFINE_FONTSTYLE_NAME fontID=7 name=User^4 .CMD DEFINE_FONTSTYLE_NAME fontID=8 name=User^5 .CMD DEFINE_FONTSTYLE_NAME fontID=9 name=User^6 .CMD DEFINE_FONTSTYLE_NAME fontID=10 name=User^7 .CMD DEFINE_FONTSTYLE fontID=0 family=Times^New^Roman points=12 bold=0 italic=0 underline=0 colrid=-1 .CMD DEFINE_FONTSTYLE fontID=1 family=Times^New^Roman points=12 bold=0 italic=0 underline=0 colrid=-1 .CMD DEFINE_FONTSTYLE fontID=2 family=Arial points=12 bold=0 italic=0 underline=0 colrid=1 .CMD DEFINE_FONTSTYLE fontID=4 family=Arial points=12 bold=0 italic=0 underline=0 colrid=-1 .CMD DEFINE_FONTSTYLE fontID=5 family=Courier^New points=12 bold=0 italic=0 underline=0 colrid=-1 .CMD DEFINE_FONTSTYLE fontID=6 family=News^Gothic points=12 bold=1 italic=0 underline=0 colrid=-1 .CMD DEFINE_FONTSTYLE fontID=7 family=Script points=10 bold=0 italic=0 underline=0 colrid=-1 .CMD DEFINE_FONTSTYLE fontID=8 family=Roman points=10 bold=0 italic=0 underline=0 colrid=-1 .CMD DEFINE_FONTSTYLE fontID=9 family=Modern points=10 bold=0 italic=0 underline=0 colrid=-1 .CMD DEFINE_FONTSTYLE fontID=10 family=Times^New^Roman points=10 bold=0 italic=0 underline=0 colrid=-1 .CMD UNITS U=1 .CMD DIMENSIONS_ANALYSIS 0 0 .CMD COLORTAB_ENTRY 0 0 0 .CMD COLORTAB_ENTRY 128 0 0 .CMD COLORTAB_ENTRY 0 128 0 .CMD COLORTAB_ENTRY 128 128 0 .CMD COLORTAB_ENTRY 0 0 128 .CMD COLORTAB_ENTRY 128 0 128 .CMD COLORTAB_ENTRY 0 128 128 .CMD COLORTAB_ENTRY 128 128 128 .CMD COLORTAB_ENTRY 192 192 192 .CMD COLORTAB_ENTRY 255 0 0 .CMD COLORTAB_ENTRY 0 255 0 .CMD COLORTAB_ENTRY 255 255 0 .CMD COLORTAB_ENTRY 0 0 255 .CMD COLORTAB_ENTRY 255 0 255 .CMD COLORTAB_ENTRY 0 255 255 .CMD COLORTAB_ENTRY 255 255 255 .CMD COLORTAB_ENTRY 10 36 106 .TXT 2 1 36 0 0 Cg b73.000000,73.000000,495 {\rtf\ansi \deff0{\colortbl;\red0\green0\blue0;}{\fonttbl{\f0\fcharset0 \fnil Arial;}}\plain\cf1\fs24 \pard TANH FUNCTION SINE SHAPER--SEAT OF THE PANTS VERSION\par \par \par Phil Hobbs\par \par ElectroOptical Innovations \par March 8, 2010\par \par The strategy here is to generate a tri wave, then bung it into a BJT diff pair to curve it over a bit, and subtract a bit of the original tri wave to get rid of the cusps. To realy optimize this you want to compute the THD as a function of the amplitude going into the tanh shaper and the amount of tri wave subtracted, but that's too much like work for a sci.electronics.design post!} .EQN 37 0 1 0 0 {0:imax}NAME:1023 .EQN 0 14 2 0 0 {0:i}NAME:0;{0:imax}NAME .EQN 4 -14 40 0 0 {0:nmax}NAME:100 .EQN 0 13 41 0 0 {0:n}NAME:0;{0:nmax}NAME .EQN 1 14 42 0 0 ({0:f}NAME)[({0:i}NAME,{0:n}NAME):2*{0:\p}NAME*({0:i}NAME)/({0:imax}NAME+1)*(2*{0:n}NAME+1) .EQN 8 -27 43 0 0 ({0:trifour}NAME)[({0:i}NAME):{0:n}NAME$(((-1))^({0:n}NAME)*{0:sin}NAME(({0:f}NAME)[({0:i}NAME,{0:n}NAME)))/(((2*{0:n}NAME+1))^(2)) .EQN 8 3 44 0 0 ({0:fakesine}NAME)[({0:i}NAME):({0:tanh}NAME(0.4*({0:trifour}NAME)[({0:i}NAME))-0.316*({0:trifour}NAME)[({0:i}NAME))*14.97 .EQN 4 -3 45 0 0 &&(_n_u_l_l_&_n_u_l_l_)&({0:trifour}NAME)[({0:i}NAME),({0:fakesine}NAME)[({0:i}NAME),(({0:fakesine}NAME)[({0:i}NAME)-{0:sin}NAME(({0:f}NAME)[({0:i}NAME,0)))*100@&&(_n_u_l_l_&_n_u_l_l_)&{0:i}NAME 0 0 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 NO-TRACE-STRING 0 2 1 0 1 1 NO-TRACE-STRING 0 3 2 0 1 1 NO-TRACE-STRING 0 4 3 0 1 1 NO-TRACE-STRING 0 1 4 0 1 1 NO-TRACE-STRING 0 2 5 0 1 1 NO-TRACE-STRING 0 3 6 0 1 1 NO-TRACE-STRING 0 4 0 0 1 1 NO-TRACE-STRING 0 1 1 0 1 1 NO-TRACE-STRING 0 2 2 0 1 1 NO-TRACE-STRING 0 3 3 0 1 1 NO-TRACE-STRING 0 4 4 0 1 1 NO-TRACE-STRING 0 1 5 0 1 1 NO-TRACE-STRING 0 2 6 0 1 1 NO-TRACE-STRING 0 3 0 0 1 1 NO-TRACE-STRING 0 4 1 0 1 1 NO-TRACE-STRING 0 1 1 46 32 12 0 3 .EQN 51 7 14 0 0 \(({0:i}NAME$((({0:fakesine}NAME)[({0:i}NAME)-{0:sin}NAME(({0:f}NAME)[({0:i}NAME,0))))^(2))/({0:i}NAME$({0:sin}NAME(({0:f}NAME)[({0:i}NAME,0)))^(2)))={18999}?_n_u_l_l_ .EQN 6 36 29 0 0 {0:norm}NAME:\((4)/(1024)) .EQN 5 -36 26 0 0 {0:FS}NAME:{0:cfft}NAME({0:fakesine}NAME)*{0:norm}NAME .EQN 4 0 25 0 0 {0:TF}NAME:{0:cfft}NAME({0:trifour}NAME)*{0:norm}NAME .EQN 1 31 31 0 0 {0:max}NAME({0:FS}NAME)={0}?_n_u_l_l_ .EQN 3 -38 48 0 0 0&-120&(_n_u_l_l_&_n_u_l_l_)&20*{0:log}NAME(|(({0:FS}NAME)[({0:i}NAME))),20*{0:log}NAME(|(({0:TF}NAME)[({0:i}NAME)))@20&&(_n_u_l_l_&_n_u_l_l_)&{0:i}NAME 0 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 3 0 0 0 2 2 NO-TRACE-STRING 4 0 1 0 2 2 NO-TRACE-STRING 0 3 2 0 1 1 NO-TRACE-STRING 0 4 3 0 1 1 NO-TRACE-STRING 0 1 4 0 1 1 NO-TRACE-STRING 0 2 5 0 1 1 NO-TRACE-STRING 0 3 6 0 1 1 NO-TRACE-STRING 0 4 0 0 1 1 NO-TRACE-STRING 0 1 1 0 1 1 NO-TRACE-STRING 0 2 2 0 1 1 NO-TRACE-STRING 0 3 3 0 1 1 NO-TRACE-STRING 0 4 4 0 1 1 NO-TRACE-STRING 0 1 5 0 1 1 NO-TRACE-STRING 0 2 6 0 1 1 NO-TRACE-STRING 0 3 0 0 1 1 NO-TRACE-STRING 0 4 1 0 1 1 NO-TRACE-STRING 0 1 1 55 52 12 0 3 .TXT 62 0 49 0 0 Cg a73.000000,73.000000,179 {\rtf\ansi \deff0{\colortbl;\red0\green0\blue0;}{\fonttbl{\f0\fcharset0 \fnil Arial;}}\plain\cf1\fs24 \pard The tanh shaper (even in this poorly optimized version) gives about 0.5% THD, predominantly third harmonic. Higher harmonics go away nearly completely due to cancelling the cusp.}