The HackRF One SDR is a great value but it’s frequency stability leaves something to be desired. Using the Si5338 clock generator from Silicon Laboratories is an easy way to address the problem (if it’s really a problem for your application). The Si5338 is a programmable clock generator that can take an input reference clock (like a 10MHz sine wave from a GPS) and then generate any output frequency with a variety of different output driver types. Ironically in this case, we are simply generating a 10MHz output; but this output is “locked” to the input and so will behave with the same frequency changes, which luckily for us is very minimal if you are using an external GPS as the reference. Another advantage is that the output of the Si5338 is square wave and this is precisely what the HackRF needs (in some cases if you sine wave is at the appropriate voltage levels, you can feed this directly to the CLKIN of the HackRF). The output levels of my GPS are not correct for the HackRF. It’s not clear if the sine wave would be an issue or not.
Below you can see the HackRF One and beside it the Si5338 Evaluation Board. I am using an Evaluation Board to make sure everything works and then I will attempt to make a PCB with the exact configuration and programming that is needed.
I am using my very inexpensive Rigol DS-1102D digital oscilloscope to ensure the output has correct voltage requirements for input into the HackRF One. In this case, I have programmed the Si5338 to use 3.3V CMOS output for the clock.
After a quick reset to the HackRF the SDR automatically switches over to the external clock. You do need to ensure you have the latest firmware and CPLD code (at one point there was a bug that prevented the automatic swith over).
So, now we just need to check the frequency accuracy. To do that I am comparing the “center frequencies” of an Inmarsat Aero decoder. This is a good test because the signals have very little drift since they are used by Aircraft that need to adjust for doppler. I removed the previously determined static error correction of -4250 Hz and Voila! Also, in addition to the static correct there was dynamic drift as well, that is gone too. All that is left is that of the satellite itself. I know this because i have another system that is completely locked to external reference and delta is +- 1 Hz. Not bad!
Below is screenshot from Aero decoder, the highlighted area in yellow is the real time delta from decoder PLL.