Morse Code Processing
(circuits and software related to Morse Code signals)

sineCW60 — Regenerative Code Practice Oscillator

The Regenerative Code Practice Oscillator sineCW60 (software) provides a configurable Morse Code monitor tone of high-quality
Chuck, AA0HW, started the sineCW project in 2014. He presents several versions of sineCW... as a VSTi (Virtual Instrument) plugin in YouTube videos, the QRQcwnet forum and the iCW group.
The program SynthEdit by Jeff McClintock provides a simple method to make a VST plugin. Just drag and drop several ready-made standard components/modules (input, output, oscillators, filters, switches, sliders etc.), set their parameters, wire them and, finally, export the SynthEdit structure (circuit) as a VST plugin. No programming skills are required.
sineCW60 is based on one of Chuck's designs. Due to numerous changes, sineCW60 now is a 64-bit (VST3/VSTi) stand-alone plugin — no further plugins are required for its application. The plugin has been applied in setups for Internet-CW (iCW) via SonoBus and via Mumble, and in setups for training sending Morse Code.
It's straightforward to apply the plugin in a VST (Virtual Studio Technology) host, like the minimal and free plugin host DAM Host by Davidson Audio & Multimedia. To create a monitor tone at the output of the VST host's sound card, feed a keyed square wave signal with a fixed frequency in the range from 4 kHz to 5 kHz and with a fixed level in the range from 1 V peak-to-peak to 2 V peak-to-peak to its Line-In input.
As an example, the astable multivibrator KeySWcw can be applied to provide a suitable input signal to sineCW60. KeySWcw can be keyed by a straight key or by an electronic keyer. A further example to provide a suitable input signal is shown as WK3 WinKeyer Side Tone Output Modification.
Three options for the
OUTPUT KEYED TIME
, relative to the keyed time of
the input signal, are provided:
-
MAINTAIN TIME (DELAYED)
- Keyed time of the output signal equals keyed time of the input signal.
- The output signal is delayed by the FALL TIME in relation to the input signal.
- Subsequent silence time of the output signal equals subsequent silence time of the input signal.
-
+ 1/2 FALL TIME (DELAYED)
- Keyed time of the output signal equals keyed time of the input signal plus 1/2 FALL TIME.
- The output signal is delayed by 1/2 FALL TIME in relation to the input signal.
- Subsequent silence time of the output signal equals subsequent silence time of the input signal minus 1/2 FALL TIME.
-
+ FALL TIME (NOT DELAYED)
- Keyed time of the output signal equals keyed time of the input signal plus the FALL TIME.
- The output signal is not delayed in relation to the input signal.
- Subsequent silence time of the output signal equals subsequent silence time of the input signal minus the FALL TIME.
The behaviour of the third option + FALL TIME (NOT DELAYED) is the same as of a keyed square wave generator, followed by an active/passive band pass filter for cleaning the harsh square wave sound. As soon as the key is closed, the output signal starts. When the key is opened again, the output signal will continue for the fall time of the filter.
Ten different EDGE SHAPEs for the envelope curve of the output signal during rise & fall time (edge shaping) are available. Their sound ranges from soft to pointed/punchy and depending upon the user's preferences, he may select the appropriate EDGE SHAPE. The FREQUENCY ranges from 300 Hz to 1300 Hz, the RISE & FALL TIME from 2 ms to 12 ms. The OUTPUT LEVEL can be set by the VOLUME slider from silence (about -140 dB VU) to 0 dB VU.
As an example of use, an edited text passage of the book
The Art and Skill of Radio Telegraphy (ASRT) by William G. Pierpont,
N0HFF (2002) is used as Morse code input to sineCW60.
For both recordings of the output signal, the EDGE SHAPE
AP1 (1.60) has been selected.
Speed is 25 wpm (words per minute), OUTPUT KEYED TIME set to MAINTAIN TIME (DELAYED), RISE & FALL TIME value is 10 ms:
The same text passage — speed now is 60 wpm (words per minute),
OUTPUT KEYED TIME set to + 1/2 FALL TIME (DELAYED),
RISE & FALL TIME value is 7 ms:
sineCW60's EDGE SHAPE Functions
The names of the functions and the respective values of maximum steepness (slope) of their curves mmax are displayed in the EDGE SHAPE drop-down list of sineCW60's user interface (e.g. "AP1 (1.60)"). When selecting an edge shape, strive for best readability of your code.
Function AP1 provides an approximation to the first half of a Slepian (PSWF) window [5, DPSS for NW = 2.18], considered suitable for shaping high-speed Morse code (Thanks to Chuck, AA0HW and Wally, K5TO). Function CF is a degree-3 cosine polynomial that, from 30% of the rise time on, gets close to the implemented Slepian approximations APi. The Gaussian[6] shapes GS, with carefully chosen parameter σ (sigma), and the Raised Cosine[7] function RC, are well known for shaping Morse code elements. The sound provided by the degree-2 cosine polynomial CK is a bit more punchy than that of RC-shaped code elements.
Some properties of the Bohman window function BM have been evaluated by Harris[8, p.67, eq.(39)]. It sounds considerably more punchy than the Gaussian shape function GS2. Function CP has been inspired by, but is not equal to, the first half of the Nuttall Minimum 4-Term window[9, p.89, eq.(37)]. CP provides the most punchy sound of all edge shapes available in sineCW60.
Just as a sidenote: All edge shape functions, that reached a good rank in my personal "song contest", are shown by solid lines in the plot and have a maximum slope mmax = 0.5 π +/- 5% 😏

A "DIT" at 60 wpm
Note: The sample rate and the bit depth of the VST host's sound card influence the quality the output signal. A consumer–grade sound card (Behringer UCA222 [3], for example), providing a sample rate of 44.1 kHz or 48 kHz and a bit depth of 16 bit, is more than adequate for the intended purpose under consideration.

sineCW60's OUTPUT KEYED TIME options

sineCW60's "circuit" in SynthEdit 1.5
📄 Download sineCW60 zip-archive version: 1.2.6 - June 1, 2025
Links to download DAM VST3 host and for additional information:
KeySWcw — Astable Multivibrator with Key Input
WK3 WinKeyer Side Tone Output Modification

A modification of the K1EL WK3 WinKeyer USB-SMT Kit [1] is shown. Adding an insulated 3.5 mm stereo jack socket [2] (Multicomp-pro No. MJ-073H, just below the PADDLE input jack socket) allows to get a square wave side tone audio signal out of the WinKeyer. The side tone frequency of the WK3 WinKeyer can be set from about 400 Hz to about 4 kHz. Set to a frequency of 3906 Hz (the maximum side tone frequency of the WK3 WinKeyer), this square wave signal can be applied as a suitable input signal to the VST3 plugin sineCW60 . The use of an insulated socket preserves K1EL's well thought out system to avoid ground loops in the WinKeyer. (Keep in mind however, that the SP1 "-" PCB-pad is connected to the MJ-073H shield. An audio coupling transformer may be used to achieve isolation between the ground of an external circuit (connected to the MJ-073H socket) and the internal SP1 "-" PCB-pad of the WinKeyer.)
The 10nF capacitors shown in the schematic are ceramic, the 1µF capacitors are of the film/foil type. The 180 Ohm resistor sets the output amplitude of the circuit and may be replaced by a value which fits the needs of the individual application. The parts are soldered to a Prototype PCB stripboard. This board is fixed to the bottom of the WinKeyer's case by a Velcro tape close to the battery holder. For my setup, the output of this circuit is connected to the Line In input of a consumer–grade sound card [3] (input impedance of approximately 27 kOhm) and a 180 Ohm resistor to set the output amplitude proved to be well suited. Parameters of the WinKeyer 3.1 CW Processor/Keyer IC are found in its data sheet [4].


Internet-CW (iCW) Mumble Servers in the U.S.A. and in Germany


References
(Links will open in new windows/tabs)- [1] K1EL WK3 WinKeyer USB-SMT Kit
- [2] Multicomp-pro Socket MJ-073H, 3.5mm Jack 3 Pole
- [3] Sound Card Behringer U-Control UCA222
- [4] K1EL WinKeyer 3.1 CW Processor and Keyer Data Sheet
- [5] SciPy: scipy.signal.windows.dpss
- [6] SciPy: scipy.signal.windows.gaussian
-
[7] Smith, J.O. "Hann or Hanning or Raised Cosine." Spectral Audio Signal Processing (online book). 2011 edition.
(Accessed May 20, 2025) - [8] Harris, Fredric, J. “On the Use of Windows for Harmonic Analysis with the Discrete Fourier Transform.” Proceedings of the IEEE®. Vol. 66, January 1978, pp. 51–83.
- [9] Nuttall, Albert H. “Some Windows with Very Good Sidelobe Behavior.” IEEE® Transactions on Acoustics, Speech, and Signal Processing. Vol. ASSP-29, February 1981, pp. 84–91.