SDR Scanner How-TO
by Harrison Sand


In this guide I will explain how to build an inexpensive SDR that can be used to receive police, fire, taxi, and other digital radio transmissions. I will do my best to explain the steps in detail, and provide further resources to help along the way.

I have to give a lot of credit to the creator of the following guide: This how to is based largely from that, and other sites listed in the Resources section.

Demo Video


Download and extract Zadig (you will need a program like WinRAR or 7-Zip). Take note if using Windows XP you will need to download the XP version. Connect the receiver to your computer and ignore/cancel any attempts Windows tries to make to automatically install drivers. In Zadig select “Bulk-In, Interface (Interface 0)”. You may need to go under options and list all devices. Select WinUSB as the driver to install and press Install/Replace Driver.

Next to Driver it should now say WinUSB and the version number. I don’t believe it is required, but if you like you can do the same for Interface 1.

Install SDRSharp

Download the modified SDRSharp package and extract it. Inside the folder is a file called rtlsdr.dll that needs to be replaced. We will get the updated version from inside Use the file in the /x32 folder. Also note contains executables that can be helpful in troubleshooting should you encounter any driver issues.

If you like you can test to make sure your radio is working properly. Open SDRSharp, set the front end to “RTL-SDR / USB” select WFM and type in a known FM radio station to the center/frequency boxes and press play. For example, if you would like to tune to 97.9 type in 97900000. You can drag the red line to align with the stream in the waterfall.

Configuring Digital Speech Decoder (DSD)
Virtual Audio Cable

Install Virtual Audio Cable as it is required to route the audio out from SDRSharp into DSD. Using the trial version will work reasonably well however since it periodically adds a voice over the stream you may or may not have some decoding errors. A new Virtual Audio Cable device should now appear under your playback and recording devices.
Windows Sound System Configuration

DSD uses the Windows default recording device as an input. Ensure Virtual Audio Cable Line 1 is set as the default recording audio device in the windows sound properties.

Install Cygwin

Install Cygwin using all of the default settings. Once installed browse to C:/cygwin/bin and copy the cygwin1.dll file to the same folder the DSD program will be in.
Download DSD

Download the Windows Binary and place it in the same folder as the cygwin1.dll file.
Configuring UniTrunker

A trunked radio system is simply a system of radios in which the frequencies used are dynamically managed by a central controller. Most police and fire radios use a trunked radio system. Unitrunker decodes the control channel, and tells the receiver which frequency to tune to. After downloading and installing, run UniTrunker. Choose “First Time Installation” and Continue.

Two receivers must be configured in UniTrunker, a ‘Signal’ receiver used to receive the control channel signal, and a ‘Control’ receiver used to receive the voice channel transmissions. This can be a little confusing as the signal that the ‘Signal’ receiver is receiving is typically called a ‘Control Channel’.

Signal Receiver

To configure the signal receiver, press the plus button on the top and select “Signal”.

The only hardware required besides a computer is going to be a SDR receiver. The bulk of these radios are just USB TV tuners, rebranded and sold as SDR receivers. Many are available on Amazon and eBay. A quick google search should turn up some more as well.

In this guide I will be using a Newsky TV28T v2 with a RTL2832U & R820T tuner.


Please use the normal download link if possible to receive the latest software packages. Secondary links are provided for redundancy.


Software defined radio application. Allows for tuning and receiving of audio from receiver.
A modified version will be needed that is capable of connecting to UniTrunker.

Download (secondary):

rtlsdr.dll - Updated file for SDRSharp

Download (secondary):

Zadig - Version used:

Allows for receiver driver installation.

Download (secondary):

UniTrunker - Version used: preview

Provides decoding support for trunking control channels and issuance of tuning commands.

Download (secondary):

Virtual Audio Cable - Version used: 4.10

Provides audio routing between components. Trial available, purchase for $25.

Trial Download (secondary):

Digital Speech Decoder (DSD) - Version used: 1.6.0 Beta

Provides digital voice decoding support.

Download (secondary):

Cygwin -Linux support for Windows. Required by DSD.

Download: (secondary):

Microsoft Visual C++ 2010 Runtime

Required by remote.dll

Download (secondary):


Most of the information in this tutorial is stuff pulled together from the web. Here are some great places to get more information.

SDRSharp Quick Start Guide:
Digital Speech Decoder (DSD) Guide:
Unitrunker Configuration Guide: <-- See for two receiver configuration
Massive Radio Frequency Database:

Configuring the SDR Receiver

Install Drivers

For the Audio Port setting, select the Virtual Audio Cable created earlier. Set the Sample Rate to 48000, and check all of the decoding protocols.

Control Receiver
To configure the Control receiver, press the plus again and select “Control”.

Set the Model to “Debug”, and select all three control protocols: P25, ProVoice, and VSELP.
Finally, in the main UniTrunker options screen, click the Enable checkbox in the Listen section:

There should now be two receivers listed under the Receivers tab. One control and one signal. Select each and press the play button.

Finding a Control Channel

Before starting SDRSharp, open the ‘sdrsharp.exe.config’ file and ensure this line is set as follows:

<add key="minOutputSampleRate" value="48000" />

Open SDRSharp and configure with the following settings:

  • set the radio to NFM
  • Press the “Front end” button, disable RTL AGC, and enable Tuner AGC
  • set the Filter bandwidth to 12500
  • ensure Squelch, Snap to grid, Correct IQ, and Swap I & Q are all disabled
  • under the Audio dropdown ensure Filter Audio is unchecked, and the audio output is the Virtual Audio Cable.
Press Play.

Now we need to locate a control channel. This part can be a bit tricky, but after some practice it gets easier. You can start by looking for channels in the 850-900MHz range, but another good place to start is in the frequency database.

Browse to your area and find the section labeled “Trunked Radio Systems”. Browse through the systems and find one that has a good amount of information. See the example below.

We are interested in the control channels, shown in red and blue.

Test each control channel until you find one you can receive. For example, if I want to test 856.21250a then I need to enter 856212500 into the Frequency and Center boxes in SDRSharp. (Note the extra 0, and no decimal point)

Control channels will be a continuous stream in the waterfall window, unlike voice transmissions which are intermittent.

If you cannot find a signal, try other trunked systems listed in your area, listed in surrounding areas, or by manually browsing the spectrum.

If you find that a control stream is to the near right or near left of the red line after typing in a known frequency, manually move the line to be in the center of the stream. It may be helpful to zoom in. This problem will be dealt with under the calibration section.

After about 10-15 seconds of being tuned to a control channel, a new window should pop up in UniTrunker.

After a few seconds to a few minutes several frequencies should populate and channel activity will start scrolling by. If you see a red “Frequency Needed” and 0.00000, wait a few more minutes to see if it goes away. If not, click on the small calculator icon at the top and then standard.

Calibrating the Tuner

Because this tuner will be tuned programmatically, it is essential that it is correctly calibrated.

Enter the known control frequency (either from radioreference, or the red frequency listed in UniTrunker) in the center and frequency boxes.

You may see that red line not aligned with the channel. Open the “Front End” dialog box and adjust the Frequency correction value until the red line is centered onto the channel.
Lock UniTrunker to the Control Channel

After you have found a control channel and calibrated the tuner you will need to lock UniTrunker down to only receive that control channel. Everything would technically work without this step, but it helps UniTrunker find the control channel faster as it switches between the control and signal.

Double click the Signal line under the Receivers tab and change the “Lock Mode” to Dedicated.

Double click the Control line and change the Park frequency to the control channel.
In my case it’s 856.21250.

Setup UniTrunker to control SDRSharp
Copy Remote.dll from the SDRSharp directory into the UniTrunker installation directory. Remote.dll requires Microsoft Visual C++ 2010 Runtime, so you will need to download and install that as well.

Close and then reopen UniTrunker. Ensure SDRSharp is tuned to the control channel and UniTrunker is receiving the control signal.

Under the Trunking tab in SDRSharp set the “UniTrunker Install Directory” to the directory containing the ‘sdrsharptrunking.log’ file. This is the file that UniTrunker makes to tell SDRSharp which channels to tune to.

NOTE: The code currently makes the poor assumption that you’re running UniTrunker directly from the install directory. If you run it from the shortcut, you will find the ‘sdrsharptrunking.log’ file in your %AppData% directory, typically C:\Users\<username>\AppData\Roaming\UniTrunker. This is the folder you need to select, and because it does not see UniForm.exe or Remote.dll in the same directory, it may complain. Ignore that.

Check the “Delay Re-Tune Until Call Completes” box. This setting controls the level at which SDRSharp will retune back to the control frequency after an audio transmission ends. This value will need some adjusting as you go along, but to roughly set it look at the peak signal strength of the control channel, in my previous screenshots you can see it’s around -15db. Subtract another 15db or 20db and set it to that number.

Set the “Tune to Control Channel” to the known control channel frequency.

Start Listening!

At this point we can launch the Digital Speech Decoder executable and check the Enable box under Trunking in SDRSharp.

You will more than likely need to adjust the AF Gain value under the Audio dropdown. As a general rule you want to try and get the inlvl value in DSD to around 30% for the best quality audio decoding. Note that your computer may work better at another value, so experiment a little.

In my case, setting AF Gain to around 60% worked well.
Also experiment with adjusting the AGC settings in the “Front end” dialog box. Try enabling/disabling the RTL AGC, Tuner AGC, and RF Gain values to get the best signal. Note if you change the AGC values you will likely need to change the “Delay Re-Tune Until Call Completes” value as well.
Go Further
Keep in mind this setup is not ideal; it’s a basic setup using minimal components. You will not receive all transmissions and there can be a delay when retuning back to the control channel. For an optimal setup you will want to have two SDR receivers; one dedicated to the control channel and one dedicated to the signal. For information on how to configure this take a look at the UniTrunker Configuration Guide under resources.
I read somewhere that connecting the USB receiver to your computer through a USB extension cable can help reduce interference. I had an old cable lying around from a wireless mouse and it seems to work well.
Also, read over the other resources, they can help you better calibrate your setup.

Droning On: The Anatomy of A Drone

April 29, 2014 By Adam Fabio

These last few weeks I’ve been ordering parts for the Hackaday Testbed, a basic quadcopter to be used here at Hackaday. The top question I see when surfing multicopter forums is “What should I buy”. Which frame, motors, props, speed controller, and batteries are best? There aren’t easy answers to these questions with respect to larger quads (300mm or more) . There are a myriad of options, and dozens of vendors to choose from.

Advice was simple in the pre-internet days of R/C planes and helicopters: just head down to your local hobby shop, and see what lines they carry. Hook up with a local club and you’ll have some buddies to teach you to fly. This advice still holds true to a certain extent. Some hobby shops carry the DJI and Blade lines of multicopters. However, their flight control systems are closed source. If you really want to dig in and adjust parameters, you have to either buy a combo package with an open source flight control system, or buy every part separately. Unfortunately, very few local hobby shops can afford to stock individual parts at that level.

In the online world there are several “big” vendors. The classic names in the USA have always been Tower Hobbies and Horizon Hobby. Some new US-based companies are All e RC and ReadyMadeRC. Several Chinese companies, including HobbyKing andRcTimer, maintain warehouses in several parts of the world. I’m only listing a few of the big names here. If I’ve left out your favorite site, drop some info in the comments section.

The killer with many of these companies is supply. A popular component will often go out of stock with no hint as to when it will be available again. When it comes to single parts like batteries, it’s easy to just order a different size. But what about motors or speed controls? These components need to be matched on a multicopter. Changing one for a different model means changing all of them, so it pays to buy a spare or two when ordering! Click past the break for a breakdown of some multicopter parts.


Power systems have been a tough problem since the early days of radio controlled planes. Picking the right power system is a lot like picking the correct microcontroller or op-amp for a circuit design. There are a seemingly endless number of parameters to be taken into account. Once you break it down though, it isn’t too hard.

Motor part numbers are often encoded in terms of stator or can sizes. A DJI 2212 motor means it has a 22mm diameter stator which is 12mm tall. This isn’t a hard and fast rule though, so don’t live by it. The first and foremost parameter in a motor is KV - Thousands of RPM per Volt. Theoretically, an 800KV motor will turn 800 RPM on a 1V power source. A 14.8V 4S LiPo battery will spin the motor at 11,840 RPM. It’s important to remember that this is a no load rating. The motor’s RPM will drop significantly when it’s spinning a prop.

The next number to look at is the voltage the motor is rated at. Sometimes this value is represented in volts, and sometimes in cells, which usually refers to the 3.7V nominal voltage of LIPO cells. A motor capable of handling a voltage of 4S means it’s good for 4 LiPo cells in series, or 14.8V.

For the Hackaday Testbed, I went with the NTM Prop Drive 28-30S 800KV / 300W motor. These motors are low cost, and should have plenty of power for our quadcopter.
Speed Controls:

In the old days, R/C plane throttles were controlled by a servo moving a switch. It was full throttle or nothing. Thankfully those days are gone, and we have cheap MOSFETs around to give us digitally controlled throttles for our brushless motors. Speed controls are generally rated by maximum voltage and current. Figuring out which to buy is simply a matter of matching one to the motor you plan to use. Sometimes manufacturers overstate their speed control’s capabilities. Therefore, it’s often a good idea to leave a bit of overhead, lest you let out the magic smoke.

One more parameter to look at is SimonK firmware. Simon Kirby figured out that many cheap speed controls were running Atmel microcontrollers. He reverse engineered a few boards and wrote his own open source firmware with features like soft start, calibration, and easy parameter updates. Make sure the speed control you choose is compatible with SimonK firmware. Even if it is compatible, check how easy it is to flash the controller. Some controllers have easily accessible testpoints, others require soldering directly to the micrcontroller.

For the Hackaday Testbed, I went with the HobbyKing Blue Series 30Amp controller.


Much like speed controls, batteries will depend on the current and voltage requirements of the prop and motor combination. Lithium Polymer battery packs are sold with three basic parameters: Cell count, capacity, and maximum current. Size and weight are also important – don’t buy a battery so big your quadcopter can’t lift it!

3S and 4S batteries are common in multicopters these days. Maximum current is usually stated in therms of “C”, or the capacity of the battery. A 4000mAh battery with a rating of 45C is stating that it can supply 4 amps for 1 hour, or a maximum current of 180 Amps. It goes without saying that drawing 180 Amps is not a good idea for the overall longevity of the battery.

For the Hackaday Testbed I went with Zippy 35C constant / 45C burst 4S 4500 LiPos.

Multicopter Propellers can confuse even veteran pilots. Props are rated with two numbers. 9×6, 8×4, or 10×4.7 are all common propeller sizes. But what does it all mean?

The first number is diameter. The second number is pitch. Diameter is simple. A 10×4.7 propeller will have a diameter of 10 inches. Pitch is a bit harder. The pitch number of a propeller describes how far the propeller will move forward in a single revolution. If you spin a 10×4.7 propeller it will theoretically pull your plane (or quadcopter) forward 4.7 inches. A 10×6 propeller would pull forward 6 inches. Things get even more complex – how different is a 10×4.7 vs a 9×6? The answer is not much.

For the Hackaday Testbed, I’m going to test several propellers, starting with a conservative 10×4.7.
Simulating the drive system:

While propeller and overall drive system performance can be calculated by hand, a computer can be a big help. There are several software packages available to aid with propeller and drive system selection. eCalc is a website based calculator with a free trial and a subscription pay version. Make sure you select the correct calculator, as they have different versions for planes, helicopters, electric ducted fans, and multicopters. A second option is MotoCalc, which is downloadable software. MotoCalc also has a time limited trial. Freeware options are PropCalc and DriveCalc.

Nothing beats real world tests though. Years ago, the Astro Wattmeter created a small revolution in the market. The Wattmeter plugs inline with the battery and measures total current draw and voltage of the drive system. From these values it can calculate power, mAh used/remaining and several other values. One thing to remember is that a propeller will perform differently on a test bench (Static thrust) vs in the air (dynamic thrust). To this end, there are on-board Wattmeter style systems which can either send telemetry data back, or store it for later download.
If I only had a frame

Multicopter frames come in a multitude of shapes and sizes. The most basic difference between them is the number of motors they carry. Tricopters use three motors in a “Y” formation. A servo tilts the motor at the bottom of the Y to achieve yaw control. One nicety of the tricopter configuration is that all propellers turn in the same direction.This means standard airplane props can be used all around.

Moving up the chain is the quadcopter, which uses four motors and props. Quads (and all sizes beyond tricopters) use matched sets of clockwise and counterclockwise rotating propellers. When all four motors are rotating at the same rate, yaw due to torque effect is canceled out. Increasing throttle to one set of motors while decreasing to throttle on the other set allows for yaw control.

Moving beyond the basic multicopter types, we have the hexacopters and octocopters. The advantage to Hex and Octo format is of course more power! Hexes and Octos can lift more, and in some cases can keep flying if a single motor fails. Hexactopers can be laid out with six arms from a central point, or they can be in the Y-6 formation. Y-6 is essentially a tricopter with stacked counter rotating props at each point of the “Y”. Similarly octocopters can be an 8 pointed star, or an X-8 formation. Y-6 and X-8 formations offer reduced weight due to less arms, however stacked propellers are always somewhat less efficient than two propellers operating in clean air.

Another decision to make is materials. In this case the sky is basically the limit. Multicopter frames can be as simple as a couple of crossed sticks or as complex as interlocking plates with tubes of woven carbon fiber. Kits can be purchased, or designs can be hand made. If you’re scratch building, the local hardware store is often a great source of parts. I’ve seen everything from towel rod to PVC pipe pressed into service as part of a multicopter frame.