[sdiy] Low Frequency Square to Sine Waveshaper

harrybissell at wowway.com harrybissell at wowway.com
Tue May 27 22:38:48 CEST 2008


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




More information about the Synth-diy mailing list