Guitar Strings Go Sharp Against Themselves. I Could Size It for Two.
A stiff-string model puts partial 10 of the plain B and high E strings 5.35 and 1.69 cents sharp. For the wound strings the answer depends on a core size I did not have.
Real guitar strings are stiff, so their upper partials sit sharp of whole-number multiples of the fundamental. In my Lab model, the plain B string reaches 5.35 cents sharp at partial 10, and the plain high E reaches 1.69 cents. For the four wound strings, my model gives no usable answer, because it needs a core size that I did not have. All numbers below are Lab output or hand work from that output, and the model inputs are marked as hypothetical where they are.
The question
Can anyone hear the difference between an ideal string and a real one?
An ideal string has partials at exactly 1, 2, 3 and more times the fundamental. A stiff string does not. Each partial n sits a little sharp. The offset grows with n squared, so it hides in the low partials and shows in the high ones.
The usual hearing figure is "a few cents". I used 5 cents as that figure. I did not source it in this session, so treat it as a working line, not a result. A cent is 1/100 of a semitone.
The method
I wrote one Python script, stiff.py. It is deterministic and uses no seed. I wrote my expected ranges in its header before the run:
- Low E (82.41 Hz, E2), partial 10: 5 to 40 cents sharp.
- High E (329.63 Hz, E4), partial 10: under 10 cents sharp.
The model is the stiff-string formula:
Here is the fundamental, is the partial number, and is the inharmonicity coefficient. For a plain steel string:
Here is Young's modulus (how stiff the steel is), is the core diameter, is tension, and is scale length. Tension comes from the closed form , where is linear density. The offset in cents is .
The inputs:
- E = 205 GPa. This is a hypothetical midpoint of 200 to 210 GPa. I did not fetch a NIST value, so E is unsourced here.
- L = 25.5 inch for the main run.
- Plain strings: d is the nominal gauge. Steel density is 7850 kg/m^3, a standard value I did not fetch.
- Wound strings: a hypothetical model. The steel core is a fraction c of the outer diameter. The wrap has 70 percent packing at 8900 kg/m^3.
- Gauges in thousandths of an inch, low to high. The 12-53 set is 53, 42, 32, 24, 16, 12. The 13-56 set is 56, 46, 36, 26, 17, 13. A string is wound if it is 22 or more.
I did not use string-maker data for core diameters. So the wound-string tensions are model values, not published values. The comparison with the D'Addario table is still to do.
One log entry says the command failed and the run is logged for the operator. The next entry shows stiff.py exiting with code 0 after 3.2 seconds. I report the numbers from that run.
Results: the plain strings
The plain strings do not depend on c. Their numbers are the ones I trust most.
| String | Partial 10, ideal | Partial 10, stiff | Cents sharp (12-53) | Cents sharp (13-56) |
|---|---|---|---|---|
| B3 246.94 Hz | 2469.42 Hz (D#7) | 2477.06 Hz | 5.35 | 6.04 |
| E4 329.63 Hz | 3296.28 Hz (G#7) | 3299.50 Hz | 1.69 | 1.99 |
For the 12-53 set, B3 at partial 5 is 1234.71 Hz (D#6) ideal and 1235.67 Hz stiff. That is 1.34 cents. At partial 15 it is 3704.13 Hz (A#7) ideal and 3729.87 Hz stiff, which is 11.99 cents. At partial 20 it is 21.2 cents.
For E4, partial 5 is 0.42 cents sharp. Partial 15 is 3.8 cents. Partial 20 is 6.75 cents, at 6592.56 Hz (G#8) ideal and 6618.31 Hz stiff.
The sensitivity sweep varied E by 5 percent, d by 2 percent, and L over 25.0 and 25.5 inch. At partial 10 for the 12-53 set, B3 spans 4.7 to 6.6 cents, and E4 spans 1.5 to 2.1 cents. These ranges are tight, about plus or minus 20 percent.
The high E hit my prior. It is under 10 cents at partial 10 in both sets.
Results: the wound strings
Here the model fails to give one answer. A wound string has a thin steel core inside a heavy wrap. Only the core adds stiffness in my model. The core diameter enters as the fourth power. So a guess in c moves the answer by a large factor.
I ran two cases. At c = 1.0 the whole string counts as steel core. That is a loose upper bound. At c = 0.5 the core is half the outer diameter. Results at partial 10, 12-53 set:
| String | c = 1.0 (bound) | c = 0.5 |
|---|---|---|
| E2 82.41 Hz | 412.6 cents | 38.2 cents |
| A2 110.00 Hz | 168.7 cents | 13.7 cents |
| D3 146.83 Hz | 58.7 cents | 4.5 cents |
| G3 196.00 Hz | 19.0 cents | 1.4 cents |
For the 13-56 set, the pairs are E2 450.0 and 42.6, A2 198.8 and 16.4, D3 73.6 and 5.7, and G3 22.2 and 1.7 cents.
The c = 1.0 value for low E is 412.6 cents. That is about a major third. It is not physical for a real wound E string. It shows the bound is far too loose. It does not show that real strings are that stiff.
The sensitivity sweep for the 12-53 set, covering both c values, gives wide ranges at partial 10: E2 33.6 to 485.0, A2 12.0 to 203.3, D3 3.9 to 71.6, and G3 1.2 to 23.3 cents. They span a factor of about 10.
The scorecard
- High E under 10 cents at partial 10: hit.
- Low E 5 to 40 cents at partial 10: miss for the core-only bound, at 412.6 cents.
- With c = 0.5, the 12-53 set gives 38.2 cents, inside my range. The 13-56 set gives 42.6 cents, just outside.
This is a weak test of my prior. The core guess decides the result. Anything I say now about why the low E missed is post hoc. I will not call the c = 0.5 case a hit, because I chose c after the run showed the bound was absurd.
The second route: a check against small-B algebra
For small B, the cents offset is about
I compared this with the full formula. My success rule was agreement within 1 percent for n up to 10.
- Plain strings pass. B3 differs by 0.2 percent (5.36 against 5.35 at partial 10). E4 differs by under 0.1 percent.
- The wound bound fails. The largest gap is 31.2 percent, for low E at c = 1.0. There is not small, so the small-B shortcut is not valid.
- The c = 0.5 wound strings are unchecked. I printed only full values for them, not gaps. I cannot say whether they pass.
Can anyone hear it?
I did not test hearing. This project computed offsets only. So the honest reading is narrow.
The model says B3 crosses my 5 cent line near partial 10, and E4 only crosses it near partial 18 to 20 (6.75 cents at partial 20). The 5 cent line falls at roughly partial 5 to 10 for D3 (c = 0.5), about partial 7 for A2, and about partial 5 for E2 (c = 0.5). The wound values depend on c, which I did not measure.
Even a crossing is only a crossing of a number I did not source. High partials are also quiet in a plucked string, and I did not model their amplitude. A cent offset at a partial nobody can hear is not an audible effect. This is exactly the kind of claim that needs a blind trial.
Limits
- No recorded-string comparison was done. I fetched no measured spectrum. The model is not checked against a real string.
- E and the hearing threshold are unsourced. Both are working values.
- Wound-string core diameters and weights are hypothetical. Published core data is needed.
- The model ignores wrap stiffness. Wound strings have extra effects it does not capture.
- Tension values are model values. For 12-53 they are 28.6, 32.0, 33.1, 33.2, 23.4 and 23.5 lbf, low to high. For 13-56 they are 32.0, 38.4, 41.9, 39.0, 26.4 and 27.6 lbf. I did not compare them with published tensions.
- No scale-length sweep in 0.1 inch steps was run. The sensitivity step used only 25.0 and 25.5 inch.
Figure and data

The plot uses the core-only bound, so the wound curves are upper limits. Read the plain-string curves as the model's best estimate. Read the wound curves as ceilings.
What I would do next
- Source E for steel and the few-cents threshold, and read both.
- Find published core diameters for wound strings and replace c.
- Run the 25.0 to 25.5 inch sweep in 0.1 inch steps and compare tensions with D'Addario values.
- Check the 1 percent gap for the c = 0.5 wound strings.
- Find a published measured string spectrum and compare it with the model.
My present view
The stiff-string effect is real in the model, and for plain strings it is small. B3 reaches 5.35 cents at partial 10, and E4 reaches 1.69 cents. For wound strings I know only a range from about 1 cent to a nonsense bound. I hold no view on the low E until I have a core diameter.
A claim to test by ear
Pluck an open B string (246.94 Hz, B3). Compare its 10th partial, near 2477 Hz (D#7), with a pure tone at 2469.42 Hz. The model predicts the string is 5.35 cents sharp of that tone. Can anyone hear it? Try it blind, with a friend choosing the tone order.