Getting started¶
Install Python¶
The N6OL Powerline QRM Monitor requires Python, version 3.12 or later. How you install this will vary depending on your operating system. You can find tips and suggestions at python.org. Just make sure you have at least version 3.12 on your system and in your system path before proceeding.
You can test to make sure Python is installed and working by running python --version from the command line, or to
check a specific version, you can try python3.14 --version, python3 --version, etc.
If you just installed Python and your current command window was open prior to installation, you probably need to close and re-open your command window for Python to be found on your system path.
Download the monitor¶
Find the latest release
at https://github.com/spatula75/n6ol-powerline-qrm-monitor/releases,
scroll to the end of the release description and look under "Assets." Here you will find a .tar.gz and .zip file;
download whichever one is appropriate for your platform. Linux and FreeBSD users likely want the tarball, whereas macOS
and Windows users likely want the zip archive.
The monitor does not (yet) install itself as a fully integrated piece of software on any operating system, so just find a suitable directory on your system, and extract the files. For example:
mkdir ham_radio
cd ham_radio
tar xzvf ../n6ol-powerline-qrm-monitor-1.5.0.tar.gz
mkdir ham_radio
cd ham_radio
unzip ../n6ol-powerline-qrm-monitor-1.5.0.zip
On Windows and MacOS you can also just create a folder somewhere, such as off your home directory, drag the archive file into that directory, and then expand the archive.
Run Setup¶
The monitor ships with setup scripts for both Windows and Linux, FreeBSD, macOS, etc. These scripts are
called setup.bat and setup.sh. From the command line, run whichever is appropriate to your environment. On *nix
variants, you likely need to precede this with ./, i.e., ./setup.sh to indicate to your shell that it should look in
the current folder.
Setup will attempt to locate your Python installation, create a virtual environment (aka a "venv"), install the project's dependencies, and then it will run the configuration program for the first time.
If you've run setup before, it will skip directly to launching the configuration program - it's safe to run it more than once.
Configuration¶
The monitor has many options. The most critical ones will be covered here; others can be found in the how-to guides.
Each section of the configuration file corresponds to a section in the configuration program. Enter a section
with the ENTER key and go back with the ESC key. Use arrow keys to navigate. Start with Audio.
Audio source¶
First and foremost, choose where the monitor will get its audio feed. This can be a sound capture device reading from a radio, an RTL-SDR, or an SDRplay receiver. The monitor reads one source at a time. Depending on the option you select, menu availability will differ.
Radio + Sound Card Source¶
If you intend to use your radio with your sound card, connect your radio to your sound device that you plan to use for monitoring and verify that your operating system recognizes sound coming from your radio as input.
Set your RF gain to 0, disable pre-amps, attenuators, widen your filter bandwidth all the way, turn off AGC, and switch to either LSB or USB mode. Adjust the gain in your operating system for minimal interference with the signal, ideally 0dB gain and no "enhancements" applied. In Windows, disable "exclusive access" to the device, and you can right-click the input gain to choose measurement in decibels to find 0dB.
RTL-SDR Source¶
Connect your RTL-SDR device to your machine and verify that it's working. The exact means of getting an RTL-SDR device working varies depending on the platform and operating system. You may find it useful to get it working in any other SDR software package first.
Tips¶
On Windows with RTL-SDR.com USB devices in particular, it is necessary to use Zadig to assign the "Bulk-In, Interface" devices to use the WinUSB driver so that pyrtlsdr (and, by extension librtlsdr) can communicate with them.
Do NOT replace any DLLs within librtlsdr or pyrtlsdr with those from the RTL-SDR.com site. This is not necessary with librtlsdr, and will actually break functionality.
SDRplay Source¶
Install SDRplay Hardware API 3.15 and verify that the receiver works before starting the monitor. Close SDRconnect before opening the receiver because only one program can use it at a time. The supported models are the SDRplay RSP1A and RSP1B.
Sound Card Audio Configuration / Calibration¶
If you're using an SDR receiver, skip to the next section.
Start by picking your audio device, the first option on the screen. When you select this option, all the devices on your system will be polled to see if they support the required sample rate, and the current amplitude seen on the device will be sampled. This amplitude is displayed to the left of the selection in a bar graph. So if you're not sure which device is the one you're using, you can look for the one that seems to be seeing sound. If you're still not sure, try turning the volume up or down and press "R" to re-scan to see which bar graph is changing.
Choose the appropriate device, and press ENTER to select it.
At the bottom of this menu is the Calibration tool. Much more detail can be found in the Calibration tutorial,
but for now, try turning the AF gain up and down on your radio until the S meter in the display of the configuration
program matches the S meter on your radio. If your radio doesn't have an AF gain you can adjust for its line output,
you can also vary the gain for your audio input in your operating system. The goal is to get the value inferred from
the audio stream to match the RF value displayed by your radio's S meter.
If you are unable to get the two to agree because you can't adjust the audio gain at all, there's another method available; see the Calibration tutorial for more.
To get the pulse rate setting, double your local electrical utility's alternating current frequency. For most of North and Central America, for example, that means 120. For Europe and Asia, this is usually 100. Chances are if you're using this tool, you're already very familiar with the frequency you need.
SDR Receiver Configuration / Calibration¶
From the Audio input menu, first set the pulse rate, double your local electrical utility's alternating
current frequency.
Next, from the selected receiver's menu, choose a Listening frequency for your receiver.
This should be a frequency at or near where your antenna is naturally resonant, and ideally a relatively
quiet segment of the band.
Note that the receiver pass band is 256 kHz by default, with a 50 kHz offset, so strong signals in a nearby shortwave band can introduce clipping. In order to ensure that the entire pass band sits above some lower limit, you may set your desired frequency no lower than 78 kHz above that lower limit. This only applies if you are trying to avoid a strong out-of-band signal. (78 kHz because the pass band is split into two halves around the center frequency, giving 128 kHz, and then a 50 kHz shift is used as a very simple means to avoid interactions with DC exactly at the center frequency.) Similarly, if you're avoiding a strong signal from above, set your frequency no higher than 178 kHz below it.
Calibration is somewhat more complex with SDR devices. See the Calibration tutorial for a
detailed explanation, but you can start by selecting Auto-calibrate gain from the selected receiver's menu.
Do this with your antenna connected, preferably without any active arc noise, but reasonable results are also
possible with active noise. Auto-calibration will attempt to find the optimal Tuner gain and Level calibration
settings for your device and antenna.
If you change bands with your Listening frequency, be sure to re-run Auto-calibrate gain because the value it
chooses can depend on the band you select.
Some receiver settings rarely need to be changed, but are available and documented in config.example.toml should
the need arise.
Station Configuration¶
Here is where you'll set your call sign, time zone, CSV, chart, and recording output base directory. Time zones are
given in IANA city-name format; choose the closest city to you from the list that follows the same time zone rules as
you. Daylight Saving Time is applied automatically, and the current offset from UTC is displayed alongside each zone.
For the United States, the most common time zones to choose
are America/New_York, America/Chicago, America/Denver, America/Los_Angeles, Pacific/Honolulu,
and America/Anchorage, though there are others as well, for example for cities that do not observe DST.
The "all-time summary" graph is disabled unless you enable it, as changes over a long period of time tend to make only
the more recent charts relevant for direction-finding and remediation by the electrical utility. If you enable it, you
can set "summary graph start date" to the date you want that chart to begin, in ISO format; for
example, 2026-08-07T12:34:00-0700. That is the earliest date the chart looks for historical CSV files from, and it
checks every day from then until today.
Weather Configuration¶
Sometimes there are interesting correlations to be had between the weather and whether your electrical utility's
equipment is making noise. Currently two systems are supported for retrieving weather data for your location: OpenMeteo
and CumulusMX. If you have your own weather station supported by CumulusMX, you can point to it here. Getting the URL
format for Cumulus is important; make sure it looks like
this: http://cumulusmx.local:8998/api/tags/process.json?temp&hum&SolarRad&wspeed&wgust&avgbearing
replacing cumulusmx.local with the IP address or hostname of the machine running CumulusMX.
For OpenMeteo, enter your location's latitute and longitude, and the closest weather station to your location will be used to retrieve weather data.
Others¶
That's all the configuration you really need to start collecting data. If you want to publish your results to a web host, record events, or render events to video, see the how-to guides for each of these topics.
Launching¶
To launch with the default arguments, just execute run.bat or ./run.sh from the monitor directory. If you wish to
run with an alternate set of options, see the CLI reference.
The monitor will launch with its small display window and begin tracking utility company noise.
The Main Window¶

The main graphical display shows a status bar with the current operational status (FREE, LOCK, or HOLD), the
estimated utility power frequency when in LOCK or HOLD modes, whether the scope is in Raw or Average mode, the span
of time per division of the scope, and the full scale of the scope in dB (the scope auto-scales to fit).
Below this is a fairly typical waterfall not unlike what you've seen in every digital demodulating program.
To the right are two bar-graph style meters. The NF meter shows the estimated Noise Floor in dBm, and when in LOCK mode, the SIG meter shows the estimated strength of the 120 or 100 pps SIGnal, also in dBm. (In actuality these are estimations based on peak and minimum impulses across the time domain.)
CSV Logging¶
Once per minute, on the minute, the average noise floor and average signal strength is logged to a CSV file whose filename is formatted with the current date, along with an indication of whether a signal lock was found for the full minute, part of the minute, or none of the minute. The CSV row also contains the most recent weather data at the time the estimate was taken.
CSV files roll over automatically at the end of the day in the local time zone.
Nothing deletes old CSV files at present.
Charts¶
Various charts are also produced at the time the CSV files are updated. Every minute the two main plots are updated - one instantaneous, and one with a 6-point rolling average. Once per hour, the summary graphs are also generated showing the relative probability of observing noise charted against the current time of day. This includes the 7-day and 30-day charts, and the all-time chart if the all-time chart is enabled.
Nothing deletes old charts at present.

