Projection: Difference between revisions

Cmloegcmluin (talk | contribs)
→Mapping non-uniqueness: clarifying note
TallKite (talk | contribs)
→Examples: added lots of examples
Line 14: Line 14:
# represent regular temperaments,  
# represent regular temperaments,  
# transform [[JI]] intervals, and  
# transform [[JI]] intervals, and  
# accept these JI intervals as inputs in the form of [[prime-count vector]]s.  
# accept these JI intervals as inputs in the form of [[prime-count vector]]s.


Perhaps the simplest way to explain the difference would be to say that a mapping outputs intervals in the form of [[generator-count vector]]s, whereas a projection outputs intervals that are also 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 vector]]s, whereas a projection outputs intervals that are also in the form of prime-count vectors.  
Line 38: Line 38:
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]].
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==
==Examples==


The generator of meantone temperament is the fifth. A justly intoned fifth is the interval <math>\frac32</math> at about 701.955 ¢, which as a 5-limit prime-count vector looks like {{vector|-1 1 0}}, but the tuning of the fifth in the [[quarter comma meantone|1/4-comma tuning of meantone]] is <math>5^\frac14 = \sqrt[4]5</math> at about 696.578 ¢, which as a prime-count vector looks like {{vector|0 0 1/4}}. So, by combining this vector for the tuned fifth with the vector {{vector|1 0 0}} for a purely-tuned octave <math>\frac21</math> as the period, we produce the full generator embedding for 1/4-comma meantone as {{rbra|{{vector|1 0 0}} {{vector|0 0 1/4}}}}:
The generator of meantone temperament is the fifth. A justly intoned fifth is the interval <math>\frac32</math> at about 701.955 ¢, which as a 5-limit prime-count vector looks like {{vector|-1 1 0}}. But in the [[quarter comma meantone|1/4-comma tuning of meantone]], since 1 fifth is a quarter comma flat, 4 fifths are a full comma flat. 4 just fifths equals 81/16, and 4 fifths minus a comma works out to exactly 5/1. Thus the tuning of the fifth is <math>5^\frac14 = \sqrt[4]5</math> at about 696.578 ¢, which as a prime-count vector looks like {{vector|0 0 1/4}}. Usually JI ratios have prime-counts that contain only integers, but this one has fractions in it. Since <math>\sqrt[4]5</math> is an irrational number, we could say it's sort of an irrational ratio!
 
So, by combining this vector for the tuned fifth with the vector {{vector|1 0 0}} for a purely-tuned octave <math>\frac21</math> as the period, we produce the full generator embedding for 1/4-comma meantone as {{rbra|{{vector|1 0 0}} {{vector|0 0 1/4}}}}:




Line 86: Line 88:


</math>
</math>
The columns of P are prime-count vectors, one for each prime. The 1st column of P tells us that prime 2 is tempered to {{vector|1 0 0}} = 2/1. Thus 2/1 is tempered to itself, and is an eigenmonzo. The 2nd column tells us that prime 3 is tempered to {{vector|1 0 1/4}} = an octave plus the tempered fifth. The 3rd column tells us that prime 5 is tempered to {{vector|0 0 1}} = 5/1. Thus 5/1 is also an eigenmonzo. As is any combination of 2/1 and 5/1, such as 5/4, 8/5, 25/16, etc.
We can use this matrix to determine what a JI interval J is tempered to. Multiply P by J to get J'. Let's start with J = 4/3:
<math>
\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}
J \\
\left[ \begin{array} {r}
2 \\
-1 \\
0 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
J' \\
\left[ \begin{array} {r}
1 \\
0 \\
-\frac14 \\
\end{array} \right]
\end{array}
</math>
Thus 4/3 is tempered to {{vector|1 0 -\frac14}}. Even though we are discussing a temperament, note that {{vector|1 0 -\frac14}} is one quarter of an exact untempered JI ratio, 16/5. Thus four tempered 4ths equals a pure 5-limit minor 13th. Now let J = 6/5.
<math>
\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}
J \\
\left[ \begin{array} {r}
1 \\
1 \\
-1 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
J' \\
\left[ \begin{array} {r}
2 \\
0 \\
-\frac34 \\
\end{array} \right]
\end{array}
</math>
Thus 6/5 becomes {{vector|2 0 -3/4}}, and four of them equals an untempered 256/125. The reader can do similar calculations to verify that 2/1 is tempered to 2/1, 5/4 is tempered to 5/4, and 3/2 is tempered to {{vector|0 0 1/4}}.
For third-comma meantone, three fifths (27/8) are a full comma flat. That works out to 10/3. Thus the generator is {{vector|1/3 -1/3 1/3}}. Again the period is a just octave. This gives us our generator embedding G. We can use the same mapping M to find the projection matrix P:
<math>
\begin{array} {c}
P \\
\left[ \begin{array} {r}
1 & \frac43 & \frac43 \\
0 & -\frac43 & -\frac13 \\
0 & \frac43 & \frac13 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
G \\
\left[ \begin{array} {r}
1 & \frac13 \\
0 & -\frac13 \\
0 & \frac13 \\
\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>
Let's use P to find out what 6/5 gets tempered to:
<math>
\begin{array} {c}
P \\
\left[ \begin{array} {r}
1 & \frac43 & \frac43 \\
0 & -\frac43 & -\frac13 \\
0 & \frac43 & \frac13 \\
\end{array} \right]
\end{array}
\begin{array} {c}
J \\
\left[ \begin{array} {r}
1 \\
1 \\
-1 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
J' \\
\left[ \begin{array} {r}
1 \\
1 \\
-1 \\
\end{array} \right]
\end{array}
</math>
Thus 6/5 is now an eigenmonzo. The reader can verify that 2/1 is too, and 5/4 is not.




Line 94: Line 241:
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.
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===
=== 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|generator ''tuning map'']]. In cases where tuning is thought of as approximation followed by embedding, the generator tuning map <math>𝒈</math> is closely related to the generator embedding <math>G</math>; it is simply <math>G</math> left-multiplied by the [[just tuning map]] <math>𝒋</math><ref>Similarly, the projection matrix, when left-multiplied by <math>𝒋</math>, gives the ''temperament'' [[tuning map]] <math>𝒕</math>, usually referred to simply as the "tuning map" for short. 1/4-comma meantone's <math>𝒕</math> is {{map|1.000 1.585 2.232}}·{{ket|{{map|1 1 0}} {{map|0 0 0}} {{map|0 1/4 1}}}} = {{map|1.000 1.580 2.232}}. This is clearly closely related to the just tuning map, which represents the tuning of JI.</ref> (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 {{map|log₂2 log₂3 log₂5}} ≈ {{map|1.000 1.585 2.232}}, so 1/4-comma meantone's <math>𝒈</math> is {{map|1.000 1.585 2.232}}·{{rbra|{{vector|1 0 0}} {{vector|0 0 1/4}}}} = {{map|1.000 0.580}}, or in cents instead of octaves, that's {{map|1200.000 696.578}}.  
A more common way to view the tuning of a temperament than as a generator ''embedding'' is as a [[generator tuning map|generator ''tuning map'']]. In cases where tuning is thought of as approximation followed by embedding, the generator tuning map <math>𝒈</math> is closely related to the generator embedding <math>G</math>; it is simply <math>G</math> left-multiplied by the [[just tuning map]] <math>𝒋</math><ref>Similarly, the projection matrix, when left-multiplied by <math>𝒋</math>, gives the ''temperament'' [[tuning map]] <math>𝒕</math>, usually referred to simply as the "tuning map" for short. 1/4-comma meantone's <math>𝒕</math> is {{map|1.000 1.585 2.232}}·{{ket|{{map|1 1 0}} {{map|0 0 0}} {{map|0 1/4 1}}}} = {{map|1.000 1.580 2.232}}. This is clearly closely related to the just tuning map, which represents the tuning of JI.</ref> (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 {{map|log₂2 log₂3 log₂5}} ≈ {{map|1.000 1.585 2.232}}, so 1/4-comma meantone's <math>𝒈</math> is {{map|1.000 1.585 2.232}}·{{rbra|{{vector|1 0 0}} {{vector|0 0 1/4}}}} = {{map|1.000 0.580}}, or in cents instead of octaves, that's {{map|1200.000 696.578}}.  
Line 124: Line 271:
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.<ref>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.</ref>
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.<ref>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.</ref>


===Mapping non-uniqueness===
=== 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 [[Tempering_out|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.  
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 [[Tempering_out|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.  
Line 656: Line 803:
A <math>(d, d)</math>-shaped projection matrix represents both all of the [[comma]]s of a temperament as well as all of the [[unchanged-interval]]s of the tuning. It does so via <math>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>λ</math> — is equal to either 1 or 0, and no other value is possible (more on this in the next section).
A <math>(d, d)</math>-shaped projection matrix represents both all of the [[comma]]s of a temperament as well as all of the [[unchanged-interval]]s of the tuning. It does so via <math>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>λ</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 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.
*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 [https://mathworld.wolfram.com/Eigenvector.html eigenvector]s 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.  
For readers familiar with the linear algebra concepts of [https://mathworld.wolfram.com/Eigenvector.html eigenvector]s 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.  
Line 667: Line 814:
===Idempotence===
===Idempotence===


The only possible scaling factors of a projection matrix are 1 and 0. That is because projections are ''idempotent''<ref>Etymologically, the roots of this word are "same" and "power", meaning it has only the same power each time it is applied.</ref>, 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:
The only possible scaling factors of a projection matrix are 1 and 0. That is because projections are ''idempotent''<ref>Etymologically, the roots of this word are "same" and "power", meaning it has only the same power each time it is applied.</ref>, 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}<nowiki></math></nowiki> is an interval vector:




Line 747: Line 894:
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.<ref>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</ref>  
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.<ref>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</ref>  


===Flattening===
===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>d</math>-dimensional space and projected it down by one dimension, into <math>(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.  
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>d</math>-dimensional space and projected it down by one dimension, into <math>(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.  
Line 794: Line 941:
  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
  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===
===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:
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:
Line 825: Line 972:


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:
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>P</math>
*<math>P</math>
* <math>\textit{Λ}</math> and <math>\mathrm{V}</math>
*<math>\textit{Λ}</math> and <math>\mathrm{V}</math>
* <math>M</math> and <math>G</math>
*<math>M</math> and <math>G</math>
* <math>M</math> and <math>\textrm{U}</math>
*<math>M</math> and <math>\textrm{U}</math>
* <math>\textrm{C}</math> and <math>G</math>
*<math>\textrm{C}</math> and <math>G</math>
* <math>\textrm{C}</math> and <math>\textrm{U}</math>
*<math>\textrm{C}</math> and <math>\textrm{U}</math>
then you can get everything else using the methods described below.
then you can get everything else using the methods described below.


===The comma basis===
===The comma basis ===


To obtain the comma basis from <math>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).  
To obtain the comma basis from <math>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).  
Line 897: Line 1,044:


  <nowiki>In:  P = {{1,1,0},{0,0,0},{0,1/4,1}}
  <nowiki>In:  P = {{1,1,0},{0,0,0},{0,1/4,1}}
In:  Eigensystem[P] // MatrixForm
In:  Eigensystem[P] // MatrixForm
Out:  {{1,1,0},{{0,0,1},{1,0,0},{4,-4,1}}}</nowiki>
Out:  {{1,1,0},{{0,0,1},{1,0,0},{4,-4,1}}}</nowiki>




Line 909: Line 1,056:
By the way, the general method to find scaling factors is to solve the "characteristic equation" <math>\det(P - λI) = 0</math> for <math>λ</math>; that's lamdba times an identity matrix, or in other words, subtract lambda from each entry along <math>P</math>'s diagonal. But this shouldn't be necessary if one follows the other suggestions provided here.
By the way, the general method to find scaling factors is to solve the "characteristic equation" <math>\det(P - λI) = 0</math> for <math>λ</math>; that's lamdba times an identity matrix, or in other words, subtract lambda from each entry along <math>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===
=== Alternative method for the comma and unchanged-interval bases ===


This section assumes you've reviewed the immediately previous section.
This section assumes you've reviewed the immediately previous section.
Line 967: Line 1,114:


One way to think about what's happening in this vicinity of RTT is that we have three different 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
#approximation
# embedding
#embedding
# form
#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.
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.
Line 1,008: Line 1,155:


Projections and generator bases comes up in some methods for calculating tunings according to commonly-used schemes:
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 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]].
#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]].
#tunings based on unchanged-intervals: see [[Dave Keenan & Douglas Blumeyer's guide to RTT: tuning computation#Unchanged-interval method]].


==See also==
==See also==


* [[Fractional monzo]]: a more mathematical discussion of these ideas
*[[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.
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.