Projection
A projection matrix, or projection for short[1], is an object in regular temperament theory (RTT) that uniquely identifies a specific tuning of a specific regular temperament.[2]
Shape
A projection is typically a square matrix with shape [math]\displaystyle{ (d, d) }[/math], where [math]\displaystyle{ d }[/math] is the dimensionality of the temperament (for exceptions to this, see Projection#Projecting to other spaces).
With respect to other RTT objects
Projections are perhaps best understood in comparison with other more frequently used RTT objects:
The mapping
Like mappings, projections:
- represent regular temperaments,
- transform JI intervals, and
- accept these JI intervals as inputs in the form of prime-count vectors.
Perhaps the simplest way to explain the difference would be to say that a mapping outputs intervals in the form of generator-count vectors, whereas a projection outputs intervals that are also in the form of prime-count vectors.
The key reason for this difference is that mappings represent temperaments in the abstract, that is, how intervals are approximated but without any specific information about how to embed them into tuning space; to find the cents value[3] of a mapped interval — one that has been mapped by a mapping — one must further map it by a generator tuning map. On the other hand, a projected interval — one that has been mapped by a projection, or "projected" — already includes the embedding information, and so their cents value can be obtained by mapping them with the generic just tuning map for the primes. In other words, the projection has applied tuning to the mapped intervals in a particular way, by embedding them back into the original JI space, where the tuning is known, so all we're really doing at that point is sizing the interval.
While a projection maps one prime-count vector to another prime-count vector, the output prime-count vector is usually quite different from the input prime-count vector. Most notably, the input interval is justly intoned, and therefore the entries of its prime-count vector are integers, while the output interval is tempered, and therefore the entries of its prime-count vector may be non-integers. Some temperament tunings are chosen so that certain JI intervals remain unchanged by the temperament; in such cases, if the input interval is one of the unchanged-intervals, then its output will exactly match the input.
The tuning map
Like a tuning map, a projection transforms a JI interval into a new interval that is both mapped and tuned. One key difference is that a tuning map sends the input interval straight to its cents value, whereas the projection sends the interval to an intermediate form as a prime-count vector with typically non-integer entries, which must be further mapped by the just tuning map to find its cents value. This difference in behavior is explained by the fact that the tuning map is the projection left-multiplied by the just tuning map, or in other words, that the tuning map projects the input interval and then sizes it to cents all in one go.
At a glance, tuning maps may seem more convenient, then. But the advantage of a projection is that it still identifies the tuning of a temperament, whereas the tuning map, due to being injected with and collapsed down with the just tuning map, has obscured that information and thereby lost the ability to serve as a unique identifier. It only serves the function of mapping intervals to cents values.
The generator embedding
A projection matrix may be found as the combination of a mapping with a generator embedding, through matrix multiplication. The mapping represents the approximation information in the abstract, i.e. abstracted from any specific embedding, while the generator embedding specifies such a embedding. And so together, the projection matrix represents the specific embedding of the given approximation, or in other words, specific tuning of the given temperament, de-abstracting it.
Multiplying the mapping and generator embedding together in the opposite order, [math]\displaystyle{ MG }[/math], instead gives an identity matrix, [math]\displaystyle{ I }[/math]. Using the example of 1/4-comma meantone again, [⟨1 1 0] ⟨0 1 4]}{[1 0 0⟩ [0 0 1/4⟩] = {[1 0} [0 1}]. This simply proves that the generator embedding is, in fact, a matrix of generators.
Think about it like any other interval mapping situation: if an interval is mapped to the generator-count vector [0 1}, that tells us that the interval maps to exactly one of the second generator and nothing else; in cases like this, we can say it that it is a member of the preimage for that second generator, or in other words, that it is one of the many possible JI intervals which is approximated by exactly one of that generator. And similarly, if an interval maps to a generator-count vector of [1 0}, that would mean that whatever prime-count vector we put in was a member of the preimage for the other generator.
So, if an entire matrix is mapped by a temperament's mapping matrix to an identity matrix, then that is a very special case; it tells us that each of this matrix's columns can be thought of as a prime-count vector that maps to a different one of each of that same temperament's generators. It is, in other words, a generator preimage transversal.
Example
The generator of meantone temperament is the fifth. A justly intoned fifth is the interval [math]\displaystyle{ \frac32 }[/math] at about 701.955 ¢, which as a 5-limit prime-count vector looks like [-1 1 0⟩, but the tuning of the fifth in the 1/4-comma tuning of meantone is [math]\displaystyle{ 5^\frac14 = \sqrt[4]5 }[/math] at about 696.578 ¢, which as a prime-count vector looks like [0 0 1/4⟩. So, by combining this vector for the tuned fifth with the vector [1 0 0⟩ for a purely-tuned octave [math]\displaystyle{ \frac21 }[/math] as the period, we produce the full generator embedding for 1/4-comma meantone as {[1 0 0⟩ [0 0 1/4⟩]:
[math]\displaystyle{
\left[ \begin{array} {rrr}
1 & 0 \\
0 & 0 \\
0 & \frac14 \\
\end{array} \right]
}[/math]
And so here is the projection matrix for quarter-comma meantone, shown as the product of that generator embedding with the meantone mapping:
[math]\displaystyle{
\begin{array} {c}
P \\
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 0 & 0 \\
0 & \frac14 & 1 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
G \\
\left[ \begin{array} {r}
1 & 0 \\
0 & 0 \\
0 & \frac14 \\
\end{array} \right]
\end{array}
\begin{array} {c}
M \\
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 1 & 4 \\
\end{array} \right]
\end{array}
}[/math]
Generator embedding
In order to understand projections, it is critical to understand the lesser-used and lesser-understood half of them: the generator embedding. So let's briefly cover this object next.
A generator embedding is an object that represents the embedding of a regular temperament from the tempered lattice back into tuning space. It could be thought of as representing the "tuning" information of a temperament, if one leaves out the actual "sizing" part of that (the conversion of prime factors to their logarithmic pitch size). It has one column for each of the temperament's generators. Each of these columns represents its generator's tuning in the form of a prime-count vector.
With respect to the generator tuning map
A more common way to view the tuning of a temperament than as a generator embedding is as a generator tuning map. In cases where tuning is thought of as approximation followed by embedding, the generator tuning map [math]\displaystyle{ 𝒈 }[/math] is closely related to the generator embedding [math]\displaystyle{ G }[/math]; it is simply [math]\displaystyle{ G }[/math] left-multiplied by the just tuning map [math]\displaystyle{ 𝒋 }[/math][4] (see Dave Keenan & Douglas Blumeyer's guide to RTT: units analysis#Just tuning map, generator embedding: generator tuning map). For example, since meantone is 5-limit, its just tuning map is ⟨log₂2 log₂3 log₂5] ≈ ⟨1.000 1.585 2.232], so 1/4-comma meantone's [math]\displaystyle{ 𝒈 }[/math] is ⟨1.000 1.585 2.232]·{[1 0 0⟩ [0 0 1/4⟩] = ⟨1.000 0.580], or in cents instead of octaves, that's ⟨1200.000 696.578].
Many popular regular temperament tuning schemes work by optimizing for the entries of [math]\displaystyle{ 𝒈 }[/math] directly, and many times it's not helpful or insightful to view the generators in non-integer prime-count vector form, which are reasons for [math]\displaystyle{ 𝒈 }[/math]'s popularity over [math]\displaystyle{ G }[/math]. Some practitioners may not even view tuning as an optimization problem and will simply choose values for [math]\displaystyle{ 𝒈 }[/math] on gut feeling. This is all to say that this idea of approximating and then re-embedding, AKA projecting, is not an inherently necessary feature of RTT; it is only one way to look at it which may be valuable to some musicians and theoreticians but completely bonkers-seeming and convoluted to others.
Units
The units of a prime-count vector are typically understood to be "primes", which is natural enough given their name. But the units of the generator embedding [math]\displaystyle{ G }[/math] are better taken to be [math]\displaystyle{ \text{p}/\text{g} }[/math], read "primes per generator." This makes sense because their job is to translate temperament generators back into terms of primes.
Here is an example generator embedding for a 5-limit, rank-2 temperament, with units given for each entry:
[math]\displaystyle{
\left[ \begin{array} {rrr}
1\;{}^{\text{p}_1}{\mskip -5mu/\mskip -3mu}_{\text{g}_1} & \frac13\;{}^{\text{p}_1}{\mskip -5mu/\mskip -3mu}_{\text{g}_2} \\
0\;{}^{\text{p}_2}{\mskip -5mu/\mskip -3mu}_{\text{g}_1} & {-\frac13}\;{}^{\text{p}_2}{\mskip -5mu/\mskip -3mu}_{\text{g}_2} \\
0\;{}^{\text{p}_3}{\mskip -5mu/\mskip -3mu}_{\text{g}_1} & \frac13\;{}^{\text{p}_3}{\mskip -5mu/\mskip -3mu}_{\text{g}_2} \\
\end{array} \right]
}[/math]
The subscripts indicate which primes and which generators are related. So the columns, as previously stated, correspond to the two generators of the temperament, [math]\displaystyle{ \text{g}_1 }[/math] and [math]\displaystyle{ \text{g}_2 }[/math], while the rows correspond to the three primes for this temperament, [math]\displaystyle{ \text{p}_1 }[/math], [math]\displaystyle{ \text{p}_2 }[/math], and [math]\displaystyle{ \text{p}_3 }[/math], which are primes 2, 3, and 5, respectively.
See also Dave Keenan & Douglas Blumeyer's guide to RTT: units analysis.
Uniqueness
As just mentioned, projection matrices represent specific tunings of abstract temperaments, being the matrix product of a generator embedding which provides the embedding information, and a mapping which provides the approximation information. Notably, not only does the projection matrix represent the tuning of a temperament, it does so uniquely. We can say that mappings and generator embeddings contain not only approximation and embedding information, but also generator form information, and it is this generator form information which causes them to be non-unique; however, when they are combined into a projection matrix, their generator form information cancels out, and so no matter which combination of matching mapping and generator embedding we choose for a given temperament tuning, we will end up with the same exact projection.[5]
Mapping non-uniqueness
To be clear, a mapping matrix does not uniquely represent approximation information. Multiple mappings can be found that describe the same temperament, in the sense that the same set of commas are vanished. This non-uniqueness is the reason why a canonical form for mappings was developed, which can be understood as a function which takes any equivalent mapping and converts it to the same exact mapping.
What distinguishes these equivalent mappings from each other is the sizes of the generators they use.
This concept is best demonstrated by example. Consider the following mapping :
[math]\displaystyle{
M_1 = \left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 1 & 4 \\
\end{array} \right]
}[/math]
This is an example of a mapping which represents meantone. This mapping represents it in a form where the first generator (the period) is an octave and the second generator (or simply the generator) is a perfect fifth. But this mapping also represents meantone:
[math]\displaystyle{
M_2 = \left[ \begin{array} {r}
1 & 2 & 4 \\
0 & {-1} & {-4} \\
\end{array} \right]
}[/math]
This mapping represents it in a form where the period is an octave still but the generator is a perfect fourth. We can also have:
[math]\displaystyle{
M_3 = \left[ \begin{array} {r}
1 & 0 & {-4} \\
0 & 1 & 4 \\
\end{array} \right]
}[/math]
Where the generator is a perfect twelfth, or even something like:
[math]\displaystyle{
M_4 = \left[ \begin{array} {r}
12 & 19 & 28 \\
7 & 11 & 16 \\
\end{array} \right]
}[/math]
which technically vanishes the meantone comma [math]\displaystyle{ \frac{81}{80} }[/math] — the main requirement of being a meantone temperament — but it has a period of about 76 ¢ and generator of about 41 ¢, which is pretty strange indeed.
What we can say is that generator form information differentiates these forms of the meantone mapping.[6]
Matching generator embeddings
For a given temperament tuning, such as quarter-comma meantone, each possible form of the mapping will be matched with a generator embedding which it multiplies together with to find the unique quarter-comma meantone projection matrix. For example, for the [⟨1 1 0] ⟨0 1 4]⟩ version we gave above which describes meantone in terms of an octave and a fifth, the matching generator embedding is:
[math]\displaystyle{
G_1 = \left[ \begin{array} {r}
1 & 0 \\
0 & 0 \\
0 & \frac14 \\
\end{array} \right]
}[/math]
We can see here in the first column that the period is given by the integer prime-count vector [1 0 0⟩, representing [math]\displaystyle{ 2^1 }[/math], and the fifth is given by the non-integer prime-count vector [0 0 [math]\displaystyle{ \frac14 }[/math]⟩, representing [math]\displaystyle{ \sqrt[4]{5} \approx 1.495 \approx 1.5 = \frac32 }[/math].
For the second version we gave above, then, [⟨1 2 4] ⟨0 -1 -4]⟩, which describes meantone in terms of an octave and a fourth, the matching generator embedding is:
[math]\displaystyle{
G_ 2 = \left[ \begin{array} {r}
1 & 1 \\
0 & 0 \\
0 & {-\frac14} \\
\end{array} \right]
}[/math]
This has the same period, but now the generator is [1 0 [math]\displaystyle{ {-\frac14} }[/math]⟩, representing [math]\displaystyle{ \frac{2}{\sqrt[4]{5}} \approx 1.337 \approx 1.\overline{3} \approx \frac43 }[/math].
Converging to the same projection
Now check out what happens when we find both [math]\displaystyle{ G_{1}M_{1} }[/math] and [math]\displaystyle{ G_{2}M_{2} }[/math]:
[math]\displaystyle{
\begin{array} {c}
P \\
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 0 & 0 \\
0 & \frac14 & 1 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
G_1 \\
\left[ \begin{array} {r}
1 & 0 \\
0 & 0 \\
0 & \frac14 \\
\end{array} \right]
\end{array}
\begin{array} {c}
M_1 \\
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 1 & 4 \\
\end{array} \right]
\end{array}
\\ \text{ } \\ \text{ } \\
\begin{array} {c}
P \\
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 0 & 0 \\
0 & \frac14 & 1 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
G_2 \\
\left[ \begin{array} {r}
1 & 1 \\
0 & 0 \\
0 & {-\frac14} \\
\end{array} \right]
\end{array}
\begin{array} {c}
M_2 \\
\left[ \begin{array} {r}
1 & 2 & 4 \\
0 & {-1} & {-4} \\
\end{array} \right]
\end{array}
\\
}[/math]
This shows us that there is no [math]\displaystyle{ P_1 }[/math] or [math]\displaystyle{ P_2 }[/math] or otherwise; we have only a single shared projection matrix [math]\displaystyle{ P }[/math] for any possible combination of mapping and generator bases representing this temperament tuning (which, again, in this case is quarter-comma meantone).
Keeping the mapping and generator embedding in sync
The way to transform from one mapping form [math]\displaystyle{ M_1 }[/math] to another equivalent mapping form [math]\displaystyle{ M_2 }[/math] is to perform elementary row operations, the most common of which is to add some multiple of one row to another (or subtract some multiple of one row from another). For more information on this, please see the detailed explanation here. Similarly, we can transform from one generator embedding [math]\displaystyle{ G_1 }[/math] to another equivalent generator embedding [math]\displaystyle{ G_2 }[/math] by performing elementary column operations.
Supposing one desires to transform from a pair of [math]\displaystyle{ M_1 }[/math] and [math]\displaystyle{ G_1 }[/math] to another pair of [math]\displaystyle{ M_2 }[/math] and [math]\displaystyle{ G_2 }[/math] where both pairs multiply to the same [math]\displaystyle{ P }[/math], or — said another way — you wish to keep your [math]\displaystyle{ M }[/math] and [math]\displaystyle{ G }[/math] in sync, the simplest approach would be to — for each elementary row operation you apply to [math]\displaystyle{ M }[/math] you must apply the opposite elementary column operation to [math]\displaystyle{ G }[/math], e.g. if you add three times the second row to the first row of [math]\displaystyle{ M }[/math], then you must subtract three times the second column from the first column of [math]\displaystyle{ G }[/math]. This is along the same lines as the explanations provided for manipulating generator form by changing forms of [math]\displaystyle{ M }[/math], which you can find here: Generator form manipulation.
For example, if we have [math]\displaystyle{ M_1 }[/math] = [⟨1 1 0] ⟨0 1 4]⟩ and [math]\displaystyle{ G_1 }[/math] = ⟨[1 0 0⟩ [0 0 [math]\displaystyle{ \frac14 }[/math]⟩], then [math]\displaystyle{ M_1 }[/math] and [math]\displaystyle{ G_1 }[/math] are in sync because they're both in the form where [math]\displaystyle{ g_1 }[/math] is ~2 and [math]\displaystyle{ g_2 }[/math] is ~3/2. Or if we have [math]\displaystyle{ M_2 }[/math] = [⟨1 0 -4] ⟨0 1 4]⟩ and [math]\displaystyle{ G_2 }[/math] = ⟨[1 0 0⟩ [1 0 [math]\displaystyle{ \frac14 }[/math]⟩] then they're still in sync because they're both [math]\displaystyle{ g_1 }[/math] ~2 and [math]\displaystyle{ g_2 }[/math] ~3 here. But if we mismatched those, they'd be out of sync. Those are both [math]\displaystyle{ M }[/math]'s for meantone, and both [math]\displaystyle{ G }[/math]'s that can work for quarter-comma meantone, but if you mismatch them with respect to the generator form information, you won't find the same [math]\displaystyle{ P }[/math] by matrix multiplication [math]\displaystyle{ GM }[/math].
(This notion of "sync" is the same idea pointed out in the diagram at the start of the "Obtaining objects from the projection" section below, with the note on [math]\displaystyle{ G }[/math] reading "(the one matching M)". And for more information on generator form information, see the "Generator information types" below.)
We note in particular that putting [math]\displaystyle{ M }[/math] and [math]\displaystyle{ G }[/math] into their canonical forms independently is not a guarantee that they will remain in sync; canonicalization will not necessarily arrive at the same generator form information in [math]\displaystyle{ G }[/math] as it does in [math]\displaystyle{ M }[/math].
Form matrix
When performing these elementary row and column operations, we can actually keep track of them in a way, by applying them in parallel to an identity matrix.
This is a special type of matrix called a unimodular matrix; that is, unimodularity is simply a property of a matrix which says that its determinant is ±1, which in itself is not particularly important except that it means the determinant is never 0 in which case the matrix would be uninvertible, and we do need it to be invertible. And this matrix will stay unimodular so long as we only apply elementary operations to it; that's what special about elementary operations.
Let's look at an example of this sort of form change tracking. Let's go from the octave-twelfth form of meantone to its octave-fifth form. We'll consider the octave-twelfth form to be our "home base" of sorts, and let it be "plain" [math]\displaystyle{ M }[/math], and mark the octave-fifth form with subscripts:
[math]\displaystyle{
\begin{align}
\begin{array} {c}
F \\
\left[ \begin{array} {c}
1 & 0 \\
{\color{blue}0} & {\color{blue}1} \\
\end{array} \right]
\end{array}
&\cdots
\begin{array} {c}
M \\
\left[ \begin{array} {c}
1 & 0 & -4 \\
{\color{blue}0} & {\color{blue}1} & {\color{blue}4} \\
\end{array} \right]
\end{array}
\\[24pt]
\begin{array} {c}
F_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1{\color{blue}+0} & 0{\color{blue}+1} \\
0 & 1 \\
\end{array} \right]
\end{array}
&\cdots
\begin{array} {c}
M_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1{\color{blue}+0} & 0{\color{blue}+1} & -4{\color{blue}+4} \\
0 & 1 & 4 \\
\end{array} \right]
\end{array}
\\[24pt]
\begin{array} {c}
F_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1 & 1 \\
0 & 1 \\
\end{array} \right]
\end{array}
&\cdots
\begin{array} {c}
M_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1 & 1 & 0 \\
0 & 1 & 4 \\
\end{array} \right]
\end{array}
\end{align}
}[/math]
Now that was only just one step, so it's not much of a feat. But you can keep going and going with your parallel changes to your [math]\displaystyle{ M }[/math] and [math]\displaystyle{ F }[/math] so long as you always stick to elementary operations, and everything we're about to discuss that you can do with trick will work just the same.
So end up with this as our unimodular matrix:
[math]\displaystyle{
\begin{array} {c}
F_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1 & 1 \\
0 & 1 \\
\end{array} \right]
\end{array}
}[/math]
What's powerful about this [math]\displaystyle{ F_{\text{8ave,5th}} }[/math] matrix is that we can now use it as a transformation on the original [math]\displaystyle{ M }[/math] to change it directly into the [math]\displaystyle{ M_{\text{8ave,5th}} }[/math] we arrived at via the elementary row operations:
[math]\displaystyle{
\begin{array} {c}
M_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1 & 0 & -4 \\
0 & 1 & 4 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
F_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1 & -1 \\
0 & 1 \\
\end{array} \right]
\end{array}
\begin{array} {c}
M \\
\left[ \begin{array} {c}
1 & 1 & 0 \\
0 & 1 & 4 \\
\end{array} \right]
\end{array}
}[/math]
So with one act of matrix multiplication, we can replace an arbitrarily large number of elementary row operations. Again, this may not seem so impressive considering in this case we only manipulated it by one step to begin with, but in general this is a very powerful effect. And, it synergizes with what happens to the generator embedding matrix simultaneously. That's what we'll look at next.
So, all of the same effects are there for the generator embedding matrix, but with respect to its columns:
[math]\displaystyle{
\begin{array} {c}
\begin{array} {c}
G \\
\left[ \begin{array} {c}
{\color{blue}1} & 1 \\
{\color{blue}0} & 0\\
{\color{blue}0} & \frac14 \\
\end{array} \right]
\end{array}
& &
\begin{array} {c}
G_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1 & 1{\color{blue}-1} \\
0 & 0{\color{blue}-0}\\
0 & \frac14{\color{blue}-0} \\
\end{array} \right]
\end{array}
& &
\begin{array} {c}
G_{\text{8ave,5th}} \\
\left[ \begin{array} {c}
1 & 0 \\
0 & 0 \\
0 & \frac14 \\
\end{array} \right]
\end{array}
\\ \vdots & & \vdots & & \vdots \\
\begin{array} {c}
F^{-1} \\
\left[ \begin{array} {c}
{\color{blue}1} & 0 \\
{\color{blue}0} & 1 \\
\end{array} \right]
\end{array}
& &
\begin{array} {c}
F_{\text{8ave,5th}}^{-1} \\
\left[ \begin{array} {c}
1 & 0{\color{blue}-1} \\
0 & 1{\color{blue}-0} \\
\end{array} \right]
\end{array}
& &
\begin{array} {c}
F_{\text{8ave,5th}}^{-1} \\
\left[ \begin{array} {c}
1 & -1 \\
0 & 1 \\
\end{array} \right]
\end{array}
\end{array}
}[/math]
Notice that we have [math]\displaystyle{ F^{-1} }[/math] here, the inverse of [math]\displaystyle{ F }[/math]. You may recall that previously we had stated that the changes we make to the generator embedding matrix to keep it in sync with the mapping were the inverses of the ones we were applying to the mapping. Well, now we can see that they are inverses not just in an informal sense, but a very literal mathematical way! In the beginning, when both [math]\displaystyle{ F }[/math] and [math]\displaystyle{ F^{-1} }[/math] were identity matrices, the fact that they are inverses is apparent, in the same way that 1⁻¹ or 1/1 is 1. But if you wish to double-check the following:
[math]\displaystyle{
\left[ \begin{array} {c}
1 & 1 \\
0 & 1 \\
\end{array} \right]
^{-1}
=
\left[ \begin{array} {c}
1 & -1 \\
0 & 1 \\
\end{array} \right]
}[/math]
Please go ahead and do so in your favored math software.
What this tells us is that anywhere we could write [math]\displaystyle{ P = GM }[/math] in our RTT equations, we can now write [math]\displaystyle{ P = GM = GF^{-1}FM }[/math].
The injection of these [math]\displaystyle{ F }[/math] matrices doesn't affect the temperament or tuning in any way. Think about it this way. 9/8 always goes to 193.157 cents in quarter comma meantone, whether you're using the octave-and-fifth form or the octave-and-fourth form or any other form. All the form does is tell you what your generator sizes themselves are. They generate (span) the same space regardless. [math]\displaystyle{ F }[/math] is only good for keeping the embedding and approximating parts of your projection in sync when you're changing the basis, that's all. The point is for it to have no effect on the general intervals.
In other words, the service it provides is rather to give us a way to speak of the generator form of a temperament with respect to a particular mapping and a particular generator embedding. In other words, if we possess a scheme for unambiguously determining a "home base" [math]\displaystyle{ M }[/math] — such as a canonical form, which we do have — and we possess a scheme for unambiguously determining a particular embedding — such as any tuning scheme which gives tunings expressible as embeddings (e.g. minimean, miniRMS) — then we now also have a way to describe with cold, hard matrices (i.e. not fuzzier instructions like "octave-fifth") what exact form we wish our generators to be in. We can speak of a pair of a linked bases — the generator embedding treated as a basis, and the mapping treated as a mapping-row basis — as the (generator) form of a temperament. And so a tuning system can be more fully specified than it could previously, leveraging this conceit.
It may be helpful to define [math]\displaystyle{ M_{\text{c}} }[/math] as the canonical mapping, the one in canonical form, and [math]\displaystyle{ G_{\text{c}} }[/math] as the one in "corresponding form" form to the canonical form of the mapping, i.e. per whichever tuning scheme is being used, it's the [math]\displaystyle{ G }[/math] you get from [math]\displaystyle{ M_{\text{c}} }[/math]. In this case, then with respect to [math]\displaystyle{ P_{\text{c}} = G_{\text{c}}M_{\text{c}} }[/math], any [math]\displaystyle{ M_{\text{x}} }[/math] and [math]\displaystyle{ G_{\text{x}} }[/math] are viable so long as [math]\displaystyle{ M_{\text{c}} = F_{\text{x}}M_{\text{x}} }[/math] and [math]\displaystyle{ G_{\text{c}} = G_{\text{x}}F_{\text{x}}^{-1} }[/math] for some generator form [math]\displaystyle{ F_{\text{x}} }[/math].
So, for a concrete example, we can say that for meantone temperament, given that its canonical form is the octave-twelfth form (that was no accident that we chose it as our "home base" earlier!) this generator form matrix [math]\displaystyle{ F_{\text{8ave,4th}} }[/math] represents the octave-fourth form:
[math]\displaystyle{
\begin{array} {c}
F_{\text{8ave,4th}} \\
\left[ \begin{array} {c}
1 & 2 \\
0 & -1 \\
\end{array} \right]
\end{array}
}[/math]
Because we have the quarter-comma tuning of meantone as our tuning, then we have this as our canonical [math]\displaystyle{ M }[/math] and corresponding [math]\displaystyle{ G }[/math]:
[math]\displaystyle{
\begin{array} {c}
G_{\text{c}} \\
\left[ \begin{array} {c}
1 & 1 \\
0 & 0\\
0 & \frac14 \\
\end{array} \right]
\end{array}
\begin{array} {c}
M_{\text{c}} \\
\left[ \begin{array} {c}
1 & 0 & -4 \\
0 & 1 & 4 \\
\end{array} \right]
\end{array}
}[/math]
And injecting [math]\displaystyle{ F_{\text{8ave,4th}} }[/math] and its inverse [math]\displaystyle{ F_{\text{8ave,4th}}^{-1} }[/math] (yes, it happens to be its own inverse):
[math]\displaystyle{
\begin{array} {c}
G_{\text{c}} \\
\left[ \begin{array} {c}
1 & 1 \\
0 & 0\\
0 & \frac14 \\
\end{array} \right]
\end{array}
\begin{array} {c}
F_{\text{8ave,4th}}^{-1} \\
\left[ \begin{array} {c}
1 & 2 \\
0 & -1 \\
\end{array} \right]
\end{array}
\begin{array} {c}
F_{\text{8ave,4th}} \\
\left[ \begin{array} {c}
1 & 2 \\
0 & -1 \\
\end{array} \right]
\end{array}
\begin{array} {c}
M_{\text{c}} \\
\left[ \begin{array} {c}
1 & 0 & -4 \\
0 & 1 & 4 \\
\end{array} \right]
\end{array}
}[/math]
We can then find [math]\displaystyle{ G_{\text{8ave,4th}} }[/math] and [math]\displaystyle{ M_{\text{8ave,4th}} }[/math] if we like, as [math]\displaystyle{ G_{\text{c}}F_{\text{8ave,4th}}^{-1} }[/math] and [math]\displaystyle{ F_{\text{8ave,4th}}M_{\text{c}} }[/math], respectively:
[math]\displaystyle{
\begin{array} {c}
G_{\text{8ave,4th}} \\
\left[ \begin{array} {c}
1 & 1 \\
0 & 0\\
0 & -\frac14 \\
\end{array} \right]
\end{array}
\begin{array} {c}
M_{\text{8ave,4th}} \\
\left[ \begin{array} {c}
1 & 2 & 4 \\
0 & -1 & -4 \\
\end{array} \right]
\end{array}
}[/math]
Units
The units of a projection matrix are a unique case: p/p, read "primes per prime". At first glance it may appear that this expression should cancel out. The reason why the primes in the numerator and the primes in the denominator do not cancel is that the former series of primes progresses across the matrix by rows while the latter series of primes progresses across the matrix by columns:
[math]\displaystyle{
\Large
\left[ \begin{array} {rrr}
\frac{\color{ForestGreen}\text{p}_1}{\color{ForestGreen}\text{p}_1} & \frac{\color{ForestGreen}\text{p}_1}{\color{NavyBlue}\text{p}_2} & \frac{\color{ForestGreen}\text{p}_1}{\color{Plum}\text{p}_3} \\[10pt]
\frac{\color{NavyBlue}\text{p}_2}{\color{ForestGreen}\text{p}_1} & \frac{\color{NavyBlue}\text{p}_2}{\color{NavyBlue}\text{p}_2} & \frac{\color{NavyBlue}\text{p}_2}{\color{Plum}\text{p}_3} \\[10pt]
\frac{\color{Plum}\text{p}_3}{\color{ForestGreen}\text{p}_1} & \frac{\color{Plum}\text{p}_3}{\color{NavyBlue}\text{p}_2} & \frac{\color{Plum}\text{p}_3}{\color{Plum}\text{p}_3} \\[10pt]
\end{array} \right]
}[/math]
So the primes only match along the main diagonal. There, they could be considered to cancel out. But we see no value to this. We may as well keep those as p/p like all the other entries.
For a full derivation of this, see Dave Keenan & Douglas Blumeyer's guide to RTT: units analysis#Generator embedding, mapping: projection matrix.
Here's an example (again, of quarter-comma meantone) of a projection matrix with both its amounts and units:
[math]\displaystyle{
\left[ \begin{array} {rrr}
1\;{}^{\text{p}_1}{\mskip -5mu/\mskip -3mu}_{\text{g}_1} & 1\;{}^{\text{p}_1}{\mskip -5mu/\mskip -3mu}_{\text{g}_2} & 0\;{}^{\text{p}_1}{\mskip -5mu/\mskip -3mu}_{\text{g}_3} \\
0\;{}^{\text{p}_2}{\mskip -5mu/\mskip -3mu}_{\text{g}_1} & 0\;{}^{\text{p}_2}{\mskip -5mu/\mskip -3mu}_{\text{g}_2} & 0\;{}^{\text{p}_2}{\mskip -5mu/\mskip -3mu}_{\text{g}_3} \\
0\;{}^{\text{p}_3}{\mskip -5mu/\mskip -3mu}_{\text{g}_1} & \frac14\;{}^{\text{p}_3}{\mskip -5mu/\mskip -3mu}_{\text{g}_2} & 1\;{}^{\text{p}_3}{\mskip -5mu/\mskip -3mu}_{\text{g}_3}\\
\end{array} \right]
}[/math]
Projection properties
Unrotated vectors and scaling factors
A [math]\displaystyle{ (d, d) }[/math]-shaped projection matrix represents both all of the commas of a temperament as well as all of the unchanged-intervals of the tuning. It does so via [math]\displaystyle{ d }[/math] unrotated vectors, which is to say, this projection only scales the vector. Each one of these unrotated vectors, then, is paired with a corresponding scaling factor, which tells us by how much the projection scales it. Each of these scaling factors — which we'll represent with the Greek letter lambda [math]\displaystyle{ λ }[/math] — is equal to either 1 or 0, and no other value is possible (more on this in the next section).
- When a scaling factor is equal to 1, this essentially means "no scaling", since multiplying something by 1 has no effect; so, these unrotated vectors are also unscaled vectors, which means they are completely unchanged. In other words, these are the unchanged-intervals of this tuning of this temperament.
- When a scaling factor is equal to 0, this means the projection scales it down to nothing. These, then, are the commas of the temperament. These are technically unrotated vectors, in the sense that rotation is no longer meaningful for something that has been vanished.
For readers familiar with the linear algebra concepts of eigenvectors and eigenvalues, this all may sound familiar: eigenvector is technical math speak for an "unrotated vector", and eigenvalue is technical math speak for its "scaling factor"; the prefix "eigen-" comes from the German word for "own", and this refers to the fact that the vector is a member of its own span, or in other words, it falls along the infinite line through space we get if we extend the vector in both directions forever (after projecting it). For those readers unfamiliar with these ideas, we recognize that this may be a lot to process at once.
It may be helpful to visualize the projection as a distortion field across tuning space, with curvy vortices something like how we might see warm and cold fronts on a weather map, or specks of iron patterned by a magnetic field. In these sorts of visualizations, we could imagine the unrotated vectors as the arrows that points along the paths where the distortion pattern happens to come out to be perfectly straight.
Now what's mathematically powerful about the idea of unrotated vectors is this: because the projection is only scaling things along these vectors, not rotating them, then we no longer require a full-blown matrix to represent that change. We can dramatically simply our formula. We can represent such a change using nothing but a single number, called a scalar. This scalar is its corresponding scaling factor.
Idempotence
The only possible scaling factors of a projection matrix are 1 and 0. That is because projections are idempotent[7], meaning that if we interpret them as functions, then repeatedly applying the function has no effect beyond the first application. In other words, if <math\textbf{i}</math> is an interval vector:
[math]\displaystyle{
P\textbf{i} = PP\textbf{i} = PPP\textbf{i} \text{...}
}[/math]
We can see this by example with quarter-comma meantone:
[math]\displaystyle{
\begin{array} {c}
P \\
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 0 & 0 \\
0 & \frac14 & 1 \\
\end{array} \right]
\end{array}
\begin{array} {c}
\textbf{i} \\
\left[ \begin{array} {r}
{-1} \\
1 \\
0 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
P\textbf{i} \\
\left[ \begin{array} {r}
0 \\
0 \\
\frac14 \\
\end{array} \right]
\end{array}
\\ \text{ } \\ \text{ } \\
\begin{array} {c}
P \\
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 0 & 0 \\
0 & \frac14 & 1 \\
\end{array} \right]
\end{array}
\begin{array} {c}
P\textbf{i} \\
\left[ \begin{array} {r}
0 \\
0 \\
\frac14 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
P\textbf{i} \\
\left[ \begin{array} {r}
0 \\
0 \\
\frac14 \\
\end{array} \right]
\end{array}
}[/math]
In other words, once we map a JI perfect fifth [math]\displaystyle{ \frac32 = 701.955\,¢ }[/math] with quarter-comma meantone, we get [math]\displaystyle{ \sqrt[4]{5} = 696.578\,¢ }[/math]. And if quarter-comma meantone's fifth goes through its own portal, it comes out the other side still as quarter-comma meantone's fifth.
So we can see why the only possible values a projection could scale its eigenvectors by would be 1 and 0, because these are the only values one can repeatedly scale things by without changing them past the first scaling.[8]
Flattening
A good way to understand the idempotence of projections is geometrically. This also agrees with our natural language intuitions about projections, such as projecting shadows of objects onto a wall. A projection is any transformation that reduces the dimensionality. What we've done is taken information in [math]\displaystyle{ d }[/math]-dimensional space and projected it down by one dimension, into [math]\displaystyle{ (d-1) }[/math]-dimensional space. For example we might take some 3D object and project it down to its silhouette. If we take the projection we just made and try to project it again, nothing is left to change.
But how to connect this to RTT? Well, when we vanish commas, we reduce dimensionality. For example, 5-limit JI is three-dimensional, or rank-3, because it is represented by a mapping matrix with three rows:
[math]\displaystyle{
\left[ \begin{array} {r}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{array} \right]
}[/math]
In general, it is an [math]\displaystyle{ r × d }[/math] matrix where [math]\displaystyle{ r = d }[/math], or in other words, a [math]\displaystyle{ d × d }[/math] matrix. Whereas a rank-2 temperament in 5-limit still boasts three columns (those correspond to the 3 primes of the 5-limit), but only has two rows, corresponding to how it has reduced the three generators of pure JI down to two generators approximating JI:
[math]\displaystyle{
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 1 & 4 \\
\end{array} \right]
}[/math]
So in general this is an [math]\displaystyle{ r × d }[/math] matrix where [math]\displaystyle{ r < d }[/math].
So it may be confusing at first to realize that a projection matrix represents a lower-dimensional object, given that, like JI, it is always a [math]\displaystyle{ d × d }[/math] matrix! For example, the quarter-comma meantone projection we've been looking at:
[math]\displaystyle{
\left[ \begin{array} {r}
1 & 1 & 0 \\
0 & 0 & 0 \\
0 & \frac14 & 1 \\
\end{array} \right]
}[/math]
projects all the vectors of the 3-dimensional space of 5-limit JI onto a 2-dimensional plane. On one hand, how could it not — it is, after all, an object representing a tuning of meantone, which is definitely a rank-2 temperament. But on the other hand, this projection matrix has three rows. So how can we reconcile this situation?
Here's one way to think about it. When we look at a mapping matrix like meantone's [⟨1 1 0] ⟨0 1 4]⟩ above, we're basically plotting vectors in a brand-new 2D space, that is, one completely distinct from the 3D space we started with in JI. So while the [math]\displaystyle{ x }[/math], [math]\displaystyle{ y }[/math], and [math]\displaystyle{ z }[/math] axes for JI corresponded to our primes [math]\displaystyle{ \text{p}_1 }[/math], [math]\displaystyle{ \text{p}_2 }[/math], and [math]\displaystyle{ \text{p}_3 }[/math], our [math]\displaystyle{ x }[/math] and [math]\displaystyle{ y }[/math] axes (no [math]\displaystyle{ z }[/math] here!) of our new meantone space correspond to its generators [math]\displaystyle{ \text{g}_1 }[/math] and [math]\displaystyle{ \text{p}_2 }[/math]. That's how its 2D plane exists. However, as for a tuning of meantone's projection matrix, such as quarter-comma's, it remains in the original 3D space with the [math]\displaystyle{ \text{p}_1 }[/math], [math]\displaystyle{ \text{p}_2 }[/math], and [math]\displaystyle{ \text{p}_3 }[/math] axes. What this means is that everything in that space gets projected — or smooshed down, you could think of it — into a single plane. So this plane is 2D, certainly, but importantly, it still requires three coordinates to describe because it exists titled at some angle through the original JI space. It is a 2D object occupying 3D space, just like any 2D document you might have in your real-life 3D physical space sitting up on a bookshelf at some slight angle.
TODO: diagram, at least one diagram here would be really valuable; perhaps this will help https://app.asana.com/0/1200134195404323/1201659347245292. also plane always flat at bottom projection diagram - might be easier to discern how least-squares points straight up and others are at an angle - as opposed to having the x/y/z axes always in the same position and then try to figure out what angle is this plane oriented through the space. this could help too: https://stackoverflow.com/questions/42893410/how-to-get-the-tilt-angle-of-a-plane-defined-by-three-coordinates-in-python
Visualization of simpler problem
It's rather tricky to visualize planes tilted within volumes, as it turns out. But perhaps a simpler example will be welcome. Consider the following 2D lattice, for 3-limit JI:
TODO: diagram
Here is projection matrix for some arbitrary tuning of blackwood temperament:
TODO: diagram, latex
If we project every interval from the first lattice with this matrix, we will find that every one of them is projected to a point along the same line.
TODO: diagram
Importantly, the line that is perpendicular to this line is the blackwood comma, [8 -5⟩.
TODO: diagram
And note that if we applied this projection to every point in the lattice again, it wouldn't change a thing.
Tunings and commas
Any projection will occupy some line/plane/space/etc. that is perpendicular to all of the temperaments commas' vectors, no matter what the tuning happens to be. What differentiates one tuning from another is what path all the other intervals take onto the projection. Remember how we described projections earlier as distortion fields with curvy vortices something like how we might see warm and cold fronts on a weather map, and among those waves of distortion one will occasionally find paths or spots where the distortion works out perfectly straight or perfectly still. So any tuning of a temperament will have the same such straight paths for the commas mapping to the origin (the point with all zeros). But the tunings will all be set aside from each other by which unchanged-intervals they have, that is, the "eyes of the storm" if you will, the points in space that don't budge at all by the distortion. And whatever these are will be part of the complicated distortion field that leads to all the other non-eigenvector intervals landing somewhere or another on that set projection line/plane/space (its dimensionality depends on the rank of the temperament).
Obtaining objects from the projection
From a projection [math]\displaystyle{ P }[/math] it is possible to obtain many other useful objects. See the below diagram.
TODO: diagram, but fix the formula for P = \mathrm{V}\textit{Λ}\mathrm{V}^{-1}, and make sure U, C, and V are upright in it, possibly all things serif please
caption: All you need is purple to get anything on here (a purple bit, or one blue bit and one red bit). Meaning that if you have any of these:
- [math]\displaystyle{ P }[/math]
- [math]\displaystyle{ \textit{Λ} }[/math] and [math]\displaystyle{ \mathrm{V} }[/math]
- [math]\displaystyle{ M }[/math] and [math]\displaystyle{ G }[/math]
- [math]\displaystyle{ M }[/math] and [math]\displaystyle{ \textrm{U} }[/math]
- [math]\displaystyle{ \textrm{C} }[/math] and [math]\displaystyle{ G }[/math]
- [math]\displaystyle{ \textrm{C} }[/math] and [math]\displaystyle{ \textrm{U} }[/math]
then you can get everything else using the methods described below.
The comma basis
To obtain the comma basis from [math]\displaystyle{ P }[/math], simply take the nullspace as you would take it of the mapping (see Dave Keenan & Douglas Blumeyer's guide to RTT: exploring temperaments#Nullspace for more information).
Remember, the mapping represents the temperament, and the projection represents a particular tuning of this temperament, so no matter which projection we use, while they will each have their own unchanged-intervals, they will share the same commas: the commas of the temperament.
[math]\displaystyle{ \textrm{C} = \text{nullspace}(P) }[/math]
An alternative method for finding [math]\displaystyle{ \textrm{C} }[/math] is discussed in the "Alternative method for the comma and unchanged-interval bases" section below.
The unchanged-interval basis
Obtaining the unchanged-interval basis [math]\displaystyle{ \textrm{U} }[/math] means to obtain the unchanged-intervals [math]\displaystyle{ \textbf{u}_1, \textbf{u}_2, … }[/math] of [math]\displaystyle{ P }[/math] or in other words any [math]\displaystyle{ \textbf{u}_i }[/math] for which [math]\displaystyle{ P\textbf{u}_i = \textbf{u}_i }[/math]. There are many ways to find these, but one way stands out for its clarity. We can rewrite this equation by subtracting [math]\displaystyle{ \textbf{u}_i }[/math] from both sides to get:
[math]\displaystyle{
P\textbf{u}_i - \textbf{u}_i = 0
}[/math]
Next, we can factor out the [math]\displaystyle{ \textbf{u} }[/math] from both terms:
[math]\displaystyle{
(P - I)\textbf{u}_i = 0
}[/math]
To be clear, that's an identity matrix [math]\displaystyle{ I }[/math], the matrix equivalent of a 1.
So now what have we gained? We've given ourselves a way to think of this as a nullspace problem, in the same way we found the commas of the projection!
Let's review the commas problem but in another way. If [math]\displaystyle{ \textbf{c}_1 }[/math] is a comma of the temperament, then [math]\displaystyle{ M\textbf{c}_1 = 0 }[/math] and [math]\displaystyle{ P\textbf{c}_1 = 0 }[/math], which tells us that [math]\displaystyle{ \text{nullspace}(M) }[/math] or [math]\displaystyle{ \text{nullspace}(P) }[/math] will give us the comma basis [math]\displaystyle{ \textrm{C} }[/math], or in other words a basis for all such commas [math]\displaystyle{ \textbf{c}_1, \textbf{c}_2, … }[/math].
So, if [math]\displaystyle{ (P - I)\textbf{u}_i = 0 }[/math], then [math]\displaystyle{ \text{nullspace}(P - I) }[/math] should similarly give us a basis for all the [math]\displaystyle{ \textbf{u}_i }[/math] which satisfy that equation.
[math]\displaystyle{ \textrm{U} = \text{nullspace}(P - I) }[/math]
An alternative method for finding [math]\displaystyle{ \textrm{U} }[/math] is discussed in the "Alternative method for the comma and unchanged-interval bases" section below.
The mapping
To obtain (some form of) the mapping from a projection, find its comma basis per the above, then take the antinullspace of that comma basis to get the mapping. For more information, see Dave Keenan & Douglas Blumeyer's guide to RTT: exploring temperaments#Antinullspace.
[math]\displaystyle{ M = \text{antinullspace}(\text{nullspace}(P)) }[/math]
In other words, it's just a nullspace, then an antinullspace.
The generator embedding
To obtain (some form of) a generator embedding for a projection, find the unchanged-interval basis per the above, and then use [math]\displaystyle{ G = \textrm{U}(M\textrm{U})^{-1} }[/math]. For more information, see Dave Keenan & Douglas Blumeyer's guide to RTT: tuning computation#Solving for the generators.
The unrotated vectors and scaling factors
To obtain the unrotated vectors and scaling factors, we can find these in matrix form via a mathematical process known as "eigendecomposition", which can be handled by most math software. For example, in Wolfram Language, we can perform an eigendecomposition using the function `Eigensystem[]`. Here's an example of quarter-comma meantone:
In: P = {{1,1,0},{0,0,0},{0,1/4,1}}
In: Eigensystem[P] // MatrixForm
Out: {{1,1,0},{{0,0,1},{1,0,0},{4,-4,1}}}
The answer comes in the form of a tuple. The first element is a list of our scaling factors (eigenvalues), and the second element is a list of our unrotated vectors (eigenvectors). So, this result is telling us that for scaling factors 1, 1, and 0, respectively, we have corresponding unrotated vectors [0 0 1⟩, [1 0 0⟩, and [4 -4 1⟩. The set of eigenvectors with eigenvalue 0 constitute a comma basis, while the set of eigenvectors with eigenvalue 1 constitute an unchanged-interval basis (so, quarter-comma meantone is characterized by an unchanged [math]\displaystyle{ \frac21 }[/math] and [math]\displaystyle{ \frac51 }[/math]).
The list of unrotated vectors may be treated as a matrix [math]\displaystyle{ \mathrm{V} }[/math], and the list of scaling factors may be diagonalized (placed along the main diagonal of an otherwise all-zeros matrix) as a matrix [math]\displaystyle{ \textit{Λ} }[/math] (that's a capital lambda, the same Greek letter we use the lowercase version of for the individual scaling factors).
As a bonus, we can get back to the projection via [math]\displaystyle{ P = \mathrm{V}\textit{Λ}\mathrm{V}^{-1} }[/math].
By the way, the general method to find scaling factors is to solve the "characteristic equation" [math]\displaystyle{ \det(P - λI) = 0 }[/math] for [math]\displaystyle{ λ }[/math]; that's lamdba times an identity matrix, or in other words, subtract lambda from each entry along [math]\displaystyle{ P }[/math]'s diagonal. But this shouldn't be necessary if one follows the other suggestions provided here.
Alternative method for the comma and unchanged-interval bases
This section assumes you've reviewed the immediately previous section.
The pair of [math]\displaystyle{ \textit{Λ} }[/math] and [math]\displaystyle{ \mathrm{V} }[/math] also provide us an alternative way to find [math]\displaystyle{ \textrm{C} }[/math] and [math]\displaystyle{ \textrm{U} }[/math]. If the 1's come first in [math]\displaystyle{ \textit{Λ} }[/math] and the 0's afterwards, then [math]\displaystyle{ \mathrm{V} }[/math] is simply the concatenation of [math]\displaystyle{ \textrm{C} }[/math] and [math]\displaystyle{ \textrm{U} }[/math]. To continue the above example, we have:
[math]\displaystyle{
\begin{array} {c}
\textit{Λ} \\
\left[ \begin{array} {r}
\colorbox{yellowgreen}{1} & 0 & 0 \\
0 & \colorbox{yellowgreen}{1} & 0 \\
0 & 0 & \colorbox{pink}{0} \\
\end{array} \right]
\end{array}
\text{&}
\begin{array} {c}
\mathrm{V} \\
\left[ \begin{array} {rr|r}
\colorbox{yellowgreen}{0} & \colorbox{yellowgreen}{1} & \colorbox{pink}{4} \\
\colorbox{yellowgreen}{0} & \colorbox{yellowgreen}{0} & \colorbox{pink}{-4} \\
\colorbox{yellowgreen}{1} & \colorbox{yellowgreen}{0} & \colorbox{pink}{1} \\
\end{array} \right]
\end{array}
→
\begin{array} {c}
\textrm{U} \\
\left[ \begin{array} {r}
\colorbox{yellowgreen}{0} & \colorbox{yellowgreen}{1} \\
\colorbox{yellowgreen}{0} & \colorbox{yellowgreen}{0} \\
\colorbox{yellowgreen}{1} & \colorbox{yellowgreen}{0} \\
\end{array} \right]
\end{array}
\text{&}
\begin{array} {c}
\textrm{C} \\
\left[ \begin{array} {r}
\colorbox{pink}{4} \\
\colorbox{pink}{-4} \\
\colorbox{pink}{1} \\
\end{array} \right]
\end{array}
}[/math]
On the left, we've highlighted the diagonalized scaling factors with green if they are for unchanged-intervals, and with red if they are for vanished commas. Then on the right, we've colored the entire corresponding vector columns, and placed a vertical line between the two green columns corresponding to the two green scaling factors of 1 and the one red column corresponding to the one red scaling factor of 0. And so we can see that the green-colored part of [math]\displaystyle{ \mathrm{V} }[/math] is [math]\displaystyle{ \textrm{U} }[/math], and the red-colored part of [math]\displaystyle{ V }[/math] is [math]\displaystyle{ \textrm{C} }[/math].
Generator information types
One way to think about what's happening in this vicinity of RTT is that we have three different generator information types:
- approximation
- embedding
- form
Mappings combine types (1) and (3). Generator embeddings combine types (2) and (3). Projections combine types (1) and (2). So each possible subset of two of these pieces of information is accounted for by these three objects.
One advantage of using exterior algebra for RTT, i.e. representing a temperament with a multimap rather than a mapping matrix, is that it isolates the approximation information (1) from the form information (3), i.e. that any equivalent mapping is sent to the same multimap (largest minors list). For more information, see: [[1]]
In a similar way, when you combine a mapping with a generator embedding into a projection, the generator form information goes away from both, and you're left with just pure approximation and embedding information. We've used color to help convey this idea in the following diagram, with type (1) red, type (2) blue, type (3) green:
TODO: diagram (but add a j to the arrow on the right, and generally label these arrows because they each mean different things, and italicize the t, and double-struck the m, and rename to form information), and also show the green stuff splitting out of the G and M into F in the middle
So, when you compress the multi-row projection matrix into a single-row tuning map by multiplying it by the just tuning map [math]\displaystyle{ 𝒋 }[/math], the two types of information are still there, but blended together such that they are unrecoverable, or in other words, it's now ambiguous how we arrived at this [math]\displaystyle{ 𝒕 }[/math] and could have arrived to it from a different combination of [math]\displaystyle{ M }[/math] and [math]\displaystyle{ G }[/math].
So again, while the mapping represents approximation information abstracted from any embedding, and the generator embedding represents embedding information that could be applied to any suitable approximation, they are each impure in the sense that they bind their respective generator information types to a particular form. This is the nature of how they must match to multiply together to give a certain projection. But no matter which two [math]\displaystyle{ G }[/math] and [math]\displaystyle{ M }[/math] you choose, as long as they do match, then their form information cancels out and we end up with just the approximation and embedding information.
(The top-left object is something no one has ever spoken about, as far as we know, and we see no use for it. We can't even say what "pure embedding information" would mean, independent of a temperament, or what it would mean to explore that space, in the way theorists have explored multimap space using temperament addition, etc. So we can see that the "multituning", perhaps we could call it, of quarter-comma meantone, is [[0 ¼ 0⟩⟩)
And here's a series of tables that show various parts of the tempering process color-coded according to the above diagram:
TODO: include diagram
Mapping projected intervals
For any interval vector [math]\displaystyle{ \textbf{i} }[/math] that has already been projected by the projection matrix [math]\displaystyle{ P }[/math], if you then map it by the temperament mapping [math]\displaystyle{ M }[/math], you'll get the same thing as you would have if you hadn't projected it. In other words:
[math]\displaystyle{
MP\textbf{i} = M\textbf{i}
}[/math]
that is, so long as [math]\displaystyle{ P }[/math] and [math]\displaystyle{ M }[/math] are for the same temperament. Said yet another way, even though temperament mappings are primarily designed to map prime-count vectors with all integer entries (therefore representing JI intervals), if you happen to try mapping one of the projected prime-count vectors which typically have non-integer but at least rational entries, it will nonetheless find itself mapped to the same generator-count vector as whatever all-integer JI prime-count vector it came from would have been mapped to.
Projecting to other spaces
The typical use case for a projection matrix is to re-embed a temperament lattice back into the original JI space from which it was tempered. But it is also possible to project to a completely different JI space after tempering, even a higher-dimensional one than the original space, or a lower-dimensional one than the tempered lattice. As long as you know how to translate vectors in the destination space into size, it's fair game. In fact, there's nothing stopping you from taking vectors in that space and projecting again, and again, and again. Though the present author fails to see if there are any meaningful musical purposes for this much temperamental distortion.
Applications
Projections and generator bases comes up in some methods for calculating tunings according to commonly-used schemes:
- those that use the pseudoinverse, such as miniRMS and minimax-ES tunings: see Dave Keenan & Douglas Blumeyer's guide to RTT: tuning computation#Pseudoinverse method for a miniRMS tuning and Dave Keenan & Douglas Blumeyer's guide to RTT: all-interval tuning schemes#Minimax-ES.
- those that use the sum polytope, such as minimean tunings: see Dave Keenan & Douglas Blumeyer's guide to RTT: tuning computation#Sum polytope method for a minimean tuning scheme.
- tunings based on unchanged-intervals: see Dave Keenan & Douglas Blumeyer's guide to RTT: tuning computation#Unchanged-interval method.
See also
- Fractional monzo: a more mathematical discussion of these ideas
Note that projection matrices do not have anything deeply to do with projective tuning space or projective tone space, other than the fact that they both use the mathematical operation of projecting something from a higher dimension to a lower one.
Footnotes
- ↑ If an alternative word to "mapping" is sought that does not generically refer to the mathematical structure in the way that "matrix" does, the noun "operator" could be used, according to this: https://yahootuninggroupsultimatebackup.github.io/tuning-math/topicId_12787#12787
- ↑ All temperaments discussed on this page hereafter will be assumed to be "regular".
- ↑ Any logarithmic pitch unit — cents, octaves, millioctaves, etc. — may be used, but this article has chosen to consistently use cents.
- ↑ Similarly, the projection matrix, when left-multiplied by [math]\displaystyle{ 𝒋 }[/math], gives the temperament tuning map [math]\displaystyle{ 𝒕 }[/math], usually referred to simply as the "tuning map" for short. 1/4-comma meantone's [math]\displaystyle{ 𝒕 }[/math] is ⟨1.000 1.585 2.232]·[⟨1 1 0] ⟨0 0 0] ⟨0 1/4 1]⟩ = ⟨1.000 1.580 2.232]. This is clearly closely related to the just tuning map, which represents the tuning of JI.
- ↑ The present author is not sure if any combination of mapping and generator embedding should lead to a projection matrix, and what the conditions on this would be. If anyone can figure this out, please add it to the article.
- ↑ There is a way to represent approximation information without generator form information, which therefore means a data structure which inherently uniquely represents temperaments, and that is a multimap.
- ↑ Etymologically, the roots of this word are "same" and "power", meaning it has only the same power each time it is applied.
- ↑ Here is a helpful proof, giving another way to look at this fact: https://math.stackexchange.com/questions/1393656/show-that-if-%ce%bb-is-an-eigenvalue-of-a-projection-matrix-p-then-%ce%bb-1-or-%ce%bb-0/1393661#1393661