Interested in purchasing KiwiSDR 2 from the second production run? Please email



Last Active
  • Kiwi BBAI software installation instructions [updated 9-Feb-22]

    I have one of the Newark fan capes and at nominal room temperature (70F) it is barely capable of keeping the CPU at an acceptable temperature when it's running at 1.5 Gig.

    The main problem with it - like many similar fans - is that it just can't push the warm air away from the vicinity of the heat producing devices. Adding some additional headers (Adafruit) to add more spacing between the fan and the Kiwi helped a bit, but more help is needed in the form of even a modest fan pulling in "outside" air and pushing it past, between the boards.

  • Suggestion for minor UI tweaks

    Hi JKS,

    While I could likely use GitHub for this, I would like to suggest some minor UI tweaks for the KiwiSDR - these, based on my experience coding for the mcHF transceiver - and posting it here may be instructive to others who are using similar code - and to explain the "why" of the following aspects of the KiwiSDR UI.

    Volume control.

    It seems that the current implementation of the volume control on the UI is linear whereas we (humans) are not. This means that almost all of the useful volume range occurs in the first several steps while the majority of the adjustment range does nothing. - I suggest logarithmic scaling of the amplitude multiplier value, as in this pseudocode example:

    // Volume slider input range 0-20

    if(volume == 0) audio_mult = 0;
    audio_mult = Math.pow(10, (volume-20) / 10); // "audio_mult" ranges from 0.012589 to 1 corresponding to 38dB to 0dB attenuation

    // "audio_mult" is the value that is used to scale the amplitude of the audio stream via multiplication.

    * * *

    Similarly, several of the LMS parameters are particularly ill-suited for straight-line linear adjustment making it impossible to produce generally-usable filters - specifically, the beta and decay parameters:

    beta: The useful range is likely from about 0.00001 to 0.2
    decay: The useful range is probably about 0.9-0.999999

    - Pseudocode example for the LMS beta value using a slider that has a range of 0-100:

    beta_val = Math.pow(10, (beta_slider/23.25))/100000; // Resulting range is approx. 0.00001 to 0.2

    - Pseudocode example for the LMS decay value, using a slider that has a range of 0-100:

    decay_val = 1 - Math.pow(10, ((-1) - (decay_slider/20))); // Resulting range is 0.9-0.999999

    * * *

    Thanks for everything that you do.

  • Add an iframe to the KiwiSDR page?

    Another version that will do a similar thing is here:


    Unlike KA7U's version, this will fill the entire screen, no matter the users' browser/computer capabilities, and the vast majority of users will not be aware that there is a frame. As suggested, this cannot readily run on the Kiwi itself without some modification.

    At the Northern Utah WebSDR we have set up a common "landing page" at a web hosting service (Dreamhost) to which all users are initially directed. Because we may have to change the IP address/hostname in the future, users would use one, common URL to get to the servers - no matter what the actual URL of the server in question might be in the future (e.g. we'd need only change it on the directing page and users would probably not ever notice the change).

  • wsprdaemon noise graphs

    In the past I have checked the calibration of the noise graphs by placing a CW carrier of known amplitude within the WSPR passband. It's been a while, so I don't recall the details, but I do know that a persisting CW carrier can have a similar effect.

  • Advice on sharing RX antennas with 3 SDRs in the most effective way

    It's worth mentioning that at a quiet location, even a KiwiSDR connected directly to a (nominally) unity-gain antenna is not quite sensitive enough to hear the IRU-defined noise floor - much less if it is split several ways. What this means is that unless some rather rugged amplification is included in the signal path, the KiwiSDR will not be able to hear signals near the thermal noise floor on the higher bands - say, >=20 MHz or so.

    If your location is rather noisy to begin with, then there is no need to do through this trouble: This can be determined by tuning in a "blank" spot on 10 meters and observing the S-meter reading with and without (preferably substituting the antenna with a 50 ohm load) and seeing if there is an obvious difference - at least a couple dB, consistently higher with the antenna connected. If there is no obvious difference, your receive system is "gain starved".

    I have found that with the Kiwis at the Northern Utah WebSDR - with an antenna that is essentially "flat" from 3-30 MHz (around 6dBi peak across this range), split four ways, around 20-ish dB cumulative signal gain is required to assure that the KiwiSDR can reliably "see" the thermal noise floor on 12-10 meters at this fairly quiet site - but there's a caveat to this: If you put this much gain in front of the KiwiSDR "naked", you will overload it on lower-frequency signals - that is, those below 12 MHz or so - when the bands open at night - and the receiver will overload badly, much of the "A/D" capacity being spent on a couple dozen strong signals at the expense of everything else.

    For this reason, several in this group have devised "limited attenuation high-pass filters" where those lower-frequency signals are attenuated by a certain amount - something in the 10-20dB range: Enough to knock those very strong signals down significantly, but not enough to put the receiver below the (increasing inversely with frequency) natural noise floor.

    You may peruse that thread here:

    This allows amplification of the signals across the HF spectrum of a sufficient degree while considering the dynamics of those signals - and the dynamics of the KiwiSDR's A/D as well.

    In the current configuration at the Northern Utah WebSDR, the signal path is along the lines of:

    HF Antenna -> Lightning Protection -> 2-way splitter (the KiwiSDRs are on one of these branches) -> Adjustable AM-reject filter network -> High-dynamic range 14dB RF amplifier -> 2-way splitter -> Limited attenuation high-pass filter for Kiwis -> High-dyanamic range 14dB RF amplifier -> HF+LF Combiner -> 4-way splitter -> KiwiSDRs

    A (slightly outdated) block diagram and more information about that signal path may be found here:

    The amplifier is described on this page: (See Figure 3 on this page and the other, similar amplifiers embedded in the diagrams of the other receivers.)

    Note that the system at this WebSDR has been designed to use both narrowband "softrock" and wideband direct-sampling receivers, hence the two complete signal paths. The rationale for this was to "future-proof" the system: The narrow-band "softrock" receivers are still the best way to inexpensively get high performance, but the "wideband" receivers (KiwiSDRs) are still not suitable for many dozens of users - and the combination of affordable, very high performance hardware and the software for sharing many users on wideband receiver hardware is still a little ways off - but we expect it to be available in the next couple of years.