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 a weekday 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 local hunts.

Google's 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. 

I first went with a Teensey for a replacement of the WA2EBY DDF logic using zero crossing detection to determine input Doppler phase angle.  That is described as the "Zero Crossing Version".  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.  I also hope to improve performance by going DSP. 

I'm using four antennas that are electronically switched to impart a Doppler tone FM modulated on the received signal.  The WA2EBY DDF  is composed of nine chips (74HC),  a couple of transistors, a voltage regulator and a bunch of passive parts.  I am using the same idea for the antenna switching but trying to do the instrumentation with many fewer parts.  WA2EBY's  used cheap 1n4148 because at the time PIN diodes could be over $10 and the design 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.

In the Zero Crossing Version the Doppler tone is isolated with a very narrow band-pass filter and the phase of the Doppler relative to the switched antenna is measured to determine direction.  The relative position of the signal source is derived from the time difference.   In the DSP version, the sampling is synchronized with the antenna switching and the magnitude and phase of the Doppler tone is read out directly.  Both versions sample the first harmonic as a measure of signal reflection and the total signal power to compute a quality measure.

The WA2EBY DDF  is composed of nine chips (74HC),  a couple of transistors, a voltage regulator and a bunch of passive parts.  I am using the same idea for the antenna switching but trying to do the instrumentation with many fewer parts.  WA2EBY's  used cheap 1n4148 because at the time PIN diodes could be over $10 and the design 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 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.  I have decided to augment the Neopixel display with a heading readout.  

Testing - I am using a cheap 0.5 W FM transmitter module for my 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...

Read more »


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



This contains computation of the Doppler tone magnitude and phase and first harmonic magnitude. A crude "quality" metric is computed and displayed on the neopixel.

ino - 7.50 kB - 06/13/2019 at 15:48



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



Antenna board with sma input connector and BNC antenna connector. Diode D1 conducts VHF when biased on with DC.

Portable Network Graphics (PNG) - 41.03 kB - 06/28/2019 at 04:45


View all 7 files

  • Compass and Calibrating

    Martin07/09/2019 at 04:55 0 comments

    In order to map the direction of the transmitter, the transmitter heading needs to be relative to a compass heading.  When in a moving vehivicle that can be obtained from GPS.  A real compass is necessary for stationary readings.  I started playing with the HMC5883L and MLX90393 magnetometers.   The sensors do function as compasses but they require software and calibration.  There are Adafruit and Grove libraries for them and some others as well.  The Adafruit library for the HMC5883 yielded the best results but the libraries didn't play well with the other interrupts.   In order to spare a major detour I plan on using a spendy HMC6643 compass module that includes it own microcontroller and comes calibrated.    

    To calibrate, the transmitter will be placed as far away as possible from the front of the car and will need a high quality reading.  The raw measured value is replaced by the compass is reading.    

  • Diode Redo

    Martin07/04/2019 at 00:12 0 comments

    I have noticed that the antenna switching introduces significant attenuation but some attenuation is expected so time for another look.  In looking at the specs I am not turning on the diodes very hard.  The 74HC14's can source about 4 mA and the diodes really want 10 - 100 mA to turn on hard.  I remember the UDN2983 source driver - an nice solution but obsolete but is available.  There's a LTC 1156 quad high side micropower driver IC and resistors/transistors.  Any other ideas?

  • Yet More Testing on VHF

    Martin07/02/2019 at 23:41 0 comments

    I got some time on a vehicle with a metal roof and set it up with a set of VHF antennas.  Tuning in on NOAA weather radio on 162.400 MHz from a fixed location there was a stable heading reading albeit with a low signal quality.  In urban driving the audio Doppler tone revealed quite a bit of multipath.  When in a less congested area good quality readings were observed.  On to calibrating and turning the arbitrary heading into useful information. 

  • Dipole Antenna Array?

    Martin06/29/2019 at 05:18 0 comments

    Having to borrow a car with a metal roof to test the system is a pain.  The antenna spacing for VHF is about 18".   My cars have sunroofs - metal tops with big glass holes.   There is no way to attach the four magnet mount monopoles with the required spacing because of the sunroof location.  I can magnetically mount to the roof with a trestle over the sunroof but that is a problem for the monopoles - no uniform ground plane.  That can be solved by going with a dipole array.  The height of the array would be about 36" plus the trestle height.  Rubber duckie's for the elements might be a tradeoff.

    A dipole array can be a single unit so a positioning sensor can be built into it.  The system is needs be calibrated once and shouldn't need recalibration between installations and removals.  

    Here's a stationary array - just four antennas should be sufficient:

  • More Testing

    Martin06/27/2019 at 22:43 0 comments

    As it turns out, of the two cars I own, neither have enough metal for a proper ground plane - even on UHF.  Doah!  It seems like the geometry is simpler on VHF so I ought to start there.  Now - to borrow a car without a sunroof.  Here's a pix of my mobile test jig sans laptop and test vehicle.

  • Outdoor Testing Vers 0.0

    Martin06/14/2019 at 18:08 0 comments

    Although I haven't had much chance to refine the software, I had all the pieces and gave it a try.  I didn't have someone to drive but the readout looked as crazy as ever. 

  • Goertzel algorithm tinkering

    Martin05/23/2019 at 00:39 0 comments

    By playing with sample size and ADC resolution the phase output error is now under a degree.  Quite a win over all the time domain phase crossing detection hardware and filters.  I'm sure with some better audio signal isolation would help.

    There is a new problem - the phase changes (~10 degrees) with input signal large amplitude changes.  This is very pronounced when the signal is very low or or on the verge of overload.  Need to look into setting the receiver volume to get the best results.

    So far I also haven't done anything about the signal riding on ADC input - I haven't addressed the half scale DC offset built into the samples. 

    Latest version of the code was  just posted.

  • Newer BNC antenna mount

    Martin04/27/2019 at 03:50 0 comments

    New magnet mount BNC antenna assembly.  The through-hole antenna mounts are great.  I could weatherproof them by painting with epoxy.  Or switch to a top mount SMA and 3D print a top.

  • Yet more DSP approaches

    Martin04/15/2019 at 07:56 0 comments

    I would like to try some pure DSP approaches and eliminate noise error from old fashioned analog zero crossing detection.  I looked at the Teensy DSP library and unfortunately it only has a magnitude only output FFT and the bins are too big.  I don't have time to to tinker with other FFT libraries for now.  A simpler way is the DFT.  There is a simpler form of that known as the Goertzel algorithm that computes a single DFT bin.   I recall it used for tone detection applications like DTMF decoding with low power micro-controllers.  It offers a phase output as well as magnitude so it should work well and allow "dialing in" the the bin width.  Both a magnitude and phase measurement for the Doppler tone and just the magnitude of the Doppler second harmonic need to be computed.  This should be computationally very efficient though not an issue with the Teensy 3.2 - plenty of CPU cycles. 

  • System Interface

    Martin04/04/2019 at 04:58 0 comments

    Up until now I have been planning on a Neopixel ring and a couple of rotary encoders for a user interface.  The Neopixel ring works great and I can use different colors for different uses.  I have come up with a workable system for entering small numbers and displaying on the ring but I really need an alphanumeric display - at least three or four digits.  

    In normal operation the three digits would be the processed heading.  Several adjustments need to be entered: filter Q, Doppler frequency, averaging, azimuth adjustment, etc. 

    The typical  location for this device is in a car with normal lighting so that's the issue.  It needs to be readable in possibly direct or almost direct sunlight.  I've ordered a few small paper white displays and a 24 LED ring.  Perhaps mounting the paper white display inside the ring.  This arrangement would be nice but is awfully expensive for what is needed.  Any suggestions?

View all 21 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

Similar Projects

Does this project spark your interest?

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