Reception of very low QRSS beacon transmitters
A group of enthusiastic radio amateurs is doing experiments with very low powers. That is possible by using a low CW speed. QRS mean reduce your CW speed. With that extra S of QRSS, they want to indicate that it is really a very low CW speed. A point lasts 3 or 10 seconds. Most of the activities can be found in a band of only 100 Hz, namely 10140.0 to 10140.1 kHz in the 30 meters amateur band. This band is only half as wide as a narrow CW filter of 200 Hz and just wide enough for 1 CW signal. But it is wide enough for many QRSS beacon transmitters! Of course our ear is entirely unsuitable to separate all those signals in that 100 Hz band from each other and from the noise. But our eyes can do that! On a PC screen, you can see all those signals, detected by special software. The audio output of the receiver is connected to the sound card of the PC. With a special software program, you can make bandwidths of 0.3 Hz or even less. Many excellent programs can be found on the internet like ARGO, SPECTRAN, SPECTRUM LAB, and QRSS-VD that is also written in Python by Scott Harden.

QRSS beacons in the 100 Hz wide band in the 30 meter amateurband. Some signals are wider
due to the fading. That kind of effects are very good visible due to the narrow bandwidths!

Raspberry Pi and Lopora
Mauro IK1WVQ gave me a lot of interesting information about the Raspberry Pi and made me enthusiastic enough to buy one. But the old version of Lopora was not fast enough, it had to be improved. The new version 03 of Lopora is much faster and uses much less CPU time than the previous versions. Without any problems, this new version of Lopora does run here on an overclocked Raspberry Pi. Without any cooling, the CPU temperature goes not higher than 55C to 60C, that is well below the 85C limit.
Old, own written routines have been replaced by much faster Numpy routines. And directly after the FFT calculation, all data is deleted that is not used for the display. And there were some strange, unlogical things and something had to be changed to read the audio of the Raspberry Pi. And PulseAudio had to be installed for the downsampling of the audio sample rate of 48000 samples to 6000 samples. Why and how this has to be done is explained in the README.txt of the software that can be found at the end of this story. By the way, usually the downsampling software is already installed in Ubuntu Linux and Windows.
And of course it is recommendable to use the new version 03 of Lopora also on "normal" PC's instead of the old version. Saves a lot of CPU time and even my old PC does run without any problems now with a sample rate of 48000 samples per second! But downsampling to 6000 samples per second is better. Why? That is explained later.

The new version 03 of Lopora runs without problems on an overclocked Raspberry Pi.
A HDMI to VGA converter is used to connect an old VGA monitor.
And the screen of the audio input had to be grounded to suppress interferences.

Is the program LOPORA suitable for you?
Only when you like it to play with software. When you only want to receive QRSS beacons, then this program is certainly not the best choice. Then it is much better to take one of the previous mentioned programs like ARGO or the somewhat more complex SPECTRAN or QRSS-VD. SPECTRUM LAB seems to be very good, but also more complex. All these programs are much more user friendly than LOPORA.

The QRSS beacon reception program LOPORA with visible thunderstorm interference.
The screen does not scroll, but the cursor goes from left to right. Scrolling can
be implemented, it is a function in the PIL library of Python.

LOPORA QRSS beacon reception program written in Python
LOPORA is the abbreviation of LOw POwer RAdio. Why should you write your own QRSS beacon reception program if there are much better ones made by others? And they are also much more user friendly! Why does someone make a receiver if you can buy a better and nicer one for 100 Euro? The answer is of course: HOBBY! Actually, the reason was that I wanted to have a Noise Blanker function in such a program, due to an electric fence near the house. But it is also curiosity and the challenge how to make such a program. When you do make your own program, you have to look into detail to all kinds of items like for example how FFT analysis works. And you can make it exactly as you want it. Think for example about colors, screen sizes, place of the buttons and which functions you want to built in. It is nice to experiment with a home brew program! In the past, it was only possible to home brew hardware, now we can also home brew software! Our radio hobby is getting more and more exciting!
This program is based on the spectrum analyzer program. What the function of an FFT window is and why you do need Zero Padding, is explained much more in detail over there.

Configuration file

Buttons, configuration files and settings in the program
At the right side of the screen, you will find various buttons to change the settings.
Not all the settings can be changed by means of buttons, many have to be configured in the configuration file with an ASCII text editor (notepad). When you press "Stop", then the settings are saved in the configuration file with the name "lopora.cfg". These settings are recalled when loading the program. The settings can also be saved and recalled with an own selected name. And changed of course with an ASCII text editor. In the configuration file, you will find an explanation of the settings. The second line is the station name and description.
In the first lines of the program you will find the variables that you can change as you want. But many are overwritten by values in the configuration file.

The FFT calculation

FFT window
What an FFT window does, is visible on the picture here below. But for our purpose, the simple Cosine filter or Triangular filter is excellent! You can select the FFT windows by means of a button.

What an FFT window does, is visible here. On top a strong signal, at the bottom a 40 dB weaker dot-dot signal.
From left to right you can see the following FFT windows:
1. No window (also called rectangular window). Much noise around a strong signal, a good selectivity (1x) for the weak signal.
2. Cosine window. Much less noise around the strong signal, so a better dynamic range, somewhat less selectivity (1.24x).
3. Triangular window. comparable with the Cosine window, less selectivity (1.33x).
4. Nuttall window. Very good dynamic range, but less selectivity (2.02x) resulting in less sensitivity for the weak dot-dot signal.
5. Flattop window. Very good dynamic range, filter with flat top, but much less selectivity (3.77x). Usable for signals made wider by fading or frequency instability.

Zero Padding
When a signal is between two FFT frequency points, it is attenuated. By means of Zero Padding, extra FFT frequency points will be added between the original points during the calculation, reducing the attenuation (also called Scalloping loss) so that it becomes negligible. An alternative is not to use Zero Padding, but a wider Nuttall of Flattop Window. The latter does have a flat top across a few FFT frequency points. But those windows do have a larger bandwidth. Zero Padding has to be configured in the configuration file.

FFT overlap
Of course it is not possible to coincide a dot exactly with an array of FFT samples. That is why the FFT array is always re-used partially. With an FFT overlap of 2, 50% of the FFT array is deleted, 50% re-used and complemented with 50% of new samples. The FFT overlap does also influence how long it takes to fill the whole screen. I do use an FFT overlap of 2.9 to fill the whole screen in approximately 20 minutes. The minimum value for the FFT overlap is 2.0. The bigger the overlap, the more processing power is required. FFT overlap has to be configured in the configuration file.

ZL1EE, no stacking.

Stacking, 3x average.

Stacking, 3x peak.

YT1DL, no stacking.

Stacking, 3x average.

Stacking, 3x peak.

W4HBK, no stacking.

Stacking, 3x average.

Stacking, 3x peak.

Most stations do transmit in time synchronized intervals of 10 minutes. Stacking means that you do stack a few pictures of those intervals. There is software for available, but this function is implemented in LOPORA. During 9 minutes, QRSS signals will be received, the last minute is used for the processing of the received data. Reception starts again at the beginning of a 10 minute interval. I do use 20 minute intervals, that gives better results for most other stations that do not transmit in time synchronized. It is not possible to see the stacked pictures right away. They are saved when you have activated the function "snapshot" (with the button "Snapshot"). And they can be uploaded to a grabber by means of an FTP function. A stacking of 3x is fine. Parts of signals that are lost due to fading are filled in by the other 2 pictures.

Snapshot and FTP upload
By pressing the button "Snapshot", you can activate the function to save the received pictures. And also the FTP upload function. As it is possible to upload the received pictures to you website for use as a grabber. Others can see then what you do receive. You can program the FTP settings in the first lines of the software. If this data is missing, it will be asked for when you press the button "Snapshot" and do enable FTP uploading. In the ZIP file, you can also find an example of a HTML file for the grabber. If you want to know more about grabbers, google then for "QRSS grabber".
Together with the pictures, you can also upload a sound record file of 10 seconds from the receiver. In that way, you can hear if there is a thunderstorm or a strong signal that can disturb the reception. You have to make the variable WAVenabled = True. It can be found in the first lines of the program.

Remote control
If the function FTP upload is enabled, also a configuration file with the name "lopold.cfg" is uploaded. You can edit it and rename it as "lopnew.cfg". During the next FTP upload, these new settings are taken by LOPORA. You have to set the variable Remote = True in the first lines of the program.

Frequency calibration.
The trick is to configure the setting "10138467 Tuning frequency of the receiver in Hz" in the configuration file so
that the calibration signal is displayed exactly on 10140.000 kHz. The frequency standard is not completely stable!

The trick is to configure the setting "10138467 Tuning frequency of the receiver in Hz" in the configuration file so that the calibration signal is displayed exactly on 10140.000 kHz. I do use a calibration signal of 10140.000 kHz.

PC speed and downsampling
Python is simple, but much slower than C. Fortunately, our modern PC's are fast enough for LOPORA. And as the source code is written in ASCII text, everything can be modified very easily. Great! If CPU speed is a problem can be checked by watching the Buffer(%) on the screen. If it goes above 100% and if long marker lines appear on the lower axis (stop and restart), then you PC is too slow.
Also the downsampling of the audio is a reason that much less CPU time is required. This downsampling does happen very fast in the operating system of your PC. But there is an other very important advantage of the downsampling. All frequencies above 50% of the sample rate will be suppressed by the downsampling! The downsampling does also work as an extra low pass filter and suppresses the interferences at higher audio frequencies. With a sample rate of 6000, all frequencies above 3000 Hz are suppressed. The usable frequency range goes then upto approximately 80% of this frequency or 2400 Hz. And this is a perfect match with the bandwidth of a normal SSB receiver. So do use a maximum sample rate for the audio stream of 6000, this acts like an extra interference suppressing low pass filter and does use much less CPU power!

QRSS reception is a very relaxing hobby!

Latest version LOPORAv03d.py en LOPORAv04a.py
LOPORAv03d.py is the last version for Python 2.7. LOPORAv04a.py is the new version for Python 3.4.
Much has been improved since the first version. The high CPU load has been reduced by using NUMPY and, very strange, adding some pause statements. The CPU load of my laptop is now less than 3% and 15% with my Raspberry Pi version 2b. Time stamps have been added. Added is a 24 hour archive option. Via the website, you can see all the pictures of the last 24 hours.
And it has an autorun option. The remote directory of the FTP site can be changed.
And instead of signals from the soundcard of the PC, the program can also read WAV files now. This option can be used if WAV files with QRSS simulation signals have to be decoded. Before the decoding starts, the WAV files are written into memory. It looks as if nothing happens, but just wait. The variable WAVinput (line 44) has to be set to 1 instead of 0 to activate the WAV mode.
WAVinput = 1                # DEFAULT 0 for Audio device input, 1 for WAV file channel 1 input, 2 for WAV file channel 2 input

Auto run
When the variable AUTORUN = True, the program will start to run automatically. You can start it by placing a shortcut to the program in the start menue. For the auto run option, you have to initialize the next variables at the begin of the program:

AUTORUN = True              # Default is False. True for Automatic Run.
FTPenabled = True # If True, upload snapshot. Can be modified with the Snapshot button.
FTPhost = "FTPhostname" # FTP host
FTPuser = "FTPusername" # FTP user
FTPdir = "FTPdirectory" # FTP remote directory
FTPpassword = "FTPpassword" # FTP password, if none ("") then the password will be asked
SNAPshotenabled = True # If True, save snapshot. Can be modified with the Snapshot button.
WAVenabled = True # A WAV audio snapshot is made and uploaded just after the FTP snapshot
Remote = True # Remote control by file lopnew.cfg enabled
AUDIOdevin = None # Audio device for input. None = Windows default. Can be modified with the Audio device button.
AUDIOdevout = None # Audio device for output. None = Windows default. Can be modified with the Audio device button.

It is a DISPLAY compression mode. See here below the effect of changing the DISPLAY compression.

No compression (DISPLAY = 0).
Very good for the two weak signals, but the strong signal is quite distorted.

Maximum compression (DISPLAY = 3).
The strong signal is not distorted anymore and the two weak signals are still visible.


Before you are using this program, you have to install Python. That is very simple. But read first something about Python by clicking the following link:


As the source code of Python is written in ASCII, it is very simple to modify the program to you own requirements. Think for example about the size of the screen, the colors etc.

Required Python version:

Required external modules (site-packages for the correct Python version!):

Download here the Python LOPORA QRSS beacon reception program by clicking the link here below:

Save all files in 1 directory, also the font files. You can also find there the HTML example files for a grabber on your website.