Yet Another Doppler Direction Finder w/ Teensy DSP

An update on WA2EBY's May/June 1999 QST Homebrew DDF/Radio Direction Finder

Similar projects worth following
Doppler radio direction finder using Teensy and DSP to replace switched capacitor filter and random logic. Use a Neopixel ring for a display.

Radio direction finding (RDF), T-hunting or fox hunting has been a hobby in the ham radio world for a long time.  If you've ever seen a car equipped with a big, crazy looking antenna, a square antenna array or people running around with funny antennas and radios, they are probably T-Hunting.  If it's a weekend it's probably hams and on a weekday it's someone looking for a transmitter for another reason.

T-hunting is still a thing with communities of hunters.  In San Francisco there is rdf-sf and there may be a club in your neighborhood. is a great source for fox hunting information and LA area hunts.

Google is your friend for Doppler Direction Finding theory of operation.  The May and June 1999 QST issue with WA2EBY's article on  a radio direction finder is based on simulated Doppler.   For even more information find a copy of "Transmitter Hunting - Radio Direction Finding Simplified" - available in dead-tree form only.   The 1999 article is an update to WA4BVY's early 80's design.  It's been 20 years so a technology update is overdue. 

The WA2EBY DDF system consists of an antenna array, an antenna switch and controller/display composed of nine chips (74HC),  a couple of transistors, a voltage regulator and a bunch of passive parts.  The controller electronically "rotates" the antenna array by sequentially switching one antenna on after another in a circular fashion.   The switching imparts a Doppler tone FM modulated on a received signal.  WA2EBY's design used cheap 1n4148s for switches - at the time PIN diodes could be over $10 and the system needs 8.  PIN diodes have become commodity parts and the BAP64-03 PIN diodes I'm using are $0.09.   In addition the 1n4148 are rated for 75 V and the PINs are 175 V.  The WA2EBY design rotates the array at a fixed 500 Hz but I have designed mine to have a variable Doppler frequency from 2,000 Hz down to whatever.  The controller uses a switched capacitor filter to make a very narrow band signal to measure phase.  An analog zero crossing detector was used to measure the time from an antenna switching to derive the Doppler phase angle and signal Angle of Arrival.  

My update is based on a Teensy to replace random logic.  (Originally using Teensy 3.2 - now a 4.0).  At first the Teensy Audio Library was used to replace the switched capacitor filter with a narrow digital filter and an outboard comparator was used for the time difference measurement.  I have found that approach limited in accuracy.  I an now working on a "DSP Version".  The big motivation is the elimination of considerable hardware and performance improvement.  The filters are implemented with the Goertzel algorithm which is a simplification on computing DFT bins on the frequencies of interest.

One problem I ran into was the lack of metal on top of my cars.  The enormous glass sun roof's lack sufficient metal to be a useful ground plane.  I am now building a vertical dipole array.  It is electrically working on VHF and needs to be sturdier before driving with it.  

The Neopixel is a nice update of the '80s ring of plain old blinken' LEDs.  A single white pixel points direction and the rest of the array displays signal quality.  There will be a heading readout.  

Testing - I am using a cheap 0.5 W FM transmitter module for a test signal.  I fired everything up and the display was crazy random.  I have come to learn that was to be expected.   I am testing in a small office with metal filing cabinets so there are lots of reflections.  Even my movement in the office makes a difference.  I did some testing on the major functions and everything looks right.   I wanted to test with a RF signal generator that somehow was synchronized to the antenna...

Read more »


Latest codes updated for Teensy 4

ino - 14.96 kB - 02/07/2020 at 19:36



PCB with two BNC connectors and two PIN diodes connected with a resistor for a DC path.

Adobe Portable Document Format - 10.39 kB - 07/31/2019 at 04:40



Controller board schematic with Teensy, jacks and rotary encoders. All filtering and heading measurement is via DSP unlike the Roanoke systems using zero crossing measurement.

Adobe Portable Document Format - 102.96 kB - 07/14/2019 at 03:53



Updated hardware with overkill analog band-pass filter from the 1999 WA2EBY article. I thought it would be an interesting test to see if system performance could be improved with additional filtering.

Adobe Portable Document Format - 125.27 kB - 04/15/2019 at 07:15



Selects an antennas based on input at P1. By selecting one of the four antennas in a rotating fashion a pseudo-Doppler tone is added to the received signal. The Doppler frequency is set by the rotation rate.

Portable Network Graphics (PNG) - 25.93 kB - 02/19/2019 at 21:42


View all 8 files

  • Work continues on the vertical array

    Martin06/07/2020 at 23:42 0 comments

  • Project update

    Martin01/09/2020 at 08:03 1 comment

    Long time no post.  Been busy upgrading from Teensy 3.2 to a Teensy 4.0.  The 4.0 tries to be pin compatible with the 3.2 and so far everything has worked electrically.  It took a while for all the c libraries used to catch up.  The work was worth it.  The Teensy 4.0 is like a buzz-saw in comparison.  

    I've been finding out about the strength limits of 3D printed PLA parts.  I have tried mounting the vertical array and broke the connectors for the bike rack.  Back to the drawing board.  

  • Fiberglass and 3D Printed PLA Dipole Array Prototype

    Martin10/25/2019 at 22:29 0 comments

    Next up -  need to design and print attachments for the fiberglass legs to a car roof rack system.

  • SigTrax DF'ing app

    Martin10/07/2019 at 05:47 0 comments

    There is a new DF'ing app for Android and IOS called SigTrax.  It is as complete a package as I've seen.  It include a means for bearing updates via Bluetooth LE interface so I'm waiting a breakout board to test it out.

  • Kerberos SDR DF

    Martin08/24/2019 at 04:28 0 comments

    I have heard about Kerberos SDR and saw the direction finding video.  It's hard to tell how accurate it is.  It's using TOA measurement instead of Doppler.  That isn't necessarily better or worse.  TOA is susceptible to reflections like Doppler.  Kerberos is based on the RTL-SDR which uses an 8-bit ADC.  The Teensy used has at least 12 bits of resolution so I may have an edge with more accurate measurements.  By using the 2nd harmonic which is a measure of reflections I hope to filter out bad readingings.  

    I look forward to a fly off between my DDF and Kerberos in the future.  

  • Vertical Dipole and Switcher Performance

    Martin08/18/2019 at 00:12 0 comments

    By leaving just one antenna switched on at a time I'm able to measure the VSWR of the individual dipole antennas.  The top trace is a set of UHF/VHF "rubber-duckies" and the bottom is a set of wire monopolies tuned for VHF.  I don't see a great deal of variation in performance with either antenna type and the performance is within a dB or so between antennas for a given frequency.    It would be great to flatten out the curve - need to research wideband antennas.

    The PVC antenna mounting is too flimsy to mount on a car safely so looking into a fiberglass mount.  Maybe use wood for the fiberglass tube couplers.  

  • Mobile VHF Dipole Array (and cat)

    Martin08/09/2019 at 22:07 0 comments

    I need to fine tune how the PCBs mount in the PVC pipe end but it's getting there.  I redesigned the antenna boards to coplanar wave-guide and am getting better results.  I put a dummy load on my antenna switcher and discovered that was causing VSWR problems.   Now waiting for the redesigned board.  The rubber ducky antennas are way too flexible and I'm sure better ones are out there.  I found flag pole mounts that I plan to attach the bottom PVC legs to magnets on the car rooftop. 

  • Dipole switching boards

    Martin08/02/2019 at 23:22 0 comments

    I slapped together a design for a dipole PCB.  (.pdf above)  It uses a through-hole mount BNC connector on both sides.  Switching wise it works.  Antenna wise not so much.  Experimenting with a set of UHF and VHF antennas all produced VSWRs of 6 - 12 dB in parts of the UHF and VHF bands.  I tried experimenting with the resistance between the two elements which didn't make much difference.  Increasing the resistance does limit current in the switching diodes which could add signal loss.  I replaced the resistor with a diode and it works the same.

    The first board was done in haste and had omitted a copper pour.  I have not laid out the board with RF design rules as I am assuming that everything is electrically small to working frequency.

  • Picking North

    Martin07/22/2019 at 17:59 0 comments

    After rewriting my code to be less sensitive to blocking everything is working.  I broke up the processing in signal acquisition, number crunching and display which is much simpler than keeping all that going at the same time.  For signal acquisition I am experimenting with sample size less than a full revolution of the antenna to keep update times reasonable.  

    Now that I have a compass sensor working I wonder if I can improve on the +/- 1 ° or so from the compass by using GPS when in motion.  The GPS "course over ground" which when in motion gives direction based on position differences could be more accurate.  Ideally I could switch navigation source.

    I have been using "RDFMapper"  which displays a google map and take GPS and RDF input several ways based on settings.  It draws a bearing line from the location of the direction finder which can be relative to the direction of the vehicle or a fixed specified angle from north.  

  • Compass Blocking Hell

    Martin07/19/2019 at 18:04 0 comments

    Every compass I have tried adding seems to create a timing problem when added to my code.  In order to run under Teensy I need to change usage from the "Wire" library to the "i2c_t3" library.  I wanted to use the HMC6343 and library.  The HMC6343 needs a millisecond to respond to commands.  That was done in the HMC6343 library with a delay(1).  That was changed to a loop with micros() to wait.  The i2c_t3 library has many microdelay() statements that were also changed.  No joy!

    Any suggestions appreciated.

View all 31 project logs

Enjoy this project?



Simon Merrett wrote 02/21/2019 at 03:54 point

"if you have a [logic/analogue/ghetto-RF] problem, if no one else can help... and if you can find him... maybe you can hire...

@Ted Yapo"

...cue theme tune. 

  Are you sure? yes | no

Ted Yapo wrote 02/21/2019 at 15:01 point

speak of the devil and he doth appear

Cool project!

I played with this circuit not long after the 1999 article. It was what got me initially interested in PIN diodes, which I ended up designing a logic family around (#The Diode Clock ). The 1N4148's originally specified will "work", but I think it would be really interesting to try some of the fancy new MMIC RF switches available today. For example:

One thing jumps out at me from the project pic: those pigtails in between the antennas are going to mess up your pattern. It might work better if you cut a hole in the center of the plane and ran the cables through that to keep everything below.

I did some antenna modeling with EZNEC for this kind of setup, although the work is lost at this point. If you're up for it, you could give it a shot:

  Are you sure? yes | no

Martin wrote 02/22/2019 at 01:15 point

Did you get your DDF working?

I do understand that I'll get better performance using even just PIN diodes but want to keep the cost of prototypes down.  I will check out some of the spendier parts in time.   

The antenna ground plane cookie tin is a mess - it was built for expediency - not RF performance.  I am reworking the antenna mounts and switcher to make them suitable for mounting on a vehicle.  I'm also building it for VHF so no more cookie tin.   

I actually like 4NEC2 but haven't used it for this.  There are several ways to do the antenna switching, the way I did it or by shunting all but one antenna to ground.  The shunt is a biased on  diode connected to the antenna a 1/4 wavelength away connected to ground.  This needs further investigations as well.

For the UHF antennas I used threaded rod in a union so I could tune the antenna by screwing it in or out.  But never got around to tuning them.

All good points. 

Thanks - Martin

  Are you sure? yes | no

Ted Yapo wrote 02/22/2019 at 01:52 point

I got it working enough to see some crude results from data sampled by a PC sound card, but never took it beyond that. As usual, I was distracted by some small part of the project, and wandered off following that.

Yeah, you can't get a cheaper, more versatile part than the 1N4148. Well, maybe the 1N914 ;-)

  Are you sure? yes | no

Dan Maloney wrote 02/19/2019 at 16:50 point

I'm curious how this turns out, please keep us posted. And I'll have to look up that QST article so I can get my head around DDF. Thanks!

  Are you sure? yes | no

Does this project spark your interest?

Become a member to follow this project and never miss any updates