________________________________________________________________________
Date: Tue, 14 Aug 2001.
Subject: [tuning] Purity Ratings by Joos Vos
Vos found that in general, the relationship between the average purity
rating (y) and the amount of tempering (x) in cents can be adequately
described by means of the exponential function y = a*exp (b*x). The
values of a and b for each set of conditions are shown in the following
table:
Tone Musical Tempering Harmonics of Tone 2
Duration Interval Direction All Odd
-------------- --------------
a b r^2 a b r^2
0.5 Fifth Compress 8.8 .040 .99 9.7 .037 .97
Stretch 8.9 -.038 .99 9.4 -.035 .96
Major Third Compress 6.6 .028 .88 7.9 .023 .97
Stretch 7.0 -.026 .96 8.1 -.017 .98
0.25 Fifth Compress 8.6 .037 .99 9.2 .028 .99
Stretch 8.2 -.033 .98 8.8 -.028 .96
Major Third Compress 6.7 .025 .97 7.7 .022 .91
Stretch 6.7 -.019 .97 7.8 -.014 .93
Just to clarify, x is negative in the case of compression, and positive
in the case of stretching.
------------------------------------------------------------------------
Date: Mon, 08 Jul 2002.
Subject: [harmonic_entropy] HE algorithms
I posted a summary of some of joos vos's research to the tuning list --
basically he found that the "purity" rating for harmonic intervals, even
with sine waves, follows an absolute exponential, rather than bell,
curve (with the peak, of course, at the just ratio). It's easy enough
to incorporate this idea into the harmonic entropy function by using a
probability function of the form exp(-|r|/s) instead of exp(-r^2/s).
There may be some justification for this in the neurological timing
mechanisms for pitch perception that have come to the forefront in the
last 20 years. The resulting curves seem to be fractal-like; there
appears to be a infinitude of ever-finer local minima at more and more
complex ratios, but only big minima, corresponding as always to the
simplest ratios, are visible. The results have seemed to provide a much
more satisfying dissonance function for various listeners such as Margo,
Gene, and George.
Here's the matlab code i'm using to calculate the latest curves, which
are tenney-seeded, 1/sqrt(n*d)-width-approximated, Vos-curve entropy
functions:
function entropy=t2vosinp(cents,r,s);
in=cents/1200*log(2);
a=size(r,1);
p=r(:,1).*exp(-abs((in-log(r(:,2)./r(:,3)))/s));
n=sum(p);
p=p/n;
p(find(p==0))=ones(size(find(p==0)));
entropy=-sum(p.*log(p))';
The input arguments are cents (the independent variable which is the
actual interval in cents), s (the hearing resolution, usually .01 for a
1% hearing resolution), and the seed-ratio array r. r has 3 columns:
"width", numerator, and denominator. For example, for the latest graph
I produced for George, which was seeded with Tenney limit n*d <=10000,
r was an array with 63868 rows. Here are the first 10 rows:
0.01 1 10000
0.0100005000375031 1 9999
0.010001000150025 1 9998
0.0100015003375844 1 9997
0.0100020006002001 1 9996
0.0100025009378908 1 9995
0.0100030013506754 1 9994
0.0100035018385725 1 9993
0.0100040024016011 1 9992
0.0100045030397799 1 9991
Clear? This itself only required a few lines of code to generate. So
altogether, not much is required in the way of coding, and the entire
harmonic entropy function could probably be written as a single-line
expression if you have fancy enough symbology for taking sums over a
pair of indices which are restricted to be mutually prime, etc. . . .
Happy computing!
------------------------------------------------------------------------