How to determine the PPM value of a NESDR SMArt?

a) Given that I don't have a frequency standard or other known transmitter available, what is the easiest way to calibrate the NooElec NESDR SMArt which is using a TCXO rated at 0.5 PPM.? I.e. to determine the PPM calibration value?

b) Also, is this value frequency dependent? (How so?)

c) Are there any European frequency standard transmitters I could use?

Given that I don't have a frequency standard or other known transmitter available, what is the easiest way to calibrate the NooElec NESDR SMArt which is using a TCXO rated at 0.5 PPM.? I.e. to determine the PPM calibration value?

Find any continuous broadcast signal that has a carrier and you know the nominal frequency of, and adjust the PPM value until its peak in the spectrum display is centered on that frequency value.

The higher the frequency of the signal you are calibrating to, the more your local oscillator's error is magnified, so the more precise this eyeball procedure can be. (If you have a large error, it may be useful to start at a low frequency before moving up, so you don't have trouble finding the expected signal in band.)

Of course, it's only as good as the transmitter, which you don't know, but you can easily get it good enough for accurate tuning (as opposed to frequency measurement).

Also, is this value frequency dependent? (How so?)

No. The physical oscillator generates a signal at a fixed frequency, and the tuned frequency is derived from that in a way which more or less involves counting — there is no systematic “analog” error in it.

• The gps signal data includes a 0.1 PPM REFERENCE on the second interface. Mar 24, 2017 at 18:46
• @RowanHawkins That sounds like material for another answer if you also explain how to easily compare it the with RTL-SDR clock. But it doesn't suggest an improvement to this answer. Mar 24, 2017 at 18:53

I want to add some solutions to Kevins answer. Apparently I'm lucky to own the SMArt device as it is really stable with a PPM between 0.5 - 1.0 at all bands I've looked at. (Just as advertised.) So how do you calibrate your less stable RTL-SDR?

Basically there are many different ways out there. The easiest is indeed what Kevin Reid posted, whose method is shown nicely in this and this videos. However, a much more accurate way, is to calibrate against a GSM station whose known ARFCN frequencies are exact. This is what the ADS-B people usually do with older SDR sticks, before using dump1090. The best explanations I found, are the ones provided by [1] and [2].

The public available code to do this is called Kalibrate was originally made by Joshua Lackey from here. Since then there have been many iterations and alternatives, but at the end of the day the original is the best, as others are either device dependent, broken or dependent on libraries that are too new or outdated. There are now dozens of variations of this.

Finally I just used the old Windows version as the latest Linux one didn't compile. It worked great and made sense. This is a two step process.

1. Find the GSM channel (ARFCN) with the highest power.
2. Use this channel to calibrate to.

# We use an arbitrary gain of 30 dBm and a starting PPM of ~1,
# and throughout most of Europe we only have EGSM for 2G.

$./kal.exe -g 35 -e 1 -s EGSM -v E-GSM-900: chan: 6 (936.2MHz + 481Hz) power: 297161.97 chan: 13 (937.6MHz + 427Hz) power: 80136.18 chan: 45 (944.0MHz + 173Hz) power: 72538.40 chan: 74 (949.8MHz + 264Hz) power: 1357267.92 chan: 81 (951.2MHz + 157Hz) power: 91010.07 chan: 104 (955.8MHz - 35Hz) power: 426084.14 chan: 108 (956.6MHz + 128Hz) power: 61358.88 Found 1 device(s): 0: ezcap USB 2.0 DVB-T/DAB/FM dongle Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle Found Rafael Micro R820T tuner Exact sample rate is: 270833.002142 Hz Setting gain: 35.0 dB meh: Scanning for E-GSM-900 base stations. channel detect threshold: 28151.015811  We see that the ARFCN 74 is the strongest one, so we use it for the calibration. $ ./kal.exe -v -e 1 -c 74

average         [min, max]      (range, stddev)
+ 235Hz         [228, 243]      (15, 4.489251)
overruns: 0
average absolute error: 0.753 ppm
Found 1 device(s):
0:  ezcap USB 2.0 DVB-T/DAB/FM dongle

Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Exact sample rate is: 270833.002142 Hz
meh: Calculating clock frequency offset.
Using GSM-900 channel 74 (949.8MHz)
offset   1: 230.82
...


And thus, for this test, we get a PPM of 0.753.

References:

[1] and [2]

For other implementations see:

• Rather than cellular for which gsm is not world wide, the second interface on most non consumer gps heads provides a 0.1 PPM time signal. Mar 24, 2017 at 18:48
• @rowan do you mean a 10 MHz GPSDO, or are you mixing up Pulse Per Second with parts-per-million? A cheap GPS probably won't have 10 MHz, and the question is really how to find frequency error without buying any test gear. And I don't think all SDRs can even receive 10 MHz. Mar 26, 2017 at 1:30
• I was referencing the receiver generated PPS signal that is determined by differencing the time from all sats being received. (tekmon.eu/1-3-2-satellite-and-receiver-clock-errors) I can no longer edit the other comment Mar 26, 2017 at 9:47
• @RowanHawkins How would you do that? I also was thinking to use code similar of kalibrate (or other) to sync to some GPS. Any practical ideas how this could be done with this SDR? (Perhaps there are already solutions to do this?) Apr 7, 2017 at 5:50

I'm new to amateur radio and I just bought myself a NESDR Mini 2 RTL-SDR USB dongle and was also looking to answer the same question but I came across this Youtuber (Frugal Radio) who directed me to his earlier video explaining how to workout the Parts Per Million value of your Software Defined Radio. The video shows a similar method to Kevin Reid's post and I hope this has been helpful: Click to Watch Video!

• It's great to provide a link to the video, but it would be really helpful to summarize it here so your answer will still be valuable if the link disappears or changes. Nov 17, 2022 at 6:53