Spike cancel OFF/SPIKE/SHORT
•
yet another spike cancelling algorithm, which helps the decoder to ignore short
noise impulses. Has three options: OFF/SPIKE cancelling/SHORT spikes cancelling
Use 3 Goertzels
•
may come in the future, there is nothing to choose here yet
Theory
The decoder works as follows (see Guenther 1973 for details):
•
collect a block of samples (with size "Blocksize")
•
calculate one "optimized Goertzel" magnitude value from this block of samples
[Goertzel algorithm works like an FFT, giving you the magnitude of a signal for a
given frequency --> the CW sidetone frequency you are listening to]
•
lowpass filter the magnitude values ("averager")
•
automatic gain control for these values ("AGC")
•
determine whether we have a pulse or a space by comparing the magnitude level
to a "threshold"
•
noise canceling: determine whether two consecutive magnitude values are the
"same" (pulse/space) and accepting only when this is true
•
light the red LED when we have a pulse
•
shut off the red LED when we have a space
•
the pulses and spaces and the time length of these pulses and spaces are stored
in a ring buffer
•
the ring buffer is used to INITIALIZE the decoder: a set of equations from
Guenther (1973) is used to determine the speed (WPM) of the received CW
message, i.e. the length of dots, dashes and inter-character and inter-word
spaces. This is the essential step for decoding the message
•
then the message stored in the ring buffer is being decoded by the DATA
RECOGNITION routine using the timing information from the initialization -->
this produces another data buffer with all the dits and dahs and spaces of the
message
•
the dits and dahs are then interpreted in the CHARACTER IDENTIFICATION
routine, where basically a look-up-table is used to interpret the dits and dahs as
characters