Tuesday, September 15, 2020

Comparing the "KiwiSDR" and the "RaspberrySDR" software-defined receivers


  • The RaspberrySDR schematic and a fork of the source code is now available - see the addendum near the end of this article for comments.
  • Another variant - the so-called "FlyDog SDR" - has also appeared since this article was written.  Unfortunately, there is still work to do on this version - details at the end of this article.

Any reader who has perused these blog pages will be aware that I have been using the KiwiSDR for some time now (I personally own four of them and I manage two more!) and have been happy with their performance, finding various ways to maximize their usefulness.  I was intrigued when a "similar" device appeared that might prove to be useful - the "RaspberrySDR".

Figure 1:
The exterior of the RaspberrySDR.
The case is well-built and compact, housing both the
SDR board and a Raspberry Pi 3+.
Click on the image for a larger version.


For those not familiar with the KiwiSDR, it is a Linux-based, stand-alone software-defined radio capable of receiving from (nearly) DC to at least 30 MHz using a variety of modes (SSB, AM, FM, Synchronous AM) and has several "extensions" that allow reception of several digital modes - including CW, RTTY, and WSPR - as well as provide a means of viewing FAX transmissions and SSTV.  It also includes a provision for TDOA (Time Difference of Arrival) determination of transmitter location in conjunction with other similarly-equipped receivers.

This receiver does not have a front panel, but rather it is entirely used via a web interface.  What this means is that it may be used remotely, by several people, simultaneously - each person getting their own, virtual receiver that they may independently tune.

Originally introduced as a Kickstarter project around 2016, the hardware has been augmented with continually-improved open-source software with the lions share of the work having been done by John Seamons.  Using a 14 bit A/D converter clocked at about 66.66 MHz, an FPGA (Field Programmable Gate Array) and a GPS front-end chip, most of the number-crunching is done before the data is handed off to a single-board computer - originally the BeagleBone Green, but now also BeagleBone AI (BBAI):  Both the KiwiSDR receiver board and the BeagleBone Green (BBG) have been sourced by Seeed Studios.

For a variety of reasons, the supply of KiwiSDRs has been a bit fickle - both due to the limited capacity by Seeed in response to demand of these devices and issues which have been impacted the supply of some critical parts.  Another possible issue may be that there is likely to be a bit of "fatigue" on the part of some of the key people related to the KiwiSDR:  Careful readers of blog entries from several years ago can see that a similar thing happened to me on a project on which I had previously worked - coincidentally, also an open-source SDR device.

Figure 2:
Inside the case showing the "RaspberrySDR" board.  The phyiscal layout is quite similar to that of the KiwiSDR.  The small heat sink is affixed atop the LTC2208 A/D converter and the fan is controlled by a simple transistor circuit on the acquisition board.  Unlike the KiwiSDR, only one row of headers (top) is used to connect to the host computer, and unlike the KiwiSDR, power is supplied via the host (Raspberry Pi) processor.   In noting the logo on the board, I can't help but wonder if its intent was that of parody, along the lines of the fair use doctrine?
Click on the image for a larger version.


The present day:

Because the KiwiSDR is based on open-source design of its hardware and software - ostensibly to encourage participation in enhancement of all aspects of its design - one may freely copy it within the constraints of the open-source license.  It is not surprising, then, that several derivative versions have recently appeared on the scene, more or less following the "open source" philosophy - a topic that will be discussed later.

Using the base code found on GitHub and the openly-published schematics as a starting point, the "RaspberrySDR" has appeared - using, as you may have surmised, the Raspberry Pi - specifically the Raspberry Pi B 3 (it is possible to upgrade to a Pi 4).  This single-board computer is of similar size as the BeagleBone Green and roughly similar capabilities - albeit a bit more powerful - and is certainly better-known than the other fruit, so it was a natural choice as the hardware interface between it and the receiver board is fairly trivial to adapt with a simple "conversion" board that adapted to the Pi's interface.

Also to be expected, a revised board (like those pictured above) specifically designed to interface with the Raspberry Pi has appeared from Chinese sellers, packaged with a Raspberry Pi, in a small, aluminum enclosure (with an external fan) for approximately $100 less than the KiwiSDR+Enclosure combination - and this revised version uses a higher-speed (125 MHz versus 66.66 MHz) and higher resolution (16 bits versus 14 bits) A/D converter so that its receive range is extended to a bit over 60 MHz, including the 6 meter amateur band - and there is the potential for improved receive performance in terms of dynamic range and distortion.


Having gotten my hands on one of these "RaspberrySDRs" - and already having available some KiwiSDRs for testing, I decided to put them side-by-side to compare the differences - specifically, to measure:

  • Apparent noise floor and sensitivity
  • Appearance of spurious signals
  • Large signal handling capability
  • Image response (Nyquist filtering)

Noise floor comparisons of the KiwiSDR using the BBAI and the RaspberrySDR using the Raspberry Pi3B+:

The KiwiSDR using the BeagleBone AI:

Figure 3 shows the noise floor of a KiwiSDR using the Beaglebone AI with no connected antenna.  As is typical of this device, there is a slight increase in the noise floor starting around 18 MHz:  The reason for this is unknown, but it is surmised that this is intentional - an artificial boost in "software" that is used to compensate somewhat for the Sin(x)/x roll-off intrinsic to any analog-to-digital sampling scheme as one approaches the Nyquist limit - which, given the 66.66 MHz sampling rate of the KiwiSDR, would be 33.333 MHz.

This assumption would appear to be supported by the fact that as one approaches the Nyquist frequency, the S-meter reading does not drop as one might expect, but remains fairly constant and appears to be close to +/- 1 dB from below 1 MHz to 30 MHz as shown in the data below.

Figure 3:
The noise floor of the KiwiSDR running on a BeagleBone AI (BBAI).
Note the slight rise around 18 MHz - the possible result of the data being "cooked" in the pipeline to offset Sin(x)/x losses near the Nyquist limit.
Click on the image for a larger version.

In numerical form, the measured noise floor of the KiwiSDR/BBAI combination using a 10 kHz AM bandwidth is:

  • -117dBm @ 1 MHz
  • -117dBm @ 5 MHz
  • -116dBm @ 10 MHz
  • -116dBm @ 15 MHz
  • -114dBm @ 25 MHz
  • -115dBm @ 30 MHz (29.9 MHz)
A broad 3dB peak is indicated in the noise floor:  We will attempt to determine if this peak is "real" in our later analysis.

The RaspberrySDR using the Raspberry Pi3+:

The RaspberrySDR has a 125 MHz sampling clock and a 16 bit A/D converter so the landscape looks a bit different as it can (theoretically) receive to 62.5 MHz, but is limited to 62.0 MHz in firmware.  Comparing the 0-30 MHz noise floor to that in Figure 2 (from the KiwiSDR) we can see some interesting differences in Figure 4:

Figure 4:
Noise floor of the RaspberrySDR running on a Raspberry Pi3+.  There is a similar rise in frequency - although it looks a bit different.
Click on the image for a larger version.

We can see a similar rise in the noise floor, but we get the impression that limiting our range to just 30 MHz hides its nature, so Figure 5 shows the noise floor over the full frequency range of 0-62 MHz:

Figure 5:
Noise floor of the same receiver as depicted in Figure 4, but showing the full 0-62 MHz frequency range.  Very evident is a rise in the noise floor centered at approximately 36 MHz.  This spectrum is unchanged if the SPI frequency is changed from the default 48 to 24 MHz.
Click on the image for a larger version.

In comparison, the noise floor of the RaspberrySDR+Raspberry Pi3+ as measured using AM with a 10 kHz bandwidth is as follows:

  • -118dBm @ 1 MHz
  • -118dBm @ 5 MHz
  • -118dBm @ 10 MHz
  • -116dBm @ 15 MHz
  • -115dBm @ 25 MHz
  • -112dBm @ 30 MHz
  • -113dBm @ 40 MHz
  • -116dBm @ 50 MHz
  • -116dBm @ 60 MHz

The magnitude of the broad peak is more significant than on the KiwiSDR - being on the order of 6 dB rather than 3 dB.  Because the RaspberrySDR is based on the (open source) KiwiSDR, it is expected that a the RF processing will be similar - and this would appear to be borne out by the presence of the rise in the noise floor, centered around approximately 36 MHz.  It would seem likely that the adaptation to the higher sample rate hardware is not fully realized as the pre-emphasis in firmware - if it exists - is not properly implemented as is evidenced by the numbers.

Comparison of S-meter calibrations:

To provide and additional data point in our measurement, we'll check the S-meter calibration.  For our purposes we will use a frequency of 10 MHz and a level of -50dBm as our reference as that appears to be below the apparent amplitude peaking of either type of receiver.  Using a known-consistent signal source, the results are as follows:

Frequency KiwiSDR with BeagleBone AI RaspberrySDR with Raspberry Pi3+
1 MHz -51dBm -50dBm
5 MHz -51dBm -50dBm
10 MHz -50dBm -50dBm
15 MHz -49dBm -49dBm
20 MHz -48dBm -48dBm
25 MHz -48dBm -46dBm
30 MHz -50dBm -45dBm
50 MHz --- -50dBm
60 MHz --- -57dBm

The effects of what appears to be pre-emphasis can clearly be seen:  The effects of the Sin(x)/x roll-off on the A/D converter seems to have been more-or-less compensated on the KiwiSDR, but the attempt to do this seems to be misapplied on the RaspberrySDR.  Based on the apparent noise floor and the absolute response to the -50dBm signals, we can make an estimate of the absolute sensitivity of the KiwSDR and RaspberrySDR on the various bands with simple math.

Frequency KiwiSDR Noise floor (dBm/Hz) RaspberrySDR Noise floor (dBm/Hz)
1 MHz -158dBm -158dBm
5 MHz -158dBm -158dBm
10 MHz -156dBm -158dBm
15 MHz -157dBm -157dBm
25 MHz -156dBm -159dBm
30 MHz -155dBm -157dBm
50 MHz --- -156dBm
60 MHz --- -111dBm

The chart above compares the apparent noise floor of both receivers, compensating for the 10 kHz AM detection bandwidth (40dB) and the measured offset of the S-meter at each frequency.

It is worth noting that above about 20 MHz - and given zero line and antenna losses - neither receiver has sufficient sensitivity to detect the expected ITU noise floor given a unity gain antenna:  Approximately 10dB of additional low-noise gain is required at 30 MHz to "hear" the noise floor in that case and even more gain would be appropriate at 6 meters.

This very topic has been discussed at this blog in the past - see the blog post "Limited Attenuation High-Pass filter" - LINK and its follow-up article "Revisiting the Limited Attenuation High Pass Filter" - Link - and their related articles for a discussion. 

For information about the expected ITU noise floor under various "idealized" conditions, see the article:  Recommendation ITU-R p.372-8 link.


Overload signal level comparison:

Another test was done - the determination of the RF level at which the "OVL" message on the S-meter would show, indicating overload of the A/D converter.  This test was done for both units at 10 MHz - the same frequency for which the S-meter was calibrated - and in the "Admin" tab the unit was configured so that just one "OV" occurrence per 64k cycles would be detected.

KiwiSDR OV indication:

The KiwiSDR's "OV" indication just started to indicate at -14dBm.

RaspberrySDR OV indication:

The RaspberrySDR's "OV" indication just started to indicate at -9dBm.

The apparent difference between these is 5dB.

"Wait - shouldn't there be another 12dB of dynamic range with two more bits of A/D resolution?"

In theory, two additional bits of A/D conversion  should yield and additional 12 dB of dynamic range - but this is not readily apparent in the numbers given above (at 10 MHz, 142dB between the noise floor and the "OV" indication for the KiwiSDR and 149dB for the RaspberrySDR) - so what's the deal?

First off, all things being equal (e.g. the same reference voltage for the A/D converter) one would expect the additional range to occur at the bottom of the signal range rather than the top, but this difference can be a matter of scaling via careful adjustment of the amount of amplification preceding the A/D converter and how the code is written.

Ideally, one would carefully balance the signal path so that the intrinsic noise of the amplification preceding the A/D converter would be comparable to the signal level required to "tickle" an LSB (Least Significant Bit) or two with no signal applied:  A higher level than this risks "wasting" dynamic range on internal noise.  Judging by the "even-ness" of the noise across the spectrum, I suspect that the output of the input amplifier is enough to light up at least two LSBs of the A/D converter.  If the signal path were highly "gain starved", low-level spurious signals would likely appear when very low-level signals were applied:  The sort of distortion resulting from the A/D converter being too-lightly driven can be witnessed when using a receiver like the RTL-SDR in "direct" mode and just increasing the signal levels to the point where they start to appear and many spurious signals show up.

It's possible that the "extra" 5 dB at the high end of the signal range is real and that signal dynamics have been juggled a bit with some the extra 2 bits worth of range being present at the bottom end, but this would be difficult to divine without more thorough testing and without the availability of a schematic diagram.  My preference would been to have the unit be slightly "gain starved" so that the the LSBs of the A/D converter would be subject to the action of external amplification to provide maximum flexibility when it comes to managing the signal path.


Note:  The schematic of the RaspberrySDR has become available since this was posted - see the analysis at the bottom of this article.

Without the availability of a schematic diagram of the front end of the receiver there are several unknowns:

  • The LTC2208 has a pin that indicates an overload condition.  It is presumed that in spite of other issues with the firmware (see below) that the "OV" indicator is working properly.
  • The LTC2208 A/D converter has a low-level dither generator built into it:  It is unknown if this feature is active.
  • Shorting the RF signal path  at the A/D converter to eliminate the contribution of the pre-converter amplification would be instructional to ascertain noise contribution from that device.
  • Probing the input of the A/D converter at/near overload to divine the actual range of the receiver itself to determine if the full dynamic range of the 16 bits is properly utilized would be revealing.
  • The LTC2208 has a programmable gain amplifier and full-scale input voltage may be selected as being either 1.5 or 2.25 volts:  The hardware configuration is unknown.
  • At the time of writing this, I have not found in the code any modification of the FPGA image that takes advantage of the extra two bits of A/D resolution.  This does not mean that no modification has been done, but rather that I have not (yet?) discovered it.

Nyquist Image response:

Any receiver has an image response - and an SDR is no exception. In this case, signals above the Nyquist frequency (half the sampling rate) will appear to "wrap around" and show up in the desired frequency range.  Because it is impractical to build true a "brick wall" low-pass filter, there are always compromises when designing such a filter, including:

  • Complexity:  How "fancy" should such a filter be in terms of component count?  More components can mean improved performance, but this implies a more difficult design, higher expense and more performance-related issues such as loss, ripple, sensitivity to source/load impedance, etc.
  • Trade-off of frequency coverage:  It can be difficult to weigh the pros and cons of a filter in terms of its cut-off frequency.  For example, setting the cut-off near the Nyquist frequency will improve performance at the high end of the available range, but at the risk of poorer image rejection.  Conversely, setting it much lower than Nyquist may sacrifice desired coverage.  A case in point would be that for the KiwiSDR, with a Nyquist frequency of about 33.33 MHz, coverage to 30 MHz (the "top" of HF) is desirable, so a bit of compromise is warranted in terms of absolute image rejection.

How bad/good is it?

The image response of both the KiwiSDR and RaspberrySDR were measured and determined to be as follows: 

The KiwiSDR:

Generator frequency (% of Nyquist) Nyquist image frequency on RX
KiwiSDR Nyquist image attenuation
37 MHz  (111%) 29.667 MHz 10dB
42 MHz  (126%) 24.66 MHz 20dB
47 MHz  (141%) 19.66 MHz 30dB
52 MHz  (156%) 14.66 MHz 39dB
59 MHz  (177%) 9.66 MHz 47dB
62 MHz  (186%) 4.66 MHz 55dB
66 MHz  (198%) 0.66 MHz 60dB
70 MHz  (210%) -3.33 MHz 65dB

 The RaspberrySDR:

Generator frequency  (% of Nyquist) Nyquist image frequency RaspberrySDR Nyquist image attenuation
64 MHz  (102%) 61 MHz 9dB
75 MHz  (120%) 50 MHz 18dB
85 MHz  (136%) 40 MHz 27dB
95 MHz  (152%) 30 MHz 36dB
105 MHz  (168%) 20 MHz 46dB
115 MHz  (184%) 10 MHz 54dB
120 MHz  (192%) 5 MHz 58dB
124 MHz  (198%) 1 MHz 60dB
130 MHz  (208%) -5 MHz 65dB

Doing a direct comparison between the two receivers one can see that based on the percentage of the frequency of the unwanted signal with relation to to the Nyquist frequency, the two receivers are pretty much identical in terms of image rejection, implying a very similar filter in each:  I suspect that the RaspberrySDR's Nyquist filter is pretty much that of the KiwiSDR, but with its frequency having been rescaled proportionally.

Because the Nyquist frequency of the RaspberrySDR is approximately twice that of the KiwiSDR, in terms of "dB per MHz" the attenuation of RasperrySDR's Nyquist filter performance will be noticeably worse.  For example, we know from the above information that for the U.S. FM broadcast band that the attenuation of the KiwiSDR's Nyquist filter will be at least 65dB - but we can see that for the RaspberrySDR that this attenuation will likely vary between about 30dB at the bottom end of the band (88 MHz) and 50dB at the top end (108MHz) meaning that it is likely that strong, local FM broadcast signals will cause some interference to the RaspberrySDR in the 37-17 MHz range implying that a simple blocking filter for this frequency range should have been built in   The work-around for this problem - should it arise - is pretty simple:  Install an FM broadcast band "blocking" filter such as those sold for the RTL-SDRs:  An example of such a filter may be found HERE.

Update:  Schematics for the RaspberrySDR are now available - see below.

Effects of receiver noise floor with a strong, off-frequency signal:

Any receiver is affected by other strong signals within its front-end passband - and with direct-sampling SDRs such as these, any signal appearing at the antenna port can and will have an effect elsewhere within the receiver's passband - primarly due to nonlinearity of the A/D converter and, to a lesser extent, the phase noise of the various oscillators - real and virtual.

For this test, a very strong signal from a 10 MHz OCXO (that of an HP Z-3801 GPS receiver - likely a variant of an HP 10811) was used as its output has respectably good phase noise performance.  Two tests were done - at -15dBm and another at -25dBm - each time measuring the change in the noise floor at different frequencies distant from 10 MHz.

With the 10 MHz signal set to -25dBm, NO change was observed in the noise floor at the frequencies listed below on either receiver - but there was a bit of increase in the noise floor with the application of the -15dBm signal - the magnitude of the increase of the noise floor is indicated in square brackets [] in the chart below:

Noise floor frequency Noise floor of KiwiSDR [degradation]
Noise floor of RaspberrySDR [degradation]
11 MHz -114dBm  [2dB] -116dBm  [0dB]
15 MHz -114dBm  [2dB] -114dBm  [2dB]
25 MHz -113dBm  [1dB] -112dBm  [2dB]

Assuming that the 10 MHz signal source is "clean", the above information shows that the two receivers behaved quite similarly.  It also shows that if there are two additional bits of A/D resolution available in the signal pipeline on the RaspberrySDR, their effect is not readily apparent in the measurements above.

All is not well:  A few glaring bugs!

There are several "features" that are readily apparent in this version of RaspberrySDR firmware (Version 1.402) that cause a few operational problems:

  • Inconsistent RF level calibration.  Occasionally, when powered up, the RF signal level calibration (S-meter, waterfall) will be way off requiring a setting of about -30dBm to yield correct S-meter calibration at 10 MHz rather than -19 - which is within a few dB of the setting of the KiwiSDR:  Simply rebooting the KiwiSDR server will likely correct this.
  • No obvious improvement in dynamic range or sensitivity due to the "extra" 2 bits of A/D resolution.  As discussed, one would expect to see clear evidence of improved performance due to the additional two bits of A/D converter resolution, but either this is masked by the low-level noise of the input amplifier, problems in the processing of the A/D data itself, or issues related to handling of high signal levels (see the next topic, below).  What difference there may be appears to be at the top end of the signal range rather than at the bottom.
  • "Broken" S-meter at higher signal levels.  The S-meter seems to be incapable of reading properly above about -33dBm:  Signals higher than this will yield widely-varying numbers that have little to do with the actual signal level.
  • "Motorboating" on strong, narrowband signals.  It has been observed that at about the same time that the S-meter starts to malfunction (above about -33dBm) one will hear odd noises on a strong signal (unmodulated carrier received in AM mode using a 10 kHz bandwidth) indicative of a malfunctioning bit of code somewhere - likely related to the broken S-meter.  The nature (sound) of this effect appears to change depending on the applied signal level.  It is not (yet) known to what extent this issue has a "global" effect:  That is, does a single, strong signal cause this effect on other/all signals within the receiver's 0-62 MHz passband?
  • The "Firmware Update" function in the "Admin" screen doesn't work at all.  Make of that what you will.


An interesting notion - Direct reception of the 2 meter amateur band:

In theory it should be possible to modify the RaspberrySDR to directly receive the amateur 2 meter band - and any other signals from above 125 MHz to at least 174 MHz.  Because the sample rate of the receiver's A/D converter is 125 MHz, one can undersample the 144-148 MHz 2 meter band, which would appear in the range of 19-23 MHz.  Because this is just above the sampling frequency, the "direction" of the frequency conversion (e.g. increasing frequency at the antenna will show as increasing on the display) will be correct which means that a standard transverter offset (e.g. a local oscillator frequency of 125 MHz) could be used.

To do this one would need to - at the very least - bypass the Nyquist low-pass filter, and with the noise floor likely to be much worse than the 158dBm/Hz seen at HF so significant low-noise amplification AND strong band-pass filtering (to quash spurious responses) would be required - probably something on the order of 25dB.

Based on the specifications of the LTC2208, undersampling should work into the hundreds of MHz, possibly covering other VHF and UHF amateur bands - but the need for appropriate amplification and filtering applies!


The "elephant" in the room

It is immediately obvious - particularly from the board layout and screen shots - that the RaspberrySDR has heavily "borrowed" its design from the KiwiSDR and this is, to a large extent, entirely fair game since the KiwiSDR is a self-declared open-source hardware and software design.  Having said this, a few issues have been raised considering the RaspberrySDR:

  • Is the RaspberrySDR being produced entirely in accordance with the KiwiSDR Open Source license?  Likely not.  For example, elements of the KiwiSDR "branding" appear all over the RaspberrySDR - from the derivative (parody?) logo on the board (see Figure 2) to the name "KiwiSDR" being present within the web interface itself.  The former may be an intentional, perhaps perceived as a slight - and the latter is rather hard to eliminate entirely - particularly if one wishes to maintain a branch of the code that echoes the continued development of the KiwiSDR - not to mention effort flowing in the other direction (e.g. improvements by others being incorporated into the KiwiSDR base).
  • Another board with similar capabilities (16 bit A/D, 125 MSPS) has appeared - apparently similar to this RaspberrySDR board - but it interfaces with the BeagleBone:  I have not used one or seen one in person, nor do I know anything about hardware/software support.
  • The RaspberrySDR source code itself seems to be somewhat obscured.  While there is a RaspberrySDR fork on Github (see note below), it is apparently not the very same code that is what is made available as a Raspberry Pi image only (as far as is known at the time of writing) from a link provided by the online seller.  In other words, I have not been able to find any sort of equivalent of a Github repo for the RaspberrySDR - a fact not exactly in keeping with the spirit of "open source". 
    • Github user "FlyDog" has produce the fork mentioned above and his repo may be found HERENow found HERE.  As mentioned above, I haven't been able to get this code to work with this board.   (See the end of this article for comments from users of actual "FlyDog" boards.)
    • UPDATE (20200927):  Github user "howard0su" had produced a fork (found HERE) more likely to be relevant to the RaspberrySDR hardware.  Based on posts to the "raspsdr" list on groups.io, this appears to be a legitimate, open-source fork of the KiwiSDR code.  The owner of this fork has stated on that group that he is not involved with the production of the RaspberrySDR hardware.  As of the date of this update, I have not attempted to build from this source.
  •  Update:  Schematics and source for the RaspberrySDR are now available - see below.  The schematic of the RaspberrySDR does not seem to be available at the time of this writing - again, not in the spirit of open source.  
  • The primary author of the KiwiSDR code announced recently on the KiwiSDR message board that certain parts of the KiwiSDR's code - presumably elements not previously released under an open-source license - would be available only as binary "blobs" in the future.  The intent of this action - as it seems to be interpreted by many of the readers (including me)  - is, in addition to protect certain elements, is to increase the difficulty of replicating the software in the future - and some might argue that this goes against the spirit of "open source" that was embodied in the original Kickstarter definition of the KiwiSDR.  Whether this is true or not, the reader should not overlook the fact that the primary author has spent (and continues to spend) a lot of time, effort and money in the maintaining of the KiwiSDR software, hardware manufacture and certain elements of infrastructure about the KiwiSDR (Proxies, DDNS, TDOA to name three) and there is an understandable desire to "encourage" involvement (including buying "official" KiwiSDR boards, for example) that would go toward maintaining this.  The presumed argument is that follow-on versions based on the open source hardware and code - whether strictly adherent to the open-source licenses or not - are not compatible with his intent going forward.

Is it worth getting?

Is the RaspberrySDR a good deal?  It all depends on what you want to do with it.  At the moment, the ongoing support for it in terms of software development is a bit ambiguous as the "open source" nature of this fork seems to be a bit opaque, which is unfortunate.

For a general-purpose receiver that does not need the (useful!) facilities unique to the KiwiSDR network (proxy, TDOA, etc.) and for a receiver that includes the 6 meter band, this unit may fill a niche.

Again, the reader is cautioned that the "official" KiwiSDR brings to the amateur community several valuable features - including the TDOA - that require ongoing support which translates directly to people buying the "official" KiwiSDR boards, as I have clearly done.  (I personally own four KiwiSDRs, and have directly caused the purchase of at least two more.)

Final comments:

  • For a general-purpose web-enabled remote receiver with decent performance, both the KiwiSDR and RaspberrySDR seem to be a good deal and the RaspberrySDR works reasonably well despite the bugs mentioned above.  The RaspberrySDR has the advantage that it also covers the 6 meter amateur band and has the potential of improved performance by virtue of its 16 bit (versus 14 bit) A/D converter.
  • The KiwiSDR kit with the Beaglebone Green and case - even though it costs more (approximately US$100 more than the RaspberrySDR) - has the distinct advantage of ongoing support along with the other infrastructure features mentioned above.  Like any open-source project, there will come the day when such support will cease and it will be up to others to try to build on what is in the repository at that time.
  • The current hardware of the KiwiSDR is starting to show its age for the reasons mentioned above and the existence of the RaspberrySDR shows that a relatively minor modification can potentially improve performance without a major rework of either hardware or software.
  • With the understanding that the time and resources of the primary author and frequent contributors to the KiwiSDR are limited in the ability to undertake such a change, I believe that it would be a mistake to overlook the potential (and "inspiration") of parallel work being done by others when it comes to keeping the KiwiSDR project up to date and relevant.

* * * *

Addendum - 20201002 - RaspberrySDR schematics and sources are now available:

An email from another amateur radio operator informed me that the schematic diagrams of the RaspberrySDR - and a reference to a Github repo of the source - were posted on the "RaspberrySDR" group on "groups.io" - the link to that posting is HERE(Membership in that group may be required to see it.)

A brief analysis of the diagram has revealed several things:

  • GPS receiver:  The GPS receiver is identical - but that's not too surprising.  While the GPS receiver chip is not specified on the RaspberrySDR schematic, it has the same pin-out as that of the KiwiSDR, although a 66.666 MHz oscillator is shown rather than the 16.384 MHz oscillator on the KiwiSDR.
  • Front end filter:  As I'd surmised, the low-pass (Nyquist) filter is of identical topology as that of the KiwiSDR with a note on the diagram stating "LPF change to 64M" - but the values are the same as those of the KiwiSDR.  Clearly, a change in the components was made, but the schematic was not updated.
  • As with the KiwiSDR, the RF amplifier is shown as being an LTC6401-20.  This device has a fixed gain of 20dB (voltage gain of 10) and has a differential output:  The data sheet depicts it being used to drive an LTC2208 - the same A/D converter as is used on the Raspberry SDR.
  • The A/D converter is shown as being an "LTC2208CUPPBF" - a 130 MHz, 16 bit A/D converter.  The diagram shows all 16 of the "A" bus being connected as well as the "DITH" (used for enabling internal dither generator), "MODE" (used to set the output data format), "PGA" (used to set the gain of the A/D converter to either 1.5 or 2.25 volts full-scale) and "RAND" (used to randomize the output data to minimize possible noise contribution) pins being connected to the FPGA - and like the KiwiSDR, the "OFA" pin is also used to detect over/underrange of the A/D converter.
  • Maybe I missed it, but the circuit used to control the cooling fan does not appear to be on the schematic, nor did I find and obviously-named pin that might be used to control it:  Because the fan does not spin up unless the RaspberrySDR software service is running, it's clearly under software control - likely via a GPIO pin from the Raspberry Pi itself.


  • When time permits, I will probe about to determine the state of the DITH, MODE, PGA and RAND pins on the A/D converter.
  • Because the "PGA" pin may be controlled by the FPGA, it is possible that the A/D's input voltage range can be increased to 2.25 volts - a theoretical increase of about 3.5dB in signal input.
    • If this pin is set to the "low" state, this would - all things being equal - increase the "OV" (overload) threshold from the -14dBm of the KiwiSDR to about -10dBm - very close to the "-9dBm" that was observed in the test, above.
    • In other words, given the otherwise-identical circuitry, it is entirely possible that the increase in the "OV" threshold is entirely due to changing of the A/D converter's PGA setting.
    • A back-of-the-envelope calculation shows that assuming a 1dB loss in the low-pass filtering, a -14dBm signal - that required to cause an "OV" indicator on the KiwiSDR, amplified by 20dB would yield about 1.12 volts peak-to-peak - a value that correlates well with a presumed 1.25 volt A/D maximum input voltage.
    • Similarly, another calculation shows that - also assuming a 1 dB loss in the low-pass filtering - a -9 dBm signal - that required to cause an "OV" indication on the RaspberrySDR, amplified by 20dB would yield about 2.0 volts peak-to-peak - a value that also correlates pretty well if the "PGA" pin is set to configure the A/D converter for a 2.25 volt range.
    • Because 2 extra A/D bits (theoretically) correspond to about 12 dB more usable range, that would, in theory, indicate about 8 dB more dynamic range for the RaspberrySDR over the KiwiSDR.  How well this hypothetical gain is distributed is certainly a topic for more detailed analysis.
  • Because it is (presumably) under software control, I would like to see the settings of the DITH and PGA pins of the A/D converter being made available to the user in the configuration screen.  Because the amplitude of the dither is only on the order of 0.5dB (according to the data sheet) it is unlikely that its effect would be seen when a real-world antenna - and its noise - is connected to the receiver:  Anyway, it seems likely that the noise floor of the input amplifier may be the limiting factor.
  • It's worth pointing out that, according to the data sheets, the SFDR (Spurious-Free Dynamic Range) and  S/(N+D) (Signal to Noise+distortion) specifications of the 14 bit LTC2248 in the KiwiSDR are typically specified as being 90dB and 74.2dB respectively at 30 MHz while the same spec for the 16 bit LTC2208 (in the RaspberrySDR) - assuming a PGA setting of 2.25 volts - are 94dB and 77.5dB:  Not quite the "theoretical" 12 dB afforded from two extra bits!  (The SFDR of the LTC2208 actually goes up to 100dB when the PGA is set for 1.5 volts.)

* * * * *

Large signal and noise analysis of the KiwiSDR:

Somewhat beyond the scope of this article, related directly to the KiwiSDR, is the article written by Adam, AB4OJ where the noise and large signal-handling characteristics of the KiwiSDR were examined in detail - the article found HERE.  In short, the conclusion of this article is that the receive performance of KiwiSDR hardware is shortchanged by nonlinearities in the amplifier preceding the A/D converter - something that should warrant further investigation.

Because the "clone" receivers described on this page are variants of the KiwiSDR, it is likely that their performance is equal to or worse than the KiwiSDR, depending on gain distribution.

* * * * *

Addendum 20210304 - The "FlyDog SDR":

Another variant of the RaspberrySDR has appeared for sale - a board marked "FlyDog SDR".  While I do not have one of these boards, I have spoken to several people who have obtained one and both have noted the following:

  • The software is unreliable.  The KiwiSDR process appears to stop after several hours due to severe memory leaks.  Apparently, a "Docker" container is used (sort of like a virtual machine) and this may be the source of unreliability.  As of this date, it is considered to be unusable.  
    • Comment:  It is possible to install the "RaspberrySDR" software image instead of the FlyDog, providing far better reliability.
    • The issue with crashing was tracked down to additional software running (DigiSkimmer) that has a memory leak, taking the KiwiSDR software offline.
  • Two antenna ports, poor execution.  The variants appearing recently sport to HF antenna ports - but all is not well:  Apparently, these two ports are not switched (e.g. A/B selection) but rather simply bridged together post low-pass filter.  In other words, it's likely that the mere presence of the additional filter hardware causes mismatch/ripple issues even if you don't connect a second antenna:  If you do connect two antennas at once, they will not "mix", but more likely combine in an unexpected manner.

In short:  Both owners of the "FlyDog" variant recommend AGAINST buying it in its current form as it has significant software and hardware issues "out of the box" compared to the RaspberrySDR or the KiwiSDR.


This page stolen from ka7oei.blogspot.com




  1. The source code for RaspberrySDR is here:

    You made good points on S-Meter caculation. I believe there is bug in the code. I will take a look to see if I can fix it.

    Also, there is a group here to discuss:

    1. Thanks for looking into it.

      In the spirit of open source, a public git repo would be very nice!

  2. But where are the GPL sources of the (hopefully) modified Verilog code for the FPGA that actually make use of the extra two bits from the ADC?

    All that repo has are the RaspSDR.*.bit binary files (in addition to the KiwiSDR.*.bit files)

    1. Good questions - no answers as of yet.

    2. The changes to the Verilog code are in a the fpga_64bit git branch in the same repository. - AB1KW

  3. Clint
    Thank you for a very useful analysis and thoughtful comments. I wonder if you could comment on two aspects that I can't see in your post:

    1. Processing gain from the higher clock speed in the RaspberrySDR - should there not be a benefit?
    2. Does it use the same preamp chip and matching networks at input and output as in the KiwiSDR, as these affect the performance metrics you've covered.

    Gwyn G3ZIL

    1. In theory, doubling the sample rate should result in an ENOB (effective number of bits) increase of 0.5 - which would be on the order of 3dB benefit.

      As for the preamp and matching network, I didn't feel like removing the soldered-on shield covers to inspect what are likely a number of unmarked components - although the simplicity would make signal flow analysis pretty easy. Based on the response curve of the Nyquist filtering I would presume that it's of the same topology as the KiwiSDR - the inductors and capacitors simply rescaled for the new frequency.

  4. It seems that the FlyDog GitHub link you posted in your article is now dead. Searching GitHub I came up with the another FlyDog link which most likely represent the code for the board you've tested as the layout looks identical, but the logo has changed:


    Thanks for your insightful article and comparisons.


    andyz - K1RA

  5. I was looking around and cloud not find a place to buy the RaspberrySDR. Does anyone knows where it can be bought from?

    1. Perhaps a bit of "Google-fu" is required, but one possible search phrase for EvilBay and AliBaba is this: "New 16bit 62M real-time bandwidth network shared SDR receiver".

  6. The audio output on the KiwiSDR is delayed about 5 seconds as opposed to very little delay with webSDR.

    What latency in received audio can be expected from the RaspberrySDR?

    1. The RaspberrySDR and KiwiSDR have pretty much identical latency because they share a common legacy. Not counting network latency, it is a bit under 1 second.

  7. How many users are possible on kiwi (4?) and on RaspberrySDR (???)

    1. Because the code is inherited from the KiwiSDR, It is capable of the same numbers of users, as in:

      3 users - 20 kHz bandwidth, full waterfall
      4 users - 10 kHz bandwidth, full waterfall
      8 users - 10 kHz bandwidth, 2 full waterfall channels, 6 audio-based waterfalls
      14 users - 10 kHz bandwidth - no full waterfall channels, 14 audio-based waterfalls.

      I believe that most of the limitation has to do with the FPGA capabilities rather than the amount of processing power. Because the Raspberry Pi is can be more capable, it may be that more users can use software-intensive extensions - such as Digital Radio Mondial (DRM).

  8. ADC Ref voltage on RaspSDR of LTC2208 is
    1.5V now and can be change to 2.25V by remove a resisitor



While I DO appreciate comments, those comments that are just vehicles to other web sites without substantial content in their own right WILL NOT be posted!

If you include a link in your comment that simply points to advertisements or a commercial web page, it WILL be rejected as SPAM!