Testing and improving station frequency accuracy & precision

WSJT-X waterfall showing good synchronization
WSJT-X waterfall showing FT8 signals, but at what precise frequency?

So your digital mode software is configured to control your transceiver via CAT control (excellent!). The software indicates that you are currently on the 20m band in FT8 mode, so your radio has been tuned to 14.074MHz USB (or digital mode, which is in-turn configured for upper-sideband). Good! Everything is coming together.

You have good time synchronization and so you start to decode some signals, all separated by some value of frequency. Excellent! You are on track to make contacts. In fact, this is good enough for most people – you are “on the air” and can make your exchanges and all is well. That is, until you wonder to yourself: “how accurately am I reporting the frequency of these exchanges?” or “can I improve my accuracy of frequency reporting?” or even “what is the frequency precision between our stations?”

Welcome to the inner struggles of VE3BUX

If you are not concerned with chasing accuracy and precision, then you are probably a well adjusted individual who enjoys more actual operating time, and have no need to read on. If you are however curious about adopting new and frankly unhelpful compulsions, read on.

Synthesized transceivers tend to display a frequency dependent offset which closely approximates a linear dependence involving factors such as oscillator age, stability, temperature and operating conditions. Can we both measure and account for such an offset (or error)? Yes we can!

Follow me for a thought experiment for a moment. Imagine you know of a transmitter that has extremely high accuracy and stability. Imagine this transmitter is transmitting a 1 kHz tone at exactly 14.1 Mhz on USB (single peak at 14.101’000 MHz on a spec-an). You would expect that if you tune your radio to 14.100’000 Mhz that you should receive a pure tone at 1 kHz audio frequency (as measured by an oscilloscope or spectrum analyzer). Instead, you measure an audio tone at 1037 Hz, or done differently, you tune your radio until you receive a tone of 1 kHz (or no beat frequency) and note the dial frequency reads 14.100’037 MHz. You have just measured a frequency difference of a mere 37 Hz. What does that mean though? It means that between your radio and the distant station, you have a frequency difference of +37 Hz over what you agree are the same frequency. What is this in oscillator terms? It is simply (ΔfHz / fMHz) = (37 / 14) = 2.6 PPM difference. This 2.6 PPM would be considered as “not bad” for a standard oscillator. Consider how this may compare with a TCXO such as (TXCO-9 for the FT-857D which boasts 0.5 PPM) or something like a GPSDO with 10 MHz output at 0.001 PPM.

WSJT-X mode FreqCal
Mode -> FreqCal

The authors of the truly amazing WSJT-X software have coded in the ability to automatically tune to various frequency (and time) standards, allowing the measurement of frequency differential between the highly stable time/frequency standards and the receiving station (you). With enough samples, a “best fit” correction factor for your particular station set up can be computed. This allows for compensation to be done in software, tuning the radio a little high or low to account for the measured offset. This gets you in to the single-digit Hz accuracy realm! We are talking sub-PPM range! (e.g. 9 Hz / 14.074 MHz = 0.63 PPM)

To start the calibration process, I found it useful to copy my current configuration file into a new version, specifically made for the purpose of tuning to the various time/frequency standards in my area. You will then edit the new configuration file to remove the FreqCal mode frequencies which would not apply due to your location and/or propagation.

First, start by cloning your current (usually default) configuration.

WSJT-X configuration cloning
Configurations -> Default -> Clone

This is done by clicking on “Configurations” at the top of the main WSJT-X window, selecting your current configuration (indicated by the black circle on the left), and clicking on “Clone”.

If you have multiple configurations, it is best to clone one which has been proven to work with your current setup. The WSJT-X software needs to be able to reliably control the transceiver via CAT controls in order to tune through the frequency standard list. You need at least two frequency measurements to calculate the slope and X-intercept of a dial-error vs frequency function.

WSJT-X configuration rename
Configurations -> Default – Copy -> Rename

Give your new configuration profile a useful name, something to indicate its purpose. I use the name “FreqCal”. Change the name by once again clicking on “Configurations”, selecting “Default – Copy” and then “Rename”.

WSJT-X configuration switch to
Configurations -> FreqCal -> Switch To

Next, you will need to “load” your new FreqCal configuration. This is done by clicking on “Configurations”, and selecting “FreqCal” and then “Switch To”. The WSJT-X window will disappear and re-appear with the FreqCal configuration file loaded.

Once you have loaded your new configuration file, try changing radio frequencies by clicking on the “operating band” to the left of the frequency display in the WSJT-X software. You should see the radio’s displayed frequency change as you “tune around the bands” in the software.

WSJT-X frequency settings
File -> Settings -> Frequencies

Next, we will pare down the list of frequencies that the FreqCal mode uses to measure its reference carriers.

I like to reduce my FreqCal setting to include only FreqCal mode frequencies. This is accomplished by clicking on “File”, then selecting “Settings” and once the window appears, select the “Frequencies” tab at the top.

You can sort the list of frequencies by clicking on “Mode” (as indicated in the red box). I select all frequencies which are not associated to the FreqCal mode and then delete them by right-clicking and select “Delete”. I saved my list of FreqCal only frequencies and exported them for future use / reference. The list is available for download and subsequent loading into future configuration files. You can replace the current list of frequencies of your configuration by right clicking in the “Working Frequencies” list and selecting “Load …” and opening the FreqCal.qrg file I’ve made public.

WSJT-X executing frequency calibration cycle
Tools -> Execute frequency calibration cycle

With your frequency list configured, it is time to run the frequency calibration routine. This is done by clicking on “Tools” and then selecting “Execute frequency calibration cycle”.

Enabling the frequency calibration cycle simply means that the WSJT-X software will automatically cycle through the FreqCal frequencies which you have selected in your configuration file. Once you confirm that the automatic band switching is working and that you can see a carrier “tone” on the waterfall (or corresponding data in the “decode window”), you are set to start actually measuring the frequency differences. The next step is to click on “Measure” and wait.

WSJT-X frequency calibration readings
Click on “Measure” to begin the measurement process. You can change the T/R time to increase/decrease the time spent measuring the current frequency / band.

As the frequency calibration measurement cycle progresses, you will see operating frequency, expected audio frequency, measured audio frequency, computed frequency difference, signal level and “S/N” ratio information populate the data window. I like to set the T/R time to 30s and run the measurement routine so that at least two cycles of the entire frequency list have been completed.

Tools -> Solve for calibration parameters

Next, you stop the measurement cycle by clicking on “Measure” and then click on “Tools” and then “Solve for calibration parameters”.

If you have enough good data, the software will calculate the slope and intercept values of the linear-dependence function that you have measured. It is important to note that any significant changes in station conditions (such as large temperature changes) should prompt a new calibration routine.

Click on Apply to use the calibration data

With a good calibration solutine available, you can “Apply” the values to the current configuration file (which is your FreqCal configuration).

On the next pop-up window, you will be asked if the fmt.all file should be renamed as fmt.bak. Select “No” this time, we want to “import” that same data into your other configuration(s) without having to manually enter the calibration data each time.

It would be a good idea to write the calibration data somewhere as a good start-point in case the data is lost in the software.

Do not delete the data yet

When prompted to rename the fmt.all file, you should select “No” for each configuration file that you plan to update / use unless you only have one main configuration file.

In most cases, you are fine to simply load your “Default” configuration (Configuration -> Default -> Switch to) and then click on Tools -> Solve for calibration parameters, select “Apply” and then “Yes” to delete calibration measurements.

File -> Settings -> Frequencies

You can now verify that the slope and intercept data have been applied to your configuration file by clicking on “File”, then selecting “Settings” and once the window appears, select the “Frequencies” tab at the top.

That’s it! You now have sub-PPM frequency resolution (with respect to the time/frequency standards used). If all operators would perform this calibration routine, you would be better able to trust the frequency data being reported. This is particularly useful / true of pskreporter.info data.

File -> Settings -> Frequencies
Select all the bands you use

For the benefit of pskreporter.info users, It might be worth adding a line in the “antenna description” line of the “station information” section found under File -> Settings -> Frequencies to report something to the effect of:

“xyz antenna type; freq cal sub PPM via FreqCal”

This data is displayed in pskreporter.info as the antenna description when someone hovers on your station to see when and at what frequency you last heard a particular callsign.

One method is to right-click in the white space, select “Insert”. You then select the band of interest and write / paste in your narrative. This is an adequate method if you only use one or two bands.

Delete unused bands

A quicker method of adding more than just a couple of bands involves clicking in the “Working Frequencies” window, pressing Ctl-A to “select all” and drag the list into the “Station Information” window.

Once fully populated with bands, delete any unused bands and copy/paste your narrative into the antenna section by double-clicking on the “Antenna Description” line beside any remaining bands.

At this point, you have both measured and corrected any frequency offset which your station suffered from. You should now enjoy a much higher level of accuracy and precision while on the bands. You may even notice that more signals seem to be sent & received on even number frequencies (often in 50Hz increments). Enjoy!

This entry was posted in Operating and tagged , , , , , , , , . Bookmark the permalink.

8 Responses to Testing and improving station frequency accuracy & precision

  1. Steve Meltz says:

    Hi…first these are excellent instructions on using the frequency calibration routine. However, I am having a problem I have not been able to solve. I updated WSJTX (I have not used it in a while) and have a new reg (FTDX10). The send/receive functions work fine on FT8, as do the rig control functions. When I follow the instructions for frequency calibration, the fmt.all file is never created. I am at a complete loss as to why. Any help would be appreciated.

    73, Steve N2QLQ/4

    • Al Ryan says:

      I did the same thing. I didn’t see the tiny check box which said Measure, so it didn’t save the results and being a new installation there was no fmt.all.
      Good Luck

  2. Bill Norman says:

    I am trying to run your calibration routine. Used website from ve3bux.com, translated it to a Mac and ran it, I believe succesfully. When I try to calibrate the results, I get a message that the fmt.all file has bad data in it. I have repeated the process many times and get the same results.

    Any help would be greatly appreciated.

    • James says:

      This is a fairly simple fix actually. You really have two options:
      1. delete the fmt.all file and run the routine again but don’t let it run too many repetitions
      2. edit the fmt.all file in a text editor and delete any null / zero lines or otherwise garbage data. This is what I tend to do personally

      I hope that this helps! If it does not, please let me know and I will look into other options for you.

  3. Byong Yu says:

    James (VE3BUX),

    After asking you a question on the subject of setting ‘station frequency..’ I tweedled around and MAY accidently found what was going on.

    After I did go through the steps you have shown in the article, I looked(using F2 key) Settings → Frequencies→ Freq Calib slop value and it was set to (+)0.8ppm. Perhaps the FreqCal procedure I have done did set it to that value(?). By setting the slop manually to 0.0000 ppm the software frequency did sync to the radio perfect! Still wondering how did I end up getting the slope of +0.8000ppm in the first place.

    Thank you for letting me to think about the importance of the subject.
    73 de AB1K

    • James says:

      Hi Byong,

      I am very glad that you found the source of your issues! It is entirely possible that a calibration routine was run and the software calculated the frequency error (in PPM) based on what it had selected as the “peak” of the strongest signal at the expected frequency. When you first mentioned being ~1Hz off at 14MHz, I was going to point out that this is <0.1ppm which is extremely good. I am happy to hear that your station is now "bang on" with respect to frequency. Out of curiosity's sake, I would be curious to know how a full calibration routine would look now that you have validated at least one good data point with your current setup. I wonder how "linear" the mixing is on your radio given its very precise master oscillator.

    • Steve M says:

      Byong Yu…Thank you! I was wondering why the displayed frequency in WSJTx was 2 Hz lower than my rig, when I did not (at least to my knowledge perform a calibration cycle. It turns out it must have as both displays now agree. This is on a brand new FTdx10, so I must have run the cycle on my previous rig, and it carried over when I updated WSTJx.
      Zeroed out the slope, and all is well.
      Steve N2QLQ/4

  4. Byong Yu says:

    Hi James,

    Enjoyed your post greatly and hope to ask you a question rather than a comment.
    I got a new Yaesu FTdx10 a couple weeks ago and working on 20m (WSJT-x) band and found the frequency discrepancy between the software and the radio.

    First, I checked the accuracy of the radio by tuning WWV on 10MHz & 15MHz and it was within 1.0Hz where I concluded it is OK on 14.074MHz as well (I will spare you how I did it for now).

    Secondly, providing the radio is OK, and setting the frequency on the software at 14.074.000MHz I have the radio showing the tuned frequency 14.074.011MHz.

    Your ‘FreqCal’ advice seems assuming the radio is off, therefore needing to calculate the compensation factor for the radio frequency per the user selected frequency in the software.

    Following this logic and after the frequency calibration is done, I should have the radio showing 14.739.989MHz (which I have not done it yet!).
    But I know the radio is reasonably OK and also trust WSJT-x is correct, then, how do I reconcile the discrepancy?

    TNX & 73
    Byong Yu (AB1K)

Leave a Reply

Your email address will not be published. Required fields are marked *