[sdiy] Low Frequency Square to Sine Waveshaper

harrybissell at wowway.com harrybissell at wowway.com
Wed May 28 14:57:39 CEST 2008


I just did a quick simulation of the four bit solution from
Electronic Design...

http://electronicdesign.com/Files/29/6293/Figure_01.gif

Its bad... VERY bad.  No one would use this...

H^) harry




On Tue, 27 May 2008 15:38:48 -0500, harrybissell wrote
> The best improvement might indeed (as you mention in the last line)
> be making the counter synchronous. For 4 bits its no extra trouble...
> 
> H^) harry
> 
> On Tue, 27 May 2008 21:46:43 +0200, ASSI wrote
> > On Dienstag 27 Mai 2008, Paul Perry wrote:
> > > Boring or not, that EDN circuit is only 4 bits, so it's going to be
> > > very lumpy indeed.
> > 
> > I shouldn't make such obtuse jokes, sorry - but I find the stuff 
> > they've left out is almost more interesting than what is written in 
> > such articles...  As a thought provoking device they are quite 
> > useful however and once in a while they might even solve the problem 
> > at hand without further ado.
> > 
> > > How difficult would it be to extend the principle to 12 bits say?
> > > (impossible for a non-mathematician like myself, but there is
> > > obviously Talent on this list..)
> > 
> > Due to the symmetry properties of the sine wave the arrangement as 
> > shown in EDN is actually quite good and not easy to improve without 
> > a lot more effort (does "diminishing returns" ring a bell?).  Hang 
> > on, I'll try to explain.  The Walsh coefficients for the first 64 
> > Walsh functions (the 0th would be for any DC component, which is of 
> > course not present in these signals) for the "standard" waveforms 
> > (normalized to amplitude 1.0) are:
> > 
> >    n      Sine    Cosine   |/| Saw   /|/ Saw   Sin-Tri  Cos-Tri
> >    0   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >    1   0.63662   0.00000  -0.50000   0.50000   0.50000  0.00000
> >    2   0.00000   0.63662   0.00000   0.00000   0.00000  0.50000
> >    3   0.00000   0.00000  -0.25000  -0.25000   0.00000  0.00000
> >    4   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >    5  -0.26370   0.00000   0.00000   0.00000  -0.25000  0.00000
> >    6   0.00000   0.26370   0.00000   0.00000   0.00000  0.25000
> >    7   0.00000   0.00000  -0.12500  -0.12500   0.00000  0.00000
> >    8   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >    9  -0.05245   0.00000   0.00000   0.00000   0.00000  0.00000
> >   10   0.00000  -0.05245   0.00000   0.00000   0.00000  0.00000
> >   11   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   12   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   13  -0.12663   0.00000   0.00000   0.00000  -0.12500  0.00000
> >   14   0.00000   0.12663   0.00000   0.00000   0.00000  0.12500
> >   15   0.00000   0.00000  -0.06250  -0.06250   0.00000  0.00000
> >   16   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   17  -0.01247   0.00000   0.00000   0.00000   0.00000  0.00000
> >   18   0.00000  -0.01247   0.00000   0.00000   0.00000  0.00000
> >   19   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   20   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   21   0.00517   0.00000   0.00000   0.00000   0.00000  0.00000
> >   22   0.00000  -0.00517   0.00000   0.00000   0.00000  0.00000
> >   23   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   24   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   25  -0.02597   0.00000   0.00000   0.00000   0.00000  0.00000
> >   26   0.00000  -0.02597   0.00000   0.00000   0.00000  0.00000
> >   27   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   28   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   29  -0.06270   0.00000   0.00000   0.00000  -0.06250  0.00000
> >   30   0.00000   0.06270   0.00000   0.00000   0.00000  0.06250
> >   31   0.00000   0.00000  -0.03125  -0.03125   0.00000  0.00000
> >   32   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   33  -0.00308   0.00000   0.00000   0.00000   0.00000  0.00000
> >   34   0.00000  -0.00308   0.00000   0.00000   0.00000  0.00000
> >   35   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   36   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   37   0.00128   0.00000   0.00000   0.00000   0.00000  0.00000
> >   38   0.00000  -0.00128   0.00000   0.00000   0.00000  0.00000
> >   39   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   40   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   41   0.00025   0.00000   0.00000   0.00000   0.00000  0.00000
> >   42   0.00000   0.00025   0.00000   0.00000   0.00000  0.00000
> >   43   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   44   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   45   0.00061   0.00000   0.00000   0.00000   0.00000  0.00000
> >   46   0.00000  -0.00061   0.00000   0.00000   0.00000  0.00000
> >   47   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   48   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   49  -0.00622   0.00000   0.00000   0.00000   0.00000  0.00000
> >   50   0.00000  -0.00622   0.00000   0.00000   0.00000  0.00000
> >   51   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   52   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   53   0.00258   0.00000   0.00000   0.00000   0.00000  0.00000
> >   54   0.00000  -0.00258   0.00000   0.00000   0.00000  0.00000
> >   55   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   56   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   57  -0.01295   0.00000   0.00000   0.00000   0.00000  0.00000
> >   58   0.00000  -0.01295   0.00000   0.00000   0.00000  0.00000
> >   59   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   60   0.00000   0.00000   0.00000   0.00000   0.00000  0.00000
> >   61  -0.03128   0.00000   0.00000   0.00000  -0.03125  0.00000
> >   62   0.00000   0.03128   0.00000   0.00000   0.00000  0.03125
> >   63   0.00000   0.00000  -0.01562  -0.01562   0.00000  0.00000
> > 
> > I hope you see how the symmetry present in the signal maps to which 
> > Walsh coefficients are non-zero.  The ramp functions don't need 
> > anything else but binary weighted square waves of successively 
> > doubling frequency for their approximation as anybody who has 
> > watched the output from a binary counter can attest.  That's your 
> > cue as to where the square waves coming from the 4040 are present in 
> > the table.  Now if you multiply (and that operation maps to an XOR 
> > operation in the circuit) any Walsh function W_n with W_1, then you 
> > get W_(n-1).  That's the second cue you need to decipher the EDN circuit.
> > 
> > Equipped with that information one sees that the EDN circuit 
> > actually approximates a cosine, this is done via the XOR arrangement 
> > with Q4, which consequently is associated with W_1.  So the inputs 
> > to the opamp are W_2, W_6, W_14 and W30, which are incidentally the 
> > only positve coefficients in the series (anything negative would 
> > have to go to the other input of the opamp).  This is the moral 
> > equivalent of approximating the first 180° of a cosine with just 
> > square waves (which are sometimes called Rademacher functions),
> >  hence my original quip.  If you plug into the above series you'll 
> > come up with different resistor values; I haven't conclusively 
> > figured out why (I think they've tried to compensate for the output 
> > resistance of the XOR switches, which would compute to about 5k with 
> > their choice of values).  There are four negative terms W_10, W_18,
> >  W_22 and W26 which would improve the approximation quality but not 
> > the resolution in time, but unfortunately these require a three 
> > level deep XOR tree (four terms), which would mean adding three 4030 
> > for not much of an improvement.
> > 
> > Doubling the resolution in time is possible at the expense of 
> > another 4030 (~300k on that output), but the approximation error is 
> > already larger than the extra precision afforded by adding that 
> > term.  Still, going to "12bits", that is using all the available 
> > outputs from the 4040 (but no XOR tree for producing higher order 
> > Walsh terms) needs two more 4030 with approximately double the 
> > resistor value into each consecutive stage, so the last one is close 
> > to 10MOhm and you'd have to match the resistors to 100ppm for this 
> > to be of any practical use.  Also you'd have to make sure that the 
> > noise sources in the system woudn't swamp that, either.  Also keep 
> > in mind that the 4040 is a ripple counter and the switching instants 
> > just won't line up nicely enough, adding quite a bit of glitch noise 
> > all by itself.
> > 
> > Achim.
> > -- 
> > +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk]>+
> > 
> > SD adaptations for KORG EX-800 and Poly-800MkII V0.9:
> > http://Synth.Stromeko.net/Downloads.html#KorgSDada
> > 
> > _______________________________________________
> > Synth-diy mailing list
> > Synth-diy at dropmix.xs4all.nl
> > http://dropmix.xs4all.nl/mailman/listinfo/synth-diy
> 
> Harry Bissell & Nora Abdullah 4eva
> 
> _______________________________________________
> Synth-diy mailing list
> Synth-diy at dropmix.xs4all.nl
> http://dropmix.xs4all.nl/mailman/listinfo/synth-diy


Harry Bissell & Nora Abdullah 4eva




More information about the Synth-diy mailing list