Generator embedding optimization: Difference between revisions

ArrowHead294 (talk | contribs)
m Update links
m Linking
 
(2 intermediate revisions by 2 users not shown)
Line 182: Line 182:


== Generator embedding ==
== Generator embedding ==
So, substituting <math>\mathrm{U}</math> in for <math>\mathrm{H}</math> in the formula we learned from the D&D's guide article:
So, substituting <math>\mathrm{U}</math> in for <math>\mathrm{H}</math> in the formula we learned [[Dave Keenan & Douglas Blumeyer's guide to RTT/Tuning computation#Only held-intervals method|from the D&D's guide article]]:




Line 212: Line 212:
G = \mathrm{U}(M\mathrm{U})^{-1}
G = \mathrm{U}(M\mathrm{U})^{-1}
</math>
</math>


= Pseudoinverse method =
= Pseudoinverse method =
Line 4,819: Line 4,818:


== With held-intervals ==
== With held-intervals ==
The zero-damage method is easily modified to handle held-intervals along with target-intervals.<ref>In fact, the Target tunings page of the wiki uses this more complicated approach in order to realize pure octaves, and so the authors of this page had to reverse engineer from it how to make it work ''without'' any held-intervals.</ref> In short, rather than assembling our set of unchanged-interval bases <math>\mathrm{U}_1</math> through <math>\mathrm{U}_n</math> (where <math>n = {{k}\choose{r}}</math>) corresponding to the zero-damage points by finding every combination of <math>r</math> different ones of our <math>k</math> target-intervals (one for each generator to be responsible for tuning exactly), instead we must first reserve <math>h</math> (''held''-unchanged-interval count) columns of each <math>\mathrm{U}_n</math> for the held-intervals, leaving only the remaining <math>r - h</math> columns to be assembled from the target-intervals as normal. So, we'll only have <math>{{k}\choose{r - h}}</math> candidate tunings / zero-damage points / unchanged-interval bases in this case.
The zero-damage method is easily modified to handle held-intervals along with target-intervals.<ref group="note">In fact, the Target tunings page of the wiki uses this more complicated approach in order to realize pure octaves, and so the authors of this page had to reverse engineer from it how to make it work ''without'' any held-intervals.</ref> In short, rather than assembling our set of unchanged-interval bases <math>\mathrm{U}_1</math> through <math>\mathrm{U}_n</math> (where <math>n = {{k}\choose{r}}</math>) corresponding to the zero-damage points by finding every combination of <math>r</math> different ones of our <math>k</math> target-intervals (one for each generator to be responsible for tuning exactly), instead we must first reserve <math>h</math> (''held''-unchanged-interval count) columns of each <math>\mathrm{U}_n</math> for the held-intervals, leaving only the remaining <math>r - h</math> columns to be assembled from the target-intervals as normal. So, we'll only have <math>{{k}\choose{r - h}}</math> candidate tunings / zero-damage points / unchanged-interval bases in this case.


In other words, if <math>\mathrm{U}_n</math> is one of the unchanged-interval bases characterizing a candidate miniaverage tuning, then it must contain <math>\mathrm{H}</math> itself, the held-interval basis, which does not yet fully characterize our tuning, leaving some wiggle room (otherwise we'd just use the "[[#Only held-intervals method|only held-intervals]]" approach, discussed later).
In other words, if <math>\mathrm{U}_n</math> is one of the unchanged-interval bases characterizing a candidate miniaverage tuning, then it must contain <math>\mathrm{H}</math> itself, the held-interval basis, which does not yet fully characterize our tuning, leaving some wiggle room (otherwise we'd just use the "[[#Only held-intervals method|only held-intervals]]" approach, discussed later).
Line 5,190: Line 5,189:
And convert those to generator tuning maps: {{map|1200 701.955}}, {{map|1200 696.578}}, and {{map|1200 694.786}}. Note that every one of these has a pure-octave period. Then check the damage sums: 353.942 ¢(U), 89.083 ¢(U), and 110.390 ¢(U), respectively. So that tells us that we want the middle result of these three, {{map|1200 696.578}}, as the minimization of the <math>1</math>-mean of unity-weight damage to the 6-TILT, when we're constrained to the octave being unchanged.
And convert those to generator tuning maps: {{map|1200 701.955}}, {{map|1200 696.578}}, and {{map|1200 694.786}}. Note that every one of these has a pure-octave period. Then check the damage sums: 353.942 ¢(U), 89.083 ¢(U), and 110.390 ¢(U), respectively. So that tells us that we want the middle result of these three, {{map|1200 696.578}}, as the minimization of the <math>1</math>-mean of unity-weight damage to the 6-TILT, when we're constrained to the octave being unchanged.


For a rank-3 temperament, with 2 held-intervals, we'd again have 8 choose 1 = 8 tunings to check. With 1 held-interval, we'd have 8 choose 2 = 28 tunings to check.  
For a rank-3 temperament, with 2 held-intervals, we'd again have 8 choose 1 = 8 tunings to check. With 1 held-interval, we'd have 8 choose 2 = 28 tunings to check.


== For all-interval tuning schemes ==
== For all-interval tuning schemes ==
Line 7,558: Line 7,557:


=== Advanced tie-breaking example: Setup ===
=== Advanced tie-breaking example: Setup ===
To help illustrate advanced tie-breaking, we're going to look at a minimax-C tuning of [[augmented]] temperament, with mapping {{rket|{{map|3 0 7}} {{map|0 1 0}}}}. In particular, we're going to use the somewhat arbitrary target-interval set <math>\{ \frac32, \frac52, \frac53, \frac83, \frac95, \frac{16}{5}, \frac{15}{8}, \frac{18}{5} \}</math>. As a rank-2 temperament, we're going to be searching 3D tuning damage space. This temperament divides the octave into three parts, so our ballpark <math>g_1</math> is 400 ¢, and our second generator <math>g_2</math> is a free generator for prime 3, so it's going to be ballpark its pure tuning of 1901.955 ¢.  
To help illustrate advanced tie-breaking, we're going to look at a minimax-C tuning of [[augmented (temperament)|augmented]] temperament, with mapping {{rket|{{map|3 0 7}} {{map|0 1 0}}}}. In particular, we're going to use the somewhat arbitrary target-interval set <math>\{ \frac32, \frac52, \frac53, \frac83, \frac95, \frac{16}{5}, \frac{15}{8}, \frac{18}{5} \}</math>. As a rank-2 temperament, we're going to be searching 3D tuning damage space. This temperament divides the octave into three parts, so our ballpark <math>g_1</math> is 400 ¢, and our second generator <math>g_2</math> is a free generator for prime 3, so it's going to be ballpark its pure tuning of 1901.955 ¢.  


Here's an aerial view on the tuning damage space, where we've "clipped" every damage graph hyper-V where it has gone out-of-bounds, above 150 ¢(C) damage; that is, we've colored it in grey and flattened it across the top of the box of our visualization. This lets us focus in clearly on the region of real interest, which is where all target-intervals' damages are less than this cap at the same time. This is the multicolored crater in the middle here:
Here's an aerial view on the tuning damage space, where we've "clipped" every damage graph hyper-V where it has gone out-of-bounds, above 150 ¢(C) damage; that is, we've colored it in grey and flattened it across the top of the box of our visualization. This lets us focus in clearly on the region of real interest, which is where all target-intervals' damages are less than this cap at the same time. This is the multicolored crater in the middle here: