Welcome to the new FlexRadio Community! Please review the new Community Rules and other important new Community information on the Message Board.
If you are having a problem, please check the Help Center for known solutions.
Need technical support from FlexRadio? It's as simple as Creating a HelpDesk ticket.

ARRL FMT -- getting the most accurate frequency

Steve-N5ACSteve-N5AC Community Manager admin
Tonight is the ARRL Frequency Measuring Test (FMT) where you can test your skills, and the capabilities of your radio, measuring an on-air signal with the best accuracy you can muster:


The FLEX-6000 radios are well suited to perform in the challenge, but there's some important information you should know before having a go at it.  I apologize in advance that this will not be a complete "how to" guide and I hope that some others may be able to answer questions on what I've written as they arise.  I've been meaning to post this for several weeks and just haven't had the time.

In a direct sampling radio like the FLEX-6000, there is an Direct Digital Synthesizer (DDS) or Numerically Controlled Oscillator (NCO) performing the tuning of receivers in the digital domain.  In the FLEX-6000, there is a complex set of DDSs and mixers that control the final output frequency of the radio.  We've not previously exposed how all this works in the radio and so the opaqueness of this part of the radio makes competing in the FMT hard.  So this post will provide enough information to get a much more accurate measurement for those that are interested.  The capabilities here were developed for a government customer of ours and have been shown to get frequency results within a few hundred microHertz (yes, microHertz).  It is important to point out that doppler shift in the ionosphere and other considerations will affect your on-air accuracy, but the FLEX-6000 should get you closer that any other amateur radio I know of.

Note that for best results, you will need to have a FLEX-6500 or FLEX-6700 with either the on-board GPS option or a 10MHz reference that is derived from a GPS locked oscillator (or cesium, rubidium, hydrogen maser, etc).  A FLEX-6300 will simply not have the same level of accuracy, but you can have a go after using the WWV calibration built into the radio.  Incidentally, if you are using a FLEX-6500 or 6700 that is locked to a reference, ensure that you have your frequency offset setting set to ZERO.

When a DDS is tuned, it is supplied with a frequency tuning word (FTW).  The frequency tuning word is limited to a set number of bits and most of ours in the radio are 30-32 bits.  Every frequency cannot be represented with 32 bits, of course, and the error in any given DDS can be calculated by taking the sampling radio divided by 2^<# of bits>.  In our case, this would be 245,760,000 / 2^32 = 57.22mHz (millihertz).  This means that the radio can be off as much as 57mHz at any time.  Some changes were made a few months ago that limit this to +/- 28.61mHz (SmartSDR v1.10.9 and later).  In addition, a new API command was added that will actually report the error for both the receiver and transmitter:


So you can tune a receiver and then connect to the radio using the API and request the error.  Then you can use available software to measure the audio frequency of a tone in your passband and make the adjustment provided by the get_error command.  Details on using the API are beyond the scope of this quick posting so you'll have to look around to get that information.  The short version is that you find your radio's IP address, use a telnet client to telnet to it and then issue the get_error command after you've tuned your slice receiver.

I hope this helps someone use the FLEX-6000 in the FMT and I'd be glad to answer questions as I have time.  Again, our military customers use this to get within a couple hundred microHertz so you should be able to do very well in the FMT by applying this information.



  • RiaRia Member ✭✭
    edited November 2019
    Thanks Steve. Man, this is making me regret not getting the GPSDO option, but the good news is I can always acquire one later on. This is my first FMT, as I didn't have a rig capable enough. Now I do. :)
  • dlwarnbergdlwarnberg Member ✭✭
    edited November 2019
    I can't even get to the ARRL site currently... anyone else having an issue or is it just me?

  • Tim - W4TMETim - W4TME Administrator, FlexRadio Employee admin
    edited April 2017
    Looks like arrl.org is down right now.
  • RiaRia Member ✭✭
    edited April 2017
    It's down.


    LoTW and other sites on that server are up, however. 
  • dlwarnbergdlwarnberg Member ✭✭
    edited April 2017
    Thanks I just got in...  I have plenty of time does not start till 8:00 pm EDT or 00:00 UTC
  • Neal_K3NCNeal_K3NC Member ✭✭
    edited April 2017
    Ria, thanks for posting isup.me You are a gift that just keeps giving!

  • dlwarnbergdlwarnberg Member ✭✭
    edited June 2020
    So, since I am new to this and excited to give it a shot, what exactly am I listening for?  is this a simple CW tone, a SSB transmission tone, a beacon, what?

    Like just now there was some weird looking pulsing signal at about 14.097.900

  • Mike va3mwMike va3mw Member ✭✭
    edited April 2017
    Ria, you can do it with a 6300 and be darn close.  It just means you'll have to work at it a bit, while the others will just **** another ****!

    I'm doing it the old fashion way with the FMT code that comes with WSPR.

  • Steve-N5ACSteve-N5AC Community Manager admin
    edited April 2017
    ARRL is back up, but there is a call on each frequency in succession followed by a 2-minute CW tone.  Then they switch frequencies.  Details on the ARRL site since it's now back up.
  • roger na4rrroger na4rr Member
    edited April 2017
    Hi Ria    thanks for the link  Does it do more than just ping the site? 

  • RiaRia Member ✭✭
    edited April 2017
    I believe it uses servers in different part of the country (may be AWS, I'm not sure) and tries to curl the site. PING is unreliable as many sites block ICMP traffic for security reasons. 

    There are a few many others

    etc etc

    Basically a lot of bored/creative programmers etc who like creating useful things for public consumption. 

    AND it's not limited to websites. There are toolbars, browser extensions, and even access via REST APIs. 

    Ever wondered what your favorite website is running? This is an oldie but goldie:


    Since I run a large website as my day job I spend half my day looking for tools to make my life easier (or I write my own when I don't find them). 
  • Tim TaylorTim Taylor Member
    edited April 2017
    I am assuming that all 6700 will have the same offset when tuned to the same frequency. I tried to use TELNET to use the get_error command; but have been unsuccessful so far. This is my first time trying to use the API. Just out of curiosity, I used the following frequencies:
    14.120 USB
    7.063 USB
    3.597 USB.

    I used those as the base frequency and measured the frequency of the tone with a frequency counter locked to the GPS 10 MHz.

    Chances are very good that others may have used the same frequencies. If you get a chance, could you please post the error for those frequencies if you have the time.
    Tim K8XS
  • Tim - W4TMETim - W4TME Administrator, FlexRadio Employee admin
    edited April 2017
    You have to telnet to the command channel which is port tcp/4992
  • Tim TaylorTim Taylor Member
    edited April 2017
    I got that far. At the telnet prompt, I issue the command o 4992
    (where is the IP of my 6700) . This opens a connection with the 6700 and the responds with a boatload of status information. It appears that each item of status is separated by a LF character and not a CRLF because the data just scrolls across my telnet window and drops to the next line (without a return to column 1) for each new status item. After that and with the 6700 being tuned to the frequency of interest, I issue the command c21|slice get_error 0 CRLF  to get the error for slice 0 and the terminal just hangs there. It appears that I get no response. At this point, I am stuck. Over.
  • Steve-N5ACSteve-N5AC Community Manager admin
    edited April 2017
    What version of SmartSDR is in your radio? Also no one can provide you with the information because it will vary based on the path that you got to your current configuration.
  • Tim TaylorTim Taylor Member
    edited April 2017
    I am running V labeled as Beta 1.10.15. I just noticed that 1.10.16 is available.

    Interesting that the value changes based on how you got there. I noticed something else that was interesting. I thought that even if I could not use get_error, I could measure the error. I used two different signal generators ( a Rhodes and Schwarz and a PTS) that were locked to the same GPS 10 MHz reference as the radio and frequency counter. I set the 6700 to a frequency that I used in the FMT. I then set a sig gen to a frequency 1kHz higher than the radio. That should get me a 1kHz tone when the radio is set to USB. I ran the test and I was getting what seemed to be reasonable results. I measured something like 18.6mHz on one frequency and 23.4 mHz on another , etc. The thing that seemed to give the values credibility was that I got the same answer regardless of the signal generator I used. Then for some reason, I resized the SmartSDR window. Well I was quite surprised to see that the value on the frequency counter changed. I had not changed the radio tuning or the sig gen setting but the 1kHz tone changed in value. Not by a lot. Maybe on the order of a couple of mHz or 10s of mHz. So, there must be something else going on that I do not understand.

    Steve, thank you for your time. 
  • Steve-N5ACSteve-N5AC Community Manager admin
    edited April 2017
    Yes there's a whole set of sliding windows that set the frequency and the get_error checks all of these and reports the exact offset. And change in the panadapter or receiver may invalidate the data and you'll have to ask again. Did you get the get_error to work? I believe it's in everything after v1.10.9
  • Tim TaylorTim Taylor Member
    edited April 2017
    Running 1.10.16. This is what I get
    C:> telnet
    Welcome to Microsoft Telnet Client
    Escape Character is 'CTRL+]'

    Microsoft Telnet> o 4992
    Connecting To



    M10000001|Client connected from IP

    SA07786D6|radio slices=7 panadapters=7 lineout_gain=66 lineout_mute=0 headphone_gain=47 headphone_mute=0 remote_on_enabled=0 pll_done=0 freq_error_ppb=0 cal_freq=10.000000 tnf_enabled=1 snap_tune_enabled=1 nickname=FLEX-6700 callsign=K8XS binaural_rx=0 full_duplex_enabled=0 band_persistence_enabled=1 rtty_mark_default=2125 enforce_private_ip_connections=1

    SA07786D6|radio filter_sharpness VOICE level=3 auto_level=0

    SA07786D6|radio filter_sharpness CW level=3 auto_level=0                                                                                                                                                                              SA07786D6|radio filter_sharpness DIGITAL level=3 auto_level=0                                                                                                                                                                    SA07786D6|radio static_net_params ip= gateway=nettmask=                                                                                                                                                                          SA07786D6|interlock timeout=0 acc_txreq_enable=0 rca_txreq_enable=0 acc_txreq_polarity=0 rca_txreq_polarity=0 tx1_enabled=1 tx1_delay=0 tx2_enabled=1 tx2_delay=0 tx3_enabled=1 tx3_delay=0 acc_tx_enabled=0 acc_tx_delay=0 tx_delay=5                                                                                            SA07786D6|client 0xA07786D6 connected                                                                                                                                                                                                        c21|slice get_error 0

    I get no response
  • Steve-N5ACSteve-N5AC Community Manager admin
    edited April 2017
    Can you download PuTTY and try using it?  You should always get a response back -- if for no other reason that to tell you that your command was received and doesn't mean anything to the radio.  I used this command on my mac to access the radio:
    screen telnet 4992
    Here's my output:
    Trying to
    Escape character is '^]'.
    M10000001|Client connected from IP
    S86C07A9A|radio slices=7 panadapters=7 lineout_gain=46 lineout_mute=0 headphone_gain=50 headphone_mute=0 remote_on_enabled=0 pll_done=0 freq_error_ppb=0 cal_freq=15.000000 tnf_enabled=1 snap_tune_enabled=1 nickname=N5AC_Dev callsign=N5AC binaural_rx=0 full_duplex_enabled=1 band_persistence_enabled=1 rtty_mark_default=2125 enforce_private_ip_connections=1
    S86C07A9A|radio filter_sharpness VOICE level=2 auto_level=1
    S86C07A9A|radio filter_sharpness CW level=2 auto_level=1
    S86C07A9A|radio filter_sharpness DIGITAL level=3 auto_level=0
    S86C07A9A|radio static_net_params ip= gateway= netmask=
    S86C07A9A|interlock timeout=0 acc_txreq_enable=0 rca_txreq_enable=0 acc_txreq_polarity=0 rca_txreq_polarity=0 tx1_enabled=1 tx1_delay=0 tx2_enabled=0 tx2_delay=0 tx3_enabled=0 tx3_delay=0 acc_tx_enabled=0 acc_tx_delay=0 tx_delay=0
    S86C07A9A|eq rx mode=1 63Hz=10 125Hz=10 250Hz=10 500Hz=10 1000Hz=10 2000Hz=10 4000Hz=10 8000Hz=10
    S86C07A9A|eq rxsc mode=1 63Hz=0 125Hz=0 250Hz=0 500Hz=0 1000Hz=0 2000Hz=0 4000Hz=0 8000Hz=0
    S86C07A9A|client 0x86C07A9A connected
    c1|slice get_error 0
    c1|jkdhsf sdkhf ksldf
    Even the last command that is gibberish gets a response.  If you get nothing back, there's a problem with what the radio is (isn't) seeing from your client.  There's also a setting in PuTTY that allows you to specify how <LF> or <CR><LF> are handled that will make everything appear in a single line.

  • Tim TaylorTim Taylor Member
    edited April 2017
    I used my MAC and it worked perfectly. Thank you very much.
    Tim K8XS

  • Tim TaylorTim Taylor Member
    edited April 2017
    Also used PuTTY and it worked fine. There must be something I am not setting in the Microsoft version. Thanks Steve. Another satisfied customer!!
  • Ken - NM9PKen - NM9P Member ✭✭
    edited April 2017
    Thanks for the hint, Steve.  
    I had never thought about "puttying around" the 6500!
    I tested a few simple commands with success.

    I didn't realize exactly how easy it was to send TCP/IP commands via Telnet.
    I have programmed information exchanges for the MIDI Control project that got stalled, but This has convinced me even more that all I need to do is learn enough to open up and read a serial port and a TCP port and I should be able to write a basic MIDI controller interface in C#.   Perhaps a summer vacation project.....
  • K1FRK1FR Member ✭✭
    edited April 2017
    Any opinions re recommended/favorite windows programs for measuring the audio frequency of the tone in the passband?  Thanks.

    And, thanks to Steve for posting the FMT info. Looking forward to the next FMT.

    73, Tom
  • Andrew VK5CVAndrew VK5CV Member ✭✭
    edited April 2017
    I had some trouble with no response to c21|slice get_error 0 in telnet and PuTTY on
    Even after connecting to the radio on its local address and the correct port.
    Just now tried PuTTY on win10 64bit.
    Connected OK but no response on slice 0.
    Though running on Slice A in one panadapter on the Maestro the initial screen reported 3 panadapters and 3 slices.
    After bit of lateral thought I tried slices 1-4.
    Got a response on slices 2 and 3 of R1|0| +0.000000, +8.010864
    Slice A 1.8366 MHz running WSPR.
    No response for slices 0, 1 or 4 (know that for the 6500 there  is no 4)
    However c21|slice list (not l) returns R21|0|0
    So no response if the slice numbers are wrong.
    My radio must be a bit confused!

    Why are RX and TX different?

    Is there a simple math way of mapping any decimal frequency to an integer binary FTW?

    Andrew VK5CV
  • edited November 2019
    Congratulations to the Flex community for a good showing, overall.  Many who used 6500/6700 radios achieved < 1 Hz accuracy with many under 0.1 Hz.  Results are available by Googling "ARRL FMT Results"
  • RiaRia Member ✭✭
    edited November 2019

    Direct link.
    Congrats to all!
  • Norm - W7CKNorm - W7CK Member ✭✭
    edited April 2017
    I wasn't able to make it.  Was it possible to test 2 meters as well?    My 6700 is WAY WAY off on 2 meters.

  • Dave KD5FXDave KD5FX Member ✭✭
    edited April 2017
    I used my 6300 and DM 780. Before the contest I tuned WWV on 2.5, 5.0, 10.0 and 15.0 and offset my USB tuning by 500 hz to watch the beat tone on DM 780. That worked pretty good but I found that the calibration setting required varied a great deal from band to band. Can you explain why that would be?

    Below is the chart I used to set my calibration in the FLEX S/W before each part of the FMT. I got pretty good results, under 1 HZ on 40 and a little over 1 HZ on the other bands.
    The ppb numbers for the WWV freqs are exact numbers I discovered for those freqs and the other numbers are interpreted. 

    Freq  ppb
    2.5    9000
    3.8    6750 80 mtrs
    5.0    4500
    7.5    3400  40 mtrs
    10.0  2300
    12.5  1950
    15.0  1600  20 mtrs
  • k3Timk3Tim Member ✭✭
    edited May 2020
    This is my first FMT and by dumb luck was within 0,38, 0.02 and 0.09. I had the 20 meter freq but due to Operror overwrote it, otherwise had a shot at the "green box". With Steve's information about the milli-hertz read_error API and this experience hope to do better in Nov.


  • RiaRia Member ✭✭
    edited April 2017
    The test was on 20, 40 and 80m only.

Leave a Comment

Rich Text Editor. To edit a paragraph's style, hit tab to get to the paragraph menu. From there you will be able to pick one style. Nothing defaults to paragraph. An inline formatting menu will show up when you select text. Hit tab to get into that menu. Some elements, such as rich link embeds, images, loading indicators, and error messages may get inserted into the editor. You may navigate to these using the arrow keys inside of the editor and delete them with the delete or backspace key.