[last updated: 2022-06-10]
go to: ham radio home page
-----
This page under construction ...
- Morse Code is a sequence of short and long tones (dits and dahs), that encode text.
- Alpha-numeric characters are letters of the alphabet and the numerals 0-9.
Each of these characters corresponds to a "Morse character."
Each Morse character is a sequence of 1 to 5 "Morse elements,"
with each Morse element being either a dit (short tone) or a dah (long tone).
Note there is no distinction between upper and lower case letters: a "T" in Morse code is the same as a "t".
So for example, the Morse character that corresponds to the character "C" is the sequence "_ . _ ."
- "Standard" timing for Morse elements and characters is:
ditDuration = 1 unit time period
dahDuration = 3 unit time periods
betweenElements (ie. between dits and dahs in a given morse character) = 1 unit
betweenChars = 3 units
betweenWords = 7 units
These 5 parameters fully specify the timing of a Morse transmission.
As you can see, all of them are defined in terms of "unit time period," and that is the length of a dit.
Timing of everything else is calculated based on that length.
Therefore, if "Standard" timing is used, simply specifying ditDuration is sufficient to fully characterize the transmission.
- Speed of sending/receiving Morse is specified in "Words Per Minute" or WPM.
- Years ago there was a requirement to be able to send and receive code at a rate of 13 wpm to earn a General license.
Those requirements have now been removed, and you no longer need ability in code to earn any license.
- But "words per minute" is ambiguous because "words" don't all have the same number of letters, and Morse characters don't all have the same number of elements (dits & dahs),
So a standard has been established: a Standard word is defined as the word "PARIS " (including following space).
You can calculate that the word "PARIS ", including its following space, when translated into morse code,
contains exactly 50 unit time periods per the Standard Morse timing.
We use this fact to calculate:
WPM = 1.2 / ditDuration(sec)
or: ditDuration(sec) = 1.2 / WPM
or: ditDuration(ms) = 1200 / WPM
(see Farnsworth Calculations for a more detailed derivation)
- "Farnsworth Stretching:"
- When you are just learning to receive code, you may have a target WPM that you want to be able to decode.
But practicing at this speed may be impossible - it's just too fast.
So you slow it down.
But if you slow down everything, that is, if you keep the Standard Timing,
then you find that the slow speed of dits and dahs and generally any Morse character is clunky, to pick a technical term.
So "Farnsworth Stretching" was developed to slow down the overall transmission,
while keeping the length of dits and dahs and the betweenElement duration equal to that specified by Standard Timing at your target WPM.
This results in a given Morse character sounding the same whether at Standard Timing or stretched,
but the betweenChars and betweenWords durations have been stretched, to give you just a little more time to recognize/decode them.
- Transmission speed when using Farnsworth Stretching is stated as:
"actual wpm" / "target wpm",
eg. 8 / 20, would be an actual speed of 8 wpm (based on "PARIS" 50 elements/word)
with ditDuration based on your target of 20 wpm.
- In Farnsworth Stretching, the length of dits and dahs, and the time between elements is based on your targeted WPM speed,
but the betweenChars and betweenWords timing is increased for easier recognition.
- However the ratio of betweenChars-to-betweenWords is maintained at 3 : 7 per the Standard Timing rules.
------------------------------------------------------------------------
- My goal is to program a microcontroller module that generates Morse code,
- It will take as input:
Actual-WPM and Target-WPM
A-WPM and T-WPM
- It will calculate all the timing parameters:
ditDuration
dahDuration
betweenElements
betweenChars
betweenWords
- From above, the length of a dit is determined solely by T-WPM per Standard Timing rules:
ditDuration(ms) = 1200 / T-WPM
- It follows then per standard timing:
dahDuration = 3 * ditDuration
betweenElements = ditDuration
... ... ... ...
- So now we just have to find betweenChars in terms of A-WPM and T-WPM:
- You're just going to have to trust me on this one.
My derivation of the equation was sloppy and convoluted, (my struggling explanation...)
and I wasn't able to find a clear explanation online either, so I'll spare the details and just give you the result:
- betweenChars = (9.52 / A-WPM) - (5.88 / T-WPM)
.
.
eof