TV Tuner on USB Stick


There's an abundant supply of cheap TV tuner sticks for viewing broadcast television on a home computer. Some of these small fish-stick sized devices can be repurposed for receiving a significant swath of radio spectrum.

Which One?

The sticks we care about have the Realtek RTL2832U chip as the USB interface and a Rafael Microelectronics R820T or R820T2 as the tuner. There are others - including other Realtek based designs - but those won't work for our application.

Since 2012, folks have used programs like SDR Sharp with Virtual Audio Cable or VB Cable to feed discriminator audio into decoding applications like Unitrunker.

How to Make a $19 Police Radio Scanner

This "mash-up" of different programs is a bit of a mess. Updating Unitrunker to talk directly to the USB stick should streamline some of this. Talking directly with the device also allows Unitrunker to know the frequency of the active control channel.

Here's some technical background on the chips inside these USB sticks.

Realtek RTL2832U

This chip has a USB interface, ADC (analog to digital converters), IQ demodulator, 8 general purpose IO pins and an I2C (eye squared see) port. The GPIO pins and I2C port are used to control a separate tuner chip. The characteristics of the tuner chip determine how the RTL chip must be configured.

The ADC is fast but shallow. Fast is up to 3.2 million sample pairs per second (or 6.4 megabytes per second). Yes, that's mega-BYTES per second. Your 100 megabit ethernet adapter would barely keep up. Shallow meaning only 8 bits of resolution. The RTL makes up for this with AGC. It can scale the incoming signal to capture what sits just above the noise floor. A USB 2.0 port is required. USB 1.1 is limited to 12 megabits per second maximum so your PC must have one or more USB 2.0 ports to keep up. In practice, sample rates of 2.56 million samples per second are sustainable without data loss.

The Realtek's baseband ADC includes an AGC that you can turn on or off as needed.

If your system has both USB 2.0 and 3.0 ports, save the USB 3.0 ports for actual USB 3.0 devices. USB 3.0 ports on Windows 7 use proprietary drivers that might not work well. If you run into problems, switch to a USB 2.0 port.

Rafael Microelectronics R820T and R820T2

The R820T can tune from 24 Mhz to 1.7 Ghz. It down-converts the incoming signal to an IF of 3.57 Mhz. This chip also has its own AGC. It works very well for weak, distant signals. For urban environments, you'll do better to turn this off and use manual gain. There are three separate variable gain settings inside the R820T: LNA, Mixer, and VGA. The program adjusts these in aggregate as one unified gain setting. The manual gain is in tenths of a decibel. A setting of 300 is roughly 30.0 dB. Range is zero to 500 (0 to 50.0 dB).

As of late 2013, this seems to be the most common tuner chip packaged with the Realtek based terrestrial digital TV tuner sticks. It also seem to be the cheapest. If you can wait two or three weeks, order from Asia. Expect to pay double (but faster delivery) if ordered in North America. If you can, order more than one.

The R820T2 is a new improved replacement for the R820T. They are functionally identical. The 'T2 offers better performance above 1.0 Ghz. Since there is no trunking above 1 Ghz, this distinction makes no difference for the purpose of monitoring trunked radio sites.

Other Tuner Chips

You will find sticks with other tuner chips in the market place. These include the Elonics E4000, the Future Communications FC2580 and the Fitipower twins: FC0012 and FC0013. These are fine chips but the program does not support them. Why? It takes time to obtain parts, write new supporting code and test said code. It's the same reason I don't yet have native support for AirSpy, modern WinRadios, Fun Cube Dongles, Hack-RF, SoftRock, and other SDR devices. For now, the R820T devices are cheap and plentiful. Someday I may be able to support the R828D (very similar to the R820T) and perhaps the Elonics E4000.

Use the Virtual Audio Cable technique above to feed discriminator audio from one of the these other devices into Unitrunker.

Compatiblity & Other Software

If you buy one of these things, you *should* be using it with other programs. In fact, you need to.

You must validate your stick's driver installation and calibrate the stick before using it directly with Unitrunker. If, for example, the program works with SDR#, it will most certainly work with Unitrunker. Most of these programs use a library called rtl-sdr (or an ExtIO plugin which wraps rtl-sdr). It's built on top of libusbx (which in turn is built on top of Microsoft's WinUSB). Unitrunker does not use rtl-sdr or libusbx, but it *does* use WinUSB. The nice thing here is they share the same driver stack so you don't need to run Zadig every time you switch applications.



Your USB stick may come with OEM branded Windows software for watching TV or listening to broadcast FM stereo. Once you've installed the drivers required by the above software radio applications, your OEM windows software will quit working. Just be forewarned. In fact, go ahead and un-install the OEM Windows software.

Unitrunker talks to Realtek RTL2832U based USB sticks through Microsoft's WinUSB library. WinUSB is available on Microsoft Windows XP Service Pack 2 and later (including Windows 8.1).

Basic installation instructions are here. As you'll want to install other SDR software, follow the "instructables" link above to get SDR# up and running. If you have two USB sticks, be sure to calibrate both. The two sticks' calibration factor will most likely differ. You'll need to know this number when you configure the USB stick in Unitrunker. Calibration is easier than it sounds. Tune SDR# (or LinRad or HDSDR) to a known control channel in your area. Let it sit on the control channel for a minute or two to allow the stick to heat up to normal operating temperature (it will get warm to the touch). Adjust the correction factor until the "gutter" in the waterfall display lines up with the tune marker (a thin vertical red line in SDR#).

To manually tune your RTL stick, enter a frequency value in the "Park" field. The mute checkbox can suppress speaker audio. Use the Window's volume control.

Multiple Signals = Multiple Receivers

Unitrunker has supported multiple receivers for some time now. Realtek / R820T sticks can operate as a source for signal decoding or voice following. Because the sampling bandwidth of these devices is so wide, it is theoretically possible to decode two or more signals from the same device. The downside is wide bandwidth means high sample rate which means high(er) CPU load. To keep bandwidth (and CPU load) low, Release 30 of the program limits you to one signal. To decode (or listen to) a second or third signal, you had to buy additional devices. One user reports using eight RTL sticks on a single USB hub. As of Release 31, you can configure up to 8 VCOs and choose a sample rate from 0.96 msps to 2.56 msps.

Clock Accuracy

Timing accuracy can be measured in PPM - parts per million. A 1 megahertz signal that is off by +/- 1 PPM could be 1,000,001 or 999,999 hertz. A 1 hertz discrepancy is harmless for radio reception. However, that discrepancy is magnified with higher receive frequencies. A 1.0 PPM discrepancy at 860 Mhz is 860 hertz - enough to produce an audible difference. A 10.0 PPM discrepancy in timing accurancy works out to 8.6 kilohertz. That's enough to ruin reception of most analog and digital signals.

The timing reference for the R820T comes from a 28.8 Mhz quartz crystal. The makers of these RTL sticks use consumer grade components with 50 to 100 ppm (parts per million) accuracy. Thermal drift can be another several ppm as the device warms up. As mentioned in the installation section above, you'll need to calibrate each RTL stick. For prolonged, unattended operation or mobile operation where ambient air temperature varies, you may want to modify your RTL stick or purchase one already modified.

The modification involves replacing the crystal with a high quality crystal or a TCXO - temperature compensated oscillator - module. Expect to pay more for this one part than for your whole RTL stick.

General Tips

There are three gain related settings. Baseband AGC turns on AGC inside the Realtek chip. The other two control the gain of the tuner chip. The gain value can range from 0 to 500. This gain value is used when the tuner auto-gain is turned off (unchecked). When auto-tuner gain is checked, the tuner provides it's own automatic gain control. The tuner's AGC is "hot". It's very sensitive, in some cases, too sensitive. Things get complicated when there are strong nearby signals. Too much gain can saturate the front end. I suggest using tuner AGC in rural areas and manual gain in urban environments. I usually leave baseband AGC on. Your results will vary.

SDR# - even when not decoding - will latch onto the RTL USB device, preventing other programs from accessing your RTL stick. Select a different input device in SDR# to force SDR# to relinquish the RTL device.

The small dipole antenna shipped with the USB stick has a magnetic base. Normally, you'd place it in an upright position. I've noticed that reception of weak signals improves with the antenna tilted or pointed sideways (clinging to a metal cabinet, for example). Changing the direction the antenna is pointed also makes a difference.

The antenna cable has an MCX connector that snaps into the USB stick. The connector can break under a strong side-force. Tripping over the antenna cable will most likely destroy the connector and leave your RTL stick deaf. Consider ordering a spare antenna.

© Copyright 2013, 2014, 2015 Rick Parrish