Destretched tunings are tuning optimization techniques with the tuning map scaled until a certain interval is just, that is, its stretch introduced in the optimization is removed. DTE tuning (destretched Tenney-Euclidean tuning) is the most typical instance and will be the focus of this article. Otherwise normed tunings can be defined and computed analogously.
The most significant form of DTE tuning is pure-octave destretched, which is assumed unless specified otherwise. This has been called the POTE tuning (pure-octaves Tenney-Euclidean tuning), although there are other ways to enforce a pure octave (→ Constrained tuning). POTE can be computed from TE tuning with all primes scaled until 2/1 is just.
Approximate Kees optimality
The POTE tuning is very close, but not exactly equal to the KE tuning.
According to a conjecture of Graham Breed, these tunings also approximately minimize the squared error of all intervals weighted by Kees height, at least for full prime-limits. Graham showed this empirically in his composite.pdf paper by measuring the results for different temperaments and of different prime limits. It remains open how closely these approximations hold in all cases.
The TE and POTE tuning for a mapping such as A = [⟨1 0 2 -1], ⟨0 5 1 12]] (the mapping for 7-limit magic, which consists of a linearly independent list of vals defining magic) can be found as follows:
- Form a matrix V from A by multiplying by the diagonal matrix which is zero off the diagonal and 1/log2p on the diagonal; in other words the diagonal is [1 1/log23 1/log25 1/log27]. Another way to say this is that each val is "weighted" by dividing through by the logarithms, so that V = [⟨1 0 2/log25 -1/log27], ⟨5/log23 1/log25 12/log27]]
- Find the pseudoinverse of the matrix V+ = VT(VVT)-1.
- Find the TE generators G = ⟨1 1 1 1]V+.
- Find the TE tuning map: T = GV.
- Find the POTE generators G' = G/T1; in other words G scalar divided by the first entry of T.
If you carry out these operations, you should find
- V ~ [⟨1 0 0.861 -0.356], ⟨0 3.155 0.431 4.274]]
- G ~ ⟨1.000902 0.317246]
- G' ~ ⟨1.000000 0.316960]
The tuning of the POTE generator corresponding to the mapping A is therefore 0.31696 octaves, or 380.352 cents. Naturally, this only gives the single POTE generator in the rank two case, but the POTE tuning can still be found in this way for mappings defining higher-rank temperaments. The method can be generalized to subgroup temperaments by POL2 tuning, treating the formal prime represented by the first column as the equave.
Computer Program for TE and POTE
Below is a Python program that takes a mapping and gives TE and POTE generators.
Note: this program depends on Scipy.
import numpy as np from scipy import linalg def find_te (map, subgroup): jip = np.log2 (subgroup) weighter = np.diag (1/np.log2 (subgroup)) map = map @ weighter jip = jip @ weighter te_gen = linalg.lstsq (np.transpose (map), jip) te_map = te_gen @ map print (1200*te_gen) pote_gen = te_gen/te_map print (1200*pote_gen) # taking 7-limit magic as an example ... seven_limit = [2, 3, 5, 7] map_magic = [[1, 0, 2, -1], [0, 5, 1, 12]] # to find TE and POTE you input find_te (map_magic, seven_limit)
[1201.08240941 380.695113 ] [1200. 380.35203249]