Tuesday, February 20, 2018

Better frequency stability for the QRP Labs "ProgRock" synthesizer


It turns out that the newer (version 4) of the QRP ProgRock board has pads for a TCXO.  See below for a link to the ProgRock web page.

The ProgRock:

The "ProgRock" synthesizer from QRP Labs is an inexpensive device based on the Si5131 "any frequency" synthesizer that may be used to produce up to three frequencies simultaneously - typically from around 8 kHz to around 200 MHz (with some limitations) but it may be coaxed to go down about 3.5 kHz as high as 290 MHz.
Figure 1:
The "synthesizer" portion of an unmodified ProgRock.  The 27 MHz crystal,
in the upper right quadrant, is a typical "computer grade" device, but is
typically stable to only a few 10s of PPM over a a wide temperature range - OK
for many applications, but not where you want really good frequency stability.
The newest version of the ProgRock has pads for an SMD TCXO on the
top of the board, although it's not the same device that I used - see text.
Click on the image for a larger version.

Typically programmable using a pushbutton and a DIP switch, newer versions of firmware may be programmed via a serial port as well.  These devices also have an input from a 1PPS (1 pulse per second) source, such as a GPS receiver, to allow precise setting/control of the frequency.

Unlike a VFO, the ProgRock produces only a set of fixed, pre-programmed frequencies:  Up to 8 "banks" of frequencies may be selected via three digital select lines.

What sort of things might this be used for?
  • Arbitrary frequency sources for the workbench.
  • Providing clocks for digital circuits.
  • The local oscillator of a fixed-frequency receiver or transmitter.
  • An internal local oscillator for a radio - such as a a frequency converter or BFO.

For casual use, the supplied crystal - a typical computer-grade unit - is adequate, but if you need the frequency to be held to fairly tight tolerance - say, a couple of parts-per-million - over a wide temperature range you will probably want something else.  QRP Labs does sell an "OCXO" version of the synthesizer which works well, but it is more complicated to build and adjust, it consumes several watts of power and produces extra heat.

You might ask:  "Why not just use the 1PPS input for frequency control?"

Figure 2:
The bottom side of the board after modification.  The tiny TCXO module
is affixed to the board and then connected to the circuit using flying leads.
In the picture above, pin "1" is in the lower right corner of the device - the
only one without a solder connection.  On the "label" side of the chip
pin 1 is identified by a very tiny dot.  Pin 2 ground (lower left, blue flying
lead) can be identified with an ohmmeter as it is also connected to the case.
Click on the image for a larger version.
While these devices can be "nailed down" to a precise frequency with the application of a 1pps input from a GPS receiver or other high-stability source, there is a problem with this option:  It tends to cause a "step" change in frequency on the order of 1-2 Hz.

Such step changes would probably go unnoticed on SSB or CW, but with certain narrow-band digital modes there might be a problem.  While modes like WSPR or JT-65 can deal with frequency drift, this would normally occur very gradually over the period of several symbols giving the decoder enough time to track, but if the frequency shift were very sudden, a few symbols would probably be lost.  While the occasional loss of data is normal, any loss caused intrinsic to the receive system - perhaps due to frequency steps of the local oscillator - would degrade the remaining error-correcting capability overall.

In other words:  If phase or very fine frequency changes will affect your communications, you might not want to use the 1PPS input.

Using a TCXO:

Another option is to replace the crystal with a TCXO (Temperature Controlled Crystal Oscillator).  These small, self-contained oscillators have on-board circuitry that counteracts the temperature-related drift, holding the frequency relatively constant over their design range.

A suitable device is a part made by Taitien and is readily available, being DigiKey part number 1664-1269-1-ND (Mfg. P/N TXETBLSANF-27.000000).  This device is tiny - only 3.2x2.5mm square so soldering to it is a bit of a challenge - but still manageable with a fine-tipped iron and some magnification.

As pointed out in the QRL-Labs documentation, some TCXOs may have "stepped" frequency adjustments as part of their temperature compensation due to a built-in temperature sensor and D/A converter referencing a look-up table.  If sufficiently large (e.g. results in more than a few 10ths of Hz "step") these frequency discontinuities can disrupt/degrade modes such as WSPR that operate over very narrow bandwidths.  If a TXCO does this, the synthesizer being controlled by it will also exhibit the same frequency steps, proportional to the output frequency.

The Taitien TCXO units noted above were observed at 432 MHz (the 16th harmonic of the 27 MHz TCXO)  using signal analysis software to magnify possible frequency steps:  If such "step" behavior was happening, it was smaller than 0.34 Hz at 432 MHz (e.g. 0.02Hz at 27 MHz.)

The power requirements of this device are very low - only 1-2mA, far less than the 100-200mA of a warming crystal oven - and it may be powered directly from the existing 3.3 volt supply of the synthesizer board.  This TCXO produces about a volt pk-peak output which is in line with what the data sheets for the Si5351A suggest for a capacitively-coupled external signal being fed into the crystal input.  It is possible that the Si5351A would work just fine if this TCXO were directly-coupled, but I included the capacitor just to be safe.

Wiring the TCXO:

As noted above, later version of the ProgRock have pads for a TCXO, albeit one with a different footprint than above.  The device suggested by QRP Labs is the FOX924B-27.000 (Digi-Key P/N:  631-1075-1-ND) which is quite a bit larger than the Taitien device and has a rated stability of 1.5ppm.  This device has a higher output voltage swing, which allows the omission of the coupling capacitor used with the Taitien device noted above.

I first removed the crystal and cleaned the holes of solder.  The TCXO module was then glued using cyanoacrylate adhesive (a.k.a. "Super Glue") "belly up" to the circuit board (after it was cleaned with denatured alcohol) at a location on the bottom side of the board between the synthesizer chip and the crystal position as shown with pin "1" in the lower right corner.  With the oscillator firmly in place, a small piece of 30 AWG wire was used to solder pin "4" (V+ - upper-right) to the nearby connection of C3, one of the V+ lines for the synthesizer chip.  Connected to the opposite corner (pin 2, lower left) another short piece of 30 AWG wire is connected to the other side of capacitor C3 to provide the ground.

A small, 1000pF disc ceramic capacitor was inserted into the bottom side of the board to connect to the crystal terminal closest C3 and the "CLK 0" terminal with the other lead carefully formed and bent to be soldered to the upper-left pin, #3 - the output terminal of the TCXO.  Once the capacitor is soldered into place it is a good idea to re-heat the capacitor's other lead (the one soldered into the board) to relieve any mechanical stress that might have occurred from bending the lead to fit to the connection.

Before soldering to the TCXO - but after it has been glued to the board - it is recommended that a small amount of liquid flux be applied to the connections and that they be tinned using a hot iron with a very fine tip:  The ceramic package tends to draw away heat quickly, making it a bit difficult to solder and tinning it before-hand assures that a solid connection has been made.  Don't tin the unused pin as it's an easy way to identify the pins of the device while it is inverted.

Assuming that the connections are good and that the pins were properly identified, the synthesizer may be plugged into a ProgRock as normal.  If all went well, the output frequency will be pretty close to what it was before - but slightly low in frequency.  While the nominal frequency of the original crystal is 27.000 MHz, in this circuit the frequency is usually 2-5 kHz high in this circuit so the "default" clock frequency of the ProgRock is set to 27.003 kHz to compensate.  With the TCXO being within 1PPM of its intended frequency, register 02 of the ProgRock will have to be set to the new frequency, hopefully within a few 10s of Hz of exactly 27.0 MHz:  If you have a means of precisely measuring the frequency, use that number for register 02, otherwise use 27.000000 MHz.  Once this is done the programmed, output frequencies will be quite close.

Once everything was checked out I put a few more dabs of adhesive on the capacitor and flying leads to make sure everything was held into place.

How well does it work?

I put together two of these TCXO-based ProgRocks and when compared to a GPS-referenced source, I found one to be 1 Hz high (e.g. 27.000001 MHz) and the other to be about 13 Hz low (26.999987 MHz) - both well within the 1PPM specification.  These frequencies were programmed into register 02 and CLK0 was set to precisely 10 MHz and I found the output to be within 1 Hz of the intended frequency.  I then heated and cooled the units and observed that the frequency stayed well within the 1PPM spec, indicating that all was as it should be.

Example applications:

Stable receiver local oscillator:

Figure 3:
An application of the ProgRock where two of the outputs are being used as
the local oscillators of two "SoftRock Lite II" receivers configured to cover
different portions of the 40 meter band.  Fitted with a TCXO, these
frequencies will be held to within 1ppm over any reasonable temperature
Click on the image for a larger version.
An immediate need for a stable frequency source came about recently while I was putting together a module that is designed to cover the entire 40 meter amateur band in two segments using two "SoftRock Lite II" SDR receiver modules.  Normally these ship with crystal oscillators, but the use of a single ProgRock module allowed a pair of these receivers to collectively cover the entire 40 meter band with very good frequency stability - important if digital modes such as WSPR are to be considered.

Figure 3 shows the result.  Both receiver modules and the ProgRock were mounted in the lid of a Hammond 1590D die-cast enclosure and a simple 2-way splitter using a BN-43-2404 binocular core was constructed.  The end result - when coupled with good-quality 192 kHz sound cards - is a high-performance, stable receive system capable of covering the entire U.S. 40 meter amateur band - with a bit of overlap in the middle and extra coverage on the edges.

Replacement of a crystal oscillator on a phase-modulated transceiver:

These days it is increasingly difficult to source custom quartz crystals for older "rockbound" commercial radio gear.  An example of this is the GE MastrII line of VHF (and UHF) transceivers that require a crystal for each transmit or receive frequency.  Even though this equipment is now quite old, it is still useful as it is quite rugged and has excellent filtering and when properly prepared, it has been proven to very reliable.

These radios use crystals in the 12-13 MHz area for transmit and 16-17 MHz area for receive so a ProgRock can be easily programmed to be used in lieu of a crystal with a slight modification of a GE "ICOM" channel element.  Because the MastrII transmitters use phase modulation, the signal source is never modulated - and this is an advantage if you happen to need to set several overlapping transmitters to the same frequency and you need their modulation to "track" precisely.  By using a TCXO (or QRP Labs' OCXO) rather than the 1PPS to maintain frequency stability, the possibility of occasional "clicks" in the audio due to frequency correction steps is eliminated.

With any synthesizer the concern is that it will produce spurious signals and/or additional phase noise that will degrade the transmit/receive performance, but preliminary testing has shown that even when multiplied to 70cm, the resulting spectra is quite clean - probably good enough to be used on a repeater.  If one does do this, there are a few things that should probably be kept in mind:
  • Even though the ProgRock can output two frequencies at once, there is a small amount of crosstalk between them and when multiplied to the ultimate VHF/UHF frequency, these low-level spurs could end up on the output.  For this reason it would probably be a good idea to use two separate ProgRocks, located apart from each other, in a full-duplex radio.  For half-duplex, a single ProgRock could be used with the RX and TX frequencies being toggled by selecting a pre-programmed "bank".
  • Its worth noting that in many of these radios the LO frequency of the receive frequency is immediately multiplied by the next change.  Testing was done on a receiver showing that the ProgRock could be set to the output frequency of this multiplier stage.  This cannot be done for the transmitter as the oscillator's output is immediately phase-modulated at its operating frequency.
  • It would probably be a good idea to place some high-Q band-pass filtering tuned to the synthesizer's output frequency to minimize any low-level spurs at frequencies removed from the main output frequency that might be present on the synthesizer.  Initial testing didn't show any obvious problems, but using such a filter would be a sensible precaution.
  • A very small amount of added "hiss" - probably from low-level phase modulation - was observed at UHF.  In normal use, this would probably have not been noticeable unless one did an "A/B" test.


This page stolen from ka7oei.blogspot.com

Thursday, February 15, 2018

Managing HF signal dynamics on the RTL-SDR (and KiwiSDR) receivers

Note:  This article was inadvertently posted for a few days before it had been finished.  This is the "completed" version of that article.

The Kiwi SDR:

The Kiwi SDR is a stand-alone network-connected multi-user "SDR in a box" device with its own web interface that allows one to tune from (nearly) DC to at least 30 MHz.  Using a 14 bit A/D converter, it is more robust than the RTL-SDR mentioned below, but it can still be overloaded by strong AM broadcast stations - so what follows can be applied.

The "RTL-SDR":

The so-called "RTL-SDR" dongles are devices that have become quite popular owing to their low cost and their ability to cover a wide frequency range - typically from a few hundred kHz to nearly 1GHz, depending on the device.  There are two separate signal paths on these devices:
  • Via the Raphael R820 chip.  This has an onboard synthesizer, mixer and band-pass filters and it converts signals in the (approximately) 24-1300 MHz range to a lower frequency.  This is the "normal" signal path used in these RTL-SDR dongles when use as they were originally designed for reception in the VHF and UHF bands.
  • Right into the RTL2832 chip.  This (typically unused) input may be made available via another connector, or via a frequency-splitting filter network as is done on the "RTL-SDR Blog" dongles.  This input can work from a few 100 kHz to 10s of MHz, more or less.
It is the RTL2832 that has the A/D converter - which is just 8 bits - and that is the main limit of these devices when used in environments with both strong and weak signals.
Receiving HF with an RTL-SDR dongle:

If we want to receive the HF spectrum - which we'll call 500kHz-30 MHz (we'll include MF here...) we have to work around some issues.  The most obvious is that the R820 chip can typically tune down to something in the 20 MHz range (it can sometimes be coaxed to go even lower) but it certainly cannot be relied on to work well down in the 1-5 MHz range.

The "direct" input has the advantage that is uses an 8-bit A/D that is sampling at 28.8 MHz followed by some DSP logic that allows signals in that stream to be internally converted to "baseband" samples - but the nature this chip poses a few problems.  To receive the entire HF spectrum, we have two methods that may be used, but each of these has their own sets of quirks, advantages and disadvantages:

The "direct" method:
  • It is very simple to implement in that it uses would would normally be an unused input.  Many dongles already include this modification - but if not, it may be easily added (instructions may be found on the web.)
  • The frequency stability can be better than the "upconversion" method since it is always lower - and there is only one oscillator that must be kept stable.
  • This has the disadvantage that the sample rate is about 28.8 MHz meaning that signals above 14.4 MHz will be aliased.  For example, a signal at 21.25 MHz will also appear at (28.8 - 14.4 = ) 7.55 MHz.  This can usually be mitigated by the addition of band-pass filtering around the frequencies of interest if "fixed frequency" operation is expected.
  • The "direct" input is typically quite "deaf", often requiring a bit of amplification if it is to be used for microvolt-level signals.  In testing, it took about 7 microvolts (-90dBm) for a CW signal to become audible, about 15 microvolts (-84dBm) for an SSB signal to be readable and around 25 microvolts (-79 dBm) for an AM signal to become listenable.  In other words, the sensitivity of this unit in direct mode is 20-30dB worse than a modern receiver.  The RTL-SDR dongles used happen to have a built-in amplifier so their sensitivity is "reasonable".
The "up-converter" method: 
  • In this method there are two oscillators that can contribute to drift:  The (typically) 100 or 125  MHz oscillator used for the up-conversion and the clock reference in the receiver itself.  Because both of these oscillators are operating at a rather high frequency - and because there are two of them - drift can be exacerbated.
  • The "image" problem associated with "direct" method is largely avoided.
  • The mixers used for frequency conversion can, in some cases, be overloaded by strong signals meaning that signals may be degraded before they get to the receiver.
No matter the configuration, there is one limitation intrinsic to these "RTL" devices:  The 8 bits of A/D conversion.

The "dynamic range" problem:

With 8 bits one can only attain an overall dynamic range of about 48dB (the actual amount is actually harder to calculate owing to oversampling, thermal and circuit noise, external noise, etc.)  The problem arises from the fact that a "weak" signal at, say, 160 meters may be on the order of 1 microvolt (-107dBm) but a nearby AM broadcast transmitter may be presenting a signal that could be 500 microvolts (-53dBm) or even much more!  In our example, we can see that this could pose a signal difference of 54dB - above the range that can be represented using an 8 bit converter.  In other words, assuming a 48dB dynamic range of our A/D converter, if we adjusted our levels so that a 1 microvolt signal (-107dBm) just barely registered on the A/D, any signal(s) that were 48dB above this (-59dBm) would "max out" our converter - again, ignoring oversampling, etc.

In other words, if we were to carefully adjust our signal level to our RTL-SDR (using an attenuator) such that we were just below the signal level that "maxed out" our A/D converter, our weak signal would be below the signal level represented by the lowest bit and it would (probably) be lost in the noise.  Conversely, if we tried to bring the weak signal up to the point where it was out of the quantization noise of the A/D converter, we'd be overloading our A/D, causing distortion and making it work very badly.

The importance of band-pass filters:

Whether you are using the RTL-SDR dongle in the "direct" mode with with a converter it would be a very good idea to limit the signals arriving at its input to only those of interest as much as possible.  This need contradicts the desire of many users of this device to cover from "DC to Daylight" - but if one attempts to put such a large frequency range into the antenna, performance will suffer:  If the unit doesn't just overload, there will likely be issues with trying to receive weak signals in the presence of strong ones - and with just 8 bits of A/D conversion, if that difference is greater than 40dB, you may see significant degradation.

When used in the "normal" mode where the R820 chip is acting as frequency converter, the A/D converter in the RTL2832 chip sees a somewhat limited spectrum owing to filtering in the R820 chip - but despite this filtering there is still the problem of "weak versus strong" signals that are within this passband - not to mention the fact that it just doesn't take a lot of signal to overload the R820 outright.

If you are using "Direct sampling" mode on HF, the program is more severe:  The entire HF spectrum being applied at the RF input is being digitized by a measly 8 bits which means that even if you are running the RTL2832 in the 2048ksps mode where you can "see" 2 MHz of spectrum, signals from the rest of the spectrum are still being digitized by that 8 bit converter.  If you consider that the signal-handling capability of the 8 bit A/D to be a limit to the total RF power being applied, you may be "wasting" much of this A/D capability at frequencies that are of no interest to you at all!

Images in the "direct" mode:

A worst-case example:  20 meters

If you are running "direct" mode, the problem is worse, still:  As noted above, the sampling rate of the A/D converter is 28.8 MHz, which means that signals above the Nyquist limit at half this frequency - 14.4 MHz - will "reappear" elsewhere.  For example, if you were listening at 14.300 MHz on the 30 meter band - which is 100 kHz below the 14.4 Nyquist limit - you would also hear signals at 14.500, which is 100 kHz above the Nyquist limit.  Similarly, if you were tuned to an AM broadcast station at 1.0 MHz - 13.4 MHz below the Nyquist limit - you would hear signals that were at 27.8 MHz - 13.4 MHz above the Nyquist limit.

In the second case, it's pretty easy to filter out the 27.8 MHz signals:  A simple low-pass filter will do, but in the first case - using the RTL-SDR Dongle at 20 meters - things are quit different as it is difficult to build a filter that will pass signals at 14.35 MHz with little attenuation but block signals at 14.45 MHz - the "image" of 14.35 MHz - sufficiently.  What this means is that are several MHz away from this 14.4 MHz limit, you can probably get away with filtering in the "direct" mode - but the closer you get (say, 13-16 MHz) the more difficult it will be to remove the image.

The typical work-around for this is to convert the HF range to a higher frequency - typically by mixing it with a local 125 MHz oscillator, so instead of 20 meters being tuned in at 14.0-14.35 MHz in direct mode, it would be at 139.0-139.35 MHz.  This works pretty well, although oscillator stability - both in the RTL-SDR dongle's synthesizer and in that added 125 MHz oscillator - is much more of a concern as the frequency at this 139 MHz frequency could drift hundreds of Hz between the two oscillators whereas in direct mode - with only one oscillator - the absolute frequency is much lower (about 1/10th) along with the amount of drift.

Even with the "upconverting" technique, you are not excused from needing to have front-end filtering:  The limits of the 8 bits of A/D conversion and those of the circuitry still apply!

Another approach for 20 meter coverage:

Taking our 20 meter example, while we could upconvert - which would be the easiest approach if  you happened to by an RTL-SDR with an upconverter - another approach would be to convert the frequency band from 14.0-14.35 MHz down to, say, 4.0-4.35 MHz by using a mixer and a 10 MHz oscillator:  This lower frequency would imply higher stability and the filtering requirements would be greatly relaxed as compared to up-converting by 100 or 125 MHz:  An example of such a circuit may be seen below in Figure 1.
Figure 1:
20 meter converter for an RTL-SDR Dongle used in "direct" mode.  This mixes the incoming (filtered) 20 meter signals with 10 MHz to produce a 4.0-4.35 MHz output.  Originally, I'd planned to use an inexpensive 10 MHz TCXO, but it was unavailable at the time of construction.  In the upper-right corner is an representation of the circuit layout.
Click on the image for a larger version.
In the diagram above we see the signals coming in and being applied to a 2-pole bandpass filter for 20 meters.  I "borrowed" this design from QRL Labs' bandpass filter (link) - so if you don't wish to build your own, you may order a kit of parts for the band of your choice from them.

This filter is not nearly "sharp" enough to pass the top end of the 20 meter band (14.35 MHz) and sufficiently block its nearest image frequency (14.45 MHz) if we were to use "direct" mode with the 14.4 MHz Nyquist limit so we down-convert the 20 meter band from 14.0-14.35 to 4.0-4.535 MHz, instead - well away from from the image response.  The bandpass filter limits the number of signals that get converted and provide enough filtering to minimize an image response that could occur due to the converter itself - that of the sum frequency (e.g. 24.0-24.35 MHz).  Transistor Q1 boosts the HF signal somewhat to overcome the loss of the filter and of the mixer and low-pass filter following it.

The local oscillator that I used was a 10 MHz OCXO (Oven-controlled Crystal Oscillator) that I had kicking around and its output was at TTL levels - a 5 volt square wave, so R5 was placed in series to knock this down to about 1 volt peak-peak at the "LO" input of U1, a diode-ring mixer.  I had originally intended to use an inexpensive 10 MHz TCXO (Temperature-controlled crystal oscillator - Digi-Key PN:  1664-1262-1-ND) but this turned out to be unavailable at the time I constructed it:  Had this part been on-hand I would have included a 3.3 volt regulator for the TCXO and would have omitted R5.  In a pinch, a "crystal can" 10 MHz computer-grade oscillator could have been used, but these - unlike the TCXO that I would have used - are not particularly accurate in frequency or stable with temperature (e.g. they would be within "only" 100ppm or so - which could be about 1 kHz at 10 MHz.)

The output of the mixer is passed to a low-pass filter to remove the "other" image resulting from the mixing product (24.0-24.35 MHz) as well as "bleedthrough" of the 10 MHz local oscillator - the presence of which could degrade the performance of the RTL-SDR.

This entire device was constructed "Manhattan Style" on a piece of copper-clad circuit board using "Me Squares" (from QRP-ME - link) which was mounted in the lid of a die-cast aluminum enclosure.

Is "Direct mode" worth the trouble?

Why use the "direct" mode at all?  When the frequency is converted, drift can be a concern, and this is significantly reduced  in "direct" mode - and it is quite simple to implement in hardware:  Many dongles - like the "RTL-SDR Blog" dongle have a diplexing filter (and amplification on the "direct" branch) that make it easy to use - provided that one be aware of the limitations!

In cases where the frequency is quite low - say, below 12 MHz - it is pretty easy to apply band-pass filters that will remove the image response above 14.4 MHz.  Above the Nyquist frequency we can actually use this effect to our advantage and directly tune in the 17 and 15 meter bands, using band-pass filters to limit the input to only those frequency ranges.  We again hit another Nyquist response at 28.8 MHz, but by then the low-pass filter built into the dongle is starting to take effect.

Whether or not you use direct mode, you will want to apply a bandpass filter to the input to limit the signals to those of interest - that is, if you really want to minimize the possibility of overload.

In short:  Is the "direct" worth the trouble?  In those instances specified above, it can be, owing to its relative simplicity and improved frequency stability as compared to the "upconverter" method.

Extreme case:  Receiving both the AM broadcast band and 160 meters

To illustrate this problem, let us look at the signals present on an HF antenna located in the Salt Lake City area, below:
Figure 2:
Off-air signals of the AM broadcast band into a Carolina Windom designed for 80 meters and higher bands.  This spectrum analyzer plot's vertical axis is 10dB/division with the top bar being 10dBm.
The on-screen reading is for marker #4, which is a weak "local" station at -62dBm, but the strongest signal is marker #1 which is a bit stronger than 0dBm which means that this signal has a million times more power at the antenna input than the weaker one!
Click on the image for a larger version.
In Figure 2, above, we see the plethora of signals that are intercepted by a typical HF antenna in a metropolitan area.  The strongest signal (marker #1) is at 1160 kHz (KSL) a local 50kW "clear channel" station which is producing a power level of about +3dBm which is nearly 1/3 volt of RF!  In contrast we can see another signal indicated by marker #4 which is another local, low-power station with a signal level that is about 60dB (a factor of 1000000!) weaker.

The "top" end of this plot (far right) includes the entirety of the 160 meter band and at this (rather noisy) site location we can see that the background noise is presenting us with a signal level of about -80dBm (about 22 microvolts) of noise.  In a truly "quiet" location, away from power lines and other urban QRN this noise floor would be 10-15dB lower during daylight hours, or in the area of -95dBm (about 4 microvolts.)

From this plot we can see several problems that arise if we want to use an RTL-SDR:
  • The strongest signal (marker #1 at 1160 kHz) is about enough to case the front-end static-protection diodes built into good-quality dongles to conduct and cause intermodulation distortion on their own.
  • The signal level differences between the strongest local signal (marker #1) and the weakest (marker #3) is nearly 40dB below that of the strongest signal - which is almost all of the range of our A/D converter.  There are "nearby" stations located farther away that are even worse off - such as the station located at marker 4 that is about 60dB down (1-millionth) of the signal level of our strongest.
  • If we wanted to listen to local AM broadcast signals and be able to receive signals on 160 meters we would need manage the fact that there is about 80 dB difference (a factor of 100 million) between the strongest signal and the noise floor!  What's worse is that this -80dBm (ish) noise floor at 160 meters isn't all that much higher than the noise floor of the RTL dongle itself.
To be sure, the magnitude of these disparate signals can be a challenge even for a modern communications receiver which, when connected to this same antenna, may well experience overload unless a significant amount of attenuation is added but coupled with the limited dynamic range of the RTL dongle, being able to receive both sets of signals poses a challenge.

"Squashing" the signal levels

Clearly, if we want this system to work in both environments we need to reduce the levels of the strong broadcast band signals while boosting the weak signals on the 160 meter band and the way to do this is with some filtering.  If we design a "band stop" filter that will attenuate only the broadcast band signals we can prevent the dongle from being overloaded as badly.

Let's design a hypothetical band-stop filter that will reduce signals in the broadcast band by 30dB (1000-fold) but leave those outside the band alone:  Will this help?

Taking the strongest signal (1160 kHz) and reducing it by 30dB means that instead of +3dBm it will now be -27dBm - better, but this is still about 53dB above our 160 meter noise floor.  What about the other signals on the band?  That signal at marker #4 (1230 kHz) will be reduced from -36dBm to about -66dBm - quite weak, but still audible, albeit a bit noisy.  What about those other stations that are weaker-still?  Those will get submerged reduced as well, getting down near the -79dBm "minimum signal level" for the RTL dongle.  Even by reducing this level, we still haven't done anything to bring up the 160 meter signals at all.

To make it work we will need to do more.  One way to do this is to apply selective (notch) filters to the strongest signals to reduce just those signals.  Looking at Figure 2, again, we can see that if we were to considerably reduce the strongest signals by 20-30dB, we'd "compress" the range between the strongest and weakest signals and allow us to be able to deal with them with our range-limited RTL dongle.  Figure 3, below, shows what the AM broadcast band looks like once we have done this:
Figure 3:  
The AM broadcast band - and the 160 meter band, with the YELLOW trace showing the signals before filtering and the CYAN trace after we have applied broadband attenuation to the AM broadcast band, selective attenuation to the strongest signals and some amplification overall.  As can be seen the range between the weakest and strongest signals is significantly reduced with the signal levels in the 160 meter band being increased enough to be above the dongle's noise floor.
Click on the image for a larger version.
In Figure 3 we can see the result of our work:
  • The strongest signals are reduced by about 20dB
  • The weaker signals are reduced a bit overall, but not as much as the strong ones owing to our attempts to selectively reduce only those that are strong.
  • The noise floor at 160 meters has been increased by 20dB.
  • The difference between the strongest broadcast band signals and the 160 meter noise floor is now around 40dB - within the (theoretical) usable range of the 8 bit converter in our RTL dongle.
In other words we have reduced the strongest signals by over 40dB, the weaker signals by 20dB and then brought everything back up by about 20dB.  Because our filter had little effect on the signals above and below the broadcast band, they came up by about 20dB as well.

How this may was done:

After using the Elsie program (there's a "free", somewhat cripped student version that's adequate for this task) and perusing my "Filter Design Handbook" by A.B. Williams I designed a "band stop" filter that was designed to cover the AM broadcast band - that is, provide at least 30dB of attenuation from about 540 to 1725 kHz.  Within this range, the attenuation can be much higher - greater than 60dB - but I was (theoretically) guaranteed that the minimum would be 30dB - and I ended up with the circuit, below:
Figure 4:
Diagram that includes a splitter to provide an unfiltered signal path along with the BCB reject filter and post-filter amplifiers.  Adjustable notch filters to attenuate strong, local stations are also included.
Click on the image for a larger version.

Circuit description:

Because one may want an "unadulterated" signal path for other purposes, a two-way signal splitter (L1/L2) is included:  The added 3dB loss is irrelevant with a decent HF antenna and modern receivers in terms of ultimate system sensitivity.  One branch of the filter is passed through a resistive attenuator that helps set the source impedance to the band-reject filter and again, this added loss isn't much of a concern on a decent HF antenna.

The AM BCB filter was designed for a nominal center frequency of 950 kHz and each series and parallel L/C circuit is tuned to that frequency.  The capacitor and inductor values were juggled to attain the closest standard values (or permit parallel combinations of standard-value capacitors) - this variation from the "ideal" having negligible effect on performance.  The capacitors used are all 5% NP0 (a.k.a. C0G) types for stability and the inductors are wound on T50-1 toroids using 30 AWG wire:  The values of the inductors were checked and adjusted with a known-accurate L/C meter after winding and it was determined that the calculated number of turns typically yielded inductance that was 5-10% high - a direction preferable to the other as adjustment simply required the removal of a few turns. (Yes, I wound toroids:  Lots and lots of toroids!)

Across the output of the band-stop filter is a set of simple series L/C notch filters.  I happened to have on-hand some inductors that were adjustable from about 8uH to 15uH and number crunching indicated that with just three capacitor values, the entire AM broadcast band could (more or less) be covered with a bit of overlap.  The first three notch elements (those at the right side of the string) used just a single capacitor as it was anticipated that there would be at least one station in the low, middle and upper portion of the AM broadcast band that would need to be reduced in strength.  The remaining four notches use two capacitors with computer-type push-on jumpers that allow the smaller capacitor to be selected for the upper portion of the broadcast band, the larger for the middle and the two together for the lower portion - or complete removal of the jumpers would disable the notch altogether.

The specific value of the inductor used for the notch filters is not important - it could be anything from around 4uH to 33uH, values calculated using an equation like:  L*C = 25330/((Freq in MHz)^2), where "L*C" is the product of the inductance times capacitance:  One simply divides this number by the amount of capacitance in pF (or inductance in uH) to get the "other" value.

When choosing inductors it is very helpful if its tuning has a 2:1 adjustment range:  If this is the case, three selectable capacitor values ("A", "B", "A+B") as described on the diagram will allow coverage of the entire AM broadcast band.  Unfortunately, it is getting more difficult to find small, adjustable inductors, so one must keep an eye out for them at surplus outlets or be prepared to modify 455 kHz IF transformers/AM tuning inductors such as those available from Kits and Parts (link).

Ignored up to this point are R5 and R6 - the "bypass" adjustment that reinjects signals back into the filter's output.  It may seem strange to build a filter that removes signals in the AM broadcast band - only to put them back again - but it does make sense if you do want to be able to receive such signals, but be able to strictly control their levels at the receiver input terminals - more on this later.
Figure 5:
 The "as built" AM/BCB filter module depicted schematically in
Figure 4, above.  Along the left edge is the splitter and to the right
of it is the AM band-stop filter with the "bypass" control along the top.
In the lower-right is the 7-element tunable notch filter assembly.  The
remaining circuits are the amplifiers/splitters that are downstream from
the band-stop filter.
Click on the image for a larger version.

Following the filter is a broadband RF amplifier constructed using the venerable 2N5109 transistor - a rugged, low-distortion device that is readily available from many suppliers.  This amplifier provides a reasonably low noise figure for HF (in the 5dB range) along with about 12-14dB of gain, overcoming the losses of the front-end splitter, attenuator and filter with a bit of room to spare.  Theoretically, the system noise figure at this point will be on the order of 9 dB, but considering the nature of the HF spectrum and the fact that even at 28 MHz an "acceptable" system noise figure is around 15dB, we aren't really suffering due to the losses in this signal branch.

Following this amplifier is another 2-way splitter - and then another amplifier with splitter:  This second amplifier with splitter - which is probably a bit of overkill - is useful for some types of wideband SDR devices, such as the RTL-SDR dongles:  When these are coupled with filtering and an adjustable attenuator, a bit of "excess" gain is handy to be able to throw away when setting the RF levels into them.

A balancing act:

As mentioned above, there is a "bypass" adjust that is used to allow the reinjection of AM broadcast signals back into the signal path and with the components shown the usable adjustment range is from about -35 to -15 dB.  As it turns out only a few of the signals that one is likely to intercept will be strong enough to cause problems while the rest are quite low.  At night the cumulative signal power of the myriad stations arriving by "skip" can cause a receiver like an RTL-SDR to become overloaded, but by having 10-20dB of added attenuation we can keep this total signal power down to a more reasonable level.

As can be seen on the YELLOW trace of Figure 3, above, there are a few stations that stick way above the general level of the other stations and the trick is to knock these down so that they are still "strong enough", but not so strong that the receive system is overloaded.  By using the notch filters, the strongest of the stations can be reduced by 20-30dB, putting their signal levels on par with the rest as is demonstrated by the CYAN trace if Figure 3.

There is a side-effect of such a simple notch circuit - that being that the signal a few 10s of kHz above the notch frequency can be boosted by 10dB or so.  Unless that signal is quite strong, this is of little importance - but if is a problem one can carefully park the notch between the two signals, attenuating the strong, lower signal adequately while moving the "peak" above the upper signal.

At this point the real balancing act occurs.  In the case of this filter assembly, the receiver itself was an RTL-SDR dongle that was intended to cover from about 460kHz to 2500 kHz which encompasses the entire AM broadcast band plus the 630 and 160 meter amateur bands.  This proved to be a bit of a challenge as the signals in the two amateur bands could be as low as a few microvolts while those in the AM broadcast band were noted to be in the hundreds of millivolts - a span of around 90dB, which would be a challenge even for a 16 bit A/D converter, not to mention the measly 8 bits of an RTL-SDR.

By knocking the strongest AM broadcast band signals down by 25dB with a notch and another 20dB with the band-stop filter we can get reasonably close to our goal.  Even with the overall AM broadcast band attenuated by 20dB, a reasonably sensitive and properly adjusted receive system can still receive some of the weaker stations during the daytime (which really aren't all that weak) and still yield a band full of signals at night!

The other part of the balancing act is to set the signal level at the input of our receiver - an RTL-SDR dongle:  We have "excess" signal coming from our filter/amplifier network which means that we can knock it down again with an attenuator - which for an RTL-SDR could simply be a 100-200 ohm potentiometer paralleled with a fixed resistor (to achieve something in the 50-75 ohm area - the actual impedance isn't really important) with the "wiper" side feeding into the receiver.  At this point one would increase the attenuation just to the point below where the RTL-SDR's A/D converter started to clip significantly - and this sort of adjustment would have to be done under various conditions.  In my case, it was checked during the daylight hours when a number of the local stations were running their full 50kW and again at night when these stations were running lower power - but there were many other stations of low-moderate strength being propagated via skip.

Also included in this balancing act is the adjustment of the "bypass" control:  Too little bypass, the weaker AM signals cannot be heard, but too much and the receiver will overload.  It need not be said that this set of adjustments is trial-and-error, but it is quite possible.

Real-world result:

Contained in Figure 6, below, is a trace captured from exactly the system described above as used on the Northern Utah WebSDR - link where you may see this filter in action, with the visible signals varying wildly depending on whether it is local day or night.  This receive system is connected to a large antenna (which is designed to work only down to 3 MHz, but still intercepts signals below this range quite will) and it passes through the splitter/filter/amplifier system depicted in Figure 4.
Figure 6:
An actual, off-air "waterfall" capture (during the local nighttime) from an RTL-SDR system that covers from about 460 to 2500 kHz - a range that includes the AM broadcast band and the 630 and 160 meter amateur bands.  As can be seen,
the band is packed with signals - most of them via ionospheric "skip".  Outside the range of 530-1750 kHz the
background noise can be seen with several signals being visible on 160 meters.
Click on the image for a larger version.

If you look at the larger version of Figure 6 you can see that there are quite a few signals present and their relative strength is indicated by the "brightness" of the traces.  A closer look will reveal something more:  You may notice that between the range of 550 and 1750 kHz, the deep background is rather "smooth", but outside this range it has a bit of granularity to it.  This is due to the attenuation of the BCB reject filter causing the background noise level within the 550-1700 kHz range to be below the sensitivity of the RTL-SDR dongle, but outside this range, the sensitivity is just high enough that the background noise on these frequencies is visible, allowing even relatively weak signals on the 160 meter band to be received.  Because of the limited dynamic range of the RTL-SDR, some of the weakest "local" AM stations aren't readily audible during the daytime - an inevitable consequence of the trade-off between strong-signal handling and weak-signal performance - but as can be seen in Figure 6 the spectrum is "chock full" of radio stations at night.

To achieve this result the RTL-SDR dongle is being run in "direct" mode and there is a 2.5 MHz low-pass filter and adjustable attenuator placed between it and the output of the BCB filter unit - the low-pass filter being used to remove the energy from those signals above the frequency range of interest.

Testing with the KiWiSDR:

The described filter was tested with a KiwiSDR as well and owing to its superior dynamic range and usable sensitivity, it could actually "hear" the ionospheric background noise through the filter - with the possible exception being frequencies immediately adjacent to the notches.

Without the filter, the KiwiSDR was on the "hairy edge" of overload during the daytime when several local AM stations are running 50 kW - and even if the A/D converter isn't being driven into clipping/overload, it could be argued that performance across the board could be subtly impacted.  The effects of the filter on the signal levels in the AM broadcast band and beyond can be seen in Figure 7, below:

Figure 7:
A screen capture of the waterfall and spectrum analyzer from a KiwiSDR showing signals/noise over the range of 400-2000 kHz.
As can be seen, the background noise is attenuated over the range of approximately 530-1750 kHz while the overall signal range of strongest AM broadcast band signals are pretty well-controlled.
Click on the image for a larger version.

Figure 7 shows the effects of the filter during the daytime.  The background noise can be seen "through" the filter which means that there are no stations that are being made inaudible because of it - but at the same time the signal levels of the strongest stations are "tamed" significantly, being reduced by 20-30dB via the tunable notches.


As can be seen, it is possible to deal with wide signal ranges when using a receiving device that has intrinsically poor dynamic range - but it depends on several things:
  • The signal levels need to be fairly predictable.  In this case, the signal levels on the AM broadcast band are very consistent - at least during the the day when the majority of the local "powerhouse" daytime-only 50kW stations are on the air.
  • Outside the filter's range the signals are typically much weaker owing to the fact that they are being propagated via shortwave from relatively low-power transmitters.
  • The ability to manage the signal levels overall:  The "compressing" of the range of the signal strength of the "local" AM stations with band-reject and notch filters helps out a lot!
Admittedly, this method is quite complicated, but it is do-able and in spite of its complexity, it allows very inexpensive hardware to be used to cover a fairly wide frequency range - in fact, if the goal was to use an RTL-SDR dongle to cover just the AM broadcast band and there were any nearby AM stations, you'd have to apply at least some of the above techniques to make it work well if your goal was to allow the reception of both local and distant stations.


This page stolen from ka7oei.blogspot.com

Thursday, February 8, 2018

Un-Bricking an RTL-SDR Dongle after an EEPROM write

Figure 1:
One of the better general-purpose "RTL-SDR" receiver dongles available,
with a TCXO for better frequency stability and built in filtering/amplification
on the "Direct Sampling" path to allow HF reception - among other
things!  The entire point of this exercise was to give the RTL-SDR
dongle a unique serial number, seen in the picture, so that it could be
uniquely identified if more than one were plugged into the same computer.
The dongle shown above is sold by "RTL-SDR.com".  It seems to be
no more or less susceptible to "bricking" than any other RTL-SDR dongle
using the same chipsets, so this fix may apply to other versions as well.
Click on the image for a larger version.
The other day I was using the "rtl_eeprom" utility to change the serial number of an RTL-SDR dongle (they all ship with serial number "00000001") to make it easier to identify it when it is online with other units - and I "bricked" it.

This seems to be a common occurrence - the causes (possibly) being:
  • Unplugging it too soon after programming it.  Perhaps one should give it a slow "10" count before unplugging it?
  • Changing more than one parameter at a time.
  • Changing something other than the serial number.
Figure 2:
The SOIC-8 to DIP header (no EEPROM) in the
programmer.  This particular carrier came from
"qrpme.com" although many different types
are available for cheap on EvilBay.  The
programmer in this case is the "MiniPro".
Click on the image for a larger version.
I probably was guilty of doing the first two.  The remedies suggested online seem to be limited variations on a theme, such as:
  • On the EEPROM chip, short the SCL and SDA pins (5 and 6) together while plugging it in - then removing the short and programming it.
  • Shorting the SDA pin (pin 5) of the EEPROM to ground (pin 4) while plugging it in - then removing the short and programming it.
Neither of the above worked for me as the device was steadfastly not being recognized on the machine that I was using.  Interestingly, it was still usable on another machine with the "SDR#" program - but it wasn't being properly identified by the operating system.

On a hunch I plugged in a "good" RTL SDR (one that I hadn't bricked) and downloaded the contents (using the "-r" option) and saved it with a .BIN extension as raw data using the same rtl_eeprom program.  In looking at this file with a HEX/ASCII editor (such as the one built into the "PonyProg" program) I could see the data (some ASCII text) which seemed to comprise a device ID and the serial number.

Using a hot-air rework station I removed the 24C02B EEPROM (256x8) chip from the dongle and soldered it to an 8-pin DIP-to-SOIC-8 header and put it into a programmer.  Interestingly, when I looked at the EEPROM's contents after having done this they were all zeroes - clearly something had gone wrong in the write process!

Importing the .BIN file into the programming software I changed the serial number to what I'd originally wanted it to be and programmed it, verifying that it "took".  I then unsoldered the EEPROM from the header and put it back in the RTL-SDR dongle, again with the hot air rework tool.

Success!  The dongle was working again - with the "new" serial number.

Figure 3:
The location of the EEPROM chip within this particular
RTL-SDR.  Using a hot-air rework tool it took only seconds
to remove the chip and plop it onto the header in Figure 2
so that it could be reprogrammed.  Many RTL-SDR
dongles have similar EEPROM chips, but if you happen to
brick yours when changing the EEPROM contents it will
be up to you to find it on the circuit board if you open it up.
Because fewer than 128 bytes are used, the EEPROM may be
of larger or smaller capacity than the 24C02 mentioned
on this page.
Click on the image for a larger version.
For your edification, the .HEX file is included below, with the serial number of "00001234" which visible when editing it in the programmer software.  In addition to this serial number, the IR receiver has been disabled, since it wasn't needed - and isn't used at all with these particular RTL-SDR dongles.  I won't include pictures and details on how to solder and unsolder or use an EEPROM programmer - or tell you which one to use (there are other sites for that) but I hope that it is useful nonetheless.  Having said that, the "PonyProg" programming software is popular and one can homebrew a quick programmer with it.

Anyway, it saved me $20 in not getting another dongle - not counting my time!

* * *

These are the contents of a .HEX file that can be programmed into the EEPROM on an RTL-SDR dongle to "un-brick" it.  As noted above, you will need to be able to program the chip - probably out of circuit - to effect the repair.

Simply copy and past the hex data below into a plain text file and rename it with a .HEX extension:


In the above file, the serial number is in plain ASCII as "00001234" starting at address 0x37 with the last character at 0x45, skipping every other byte with a null (0x00) between each character.  Again, I'd recommend using a .HEX editor with an ASCII pane such as the one in the "PonyProg" program to better-visualize its contents.  There are clearly fewer than 256 bytes used which means the smaller (128x8) 24C01 EEPROM chip could have been used, so be sure to check which device is being used before programming.


This page stolen from ka7oei.blogspot.com