2017-04-29 Using kalibrate-rtl to calibrate the rtl-sdr frequency4 months ago
In my project to receive amateur satellites with the rtl-sdr I noticed the sdr itself has a considerable frequency error as noted in Going full duplex with amateur satellites, part 5 : first test of the amplifier with RTL-SDR. Using the PI2NOS output frequency I ended up at an error of 54 ppm so I entered that in gqrx. But to be really sure there is a program named kalibrate-rtl available via GitHub - steve-m/kalibrate-rtl: fork of http://thre.at/kalibrate/ for use with rtl-sdr devices. I had some trouble finding the right way to use this program so I am sharing my steps here. First try to guess the error by using a known frequency such as a local repeater (especially when they mention using GPS to maintain frequency) or a broadcast FM station. First step with kalibrate-sdr is to scan for GSM channels which are strong enough. I noticed in later runs that I really need to add the first guessed frequency error, otherwise it will not find the GSM channels at all.koos@kernighan:~/radiowork/kalibrate-rtl/src$ ./kal -s GSM900 -e 54 Found 1 device(s): 0: Generic RTL2832U OEM Using device 0: Generic RTL2832U OEM Found Rafael Micro R820T tuner Exact sample rate is: 270833.002142 Hz [R82XX] PLL not locked! kal: Scanning for GSM-900 base stations. GSM-900: chan: 8 (936.6MHz + 724Hz) power: 67277.85 chan: 17 (938.4MHz + 606Hz) power: 36428.54Second step with kalibrate-sdr is to select a GSM channel to use for the calibration run. I selected channel 8 which looks quite active.koos@kernighan:~/radiowork/kalibrate-rtl/src$ ./kal -e 54 -c 8 Found 1 device(s): 0: Generic RTL2832U OEM Using device 0: Generic RTL2832U OEM Found Rafael Micro R820T tuner Exact sample rate is: 270833.002142 Hz [R82XX] PLL not locked! kal: Calculating clock frequency offset. Using GSM-900 channel 8 (936.6MHz) average [min, max] (range, stddev) + 169Hz [85, 251] (166, 49.119198) overruns: 0 not found: 0 average absolute error: 53.820 ppmAnd only in that step you get the output with the calculated frequency error. Update: Doing this calibration is also a good idea for the stick running the ads-b receiver. That came out to -30 ppm and using that factor makes dump1090 receive signals from greater distances.