Gemma 3 27b Instruct AI model and slightly redacted by me afterwards. For sustainability reasons the task was executed using locally generated surplus solar energy.Anyone working with the propagation of radio waves, whether professionally or as a ham radio operator [link in German], may come to the point where they want to simulate signal propagation on frequencies above 50 MHz on a map or in terrain relief. For this purpose, open-source software like Signal-Server exists. However, using this command-line program is not self-explanatory and embedding the results into a map isn't trivial. Therefore, I would like to provide some guidance to make it easier to get started. A basic understanding of the command line, Git, and Linux is assumed to be able to follow these steps.
The software has been forked by various individuals over the years. This description refers to this version, although many other variants will likely work just as well. Signal-Server originates from the software SPLAT!, which is still available in various Linux distributions and can potentially be used with minor adjustments following this guide.
After installing or compiling the software according to the linked instructions, elevation data (relief data) for the area where you want to perform calculations must be obtained. In theory, there are many very detailed and high-quality sources available for this purpose, but I often haven't been successful in converting them into formats compatible with Signal-Server. However, in my opinion the coarse SRTM data from NASA is perfectly sufficient for far-field calculations. After downloading and unpacking, this data must be converted to the SDF format used by Signal-Server. For this purpose, there is a program called srtm2sdf in the utils/sdf/usgs2sdf subfolder, which may need to be compiled separately using the command make beforehand. More information can be found in the README.md file in this subfolder. The SDF files can then be moved into the data subfolder.
Now it's time to draw the first coverage map. The program itself is located in the build subfolder and can be called with ./signalserver there. I will not go into detail about the command-line options of the software here, as they are well described. For a first test, the following call is suitable, where the coordinates should be adjusted to your own needs:
./signalserver -sdf ../data/ -lat 50.55123 -lon 7.78321 -txh 15 -f 2320 -erp 1000 -rxh 5 -rt -120 -dbm -m -o test1 -R 160 -pm 1
First, the path to the elevation data is specified, followed by latitude (lat), longitude (lon), the height of the transmitting antenna above ground in meters (txh), the frequency in MHz (f), the effective radiated power in watts (erp), the height of the receiving antenna above ground in meters (rxh), and the receiver threshold in dBm (rt). Since this is a US-American software, metric units must be explicitly activated with -m. With -o, the name for the output file is specified, with -R the radius around the transmitter to be calculated in kilometers, and with -pm one of several propagation models is chosen for the calculation (ITM in this case).
As a result, we obtain a file test1.ppm in the same folder. This is an image file with the propagation, but without geographical reference points. For meaningful use, we must therefore overlay a map. In the interest of high flexibility, I have decided to convert this image file into an overlay for a browser-based OpenStreetMap map. This is initially done with the command-line graphics package Imagemagick (which may need to be installed first and is included in common Linux distributions):
convert test1.ppm -transparent "#ffffff" test1_trans.png
convert test1_trans.png -resize 3452x3452! test1_resize.png
convert test1_resize.png -alpha set -background none -channel A -evaluate multiply 0.5 +channel test1.png
What happened here? We use the convert tool from Imagemagick to convert the white area of the propagation map into a transparent area in the first line. In the second line, we scale the image to equal length and width. In this case adjusted to the image size that Signal-Server automatically chooses with a radius of 160 km. In the third line, the opacity of the propagation map is finally set to 50 percent so that the map in the background can shine through.
Note: Depending on the version and distribution, it may be necessary to prefix each convert command with the command magick: magick convert test1...

A widely used framework for embedding OpenStreetMap maps into websites is Leaflet. It allows you to zoom interactively into maps, which also makes our propagation map interactive. We can download Leaflet, unpack it into a folder next to Signal-Server and use it locally. Into this folder we put an additional file. Namely the HTML file that connects the map and the propagation file with each other. No own web server is needed, calling the local HTML file in the browser is sufficient. The file can be downloaded here and adapted to your own needs. Here, in particular, the adjustment of the coordinates is important. First of all, the map center: in square brackets, first latitude, then longitude. Values of eastern longitude are positive:
var Karte = L.map('meineKarte').setView([50.55123, 7.78321], 12);
And then the boundary points of the propagation map in the same pattern as they are given by Signal-Server on the console once the calculation is finished:
[info] Area boundaries:52.312300 | 10.632100 | 48.712300 | 4.932100
Implemented in the HTML file, it looks like this:
imageBounds = [[52.3123, 10.6321], [48.7123, 4.9321]];
Of course, the URL may also have to be adjusted:
var imageUrl = '../Signal-Server/build/test1.png',
I noticed that the map with the coordinates output by Signal-Server has a slight offset to the north, which I cannot explain. If I subtract 0.03 from the latitude in each case, the location fits approximately. Further fine adjustment is recommended.

In addition to the maps, Signal-Server can also calculate terrain models between two points. This creates text files containing the height profile and Fresnel zones. These can then be read into gnuplot or a spreadsheet and visualized there. An example command could look like this:
/signalserver -sdf ../data -lat 50.745 -lon 7.956 -txh 10.0 -m -erp 10.0 -f 433.0 -R 30-pm 1 -rt -o MeinStandort -rxh 10.0 -rla 50.213 -rlo 7.255 -ng
In addition to many parameters that we already know from the example above, we find here at the end the parameters for receiver height (rxh) and the geographical coordinates (rla and rlo) as well as a parameter to normalize the graph.
Signal-Server is a powerful tool that can offer a timeless alternative to programs like Radio Mobile. For frequencies above 30 GHz, the direct line of sight is calculated. Thus, the tool is not only interesting for calculating radio propagation, but can also be used to check which places are visually visible from a certain point.
Another development step would be to automate the map creation processes, especially the transfer of coordinates into the HTML file and possibly enable switching between different propagation models from the browser.
There is also the possibility of generating KML files from Signal-Server and embedding the propagation maps in commercial software or free software like Viking and QGIS. This way may be easier in some cases. It should also be mentioned that with signalserver_gui there is a browser-based solution for operating Signal-Server, which requires quite a few Python libraries and might help with peer-to-peer terrain reliefs, but unfortunately does not have any map display.
Sie finden hier Kontaktmöglichkeiten und weitere Informationen über mich.