User:M-yac/Neutral Intervals and the FJS

From Xenharmonic Wiki
Jump to navigation Jump to search

A strength of the Functional Just System, or FJS, is that once you become familiar with an interval, its symbol is often obvious. For example, 6/5 is a minor third (it's the "classic minor third") and has a 5 in the denominator, so its symbol is "m3_5" - or 7/4 is a minor seventh (it's the "septimal minor seventh") and has a 7 in the numerator, so its symbol is "m7^7". But for neutral intervals, intervals which lie halfway between major and minor, this breaks down. For example, 12/11 is the "undecimal neutral second." Is its symbol "M2^11" or "m2^11"? What about another common neutral second, 11/10: is its symbol "M2^11_5" or "m2^11_5"? What I really want to do is write "n2^11" for the first and "n2^11_5" for the second! Is there a way for this to make sense?

This page presents a modification of the FJS in which those symbols do make sense, while still retaining most of the FJS's nice properties. This modification has two main parts:

  • Extending the definition of Pythagorean interval in a natural way to include neutral intervals. In this extension, a Pythagorean neutral third, written "n3", is exactly (3/2)^(1/2), or sqrt(3/2).
  • Lowering the FJS radius of tolerance. This ensures the formal comma of the 11th harmonic is a neutral interval (in particular, a semi-augmented fourth) which lets us write "n2_11" for 12/11, "n3^11" for 11/9, etc.

I call this modification the Neutral FJS, and you can experiment with it here or in xen-calc. Be sure to check out the table of examples at the end of the third section.

In the first section, I precisely define what a Pythagorean interval is, and in the second, show how to extend this definition naturally to include neutral intervals. If you don't care about the details, skip to the table at the end of the second section. In the third second, I give a brief overview of the FJS and discuss how to modify it. In the last two sections, we discuss the pros and cons of this modification and preview some generalizations.

Pythagorean intervals

A Pythagorean interval is an interval made up of only justly-tuned perfect fifths (3/2) and octaves (2/1). For example, a Pythagorean major second (9/8) is made by going two perfect fifths up and one octave down (i.e. 9/8 = (3/2) * (3/2) * (1/2)) and a perfect fourth (4/3) is made by going one perfect fifth down and one octave up (i.e. 4/3 = (2/3) * (2/1)).

Expressing this idea mathematically, we say that every Pythagorean interval has the form:

(3/2)^g * (2/1)^p

where g and p are integers. (In the language of rank-2 temperaments, g is the number of generators and p is the number of periods that make up the interval.)

The reason these intervals are so useful in systems like the FJS is that they have familiar names which are unique and consistent. Some of examples of these names are "P5" or "perfect fifth" for 3/2, "M2" or "major second" for 9/8, and "A6" or "augmented sixth" for 59049/32768 (= (3/2)^10 * (2/1)^(-5)).

More precisely, each Pythagorean interval has a unique degree and a unique quality. The former are positive whole numbers like 1, 2, 6, or 10 and the latter are symbols/names like "P"/"perfect", "M"/"major", or "d"/"diminished". The degree turns out to be easy to calculate from our mathematical definition of a Pythagorean interval: notice that adding a perfect fifth has the effect of raising the degree by 4 (e.g. two perfect fifths make a major ninth) and adding an octave raises the degree by 7 (e.g. a major second and an octave makes a major ninth). Our formula is thus:

d = 1 + 4*g + 7*p

For example, if g = 10 and p = -5, we have an interval with degree d = 1 + 4*10 + 7*(-5) = 6, and indeed this interval is the Pythagorean augmented sixth.

As for quality, notice that adding a multiple of 7 to g and subtracting the same multiple of 4 from p doesn't change the degree:

d_new = 1 + 4*(g + 7*k) + 7*(p - 4*k)
      = 1 + 4*g + 28*k + 7*p - 28*k
      = 1 + 4*g + 7*p
      = d_old

Thus, the new interval defined by g+7*k and p-4*k must have a different quality! (If not, we would have two different Pythagorean intervals with exactly the same degree and quality, which we know we can't have.) In fact, this trick of adding a multiple of 7 to g and subtracting the same multiple of 4 from p can be used to find all the different qualities of intervals for a given degree. [1].

For Pythagorean intervals with "perfect" degrees, meaning ones with degree equal to 1, 4, or 5 plus a multiple of 7 (e.g. 1,4,5,8,11,12), the different qualities are named as follows:

... --> 2d -------> d (dim.) -------> P (perfect) -------> A (aug.) -------> 2A --> ...
           g+7,p-4           g+7,p-4              g+7,p-4           g+7,p-4

and for the remaining intervals with "imperfect" degrees, the different qualities are:

    ... --> d (dim.) -------> m (minor) -------> M (Major) -------> A (aug.) --> ...
                     g+7,p-4            g+7,p-4            g+7,p-4

As a quick sanity check, the "Formula" column of the first table on the Wikipedia page for Pythagorean tuning tells us that a Pythagorean minor third is (3/2)^(-3) * (2/1)^2 (i.e. g = -3, p = 2). We should therefore expect a Pythagorean major third to have g = -3 + 7 = 4 and p = 2 - 4 = -2, and indeed we read off from that table that a Pythagorean major third is equal to (3/2)^4 * (2/1)^(-2).

Neutral Pythagorean intervals

Looking back at our formula for degree, notice that if g was a fraction like 1/2 we would still get what seems like a sensible answer for degree. For example, if g = 1/2 and p = 0 we get d = 3. But does it actually make sense to think of this interval as some kind of third?

Well, you probably know where I'm going with this: the answer is yes! The resulting interval is what I call a "Pythagorean neutral third" or "n3". Like other neutral thirds, it is roughly 350 cents (halfway between a 12-EDO major and minor third) and two of itself make a roughly a perfect fifth. In this case, two Pythagorean neutral thirds make exactly a perfect fifth ((3/2)^(1/2) * (3/2)^(1/2) = sqrt(3/2) * sqrt(3/2) = 3/2).

More generally, a Pythagorean interval with a non-integer value for g with denominator 2 I call a neutral Pythagorean interval. The degree of a neutral Pythagorean interval works exactly the same as for non-neutral Pythagorean intervals. As for quality, we can reach new "neutral" qualities by adding multiples of 7/2 to g instead of just 7 (and to balance this, subtracting multiples of 2 from p instead of 4). Our pictures for perfect and imperfect degrees now become:

             ... --> d ---------> sd ---------> P ---------> sA ---------> A --> ...
                       g+7/2,p-2     g+7/2,p-2    g+7/2,p-2     g+7/2,p-2

... --> d ---------> sd ---------> m ---------> n ---------> M ---------> sA ---------> A --> ...
          g+7/2,p-2     g+7/2,p-2    g+7/2,p-2    g+7/2,p-2    g+7/2,p-2     g+7/2,p-2

where "sA" and "sd" stand for "semi-augmented" and "semi-diminished".

Here's a table of some notable neutral (in bold) and non-neutral Pythagorean intervals:

Notable Neutral/Non-neutral Pythagorean intervals
Name Symbol Formula Cents
perfect unison P1 1/1 0.00
semi-augmented unison sA1 (3/2)^(7/2) * (2/1)^(-2) 56.84
minor second m2 (3/2)^(-5) * (2/1)^3 90.22
augmented unison A1 (3/2)^7 * (2/1)^(-4) 113.68
neutral second n2 (3/2)^(-3/2) * (2/1) 147.06
major second M2 (3/2)^2 * (2/1)^(-1) 203.91
minor third m3 (3/2)^(-3) * (2/1)^2 294.13
neutral third n3 (3/2)^(1/2) 350.97
major third M3 (3/2)^4 * (2/1)^(-2) 407.82
semi-diminished fourth sd4 (3/2)^(-9/2) * (2/1)^3 441.20
perfect fourth P4 (3/2)^(-1) * (2/1) 498.04
diminished fifth d5 (3/2)^(-6) * (2/1)^4 588.27
augmented fourth A4 (3/2)^(6) * (2/1)^(-3) 611.73
perfect fifth P5 3/2 701.96
semi-augmented fifth sA5 (3/2)^(9/2) * (2/1)^(-2) 758.79
neutral sixth n6 (3/2)^(-1/2) * (2/1) 849.02
neutral seventh n7 (3/2)^(3/2) 1052.93
semi-diminished octave sd8 (3/2)^(-7/2) * (2/1)^(3) 1143.15
perfect octave P8 2/1 1200.00

Modifying the FJS

First, a quick overview of how the FJS works - for more detail and explanations as to why this gives nice results, see misotanni's website.

  • Octave-reduced prime intervals (i.e. 5/4, 7/4, 11/8, etc.) are associated with Pythagorean intervals using the "FJS master algorithm". This algorithm has two inputs: a radius of tolerance (RoT), which can be any interval, and a fifth sequence, whose entries are interpreted as values for g. The result of the algorithm is the first value for g in the sequence whose associated octave-reduced Pythagorean interval has a distance less than the RoT from the octave-reduced prime interval. In the standard FJS, the RoT is 65/63 and the fifths sequence is: 0, 1, -1, 2, -2, 3, -3, 4, -4, ..., 8, -8.
    • For example, 5/4 is associated with the Pythagorean major third 81/64 (g = 4, p = -2). This is because 4 is the first value for g from our fifth sequence whose associated octave-reduced Pythagorean interval has a distance less than 65/63 from 5/4. In this case, the distance is (5/4) / (81/64) ≈ 21.5c, which is less than 65/63 ≈ 54.1c. The next closest value was g = -3, whose distance was (5/4) / (32/27) ≈ 92.2c.
  • Each prime is given a formal comma, which is its octave-reduced interval divided by the Pythagorean interval to which it corresponds.
    • For example, the prime 5 has the formal comma (5/4) / (81/64) = 80/81, the inverse of the syntonic comma.
  • An FJS interval symbol is a Pythagorean interval followed by a series of prime accidentals, where otonal accidentals, written like "^p", mean you should multiply by the prime's formal comma, and utonal accidentals, written like "_p", mean you should divide by the prime's formal comma.
    • For example, the symbol m3_5 denotes the Pythagorean minor third 32/27 divided by the formal comma of 5, 80/81. The result, (32/27) / (80/81) = 6/5, is indeed the intuitive result for "the minor third with 5 in the denominator."

Note that in the FJS documentation and in my Custom FJS explorer, the values of g in the fifth sequence are referred to as fifth shifts.

The first bullet above can also be understood visually. In the picture below, we start with a line representing the octave. Then, for each value of g in the fifth sequence, the octave-reduced Pythagorean interval corresponding to it is marked and a box is drawn around that mark which stretches 51c (the value of the RoT) in both directions. Regions defined by values later in the list will appear behind those defined by earlier ones, and overlaps are drawn using separate colors for clarity.

FJS regions of the octave

You can generate an interactive version of this image with my Custom FJS Explorer.

If we mark where 5/4 lies on this picture, we immediately know its associated Pythagorean interval has `g = 4`, since it falls inside the region marked with "M3 (+4)". In the picture below, 5/4 and a few other octave-reduced prime harmonics are marked.

FJS regions of the octave with primes marked

We can also see in this picture that 5/4 is extremely well-approximated by a Pythagorean d4 (their difference is only 1.95c) but it is not associated with this interval since -8 comes after 4 in the fifth sequence. This is represented by the fact that the region marked with "d4 (-8)" is behind the region marked with "M3 (+4)".

Another thing to notice in the picture above is the tiny gaps that form between the m2 and M2 regions, m3 and M3 regions, and so on. As noted in User:FloraC/Critique on Functional Just System, this could be resolved by increasing the RoT.

To define the Neutral FJS, we make three changes to the standard FJS: 1. Allow the phrase "Pythagorean interval" to include neutral Pythagorean intervals, 2. Change the RoT to the Pythagorean semi-diminished 2nd (sd2), roughly 33.38c, 3. Change the fifth sequence to: 0, 1, -1, 2, -2, ..., 6, -6, 1/2, -1/2, 3/2, -3/2, ..., 11/2, -11/2.

Below are versions of the same two pictures as above but with these updated values for the RoT and fifths sequence.

Neutral FJS regions of the octave

This choice of fifth sequence just corresponds to the idea that when approximating prime harmonics, we should consider simple non-neutral Pythagorean intervals first, then consider neutral ones. The RoT chosen is exactly the distance between sA4 and d5 (or sA3 and M3, etc.), but any value roughly between 28.4c and the chosen RoT (33.4c) will have the same effect. An RoT any smaller than 28.4c will result in gaps popping up between non-neutral and neutral regions, and an RoT any larger than 33.4c will result in primes which closely approximate neutral intervals (e.g. 11/8) not actually getting assigned those neutral intervals (e.g. 11/8 getting assigned to a d5 if the RoT is more than a few cents larger than 33.4c).

Finally, here's a table of comparing some FJS and Neutral FJS interval symbols in the 11-limit and 13-limit (generated using xen-calc).

FJS vs. Neutral FJS symbols in the 13-limit
Ratio Name FJS Symbol Neutral FJS Symbol Cents
12/11 undecimal neutral second M2_11 n2_11 150.63
11/10 large undecimal neutral second m2^11_5 n2^11_5 165.00
11/9 undecimal neutral third m3^11 n3^11 347.41
11/8 undecimal super-fourth P4^11 sA4^11 551.32
13/12 tridecimal neutral second m2^13 n2^13 138.57
13/11 tridecimal minor third m3^13_11 m3^13_11 289.21
16/13 tridecimal neutral third M3_13 n3_13 359.47
13/9 tridecimal diminished fifth d5^13 sd5^13 636.62
13/8 tridecimal neutral sixth m6^13 n6^13 840.53
14/11 undecimal major third P4^7_11 sd4^7_11 417.51
14/13 tridecimal 2/3-tone M2^7_13 n2^7_13 128.30
15/13 tridecimal semi-fourth A2^5_13 sA2^5_13 247.74
13/10 tridecimal semi-sixth d4^13_5 sd4^13_5 454.21
121/64 Alpharabian major seventh m7^11,11 M7^11,11 1102.64

Comparing the FJS and Neutral FJS

Here are some positives that both systems have:

  • Both have unique symbols for every JI ratio.
  • I'd argue both are equally easy to learn and use.

The main advantage of the NFJS over the FJS is the fact that it can intuitively represent neutral intervals - see the introduction or the table in the previous section for some examples of this.

The main disadvantage of the NFJS is that unlike the FJS, it permits "bad" symbols which do not correspond to JI ratios. There are two cases: If a symbol's base Pythagorean interval is neutral, the symbol only corresponds to a JI ratio if all its prime accidentals correspond to neutral Pythagorean intervals. For example, n3^11 corresponds to a JI ratio (namely, 11/9), but n3^5 does not - it corresponds to whatever you want to call sqrt(3/2) * 80/81. If a symbol's base Pythagorean interval is non-neutral, the symbol only corresponds to a JI ratio if there are an even number of prime accidentals which correspond to neutral Pythagorean intervals. For example, m3^13_11 corresponds to a JI ratio (namely, 13/11), but m3^13 does not - it corresponds to whatever you want to call 32/27 * (13/8) / sqrt(8/3).

An advantage of the NFJS is that its RoT and fifth sequence result in a cleaner division of the octave compare to the FJS. In fact, the NFJS' division of the octave is almost exactly the same as that in Margo Schulter's Regions of the Interval Spectrum - they're within ±5 cents! In the image below, the regions on the top are exactly those defined in Schulter's article, and the regions on the bottom are exactly those defined by the NFJS.

Schulter vs. NFJS regions of the octave

Below is a table (hidden by default) of this same comparison.

Schulter vs. NFJS Regions  
Schulter Neutral FJS
Name Region Name Region
Commas 0c - 30c P1 0.00c - 33.38c
Dieses 30c - 60c sA1 33.38c - 56.84c
m2 60c - 125c m2 56.84c - 123.61c
n2 125c - 170c n2 123.61c - 170.58c
M2 180c - 240c M2 170.58c - 237.23c
M2-m3 240c - 260c sA2 237.23c - 260.75c
m3 260c - 330c m3 260.75c - 327.52c
n3 330c - 372c n3 327.52c - 374.44c
M3 372c - 440c M3 374.44c - 441.20c
M3-P4 440c - 468c sd4 441.20c - 464.66c
P4 468c - 528c P4 464.66c - 532.43c
super-4 528c - 560c sA4 532.43c - 554.89c
Tritonic 560c - 640c d5 554.89c - 578.35c
A4 578.35c - 645.11c
sub-5 640c - 672c sA5 645.11c - 668.58c
P5 672c - 732c P5 668.58c - 735.34c
P5-m6 732c - 760c sA5 735.34c - 758.34c
m6 760c - 828c m6 758.34c - 825.56c
n6 828c - 870c n6 825.56c - 872.48c
M6 870c - 940c M6 872.48c - 939.25c
M6-m7 940c - 960c sd7 939.25c - 962.71c
m7 960c - 1025c m7 962.71c - 1029.47c
n7 1030c - 1075c n7 1029.47c - 1076.39c
M7 1075c - 1140c M7 1076.39c - 1143.16c
8ve - diesis 1140c - 1170c sd8 1143.16c - 1166.62c
8vs - commas 1170c - 1200c d8 1166.62c - 1200c


Here are a few disjointed thoughts about how to generalize the contents of this article.

  • It's a common convention that Pythagorean intervals with negative degrees are the inverses of those with positive degrees. For example, "P-5" refers to 2/3, the inverse of "P5", 3/2. This breaks our formula for degree in Section 1! For example, if g = -1 our formula tells us d = 1 + 4*(-1) = -3, while it should be -5. To fix this, we need to define the notion of zeroed degree, which is the degree minus its sign. For example, if d = 5, then the zeroed degree zd = 4, and if d = -5, then zd = -4. We then replace our original degree formula with the following two formulas:
    zd = 4*g + 7*p  and  d = 1 + zd if zd >= 0,
                         d = -1 + zd if zd < 0
  • In Section 2, we noticed that if g was a rational number with denominator 2, our formula for degree didn't break. Well, notice that we could go one step further and let g be a rational number with denominator 4, and still nothing would break. I call these semi-neutral Pythagorean intervals and their quality spectrums now become:
                 ... --> d --> 3/4-d --> sd --> 1/4-d --> P --> 1/4-A --> sA --> 3/4-A --> A --> ...
    ... --> d --> 3/4-d --> sd --> 1/4-d --> m --> sm --> n --> sM --> M --> 1/4-A --> sA --> 3/4-A --> A --> ...

    where the arrows correspond to g+7/4,p-1 and "sM", "sm" stand for "semi-major", "semi-minor". As for "1/4-A", etc. perhaps they could be spoken as "quarter-augmented" or perhaps as "sesqui-augmented" as suggested on Shaahin Mohajeri's page about 96-EDO.

  • In Sections 1 and 2 I do not actually give a way to directly compute the quality from an arbitrary Pythagorean interval, only how to get every quality for a given degree assuming you already know g, p, and the quality of some interval of that degree. In my source code for microtonal_utils I give an algorithm for how to get the quality directly from g and p using a quantity I called the offset - see pyQuality in pythagorean.js.
  • I only discuss interval symbols here, but it should be straightforward to extend the Neutral FJS to include note symbols as well, using the half-sharp, half-flat, etc. symbols to notate "neutral" Pythagorean-tuned notes. One big disadvantage of using the NFJS in this way for note symbols is that it would conflict with the 2020 HEJI, which otherwise works perfectly as an alternate notation for FJS notes.