POTE tuning: Difference between revisions

From Xenharmonic Wiki
Jump to navigation Jump to search
m Category: glossary > terms
Update for terminology reform and remove unclear statements
Line 5: Line 5:


== Computation ==
== Computation ==
The TE and POTE tuning for a [[mapping|map matrix]] such as M = [{{val| 1 0 2 -1 }}, {{val| 0 5 1 12 }}] (the map for 7-limit [[magic]], which consists of a linearly independent list of [[val]]s defining magic) can be found as follows:
The TE and POTE tuning for a [[mapping]] such as A = [{{val| 1 0 2 -1 }}, {{val| 0 5 1 12 }}] (the mapping for 7-limit [[magic]], which consists of a linearly independent list of [[val]]s defining magic) can be found as follows:


# Form a matrix V from M by multiplying by the diagonal matrix which is zero off the diagonal and 1/log<sub>2</sub>''p'' on the diagonal; in other words the diagonal is [1 1/log<sub>2</sub>3 1/log<sub>2</sub>5 1/log<sub>2</sub>7]. Another way to say this is that each val is "weighted" by dividing through by the logarithms, so that V = [{{val| 1 0 2/log<sub>2</sub>5 -1/log<sub>2</sub>7 }}, {{val| 5/log<sub>2</sub>3 1/log<sub>2</sub>5 12/log<sub>2</sub>7 }}]
# Form a matrix V from A by multiplying by the diagonal matrix which is zero off the diagonal and 1/log<sub>2</sub>''p'' on the diagonal; in other words the diagonal is [1 1/log<sub>2</sub>3 1/log<sub>2</sub>5 1/log<sub>2</sub>7]. Another way to say this is that each val is "weighted" by dividing through by the logarithms, so that V = [{{val| 1 0 2/log<sub>2</sub>5 -1/log<sub>2</sub>7 }}, {{val| 5/log<sub>2</sub>3 1/log<sub>2</sub>5 12/log<sub>2</sub>7 }}]
# Find the pseudoinverse of the matrix V<sup>+</sup> = V<sup>T</sup>(VV<sup>T</sup>)<sup>-1</sup>.  
# Find the pseudoinverse of the matrix V<sup>+</sup> = V<sup>T</sup>(VV<sup>T</sup>)<sup>-1</sup>.  
# Find the TE generators G = {{val| 1 1 1 1 }}V<sup>+</sup>.  
# Find the TE generators G = {{val| 1 1 1 1 }}V<sup>+</sup>.  
Line 19: Line 19:
* G<nowiki/>' ~ {{val| 1.000000 0.316960 }}
* G<nowiki/>' ~ {{val| 1.000000 0.316960 }}


The tuning of the POTE [[generator]] corresponding to the mapping M is therefore 0.31696 octaves, or 380.352 cents. Naturally, this only gives the single POTE generator in the rank two case, and only when the map M is in period-generator form, 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 so long as the group contains 2 by [[Lp tuning|POL2 tuning]].  
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 [[Lp tuning|POL2 tuning]], treating the formal prime represented by the first column as the [[equave]].  


=== Computer Program for TE and POTE ===
=== Computer Program for TE and POTE ===
 
Below is a [https://www.python.org/ Python] program that takes a mapping and gives TE and POTE generators.  
Below is a [https://www.python.org/ Python] program that takes a map and gives TE and POTE generators.  


Note: this program depends on [https://scipy.org/ Scipy].  
Note: this program depends on [https://scipy.org/ Scipy].  

Revision as of 11:23, 8 October 2021

POTE tuning (pure-octaves Tenney-Euclidean tuning), also known as KE tuning (Kees-Euclidean tuning), is a good choice for a standard tuning enforcing a just 2/1 octave. It can be computed from TE tuning with all primes destretched until 2/1 is just.

Kees optimality

POTE tuning is alternatively called KE tuning because it is the optimal tuning by Kees metric, that is, it minimizes the squared error of all intervals weighted by Kees height.

Computation

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:

  1. 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]]
  2. Find the pseudoinverse of the matrix V+ = VT(VVT)-1.
  3. Find the TE generators G = 1 1 1 1]V+.
  4. Find the TE tuning map: T = GV.
  5. 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)[0]
    te_map = te_gen @ map
    print (1200*te_gen)
    pote_gen = te_gen/te_map[0]
    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)

Output:

[1201.08240941  380.695113  ]
[1200.          380.35203249]