back to list

Hobbit scales

🔗genewardsmith <genewardsmith@sbcglobal.net>

9/25/2010 3:31:30 PM

Some time back I introduced dwarf scales, which start from a p-limit val v and define a p-limit JI scale by by choosing for each nonzero
value i mod v[1] the smallest positive odd integer n such that v(n) = i mod v[1]. On the other hand for rank two temperaments we have MOS scales. The hobbit scale is a generalization of both, which defines a canonical scale for any val v tempering out a list of commas c, which is tuned in the temperament defined by c.

The standard Euclidean norm on weighted monzos provides a canonical Euclidean metric on interval space. Projecting othogonally from a set of intervals consisting of the commas + 2 in this metric defines a canonical projection map from the p-limit to a lattice of interval classes. Given a val v tempering out the commas c, we choose the smallest lattice element q (ie, the one nearest the origin) for each i, 0 <= i < v[1] such that v(q) mod v[1] = i. This assumes q is expressed in terms of rational numbers, but since v tempers out the commas and we plan to temper the result that result is independent of the particular choice of q. The result is well-defined except when v[1] is an even number, where both q and 2/q have the same length. We may break the tie by choosing the smallest of the two tempered values; that is, the one less than 600 cents. Since the result is now unique up to choice of tuning, I propose calling it Temperament[n] where "Temperament" is the name of the temperament, and n is v[1].

When the temperament is rank two, this gives the n-note MOS. For ranks larger than two, we get a scale in the temperament of the commas c which is more likely to be constant structure and etc than most constructions. When the comma list is empty we get a JI scale which is an alternative as a canonical choice to the dwarf scales and which sometimes seems preferable (comparing the 34-note 5-limit dwarf with the hobbit is illuminating in that regard.)

🔗Carl Lumma <carl@lumma.org>

9/26/2010 1:59:33 AM

Gene wrote:

>The standard Euclidean norm on weighted monzos provides a canonical
>Euclidean metric on interval space. Projecting othogonally from a set
>of intervals consisting of the commas + 2 in this metric defines a
>canonical projection map from the p-limit to a lattice of interval
>classes. Given a val v tempering out the commas c, we choose the
>smallest lattice element q (ie, the one nearest the origin) for each
>i, 0 <= i < v[1] such that v(q) mod v[1] = i. This assumes q is
>expressed in terms of rational numbers, but since v tempers out the
>commas and we plan to temper the result that result is independent of
>the particular choice of q.

This seems similar to the method for constructing dwarves.
Is there a succinct way to describe the difference?

>The result is well-defined except when
>v[1] is an even number, where both q and 2/q have the same length. We
>may break the tie by choosing the smallest of the two tempered values;
>that is, the one less than 600 cents. Since the result is now unique
>up to choice of tuning, I propose calling it Temperament[n] where
>"Temperament" is the name of the temperament, and n is v[1].

Is the capital letter important here, like, are miracle[72]
and Miracle[72] different things?

>When the temperament is rank two, this gives the n-note MOS.

How is it done with a pair of vals? The method above only seems
to refer to a single val.

-Carl

🔗genewardsmith <genewardsmith@sbcglobal.net>

9/26/2010 12:11:28 PM

--- In tuning-math@yahoogroups.com, Carl Lumma <carl@...> wrote:

> This seems similar to the method for constructing dwarves.
> Is there a succinct way to describe the difference?

Dwarves start in a corner and work away from it in the positive direction for all primes, and hobbits start in the center and work outwards symmetrically. Also, dwarves use odd Tenney height, while hobbits use Euclidean interval space distance. The biggest difference is that hobbits are defined for regular temperaments.

> >up to choice of tuning, I propose calling it Temperament[n] where
> >"Temperament" is the name of the temperament, and n is v[1].
>
> Is the capital letter important here, like, are miracle[72]
> and Miracle[72] different things?

I use the capital letter to flag that it is a MOS, and since hobbits are generalized MOS, I thought I could keep the capitals.

> >When the temperament is rank two, this gives the n-note MOS.
>
> How is it done with a pair of vals? The method above only seems
> to refer to a single val.

It's not done with a pair of vals, other than that you can use a pair of vals rather than a list of commas to define the temperament if it is rank two. But then, of course, you've got a MOS.

🔗Carl Lumma <carl@lumma.org>

9/27/2010 3:00:06 AM

Gene wrote:

>> This seems similar to the method for constructing dwarves.
>
>The biggest difference
>is that hobbits are defined for regular temperaments.

Aha

>> Is the capital letter important here, like, are miracle[72]
>> and Miracle[72] different things?
>
>I use the capital letter to flag that it is a MOS,

Cool, I hadn't known.

>and since hobbits
>are generalized MOS, I thought I could keep the capitals.

OK

>> How is it done with a pair of vals? The method above only seems
>> to refer to a single val.
>
>It's not done with a pair of vals, other than that you can use a pair
>of vals rather than a list of commas to define the temperament if it
>is rank two. But then, of course, you've got a MOS.

You describe the construction using a single val v, which maps
intervals in the "lattice of interval classes" to the integers
(mod the number of steps per octave). For each integer you take
the lattice element closest to the origin as the canonical one,
and there's your scale. Correct?

I think I'm not getting the projection -- how to get the lattice
of interval classes from the commas of v. And then how to plug
coordinates of this lattice into v to get the integers.

-Carl

🔗genewardsmith <genewardsmith@sbcglobal.net>

9/27/2010 7:57:09 AM

--- In tuning-math@yahoogroups.com, Carl Lumma <carl@...> wrote:

> I think I'm not getting the projection -- how to get the lattice
> of interval classes from the commas of v.

You don't get it from the commas of v, you get it from the commas of the temperament, which are also the commas of v, but not all of them. As for the projection, does this help?

http://xenharmonic.wikispaces.com/Planar+Temperament

And then how to plug
> coordinates of this lattice into v to get the integers.

One way to do that is to use rational numbers for the generators; you don't use this as a tuning, but you can apply v to them directly. Since v tempers out the commas of the temperament, this gives a unique answer. Or you can first compute the mapping which sends coordinates of a lattice point to an integer representing v applied to that lattice point.

🔗Graham Breed <gbreed@gmail.com>

10/25/2010 3:14:36 AM

This is still the only hobbit definition I know of, so as they're
being suggested for other purposes I'll try and understand it.

On 26 September 2010 02:31, genewardsmith <genewardsmith@sbcglobal.net> wrote:
> Some time back I introduced dwarf scales, which start from a p-limit val v and define a p-limit JI scale by by choosing for each nonzero
> value i mod v[1] the smallest positive odd integer n such that v(n) = i mod v[1]. On the other hand for rank two temperaments we have MOS scales. The hobbit scale is a generalization of both, which defines a canonical scale for any val v tempering out a list of commas c, which is tuned in the temperament defined by c.

I take it v[1] is the number of steps to an octave (2:1). What's
v(n)? Carl said down-thread that dwarf scales take the simplest ratio
that maps to the given number of scale steps. Is that right? If so
how do you get it from v(n) = i mod v[1]?

If the commas define the temperament, they must be unison vectors.

The next paragraph's so dense I'm going to have to break it up.
Nearly every sentence has something I don't understand.

> The standard Euclidean norm on weighted monzos provides a canonical Euclidean metric on interval space.

With Tenney weighting, that'll give the scalar complexity of the
temperament class defined by the monzo as a unison vector, won't it?
That looks straightforward. Do we assume Tenney weighting?

> Projecting othogonally from a set of intervals consisting of the commas + 2 in this metric defines a canonical projection map from the p-limit to a lattice of interval classes.

This is your square matrix, is it? Taken from an intermediate
calculation in the least squares optimization. Is it weighted?

Where does +2 come from?

Why interval classes? I thought they were octave equivalent. If so,
what did you do with the octaves? And what's the norm?

> Given a val v tempering out the commas c, we choose the smallest lattice element q (ie, the one nearest the origin) for each i, 0 <= i < v[1] such that v(q) mod v[1] = i.

Element of what lattice? The octave equivalent projection above, with
the undefined norm? And this v(q) comes up again.

> This assumes q is expressed in terms of rational numbers, but since v tempers out the commas and we plan to temper the result that result is independent of the particular choice of q.

How can it be expressed in terms of rationals if it's a lattice
element? Lattice elements are expressed in terms of integers.
Otherwise, what makes it a lattice element?

> The result is well-defined except when v[1] is an even number, where both q and 2/q have the same length. We may break the tie by choosing the smallest of the two tempered values; that is, the one less than 600 cents.

Okay, that seems clear, in itself.

> Since the result is now unique up to choice of tuning, I propose calling it Temperament[n] where "Temperament" is the name of the temperament, and n is v[1].

And v[1] is the number of notes in an octave.

> When the temperament is rank two, this gives the n-note MOS. For ranks larger than two, we get a scale in the temperament of the commas c which is more likely to be constant structure and etc than most constructions. When the comma list is empty we get a JI scale which is an alternative as a canonical choice to the dwarf scales and which sometimes seems preferable (comparing the 34-note 5-limit dwarf with the hobbit is illuminating in that regard.)

It does? That's nice. More likely than what other constructions?

Graham

🔗genewardsmith <genewardsmith@sbcglobal.net>

10/25/2010 12:15:12 PM

--- In tuning-math@yahoogroups.com, Graham Breed <gbreed@...> wrote:

> > Some time back I introduced dwarf scales, which start from a p-limit val v and define a p-limit JI scale by by choosing for each nonzero
> > value i mod v[1] the smallest positive odd integer n such that v(n) = i mod v[1].

> I take it v[1] is the number of steps to an octave (2:1). What's
> v(n)?

v is an equal temperament val, so v(2) is the number of steps in an octave, which is the same as the first coefficient of the val, v[1].

Carl said down-thread that dwarf scales take the simplest ratio
> that maps to the given number of scale steps. Is that right?

It takes the smallest odd integer which maps to the given number of steps modulo octaves.

> If the commas define the temperament, they must be unison vectors.

If you say so. To me, they are commas.

> The next paragraph's so dense I'm going to have to break it up.
> Nearly every sentence has something I don't understand.
>
> > The standard Euclidean norm on weighted monzos provides a canonical Euclidean metric on interval space.
>
> With Tenney weighting, that'll give the scalar complexity of the
> temperament class defined by the monzo as a unison vector, won't it?

"Scalar complexity" sounds like gibberish to my mind, so I can't easily retain the definition. And no, I am not kidding nor trying to give you a hard time, this is really true of me. Assuming "temperament class" means the same as "temperament", you may be asking if the norm of the monzo for a temperament defined by a single comma is the same as its complexity.
It should be proportional, but I don't know why you think this is important here.

> That looks straightforward. Do we assume Tenney weighting?

Yes, if by that you mean multiplying the prime p coordinate by log2(p).

> > Projecting othogonally from a set of intervals consisting of the commas + 2 in this metric defines a canonical projection map from the p-limit to a lattice of interval classes.
>
> This is your square matrix, is it? Taken from an intermediate
> calculation in the least squares optimization. Is it weighted?

Its an orthogonal projection, which like any projection can be given by an idempotent (P = P^2) square matrix P. I don't know what you mean by the weighting question, but we are working in weighted coordinates, and would need to transform the matrix to get the corresponding matrix in unweighted coordinates, which can be useful. In that case, the matrix is no longer symmetric, since the norm is no longer given by the dot product, but it projects unweighted monzos directly without first needing to weight them.

> Where does +2 come from?

I mean the octave, 2, is added to the list of commas.

> Why interval classes? I thought they were octave equivalent. If so,
> what did you do with the octaves? And what's the norm?

They are octave equivalent only since 2 is added to the commas. The norm (really, seminorm if we are not looking at equivalence classes) is the ordinary dot product norm on the projected monzos.

> > Given a val v tempering out the commas c, we choose the smallest lattice element q (ie, the one nearest the origin) for each i, 0 <= i < v[1] such that v(q) mod v[1] = i.
>
> Element of what lattice? The octave equivalent projection above, with
> the undefined norm? And this v(q) comes up again.

I defined the norm. The lattice is the lattice of projected monzos in the subspace, and the norm is the dot product norm.

> > This assumes q is expressed in terms of rational numbers, but since v tempers out the commas and we plan to temper the result that result is independent of the particular choice of q.
>
> How can it be expressed in terms of rationals if it's a lattice
> element? Lattice elements are expressed in terms of integers.
> Otherwise, what makes it a lattice element?

It's a lattice element since given a q, there is one and only one lattice point associated to it.

🔗Carl Lumma <carl@lumma.org>

10/25/2010 1:56:00 PM

Graham wrote:

>> Some time back I introduced dwarf scales, which start from a p-limit
>> val v and define a p-limit JI scale by by choosing for each nonzero
>> value i mod v[1] the smallest positive odd integer n such that v(n)
>> = i mod v[1]. On the other hand for rank two temperaments we have MOS
>> scales. The hobbit scale is a generalization of both, which defines
>> a canonical scale for any val v tempering out a list of commas c,
>> which is tuned in the temperament defined by c.
>
> I take it v[1] is the number of steps to an octave (2:1). What's
> v(n)?

The integer v sends n to. Note the round brackets.

> Carl said down-thread that dwarf scales take the simplest ratio
> that maps to the given number of scale steps. Is that right? If so
> how do you get it from v(n) = i mod v[1]?

I think he takes each scale degree (i mod v[1]) and tries odd
integers (n) from 1 on up until he gets that scale degree number
(mod v[1]) out. Then go on to the next scale degree.

>> Projecting othogonally from a set of intervals consisting of the
>> commas + 2 in this metric defines a canonical projection map from
>> the p-limit to a lattice of interval classes.
[snip]
>Where does +2 come from?

He makes the factor 2 a comma, 'adding' it to the list of
commas.

>Why interval classes? I thought they were octave equivalent. If so,
>what did you do with the octaves? And what's the norm?

They're octave equivalent and he got rid of them by adding 2
to the commas.

>> Given a val v tempering out the commas c, we choose the smallest
>> lattice element q (ie, the one nearest the origin) for each i,
>> 0 <= i < v[1] such that v(q) mod v[1] = i.
>
>Element of what lattice? The octave equivalent projection above, with
>the undefined norm?

No, the usual JI lattice.

-Carl

🔗Carl Lumma <carl@lumma.org>

10/25/2010 2:10:42 PM

>> Carl said down-thread that dwarf scales take the simplest ratio
>> that maps to the given number of scale steps. Is that right?
>
>It takes the smallest odd integer which maps to the given number of
>steps modulo octaves.

This may help:
http://lumma.org/tuning/gws/dwarf.htm

-Carl

🔗Graham Breed <gbreed@gmail.com>

10/28/2010 11:48:23 AM

"genewardsmith" <genewardsmith@sbcglobal.net> wrote:

> v is an equal temperament val, so v(2) is the number of
> steps in an octave, which is the same as the first
> coefficient of the val, v[1].

Okay.

> Carl said down-thread that dwarf scales take the
> simplest ratio
> > that maps to the given number of scale steps. Is that
> > right?
>
> It takes the smallest odd integer which maps to the given
> number of steps modulo octaves.

Okay.

> > With Tenney weighting, that'll give the scalar
> > complexity of the temperament class defined by the
> > monzo as a unison vector, won't it?
>
> "Scalar complexity" sounds like gibberish to my mind, so
> I can't easily retain the definition. And no, I am not
> kidding nor trying to give you a hard time, this is
> really true of me. Assuming "temperament class" means the
> same as "temperament", you may be asking if the norm of
> the monzo for a temperament defined by a single comma is
> the same as its complexity. It should be proportional,
> but I don't know why you think this is important here.

Well, it does give me a hard time when you keep on with
these terminology wars. It's important because it helps us
to check we understand each other. A simple "yes" would
have sufficed.

> > That looks straightforward. Do we assume Tenney
> > weighting?
>
> Yes, if by that you mean multiplying the prime p
> coordinate by log2(p).

That's it.

> > > Projecting othogonally from a set of intervals
> > > consisting of the commas + 2 in this metric defines a
> > > canonical projection map from the p-limit to a
> > > lattice of interval classes.
> >
> > This is your square matrix, is it? Taken from an
> > intermediate calculation in the least squares
> > optimization. Is it weighted?
>
> Its an orthogonal projection, which like any projection
> can be given by an idempotent (P = P^2) square matrix P.
> I don't know what you mean by the weighting question, but
> we are working in weighted coordinates, and would need to
> transform the matrix to get the corresponding matrix in
> unweighted coordinates, which can be useful. In that
> case, the matrix is no longer symmetric, since the norm
> is no longer given by the dot product, but it projects
> unweighted monzos directly without first needing to
> weight them.

You obviously do know what weighting is, because you're
talking about it. I asked if the matrix was weighted. You
haven't answered. And I still have to ask because the
worked example I went to doesn't seem to be consistently
weighted. (I'll try to find that and go through it.)

I'll give some formulas here. Because I need some
ASCIIfication, I may as well follow GP, and actually make
it GP code.

The operator * does multiplication, including matrix
multiplication. A ~ after a symbol returns the transpose.
I've defined my own inverse function:

inverse(x) = matadjoint(x)/matdet(x)

The weighting matrix W has each diagonal equal to the log
of a prime, so it works in mapping space:

Tenney weighting(mapping) = {
size = matsize(mapping)[1];
matrix(size, size, i, j, (i==j) * log(2) /
log(prime(i))) }
W = Tenney weighting(mapping)

We'll start with a mapping matrix with each row a val. This
is the projection I think you're using:

P = W*mapping*inverse(mapping~*W*W*mapping)*mapping~*W

You defined it in another thread and it does generally make
sense. The unweighted alternative is:

P = mapping*inverse(mapping~*mapping)*mapping~

This is also a projection matrix, and so also symmetric.
All I need to know is that you're not using it or I-P.

The other issue is about whether the vectors you feed in
are weighted or not. This is something I'm still not clear
about. Unweighted vectors mean an interval as a row vector
transforms as:

interval * P

so its size is

interval * P * interval~

If it's weighted, then we'd have

interval * inverse(W) * P

I think the latter makes more sense, because the inverse(W)
cancels with the first W in P, so that the units agree.

interval * inverse(W) * P * inverse(W) * interval~
=
interval*mapping*inverse(mapping~*W*W*mapping)*mapping~*interval~

> > Where does +2 come from?
>
> I mean the octave, 2, is added to the list of commas.

Okay.

> > Why interval classes? I thought they were octave
> > equivalent. If so, what did you do with the octaves?
> > And what's the norm?
>
> They are octave equivalent only since 2 is added to the
> commas. The norm (really, seminorm if we are not looking
> at equivalence classes) is the ordinary dot product norm
> on the projected monzos.

How do you define the octave-equivalent transformation?

> > > Given a val v tempering out the commas c, we choose
> > > the smallest lattice element q (ie, the one nearest
> > > the origin) for each i, 0 <= i < v[1] such that v(q)
> > > mod v[1] = i.
> >
> > Element of what lattice? The octave equivalent
> > projection above, with the undefined norm? And this
> > v(q) comes up again.
>
> I defined the norm. The lattice is the lattice of
> projected monzos in the subspace, and the norm is the dot
> product norm.

So P is a complexity metric, as you said in another message.

If we go back to this big formula:

interval*mapping*inverse(mapping~*W*W*mapping)*mapping~*interval~

The interval*mapping at the front gives the interval in
tempered coordinates. And similarly on the other side.
That makes the middle bit a quadratic form on intervals in
the temperament (that is, intervals described by the
mapping, not ratio space):

K = inverse(mapping~*W*W*mapping)

The complexity of an interval in the temperament is:

comp(interval) = interval*K*interval~

The same complexity of an interval in ratio space is:

tempcomp(interval) = interval*mapping*K*mapping~*interval~

What this means is that this is also a quadratic form on
intervals in the temperament, which is simpler.
Calculating the inverse of a rank 2 or 3 matrix is, of
course, fairly easy. It also has my "scalar" property that
you so deride, in that it's independent of the choice of
generators. If you replace mapping with mapping * X where
X is a unimodular transformation,

Kx = inverse(X~*mapping~*W*W*mapping*X)
= inverse(~)*(mapping~*W*W*mapping)*inverse(X~)
Kx = inverse(X) * K * inverse(X~)

Calculating the complexity of an interval with this metric
means

comp(interval) = interval * X * Kx * X~ * interval~
= interval * X * inverse(X) * K * inverse(X~) * interval~
= interval * K * interval~

I'll leave it there and carry on in another thread.

> > > This assumes q is expressed in terms of rational
> > > numbers, but since v tempers out the commas and we
> > > plan to temper the result that result is independent
> > > of the particular choice of q.
> >
> > How can it be expressed in terms of rationals if it's a
> > lattice element? Lattice elements are expressed in
> > terms of integers. Otherwise, what makes it a lattice
> > element?
>
> It's a lattice element since given a q, there is one and
> only one lattice point associated to it.

If you're talking about frequency ratios, not if the lattice
is for a temperament.

Graham