[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