The KiwiSDR 2 online store is open for orders! Please visit



Last Active
Member, Administrator, Moderator
  • Audio timing walkabout [FT8 decoder problems solved with tighter limits on audio buffering]

    So the problem here is that FT8 has a much greater time synchronization requirement (i.e. "wall clock" time) than WSPR does. The timing of the audio hitting FT8 must match what time the FT8 program is getting from the host operating system within a second or two at most.

    The Kiwi produces a delay in the audio stream because it has some buffering. Buffering is required because it is the only defense against latency/interruption issues in the network, particularly when the audio is being delivered by the Internet over long distances with lots of potential points of interruption. So you are already being disadvantaged by the time delay of this buffering to begin with. Any additional cumulative delay by other software behaving badly (e.g. sample rate compensation by the VAC) may push the total timing over the FT8 limit.

    One thing you could try is reducing the Kiwi buffer size to reduce the fixed delay. The penalty for doing this is that you will have much less immunity to short-term network interruptions. That means it's important to make sure there are no highly variable latency devices in the path between the Kiwi and computer running the browser, like a WiFi router or a cheap Ethernet switch that might behave badly with heavy traffic on the other ports.

    Add "abuf=n.nn" to the URL where n.nn is a number in seconds of the minimum audio buffer size. Start with 0.5 and experiment with a range from 0.3 to 0.8

    It would also be interesting to know on the control panel "Stats" tab what the value of the Audio "Qlen" (queue length) is when you are having problems versus what the value is when starting (this value will vary when the abuf= value is changed)
  • Preset HPF setting [fixed in v1.454]

    v1.453,454 May 14, 2021

      Added default passband adjustment to admin page, config tab.

        As each passband parameter field is changed (low, high, center, width) the other

          fields will be automatically adjusted. So if you know you want a USB filter

          with a low frequency of 300 Hz that is 3300 Hz wide just enter those two fields

          and the high and width values will be derived. An error message will appear if

          you attempt to define an invalid passband.

        The former "CW offset" field has been removed. To set your desired CW offset

          simply set the default passband center frequency of the CW/CWN mode passbands

          to the offset value. E.g. If you want to hear a 1000 Hz tone in the CW modes

          set the passbands to have a 1000 HZ center.

        After the passband is changed on the admin page, existing user connections will have

          to reload the page to get the new passband values.

  • v1.456,458,459

    From the CHANGE_LOG file:

    v1.455,456 May 19, 2021

      Admin page

        Config tab: Added button to reset passband fields to default values.

        Connect tab: Improved proxy setup UI.

      Right-click menu: Added "snap to nearest" mode. Setting is remembered/restored per Kiwi

        visited just like freq/mode etc. Waterfall cursor differs when snap mode active.

        When snap is active the freq step keys (j/i, left/right arrow keys) are modified so

        the ctrl/alt-key steps the smallest amount and the unmodified key steps the same

        amount as the snap (e.g. 9/10 kHz on MW). Usually the unmodified key step the

        smallest amount.

      Changes to more easily support general (even non-SDR) FPGA development.

  • v1.441: camping fixes, AGC CW threshold, audio FFT extension fixes, misc fixes

    From the CHANGE_LOG file:

    v1.441 March 15, 2021

      Audio camping bug fixes:

        URL redirect now respects URL camp parameter. More work needed for other cases.

        Audio now plays on Safari.


      Added separate CW AGC threshold control.

        Typically a lower AGC threshold is required for very narrow passband settings to

        avoid low sensitivity. Since narrow passbands are most often associated with the

        CW/CWN modes it was decided to add a separate AGC threshold control active only in

        those modes. The original threshold control applies to all other modes.

        The two are stored in their own separate browser cookies.


      Fixed bugs in the Audio FFT display (the one that appears in 8-channel mode when more

      than two channels are busy, or if the URL "no_wf" parameter is given):

        The LSB passband is drawn in the same place as the actual FTT output.

        The FFT display bins were flipped to be correct (i.e. low vs high frequency).

        Autoscale mode works better than before.


      Disabled compression ("comp") button in DRM/SAS/QAM modes since it has no meaning

        and effect in these modes.

      Fixed shift-click in SWBC bands not selecting nearest 5 kHz boundary.

      Fix long audio latency on browsers that display "Click to start OpenWebRX" overlay.

  • v1.440: C-QUAM & channel queueing/camping

    From the CHANGE_LOG file:

    v1.439,440 March 14, 2021

      Channel queuing and camping:

        When all the Kiwi channels are busy(*) it is now possible to enter a queue to wait

        for the next available channel. The queue is FIFO and multiple parties can

        occupy the queue (your queue order will be shown).


        If all channels are busy you can also now "camp" on an existing connection and

        hear the audio of that channel. The only adjustment is to change the audio volume.

        Otherwise you experience all the changes performed by the owner of the channel

        (tuning, mode, etc).


        You can also be in the queue waiting for your own channel while camping.

        It is possible to use camping even if free channels are available by connecting

        using the URL parameter "camp", e.g. my_kiwi:8073/?camp

        You might want to do this if you know there is already a connection you want to

        camp on, but there are also free channels you don't want to unnecessarily occupy.

        In theory camping requires only slightly more resources because the audio stream

        is simply being duplicated and sent to the camper's network connection.

        The Kiwi admin can configure the maximum number of campers allowed, including zero.


        Later on we can look at adding audio-related features to camping that only require

        browser/javascript resources, hence place no additional load on the Kiwi server

        (e.g. S-meter, recording, audio FFT waterfall/spectrum display).


        These changes are complex and will no doubt have bugs and corner cases to fix.


        (*) or unavailable due to password protection on those Kiwis that have split

        public/private channels.

      Added C-QUAM AM stereo mode to SAM mode button which now cycles as: SAM/SAL/SAU/SAS/QAM

        Based on the work of Github user MaPePeR, see:

        Remember that alt-click will toggle the mode buttons backwards, e.g.

        alt-click on SAM wraps back to QAM (faster than clicking forward on SAM 4 times).

        The same applies to the keyboard shortcut: shift-A is SAM mode forward to SAL

        alt-shift-A is SAM backward to QAM.


      Apply ITU region selection to band display (e.g. 40m ham band now stops at 7.2M for R1)

        It is possible this change will cause problems if extensive customization of

        the kiwi.config/config.js file has been made by the user. Please let us know if

        this happens to you.

  • Early demonstration of "channel nulling"

    Here is a very early demonstration of using the Kiwi's synchronous AM detector (SAM) to subtract one sideband from the other. So a strong on-channel signal that is covering up a weaker one (either on-channel or close by) can be attenuated. This is something I'm tentatively calling "channel nulling". There is much work to be done, but this is at least an existence proof.

    In the first image there is a local powerhouse on 882 kHz and a much weaker carrier on 880 kHz can just be seen in the RF waterfall (green arrow).

    In the second image "null LSB" has been selected from the new menu on the SAM line of the audio tab (bottom right). This puts the SAM detector in "SAL" (synchronous AM LSB) mode such that the USB component is not passed through to the audio. However, just prior to that the USB component is subtracted from the LSB, and, given the sideband symmetry of AM signals, the LSB is effectively nulled (to a varying degree). In the spectrum display above the waterfall you'll note the weak station carrier 2 kHz away now appears above the noise and, sure enough, a Spanish language station can be heard which was impossible previously.

    The "spectrum display" in this case is not the usual spectrum data from the RF waterfall but rather a single-sided spectrum of the audio channel (hence symmetry either side of center). Note that an extension called "FFT" has been selected. This is going to be an expansion of the existing "integrate" extension to include more general audio FFT and spectrum capabilities.

    The RF waterfall doesn't change between these two images because it is from the RF/IF path and not the demodulated/nulled audio.

    This technique is not perfect. Due to the subtraction involved It depends on excellent USB/LSB signal symmetry which can be easily upset by frequency selective fading. A very common problem on shortwave and medium wave at night (at a time when you're most likely to want to use such a feature). But in the presence of fading the nulling effectiveness will vary and it just might give you the chance to "bag a new one" on MW if conditions are right.

    As usual, many thanks to Youssef of AirSpy who recently pioneered this idea. A superior implementation is found in SDR# (the "Co-Channel Canceller" Maybe someday I'll understand how he does it (but probably not, lol).

  • v1.456,458,459

    v1.457,458 May 21, 2021

      Waterfall / spectrum:

        Fixed low-level post-FFT artifacts spotted by Marco's SuperSDR app. Thanks Marco!

        Added CIC filter compensation to better level spectrum at top end.


      FAX extension:

        Added GM-11F Sevastopol 7090.9 kHz per fabrys on Kiwi forum. Thanks fabrys!

  • possible feature : TUNING lock

    I agree. It should work like a browser. I'll update the bug list. There was something similar on there before.

    Also already on the list is the idea of having the classic A/B VFO buttons and a "band memory". So when you hop between bands using the select band menu it goes to the last selected frequency in the band instead of the mid-point, which is what it does now.

  • &

    These are from a recent attempt to make a "user preferences" function work. They are required by xdLocalStorage. I tried again about 6 months ago with xdLocalStorage. More recent browser security changes mean the scheme had to be changed once again compared to work that was done some years ago. It quickly got complicated, so I had to set the work aside for the moment.

    For those that don't know, user preferences would be an extension that allows you, an ordinary Kiwi user (not owner/admin), to do things like: Setting the default cw passband set to 270 Hz and have that apply to every single Kiwi you ever visit from that point onward. Or the same with keyboard shortcut bindings. Or just about any other user interface customization that could be easily added.

    That, plus a real mobile user interface, are the two major missing elements of the software (besides adding an extension to decode your favorite modulation waveform).

  • v1.456,458,459

    Short version: Old behavior restored so external apps, including those using kiwiclient et al, should work as before. But Kiwi web interface uses new changes as described below.

    v1.459 May 23, 2021

      Waterfall / spectrum:

        Fixed the CIC compensation added to the last release.

        Added waterfall interpolation URL parameter "wfi=N" e.g. kiwi:8073/?spec&wfi=13

        Also available as an API parameter on the waterfall web socket: "SET interp=N"

        Value N below. Add 10 to enable the CIC filter compensation.


        The value below answers the question: "What to do when multiple FFT values

        contribute to a single waterfall/spectrum pixel bin". In most cases the FFT

        is larger than the 1024 display pixels of the waterfall (or external application).


        0 take max (old and continuing server default for kiwiclient, external apps etc.)

        1 take min 

        2 take last 

        3 do drop sampling

        4 take cumulative moving average of values


        13 drop sampling + CIC compensation (new Kiwi browser interface default)