SV: Re: [sdiy] Much progress on Buchla waveshaper analysis
Aaron Lanterman
lanterma at ece.gatech.edu
Sun Nov 20 21:50:05 CET 2005
On Sun, 20 Nov 2005, karl dalen wrote:
> Nice samples,...but.... using 3 cascaded stages of the
> http://www.cgs.synth.net/modules/cgs52_folder.html R Lockart nonlinear
> shaper produces lot of folds who gives a more gentle, rounded DX'ish FM
> to it and that to a LOT less circuitry compared to the Buchla, but with
I plan to explore other waveshapers at some point; right now, my prime
goal was to understand and model that specific Buchla circuit, with the
idea of making a software model of the Easel.
> all those stages shouldent the Buchla sound produced have a lot more of
> folds during symetry sweep? It sounds a bit hollow and weak!
Beats me.
I haven't analyzing the FET-controlled VCA and offset circuitry at the
front end, so I don't know what voltage ranges are expected going in.
The voltage threshold where the op amp turns "on" are:
0.6 1.8 2.994 4.08 and 5.46
The final summing amp also acts as a single-pole low-pass filter with a
relatively low cutoff frequency; that might take off some of the edge. I
haven't modeled it yet.
For those who are curious, my MATLAB code is below...
- Aaron
% function y = timbre2(xin);
fs = 44100;
tt = 0:(1/fs):3.5;
% For timbresweep
%x = 2 .* tt .* cos(220*2*pi*tt);
% For symmetrysweep
x = tt + 2 .* cos(220*2*pi*tt);
x = [x x(end:-1:1)];
% to plot waveshape
%x = -6:0.01:6;
supplylimit = 6;
R1 = [68E3 30E3 91E3 49.9E3 10E3]
R2 = 100E3;
R3 = [33E3 68E3 56E3 43.2E3 100E3];
Rout = 1.2E6;
C = 100E-12;
threshold = [0, supplylimit .* R1 ./ R2];
funky_multiplier = 1 ./ (1 ./ R1 + 1 ./ R2 + 1 ./ R3);
mixer_multiplier = Rout ./ R3;
total_multiplier = [Rout ./ 240E3, funky_multiplier .* mixer_multiplier];
signs = [1 1 1 -1 -1 -1];
terms = zeros(length(x), 6);
for loop = 1:length(threshold);
terms(:,loop) = signs(loop) .* (abs(x) > threshold(loop)) ...
.* total_multiplier(loop)...
.* (x - sign(x) .* threshold(loop));
end
y = sum(terms,2);
soundsc(y,fs);
y = y ./ (max(abs(y)));
%wavwrite(y,fs,'buchla_timbresweep.wav')
wavwrite(y,fs,'buchla_symmetrysweep.wav');
More information about the Synth-diy
mailing list