Tuned Sound Amplifier/Receiver for the VLF Christmas Eve transmission from SAQ, Grimeton, Sweden

Have recorded and processed the full Grimeton SAQ Christmas Message 24th December 2023 as recorded in Cardiff, Wales, UK.

It is attached as a ZIP file containing the processed wav file.

How have others got on?

CC @SAQ Grimeton
Thank you for providing the SAQ recording. I can play it and hear the -.-..- ... I though it would be fun to decode the stream with an MCU and display the text but the file is amplitude-modulated 500hz which is satisfactory only for human ears and brains. I can clip the peaks with an LM393 and blink an LED but it is difficult to measure the carrier on-off time. Information is lost going from 58 microseconds to 2 milliseconds.

If you have the time and it is not inconvenient please provide the unprocessed file.
 

Attachments

  • pulse1.png
    pulse1.png
    25.5 KB · Views: 50
Thanks @Aridace @fowlay I am very surprised how easy it was to receive SAQ here! I have read the Morse message but on the screen not the sound file, see below:-

View attachment 1250662
@fubar3 here is screenshot of processed file in Audacity. The envelope you show is not there. Suggest you process further by calculating RMS value over say 1/516 mS or multiples of. This will give a better waveform to process for Morse code recognition.
 
@fubar3 here is screenshot of processed file in Audacity. The envelope you show is not there. Suggest you process further by calculating RMS value over say 1/516 mS or multiples of. This will give a better waveform to process for Morse code recognition.
I expanded more the Audacity view. There is obvious signal so it is possible to digitize. I plan to amplify, adjust, and rectify the audio to get non-negative pulses including some noise. Then adjust the LM393 threshold so that only clean 3v pulses goto the MCU for decoding. So there are 2 adjustments to tune for optimal.

Usually math is needed to extract data from VLF. But my methods need a strong signal.

Morse has no clocks or markers to assist computer logic. Timing is relative to the situation. I read about a prisoner off war on camera who blinked his eyes "torture" while his captors were showing off.
 

Attachments

  • ditdah.png
    ditdah.png
    6.6 KB · Views: 51
@fubar3 Suggest to process further in audacity proceed as follows:-

1. Effect - Volume and Compressor - Amplify

Screenshot 2023-12-30 201126.png


2. Effect - Volume and Compressor - Limiter

Screenshot 2023-12-30 201241.png


3. Effect - EQ and Filters - Filter Curve EQ - Apply following curve

Screenshot 2023-12-30 201424.png



4. Part of the new waveform (.wav) obtained for further processing.

Screenshot 2023-12-30 201807.png
 
Last edited:
@fubar3 It will help if you have program to calculate a new waveform of RMS values over say 1/516 mS (or multiples of) from this waveform in new .wav file. RMS values are only positive. This will help your LM393 to get a good threshold.

"Morse has no clocks or markers to assist computer logic. Timing is relative to the situation" Yes I agree in this instance timing is by the operator. Suggest you come up with some kind of algorithm, for example keep track of dash time in milliseconds then use rule to define dot as fraction of dash something like this:-

IF new pulse is less than 0.5 dash time and more than 0.20 dash time then it is a dot.
IF new pulse is less than or equal to dash time and more than 0.75 dash time then it is a dash.
IF new pulse is less than 1.25 dash time and more than dash time then it is a dash.
IF new pulse is less than 0.20 dash time then it is noise.
IF new pulse is more than 1.25 dash time then it is noise.

Use dash time values to keep a moving average of "dash time" on the fly to match operator speed, same logic for word boundaries.
 
Last edited:
Snippet from Wikipedia page

International Morse code is composed of five elements:[1]: §3 

  1. short mark, dot or dit ( ▄ ): "dit duration" is one time unit long
  2. long mark, dash or dah ( ▄▄▄ ): three time units long
  3. inter-element gap between the dits and dahs within a character: one dot duration or one unit long
  4. short gap (between letters): three time units long
  5. medium gap (between words): seven time units long (formerly five[6])
individual operators differ slightly, for example, using slightly longer or shorter dahs or gaps, perhaps only for particular characters. This is called their "fist", and experienced operators can recognize specific individuals by it alone. A good operator who sends clearly and is easy to copy is said to have a "good fist". A "poor fist" is a characteristic of sloppy or hard to copy Morse code.

https://en.wikipedia.org/wiki/Morse_code
 
  • Like
Reactions: richgwilliams
@Aridace I am trying to create a decoder that is usable for SAQ. First there must be a receiver tuned to SAQ so that its signal is stronger than all other stations and noise. @richgwilliams provided a recording. It is modified for human ears but still usable. So I am assembling a simple decoder that will convert the recording into pulses. I am programming an MCU to convert the dit-dahs into text. This is just a whim on my part, not required for the original OP..
 
  • Like
Reactions: richgwilliams
The site I posted does a rather bad job as it interprets the noise pulses from the recording as the letter "e" and makes a mess of the rest. The algorithm to decode variable speed morse in the presence of noise isn't easy. I did it ~35 years ago in Z80 assembler. It worked rather well once the morse pulses were made visual and a manually adjustable integrator plus comparator circuit was added. Success with your efforts!
 
  • Like
Reactions: richgwilliams
@fubar3 It will help if you have program to calculate a new waveform of RMS values over say 1/516 mS (or multiples of) from this waveform in new .wav file. RMS values are only positive. This will help your LM393 to get a good threshold.

Another way to do something similar as RMS is by making an OpAmp circuit to "Full Wave Rectify" the signal accurately then some Low Pass filtering.

The triode valve (tube) was invented very early on.

Good luck.
 
I am trying to create a decoder that is usable for SAQ. First there must be a receiver tuned to SAQ so that its signal is stronger than all other stations and noise. @richgwilliams provided a recording. It is modified for human ears but still usable. So I am assembling a simple decoder that will convert the recording into pulses. I am programming an MCU to convert the dit-dahs into text.
An interesting project!

The receiver - its an advantage to tune the receiver to SAQ but the SAQ received signal need not be stronger than all other stations (and was not for my receiver) because the recorded file (which is large because it is sampled at 48 kSamples/sec or more) can be processed to further select the SAQ signal.

That said the stronger the received SAQ signal is the better. There are two possible setups 1. Receive, record to file, post process then decode the Morse 2. Receive, process and decode the Morse in real time.

It is possible to receive other Morse code signals on the Short Wave to test your Morse code reader on if you want.
 
@fubar3 It will help if you have program to calculate a new waveform of RMS values...
Earlier I said that Morse Code had no clocks. Now I believe that the signal carrier freq can be used as clock. For example, 17200 is 58 microseconds. The carrier can be amplified and rectified to generate MCU interrupts. The MCU will count them to measure the duration of the latest carrier event. It also can do a sanity check because interference varies the interrupt rate.

The sender needs to loop on the same message because of random spikes in the signal. Certain words might get dropped. A human can sometimes guess what was missed but a stupid computer just gets a say again state.

Complex software is not needed. It's mainly a hardware problem to adjust the receiver output and measure it with a high-resolution counter.
 
Morse code was designed to be decoded by the human brain, which despite the effort to produce a good enough algorithm, remains the best decoder to the extent that for instance Winradio sells an FSK decoder, but not one for CW, because even with best algorithm available it still would produce rubbish (and rain complaints from users).
 
@Aridace said:- Morse code was designed to be decoded by the human brain,........

I agree, the human brain is a marvel. Perhaps an AI could be trained to read CW.

I don't need to learn CW code but I like constructing something to investigate.

Work in progress....
 

Attachments

  • sch1.png
    sch1.png
    18.6 KB · Views: 62
The snag in software morse decoding is "how to eliminate noise pulses?". When done manually (for instance with integrator) it's easy when displaying the raw pulses, and adjusting the integrator in a way that they remain below the threshold of the comparator following the integrator (both of which can be done in software). Otherwise, noise pulses will get decoded as "e" and the timing algorithm will adjust to that.
 
Looking at the SAQ recording, I think that words will frequently be corrupted and need to be repeated. I would like to have the raw carrier for triggers but there is no way to capture it reliably with a sound card. Therefore, an interrupt driven program is not feasible.

I use an ESP8266 which is a wi-fi beacon by default. I turn off the wifi, disable the watchdog timer and interrupts, to run a fast polling loop .. like 3 microseconds. Oh wait, the ADC on those MCU is poor so I must use an external ADC with SPI bus and interrupts. I have more to decide.