Kalibrate-rtl is a program that can scan for GSM base stations and use them to calculate the local oscillator frequency offset (ppm error) of an RTL2832 USB dongle.

I finally got this to build after a lot of trial and error with MSYS/MinGW. As often, not that complicated, just a case of building the libraries and configuring paths correctly. Also, there was a dependency on the POSIX library librt, which doesn’t exist in MinGW.

Run like this:

kal.exe -g 35 -s EGSM


-g sets the gain. 35 is probably a good choice -s tells kalibrate-rtl to scan for mobile base stations. Band can be GSM850, GSM-R, GSM900, EGSM, DCS, PCS

Once you’ve found a channel, run kal.exe again like this:

kal.exe -g 35 -c 117


Again, -g is the gain. -c is the number of the channel you want to use for calibration. After a few seconds you should have a ppm figure for your dongle:

I recommend using the dongle normally for half an hour or so before trying to calibrate, as the ppm figure will change as the dongle warms up. It should stabilise after a while.

Here I obtained 39.4 ppm, very close to my previous manually estimated figure of 40 ppm, only much quicker to obtain.

For rtl_433/rtl-sdr builds see my previous post