Morse timing - MorseKOB/PyKOB GitHub Wiki

Morse timing

by Les Kerr

In this article, I describe the timing of Morse code as sent by the pykob.morse module. I also provide some historical perspective as it relates to earlier versions of the MorseKOB program.

International Morse

The timing of International Morse (also known as Continental Code) is well established. The relative length of each code element is expressed in code units, where one unit is the length of a dot.

Element Units
dot 1
dash 3
space between elements 1
space between characters 3
space between words 7

Code speed

In computing the code speed in words per minute, the average word is assumed to be five letters long. Traditionally, the word PARIS is used to represent a typical word. If you add up the number of code units in PARIS, including the 7 unit space at the end of the word, it comes to 50 units. Coincidentally, the word MORSE is also 50 units long.

We can now calculate the length of a code unit for any particular code speed. It's given by the formula

unit = 1200 / wpm

where unit is the length of a dot in milliseconds, and wpm is the code speed. At 20 wpm, for example, dots are 60 ms long, dashes 180 ms, etc.

More information can be found in the Wikipedia article Speed in words per minute.

Farnsworth timing

When learning Morse code, it's best to hear each individual character sent at full speed, at least 18 or 20 wpm. Otherwise there's a temptation to count the dots and dashes instead of hearing each character as a complete sound unit.

To apply Farnsworth timing, first a delta is calculated, which is the amount of space that needs to be added to each word to bring the overall code speed down to the required words per minute.

delta = 60000 / wpm - 60000 / cwpm

where delta is the number of milliseconds to add to each word, cwpm is the character speed, and wpm is the overall speed.

If Farnsworth word spacing is in effect, this delta is added to the normal 7 unit space between each word. In the more usual case of character spacing, 1/3 of delta is added to the word spacing and 1/6 of delta to the normal character spacing. In the nominal case of a 5 letter word, this accounts for the entire delta.

To learn more about the timing of International Morse and details of the Farnsworth method, see the ARRL document A Standard for Morse Timing Using the Farnsworth Technique.

American Morse

There really is no established standard for the timing of American Morse, despite what one sometimes finds on the internet. American Morse tends to be more idiosyncratic and organic, with each operator striving for clarity of transmission rather than modeling their sending on some abstract ideal.

In the early days of MorseKOB development, I captured the timing of experienced operators as they were sending. I found, for example, that the dashes tended to be longer than the 3 dot units of International Morse. I also found the space between consecutive dashes tended to be longer that 1 dot unit, with the difference being made up for by shortening the first of the two dashes. Most notably, operators often left a slightly longer space before and after the internally spaced letters (C, O, R, Y, and Z) to avoid the potential ambiguity of American Morse. I also analyzed Instructograph tapes to determine the length of the internal Morse space that trainees were exposed to back in the day.

With MorseKOB 2.5, I went to great lengths to emulate the sending style of a live operator. In retrospect, I now consider that effort to have been a waste of time. For pykob, I've adopted a much simpler approach which works just as well in practice.

Morse timing in pykob

The following table shows the timing that I finally settled on for pykob.

Element Units
dot 1
dash 3
L dash 6
zero dash not used [1]
space between elements 1
internal Morse space 3 [2]
space between characters 3
space between words 7 [3]

[1] The extra long dash, representing the numeral 0 in American Morse, is said to be 9 units in length. However, I haven't found a single experienced operator who actually sent zeros this way. They all sent them as the letter O, and I decided that's what pykob should do as well.

[2] On the internet you sometimes see claims that the internal Morse space is 2 units. In the original prototype of MorseKOB, that's the timing I used. I could tell immediately that it sounded weird, and wasn't at all like actual operators were sending. My analysis of Instructograph tapes confirmed that a full 3 units was a better choice. This obviously leads to potential ambiguity, since the space between letters is also 3 units. Live operators sometimes deal with this ambiguity by slightly extending the word space surrounding the spaced letter. Just as often, they leave it up to the receiving operator to resolve the ambiguity based on context. This is done subconsciously by both the sending and receiving operators. The human brain is an amazing thing!

[3] The timing charts I've seen for American Morse show it as 6 units. This sounds rushed to me, so based purely on personal preference I've chosen to make it 7 units. Maybe I've done American Morse a disservice here, but no one has complained.

Speed

American Morse is a more efficient code than International Morse. The word PARIS, for example, is 47 units instead of 50. The word MORSE is even shorter, at 43 units. For pykob I split the difference and made the assumption that a typical word is 45 units long.

If we use the same formula for calculating the length of a dot unit (1200 / wpm), then the Morse would be sent about 10 percent faster than the specified number of words per minute. I could have accounted for this by adjusting the dot unit to slow the code speed back down to the desired value. I found, however, a much better solution is to apply a slight amount of Farnsworth spacing between the characters. A happy consequence of this is that it solves the ambiguity problem of internally spaced letters. And it sounds good too (to my ear, at least).