Projection: Difference between revisions

Dave Keenan (talk | contribs)
Changed "generator preimage transversal" to "generator detempering".
Cmloegcmluin (talk | contribs)
prime-count vector → vector
Line 22: Line 22:
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<ref>Any logarithmic pitch unit — cents, octaves, millioctaves, etc. — may be used, but this article has chosen to consistently use cents.</ref> 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.
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<ref>Any logarithmic pitch unit — cents, octaves, millioctaves, etc. — may be used, but this article has chosen to consistently use cents.</ref> 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.  
While a projection maps one prime-count vector to another prime-count vector, the output vector is usually quite different from the input vector. Most notably, the input interval is justly intoned, and therefore the entries of its vector are integers, while the output interval is tempered, and therefore the entries of its 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===
===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.  
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 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.
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.
Line 38: Line 38:
Think about it like any other interval mapping situation: if an interval is mapped to the generator-count vector {{rket|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 {{rket|1 0}}, that would mean that whatever prime-count vector we put in was a member of the preimage for the ''other'' generator.
Think about it like any other interval mapping situation: if an interval is mapped to the generator-count vector {{rket|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 {{rket|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 detempering]].
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 vector that maps to a different one of each of that same temperament's generators. It is, in other words, a [[generator detempering]].


==Examples==
==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 in the [[quarter comma meantone|quarter-comma tuning of meantone]], the fifth is flattened. Since 1 fifth is a quarter comma flat, 4 fifths are a full comma flat. 4 just fifths equals <math>\frac{81}{16}</math>, and 4 fifths minus a comma works out to exactly <math>\frac51</math>. Thus the tuning of the fifth is one-quarter of <math>\frac51</math>, which 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}}. JI ratios have prime-counts that contain only integers, but this one has fractions in it; <math>\sqrt[4]5</math> is an irrational number, so it is not JI.  
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|quarter-comma tuning of meantone]], the fifth is flattened. Since 1 fifth is a quarter comma flat, 4 fifths are a full comma flat. 4 just fifths equals <math>\frac{81}{16}</math>, and 4 fifths minus a comma works out to exactly <math>\frac51</math>. Thus the tuning of the fifth is one-quarter of <math>\frac51</math>, which is <math>5^\frac14 = \sqrt[4]5</math> at about 696.578 ¢, which as a vector looks like {{vector|0 0 1/4}}. JI ratios have prime counts that contain only integers, but this one has fractions in it; <math>\sqrt[4]5</math> is an irrational number, so it is not JI.  


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 <math>G</math> for quarter-comma meantone as {{rbra|{{vector|1 0 0}} {{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 <math>G</math> for quarter-comma meantone as {{rbra|{{vector|1 0 0}} {{vector|0 0 1/4}}}}:
Line 92: Line 92:




The columns of <math>P</math> are prime-count vectors, one for each prime. The 1<sup>st</sup> column of <math>P</math> tells us that prime 2 is projected to {{vector|1 0 0}} = <math>\frac21</math>. Thus <math>\frac21</math> is projected to itself, and is an unchanged-interval. The 2<sup>nd</sup> column tells us that prime 3 is projected to {{vector|1 0 1/4}} = an octave plus the tempered fifth. The 3<sup>rd</sup> column tells us that prime 5 is projected to {{vector|0 0 1}} = <math>\frac51</math>. Thus <math>\frac51</math> is also an unchanged-interval, as is any combination of our two unchanged-intervals <math>\frac21</math> and <math>\frac21</math>, such as <math>\frac54</math>, <math>\frac85</math>, <math>\frac{25}{16}</math>, etc.
The columns of <math>P</math> are vectors, one for each prime. The 1<sup>st</sup> column of <math>P</math> tells us that prime 2 is projected to {{vector|1 0 0}} = <math>\frac21</math>. Thus <math>\frac21</math> is projected to itself, and is an unchanged-interval. The 2<sup>nd</sup> column tells us that prime 3 is projected to {{vector|1 0 1/4}} = an octave plus the tempered fifth. The 3<sup>rd</sup> column tells us that prime 5 is projected to {{vector|0 0 1}} = <math>\frac51</math>. Thus <math>\frac51</math> is also an unchanged-interval, as is any combination of our two unchanged-intervals <math>\frac21</math> and <math>\frac21</math>, such as <math>\frac54</math>, <math>\frac85</math>, <math>\frac{25}{16}</math>, etc.


We can use this matrix to determine what a JI interval <math>\textbf{i}</math> is projected to. Multiply <math>P</math> by <math>\textbf{i}</math> to get <math>P\textbf{i}</math>. Let's start with <math>\textbf{i}</math> = <math>\frac43</math>:
We can use this matrix to determine what a JI interval <math>\textbf{i}</math> is projected to. Multiply <math>P</math> by <math>\textbf{i}</math> to get <math>P\textbf{i}</math>. Let's start with <math>\textbf{i}</math> = <math>\frac43</math>:
Line 255: Line 255:
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.
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.
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 vector.


=== With respect to the generator tuning map===
=== With respect to the generator tuning map===
Line 261: Line 261:
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}}.  


Many popular regular temperament tuning schemes work by optimizing for the entries of <math>𝒈</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>𝒈</math>'s popularity over <math>G</math>. Some practitioners may not even view tuning as an optimization problem and will simply choose values for <math>𝒈</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.
Many popular regular temperament tuning schemes work by optimizing for the entries of <math>𝒈</math> directly, and many times it's not helpful or insightful to view the generators in non-integer vector form, which are reasons for <math>𝒈</math>'s popularity over <math>G</math>. Some practitioners may not even view tuning as an optimization problem and will simply choose values for <math>𝒈</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===
===Units===
Line 355: Line 355:




We can see here in the first column that the period is given by the integer prime-count vector {{vector|1 0 0}}, representing <math>2^1</math>, and the fifth is given by the non-integer prime-count vector {{vector|0 0 <math>\frac14</math>}}, representing <math>\sqrt[4]{5} \approx 1.495 \approx 1.5 = \frac32</math>.
We can see here in the first column that the period is given by the integer vector {{vector|1 0 0}}, representing <math>2^1</math>, and the fifth is given by the non-integer vector {{vector|0 0 <math>\frac14</math>}}, representing <math>\sqrt[4]{5} \approx 1.495 \approx 1.5 = \frac32</math>.


For the second version we gave above, then, {{ket|{{bra|1 2 4}} {{bra|0 -1 -4}}}}, which describes meantone in terms of an octave and a ''fourth'', the matching generator embedding is:
For the second version we gave above, then, {{ket|{{bra|1 2 4}} {{bra|0 -1 -4}}}}, which describes meantone in terms of an octave and a ''fourth'', the matching generator embedding is:
Line 1,053: Line 1,053:
===Just tuning map, projected interval: tempered interval size===
===Just tuning map, projected interval: tempered interval size===


A <math>\mathsf{¢}</math>/<math>\small 𝗽</math> just tuning map and a prime-count vector representing a projected interval combine to give the interval's size in <math>\mathsf{¢}</math>.
A <math>\mathsf{¢}</math>/<math>\small 𝗽</math> just tuning map and a vector representing a projected interval combine to give the interval's size in <math>\mathsf{¢}</math>.




Line 1,095: Line 1,095:
===Generator embedding, mapped interval: projected interval===
===Generator embedding, mapped interval: projected interval===


A <math>\small 𝗽</math>/<math>\small 𝗴</math> generator embedding and a generator-count vector (units of <math>\small 𝗴</math>) combine to make a prime-count vector (units of <math>\small 𝗽</math>) representing the projected interval.
A <math>\small 𝗽</math>/<math>\small 𝗴</math> generator embedding and a generator-count vector (units of <math>\small 𝗴</math>) combine to make a vector (units of <math>\small 𝗽</math>) representing the projected interval.




Line 1,142: Line 1,142:
===Projection matrix, interval: projected interval===
===Projection matrix, interval: projected interval===


A <math>\small 𝗽</math>/<math>\small 𝗽</math> projection matrix and a prime-count vector (units of <math>\small 𝗽</math>) representing an interval combine to make a new prime-count vector (still with units of <math>\small 𝗽</math>) representing the projected interval.  
A <math>\small 𝗽</math>/<math>\small 𝗽</math> projection matrix and a vector (units of <math>\small 𝗽</math>) representing an interval combine to make a new vector (still with units of <math>\small 𝗽</math>) representing the projected interval.  




Line 1,557: Line 1,557:
To obtain (some form of) a generator embedding for a projection, find the unchanged-interval basis per the above, and then use <math>G = \textrm{U}(M\textrm{U})^{-1}</math>. Let's unpack why this is so.
To obtain (some form of) a generator embedding for a projection, find the unchanged-interval basis per the above, and then use <math>G = \textrm{U}(M\textrm{U})^{-1}</math>. Let's unpack why this is so.


If the projection matrix is <math>P</math>, and a matrix whose columns are prime-count vectors representing the unchanged-intervals of a tuning is <math>\mathrm{U}</math>, then by this definition of unrotated (only-scaled) vectors:
If the projection matrix is <math>P</math>, and a matrix whose columns are vectors representing the unchanged-intervals of a tuning is <math>\mathrm{U}</math>, then by this definition of unrotated (only-scaled) vectors:




Line 1,729: Line 1,729:




that is, so long as <math>P</math> and <math>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.
that is, so long as <math>P</math> and <math>M</math> are for the same temperament. Said yet another way, even though temperament mappings are primarily designed to map vectors with ''all integer'' entries (therefore representing JI intervals), if you happen to try mapping one of the projected 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 vector it came from would have been mapped to.


== Projecting to other spaces==
== Projecting to other spaces==