Interesting Paper available on Moog VCF
Eli Brandt
eli at ux3.sp.cs.cmu.edu
Fri Sep 20 19:15:51 CEST 1996
Tom May wrote:
> Any polynomial with a finite number of terms will produce a band
> limited output when used as a transfer function. But the bandwidth of
> the output will be N times the bandwidth of the input, where N is the
> degree of the polynomial.
Oh, duh: T_n has degree n, and they're orthogonal. So let me lay this
out to see if I've got it yet:
Take the case where we've got harmonic partials and they're all in
phase. So the input signal x(t) is a sum of cos(kt) terms, out to K.
Each term a_k cos(kt) can be expanded, using the Chebychev* T_n, to a
degree-k polynomial in cos(t). Waveshaping their sum with a degree-D
polynomial gives one of degree-KD. Then translate each cos^n(t) back
to a sum of cos(kt) terms, k<=n. So we have a sum of cos(kt) terms,
k<=KD.
If we have harmonic partials but they're not in phase, each can be
split into a sine and cosine term. After the waveshaping, each term
has a maximum total degree of KD in {sin, cos}. Any desired
waveshaping curve can be approximated arbitrarily closely by some
polynomial, so waveshaping of harmonic signals can be band-limited.
The tricky case is inharmonic partials. If they're related by a ratio
of integers, the above stuff generalizes. If they're irrationally
related, I think you're hosed.
> Actually, out = sgn(in) gave pretty good results :-)
Yeah, I like comparator functions. You may get harmonics all the way
out to daylight, but it sounds good to me...
* The n'th Chebychev polynomial is defined as
T_n(x) = cos(n arccos x)
This is nice because then T_n(cos t) = cos(n arccos cos t) = cos nt,
so the Chebychevs are very useful for controlled waveshaping. What's
a little surprising is that they turn out to be polynomials at all --
T_1(x) = x, and you can get a recurrence relation.
--
Eli Brandt
eli+ at cs.cmu.edu
More information about the Synth-diy
mailing list