For the uninitiated, UVB-76 is a station that broadcasts coded messages over AM radio. It is still active with messages transmitted as recently as Oct 2016 and is speculated to be related to the Russian military. The transmission and tone generation equipment are from the analog era, hence I was interested to see if I could replicate the transmissions using today's technology.
The buzzer tones which are used to occupy the frequency can be generated by
ebook2cw, a linux utility which converts text into recorded morse code. The morse code equivalent for
0 is five dashes, and we will be using that for the tone. After playing around, I decided on 3 words/min and a frequency of 220Hz. The entire command is
echo 0 | ebook2cw -w 3 -f 220 -o /dev/dsp. The original station broadcasts a continuous interrupting tone at the 59th minute of every hour, this would be trivial to generate and a little boring to be honest. I decided on broadcasting epoch time using a variation of the command above, increasing the words/min and frequency to differentiate it from the buzzer,
date +%s | ebook2cw -w 8 -f 440 -o /dev/dsp
1 2 3 4 5 6 7 8 9
Simply run the script in the background to have the routine transmission piped to your speakers. For the coded messages, I used
espeak to convert text to speech, the default voice sounds very robotic, you could try different voice files, even Russian voices if desired. To transmit a message, kill the script and run
echo "93 882 NAIMINA 74 14 35 74. 9 3 8 8 2 Nikolai, Anna, Ivan, Mikhail, Ivan, Nikolai, Anna. 7 4 1 4 3 5 7 4" | espeak -s 120 -g 20 -w /dev/dsp.
The final step is to use live podcasting software such as
icecast/ices2 to transmit the broadcast from the speakers onto the internet as a live stream.
For the sample, I recorded 3 buzzer tones, the coded message, followed by 2 buzzer tones, the time broadcast and finally ending with 2 buzzer tones. Added in white noise as a bonus.