How to Calibrate RTL-SDR using Kalibrate-RTL on Linux

YouTube user NeedSec has posted a good tutorial video showing how to use Kalibriate-RTL, a program used to determine the frequency offset error of your RTL-SDR dongle. Every RTL-SDR dongle will have a small frequency error as it is cheaply mass produced and not tested for accuracy.  This frequency error is linear across the spectrum, and can be adjusted in most SDR programs by entering a PPM (parts per million) offset value.

Kalibrate is a Linux program that uses GSM mobile cell phone base stations to determine the PPM offset, by using the GSM signals own frequency correction bursts. See the tutorial video below.


  1. Umile

    Hi! I am using kalibrate-hackrf, and I’m unable to make it to work with rtl-sdrt. I’m using a linux distribution in which there are all tools pre-installed. Any suggestion?

  2. John

    Thanks for the information but the link link to the video has been unavailable for a very long time. It would have been helpful to include some rudimentary written instructions. This is a ‘how-to’ after all?

  3. Ralph

    Hi, can anybody help me?
    If i run “make” i’ll get an error: “make: *** No targets specified and no makefile found. Stop.”
    Doesn’t matter if i’m in the kalibrate-rtl or in the kalibrate-rtl/src folder.

  4. Scott

    Worth mentioning: If you’re in the USA/Canada (or most any other country in the Americas), you’re going to be using GSM-850, and *not* GSM-900 (so use “-s GSM850”)

  5. arbartz

    So after some trial and error I got Kalibrate to build and install on my RaspberryPi. But when ever I try to do anything with kalibrate I get the following error:

    [email protected] ~/kalibrate-rtl $ kal -s 900
    shmat: Invalid argument
    terminate called after throwing an instance of 'std::runtime_error'
    what(): circular_buffer: shmat
    [email protected] ~/kalibrate-rtl $

    Any help would be much appreciated.

    • Travis

      When you build the code, use the following commands:

      git clone
      git checkout arm_memory
      cd kalibrate-rtl
      sudo make install

      This will check out a branch specific for the ARM processor used on the Rapsberry Pi.

      • Josh

        after cloning, your next command (git checkout arm_memory) results in
        fatal: Not a git repository (or any of the parent directories): .git

      • Josh

        So to fix the ARM shared memory error, you have to cd into the kalibrate folder that was previously cloned BEFORE issuing

        git checkout arm_memory

  6. Gethin


    kal requires fftw3 and version 3.2 or higher of libusrp. kal also requires a USRP and daughterboards appropriate for the desired GSM frequency band. An external clock is not required; kal can also calculate the offset of the built-in USRP clock.

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>