Thursday, January 16, 2020

Improving the stability and performance of the FiFi SDR receiver

At the Northern Utah WebSDR link, among one of the several receiver configurations is that where a "SoftRock" receiver is used with a sound card.  This combination works very well - far exceeding in overall performance, especially dynamic range, almost any available "wideband" receiver including the SDRPlay, Red Pitaya and KiwiSDR Note 1 with the caveat that only a bandwidth equal to the sample rate of a sound card - 192 kHz or so maximum - can be covered per "band".
Figure 1:
One of the three FiFiSDRs obtained for use at the Northern Utah WebSDR.
Click on the image for a larger version.

Problems with the USB Sound Cards:

Up to now, we have been using a combination of plug-in (PCI, PCIE) sound cards, using USB sound cards when the number of such receivers exceeded the number of plug-in slots on the computer.  Among the few affordable USB audio devices that can sample at 192 kHz are the Asus Xonar U5 and U7 (including the MK 2).

These devices work very well for the task - when they work:  After nearly 2 years, only two of the ten U5 and U7 devices that we had acquired over that period still work, the majority having failed when the USB interfaces would fail to negotiate at full USB 2.0 speed (if they negotiated at all!) after a few months of operation - often after a reboot.  Unfortunately, an Internet search revealed that this is not an uncommon problem and a plausible explanation as to the reason for these failures - or a fix - was not to be found.

An alternative:

Rather than spend more money on the unreliable Asus U5 and U7 USB devices - most of which we had gotten on EvilBay, originally in proper working order - we decided to switch to the "Fifi SDR" device from in Germany.  Originally introduced around 2010, the current "Version 2" increased the bandwidth from the original 96 kHz to 192 kHz - and rather than just a sound card in a box, the FiFiSDR includes an entire synthesized "Softrock" receiver with decent performance and best of all, they cost about the same as a brand new 192 kHz capable USB sound card.  Several popular WebSDR systems - including KFS in Half Moon Bay, CA - use these devices and have reported good performance and reliability.  If they had been available when we were acquiring the equipment for the Northern Utah WebSDR, we would have started using them earlier.

Three FiFiSDRs were ordered - exactly enough for our needs - and upon arrival, I assembled them (a bit of soldering and mechanical assembly) and began to test them.  For whatever reason my Windows 7 machine at my workbench steadfastly refused to recognize the Fifi's sound card interface, but my Windows 10 laptop did and after a few missteps - mostly related to the program I was using to interface with it (HDSDR) having been previously configured for different SDR hardware - I got all three up and running.

Initial impression:

My initial impressions of the performance of the three FiFiSDR were generally good - ignoring the "elephant in the room" discussed below:  The receiver sensitivity, although varying by 2-3 dB between receivers, was within advertised specifications and once they had been powered up for several minutes the frequency was quite stable (within a few Hz).  Immediately, I noticed a few low-level CW spurious signals, but these were at or below the microvolt level and would likely be submerged in the noise floor - at least on the lower bands.

Because the sound codec was integrated within the receiver itself, the center-frequency (so-called "Zero Hz") noise was quite low because a possible pick-up point (e.g. a cable going from the output of the SoftRock receiver to a sound card) has been eliminated.  I did notice a fairly strong artifact at or near zero Hz - likely a DC offset with a bit of 1/F noise - but this is typically removed by a low-frequency high-pass filter in software and is not likely to be an issue.

I did notice two artifacts typical of "SoftRock"+sound card receivers:
  • Under no-signal conditions, the noise floor would rise by several dB at "high audio" frequencies as manifest by a slightly "lighter" waterfall at the extreme low and high ends of the 192 kHz passband.  This is quite typical of sound cards and has been observed on nearly every sound card that I have used.
  • Under conditions where the external (ionospheric) noise exceeded that of the receiver's noise floor, there was a bit of "droop" at the extreme low and high ends of the 192 kHz passband.  I've noticed this effect on nearly every softrock-type receiver and attribute it largely to signal drop-off in the audio chain at high audio frequencies.
I did see something that alarmed me:  Unstable spurious signals that drifted about (the "elephant" mentioned previously) but a "fix" for this problem is pretty easy and is described later.

Static sensitivity!

I'd seen a mention or two that the Fifi SDRs would occasionally "lock up" - but it didn't seem to be a common theme in the groups online - but once I got the them up and running, I saw two things that concerned me:
  • When I touched the metal case and had no antenna connected the receiver's noise floor went way up.  This is bad news - particularly if it is to be installed in an electrically-noisy environment - like anywhere near a computer.
    Figure 2:
    The sole "official" case-to-board grounding point is at the corner near
    the 3.5mm jack
    Copper foil was wrapped over both the top and bottom and soldered
    to the board's ground on both sides with a bit of excess
    folded over on the end to provide a connection to the end plate.
    (The solder connection was re-done, but I didn't get a picture.)
    Click on the image for a larger version.
  • If I had even the slightest amount of static electricity on my body the Fifi SDR would crash when I touched it and refuse to come back to life until I unplugged the USB and plugged it back in again.
Upon observing either of these, my suspicion as to the problem was verified with an ohmmeter - the metal case was, in no way, connected to the internal PCB.

Inspection revealed why:  Not only was the case very heavily anodized, the two boards fit somewhat loosely in the slots inside - and there was only a single common ground in one corner of the main board.  Even if the board was snug, it probably would not have made electrical connection through the case's oxide coating.


Clearly, I needed to find a simple way to bond the board to the case.  The receiver's  main board's use of a single-point ground seemed reasonable - particularly when one pairs a computer with a very sensitive receiver as one must carefully avoid on-board ground loops - so I resisted any temptation to "bond it everywhere" - at least not without careful testing.
Figure 3:
The point where the copper foil makes contact with the end plate.  Note that
the ends of the drawn-aluminum case have had the oxide layer removed to
bare the metal:  The same was done on the end plates to allow the copper
to make contact.  The bared ends of the case and corresponding parts of
the end plates were coated with a light layer of anti-oxidant.
Click on the image for a larger version.

First, I used a rotary tool with a wire wheel to remove the anodization (clear oxide coating) from around the edges of the end panels as well as the very ends of the drawn aluminum case so that when the screws were installed, they would have metal-on-metal contact.

The next step was to provide a connection from that ground in the corner to the case - and I did this by wrapping the edge of the board in that corner  (Figure 2) with copper foil and soldering it, leaving a bit of excess to wrap around the end of the board (Figure 3) - the idea being that it would be compressed by the now-bare aluminum end panel and make connection to the rest of the case.

Because bare aluminum quickly forms its own insulator when exposed to atmospheric oxygen, a thin layer of anti-oxidant compound (e.g. "NoAlOx" or "DeOxIt" - both used in electrical wiring) was applied to the bared aluminum on the ends of the case as well as where the copper would press against it:  This would prevent re-oxidation and the loss of connection over time and with exposure to air and moisture.


Upon reassembly, the end of the board with the copper connection was tightly pressed against the inside of the end panel and there was a low-resistance connection between the boards inside and the case.  Because of this effort, not only does the receiver noise floor not go up when I touch the case, but I can give the unit a pretty good "zap" with a static spark and not have it affect the operation of the device!

If I'd had the time to do so, I would have tested the efficacy of additional board-to-case ground points, making sure that these additions did not reduce the performance of the receiver.

Although not instructed to do so by the assembly guide, installing the nut on the 3.5mm audio connector may connect the board to the case (via the end-plates) at that point. As they are, the connector's body is not is not long enough to protrude very far through the end plate and only a few threads were presented.
Figure 4:
On the top, an 80 volt gas-discharge tube.  Holes were drilled on the top to
provide connection and mounting.  The tube is bent away
from the case to prevent it being shorted to the case.
When drilling, take care to avoid intercepting any traces on either
side of the board.
Click on the image for a larger version.
Because of the thickness of the end plates, the installation of the nut will prevent proper insertion of a cable into the connector - but since I wasn't planning to use that jack, I installed it anyway.

The "floating" antenna jack:

Presumably to prevent circulating currents between the antenna system and the "ground" of the computer (via the USB cable) the antenna jack is coupled to the receiver via a 1:1 transformer.  Having a "floating" antenna connector made me nervous:  If one were to connect a FiFiSDR to an ungrounded wire antenna, wind static could easily cause high voltage to appear on the antenna connector which might not only cause a shock, but if it arced to ground somewhere - possibly within the receiver - it could damage the receiver's RF amplifier and/or be conducted to the USB interface to the computer where it could cause the FiFiSDR and/or computer to crash or worse, cause damage.
Figure 5:
The 150k resistor on the bottom of the board to drain static.
Any value between 47k and 220k would suffice.
For another modification (described below) 0.1 and 0.001
capacitors were soldered across this resistor for RF bypassing.
Click on the image for a larger version.

While I am not advocating using any antenna without appropriate grounding, I do know that it does happen and out of principle, I added circuitry to mitigate the risk:  The addition of a 150k resistor to prevent the accumulation of charge and an 80 volt gas-discharge tube between the RF and system ground.

Even if one does not add a gas-discharge tube, I would certainly advocate the addition of the drain resistor!

* * * * * * * *

Spurious signals in the receiver - the "elephant":

Having gotten all three receivers operational, I noticed something else that was alarming:  In two of the three receivers I could see, near the upper and lower edges of the passband (192 kHz sampling rate, 75 kHz and farther, symmetrical about the center frequency) some "ragged" signals that drifted about:  The third receiver also showed these same spurious signals, but they were much weaker, closer to the center frequency indicating that the same problem was evident, but likely farther out of the +/- 96 kHz passband of the receiver's sound card and showing up via aliasing.  Even if though the spurious signal on this third receiver was weak, I decided that was likely to mix with existing signals and cause additional, undesired signals to be produced within the passband, and would likely be the case with the other two receivers.

The spurious signals on the two worst receivers (example in the upper half of Figure 6) were fairly strong, about "S-9" in strength, making their existence unacceptable.  A quick check of the FiFiSDR wiki and trouble ticket system revealed that there were at least two tickets (#324 and #332reporting this issue - but both were years old and were still open with no suggested resolution.

Figure 6:
A screen shot from HDSDR showing the spurs before the modification (top half) and after the modification (bottom half).
These spurs are symmetrical about the center frequency (red line in the middle) indicating that they are NOT at RF, but rather at a point beyond the RF mixer in the audio chain.  The amplitude of these spurious signals make this receiver nearly unusable due to their strength.
Because of the rather low apparent signal strength, it is most probable that the actual frequency of these oscillations is not in the 0-96 kHz range, but much higher and being made visible because of the finite attenuation of the codec's low-pass filtering and aliasing of the A/D converter's sampling rate.  
Click on the image for a larger version.

 The symmetrical nature of this signal - and the fact that its nature was completely independent of the receive frequency - indicated that the origin of this signal was not at RF, but was within the audio chain or related to the FiFiSDR's power supply.

Careful observation showed something else:  As an applied signal within the passband of the receiver (e.g. +/- 90 kHz or so of the tuned frequency) increased in amplitude above approximately -70dBm, these spurious signals would start to  "noise up" and disappear - finally vanishing by the time the signal achieved -30dBm.  Because the signal was affected by signals in the audio chain, this observation took the onus off the likelihood of the power supply oscillating, pointing directly at the audio chain indicating that whatever was causing it was directly in the audio signal path.

Figure 7:
The addition of the 470k resistor to the "ADC1LP" pin of the codec.
The ground plane was scraped and the resistor soldered between it and
the capacitor(s) as shown, taking care to avoid shorting the "ADC1LP"
line to ground.  The corresponding (original) resistor on the "ADC1RP" line
is the upper-most resistor at the left marked "474", upside-down.
Click on the image for a larger version.
Wielding an oscilloscope, I started probing the audio chain - but I could see nothing obvious in terms of unusual signals - but I noticed that when I touched the probe to pin 39 ("ADC1LP") of the audio codec - an Analog Devices AD1974 - the frequency would shift slightly. 
Touching a voltmeter probe to this pin I observed that this spurious signal would disperse widely - as if frequency-modulated by the AC mains field on the workbench - but the same did not happen when I touched the voltmeter probe to pin 41 ("ADC1RP") indicating that the problem was only on the "left" channel of the codec.  Disconnecting the DC blocking capacitor from IC5, the audio amplifier, the amplitude of this oscillation remained the same, shifting frequency very slightly:  This implied that the problem was the AD1974 itself.

At this point I noticed something else:  The voltage on pin 41 ("ADC1RP") was a few 10s of millivolts lower than that on pin 39 ("ADC1LP") - something that should not occur as both were presumably biased from the same internal voltage reference.  I then observed that there was a 470k resistor between the traces connecting pin 41 and ground - but this resistor was missing on pin 39.

On a hunch I added a 470k surface-mount resistor to ground at the bypass capacitors connected to pin 39 and found that the spurious signal disappeared.  Apparently, the designers of the Version 2 of the FiFiSDR had observed a similar problem and added the 470k resistor to "ADC1RP" - but did not do so on "ADC1LP".

This "fix" worked on all three receivers.

Improving common-mode (longitudinal) isolation:

(Sorry, no pictures at this time.)

One thing I noticed about this receiver was that its antenna input was transformer-isolated from the case.  Ideally, this is a good thing as it can reduce any ground loops that may contain circulating AC or DC currents which, unless everything is well-bonded to a common ground, may cause problems (e.g. hum on audio devices, potential USB instability).  Unfortunately, no transformer is or can be perfectly balanced - and this could be demonstrated on the FiFiSDRs by simply touching the outer shell of the BNC connector and observing a slight noise increase when in an indoor RF-noisy environment - even after the case grounding issue discussed above was solved.

To quantify this imbalance I took some measurements, applying an amount of signal between the FiFiSDR case after bonding it to the circuit board as described above and the shell of the BNC connector, observing the amount of signal that was required to achieve an "S9" reading.  Doing this at both 5 MHz and 29 MHz, I obtained the following results in terms of common-mode (longitudinal) isolation:
  • 5 MHz:
    • Isolation = 29dB unterminated
    • Isolation = 50dB terminated at 50 ohms
  • 29 MHz:
    • Isolation = 24dB unterminated
    • Isolation = 35dB terminated at 50 ohms
Whether or not this is acceptable in your situation is something that you will have to decide - but I chose to make a minor modification:  The addition of a 0.1uF and 0.001uF capacitor in parallel (two capacitors being used to provide low impedance from low to high frequencies) with each other (this was in parallel with the 150k resistor depicted in Figure 5) to bridge the "RF Ground" and the system ground:  Unlike connecting the two grounds together with a jumper, this would still provide low frequency DC and AC isolation.  The result was that there was no longer a significant difference between the readings when the BNC connector was terminated or unterminated.

With the addition of the capacitors, the isolation improved to about 50dB on both frequencies - terminated or not.  I was hoping for even greater improvement than 50dB, but I suspect that because the case-to-board mounting occurs in only one place, in a corner away from the RF connector, circulating currents were flowing across the board.  It is possible that bonding the system ground to the case near the antenna connector would have improved this - but I did not have time to test this and make sure that it did cause significant degradation.

* * * * * * * * * * * * * * * * * * * * * *

Note 1:
Unlike some of the inexpensive "Wideband" receivers based on the RTL chips (e.g. RTL-SDRS - which have just 8 bit A/D converters) higher-end receivers that have greater simultaneous bandwidth (SDRPlay, Red Pitaya, KiwiSDRs) have greater bit depths - typically 12-14 bits, offering greater dynamic range.

Even a higher bit-depth wideband receiver can be at a disadvantage compared to the combination of a SoftRock and sound card:  Not only does the 16 bit depth of a sound card offer more dynamic range, but the lower operational bandwidth (192 kHz maximum for a sound card based receiver) means that there is less overall "energy per Hz per bit" impinging on the A/D converter than a MHz-bandwidth A/D converter.
* * * * * * * * * * * * * * * * * * * * * *

  • An attempt was made to post the solution to the problem of the spurious signals to the FiFiSDR ticket system, but the post was rejected by the system.  I have not had the time to register with the site.
  • We were able to obtain three more FiFiSDRs of earlier manufacture and ALL THREE exhibited the same spurious signal response.  Fortunately, the "fix" - adding the resistor - worked in all three cases.  These receivers were also modified (case grounding, RF bypassing of the transformer, etc.) as well with the same, good results.

This page stolen from