FlightAware Discussions

Real world - antennas and filters

Here is part of what will eventually be one of a number of web pages on ADS-B related topics.

You may have run into one or more of my posts talking about filters. Why are they needed and what will they do? Let’s look at some real world data.

I have a discone antenna on the roof, with good feedline (9913) to my office downstairs. We have a good view of the Silicon Valley.

When I connect the discone to my spectrum analyzer (a venerable HP8594E), here’s what it sees:

This is the spectrum from 50 MHz to 2.0 GHz, along the horizontal axis. The vertical axis is signal intensity, at 10 dB intervals. The numbered diamonds are frequencies of interest

<1> is 1090 MHz, the frequency we’re interested in. Any ADS-B signals are down in the weeds.
<2> is 2451 MHz, a nearby 2.4 GHz Wi-Fi access point
<3> is 884 MHz, a DTV station
<4> is 748 MHz, another DTV station
<5> (no diamond) is around 1900 MHz, a local cell site

The spikes below <4> are other DTV stations, business band things, and the FM broadcast band.
Those DTV stations are around 30dB stronger than any signal we want at 1090 MHz – 30dB is a factor of 1000!
From this it’s clear that we have a LOT of signals that are hundreds to thousands of times stronger than the ADS-B ones we want. These strong signals are going to swamp our little SDR!

Let’s put a Mini Circuits SHP-1000 high pass filter between the antenna and the spectrum analyzer. Here’s what we get:

Pretty much everything below 750 MHz is gone. The spike at <4>, 748 MHz, has been cut by 25 dB – a 320 times reduction. Our spike at <3>, 884 MHz, has been cut by 6 dB, which is pretty good.

Note that our cell site at <5> is untouched – this is a high pass filter after all.

The addition of a high pass filter has cleaned up the signal we need to work with tremendously. This will be all a lot of sites need to improve ADS-B reception. Another advantage to adding a high pass filter is that the filter will provide some protection for the front end of the SDR.

What about these incredible surface acoustic wave (SAW) filters? What do they do? Here’s the frequency response of the EPCOS 1090 MHz SAW filter:

This frequency sweep is from 50 MHz to 1200 MHz, not 2.9 GHz like the top two; the response from 1200 to 2900 MHz isn’t that interesting.
This SAW has a measured insertion loss of 4.72 dB at the center frequency, measured at 1089 MHz. The measured 3 dB bandwidth is about 26 MHz. Signals below 1100 MHz are attenuated by around 46 – gone. (This plot was generated by a HP 85630A scalar test set which works with the HP8594E spectrum analyzer.)

The combination I use – a SHP-1000 high pass filter connected to the discone antenna. This filters out most of the garbage, and more important, has a very low insertion loss, so we’re not attenuating the signals we’re interested in by much. The output of the high pass filter goes to a low noise amplifier (LNA). The LNA is followed by a SAW – and the LNA compensates for the insertion loss of the SAW. This provides a signal for the SDR to process that only has energy around 1090 MHz.

And by the way, if you have a SDR, you have a spectrum analyzer – you can find out just what your antenna is delivering, with and without a filter.

–bob k6rtm

1 Like

We can’t see the graph dynamically. You can, but not at the speed the data comes across (I’m sure it’s faster than the refresh speed of your analyzer). The communications on ADS-B are short, almost momentary, aren’t they? I’m guessing the graph shows what it looks like at quiet time. How high does the peak go when there are lots of local transmissions?

If I get in really close, I can see some low-level ADS-B signals. If you look at the right side of the first two plots, you’ll see underlined MAX HOLD A – the spectrum analyzer is tracking the maximum level at each point along the spectrum. The first two plots show data captured over probably tens of seconds. In that period, at those display settings, ADS-B is a little bump down in the weeds. And yes, those transmissions are very short, on the order of milliseconds – I’m sure a number of the folks on this board know the durations.

Remember that most SDR dongles, such as R820T dongles, provide gain up to 40 dB.

With fancier/newer spectrum analyzers, you can get data demod packages that let you capture and display data.

My spectrum analyzer is at the other end of my lab from where the antenna feed for the SDRs is – I’ll dig up a long jumper cable tomorrow and see what’s up at the output of one of the SAW filters.

–bob k6rtm


Do I notice right that you have your amplifier after the filters? By amplifying first the insertion loss wouldn’t bother that much. Then again you might get intermodulation with a bad preamp. I have better performance when amplifying first with a MAR-6 based preamp. Haven’t been able to measure the 3-pole interdigital filter I use yet


Less than a millisecond. The bitrate is 1Mbps so around 120us for a 112 bit extended squitter + preamble.

rtl_power can be handy for looking at signal power. It integrates the signal power over time so the length of the bursts is not a big deal so long as the total power is above the noise.

You can see ADS-B on a waterfall display for much the same reason:

Okay, I caught at least one ADS-B signal! And this was using the short whip antenna, sitting on top of the spectrum analyzer!

This image was taken using max hold, where the spectrum analyzer accumulates the maximum reading at each point of the spectrum.

The top spectrum is 10 MHz wide, centered at 1090 MHz. Note the sweep time is 20 milliseconds. The spectrum between the blue vertical lines is shown in the bottom spectrum.

The bottom spectrum is 1 MHz wide, again centered at 1090 MHZ, 30 millisecond sweep time. Bingo! Must have been something flying into Moffet Field (KNUQ). We’ve got a very nice spike totaling about 15 dB over the noise level – not too bad (around -66 dB with an -82 dB noise floor, averaged over time).

And yes, use your own SDR to do many of these kinds of measurements!

(Putting on the IT hat for a moment)
I run some systems as production systems. That designation, as a production system, doesn’t depend on the size of the system. It can be an Arduino, a Pi, or a multi-ton mainframe. Production system is a state of mind and a way of running things. You don’t screw with production systems. You don’t “try something new.” A production system is documented, supported, watched carefully, and changed minimally. Then there are development systems – that’s where the hacking, experimentation, and plain old fooling around happens. You treat backups and security updates seriously on ALL systems.

(swapping IT hat for the hacker beanie)

My PiAware production system (named Scylla) is a 256mb early Model B, well suited for running one program. The PiAware development system is Wombat, a newer B+. The RF chains run off the same antenna through a Mini Circuits splitter. The two RF chains use different LNAs but supposedly the same high pass and SAW filters. They use SDR dongles from different sources. Currently both systems are running the same software. They are reporting slightly different results. What fun!

–bob k6rtm

In general, you want to have the LNA (and RF chain) as close to the source (antenna) as possible. Ideally, I’d pack this whole lot into the attic, or even better, into an enclosure at the base of the antenna. With the feedline I’m using (9913), I’m probably losing 3 - 5 dB of signal from my discone (no appreciable gain) on the roof (of a 2 story house in a rise with a very nice view of Silicon Valley).

Given the wideband nature of the antenna, and the enormous amount of stuff I measure between 50 and 900 MHz, if I were to put the LNA right after the antenna, I’d need something with a high IP3 to avoid intermod and other crap. (High IP3 with very low noise == $$$ as you know) And overloading an otherwise very good LNA doesn’t make it a “bad” preamp – it’s a bad match for the system. That’s why I use the SHP-1000 high pass filter. Insertion loss (measured at 1090 MHz) is a little under 0.5 dB, so in comparison to the hit I’ve already taken from the feedline, it’s negligible. The LNAs I’m using have NFs of 1 dB or less at 1090 MHz.

I used to have access to high-end design tools. It might be interesting to try a multi-section hairpin, but even a good design/implementation, say 5 sections built on Duroid, is going to have an appreciable insertion loss, 4 to 6 dB. I can do a lot better than that with a pair of surface-mount Mini Circuits parts from their LFCN and HFCN lines – get very low insertion loss and appreciable attenuation away from 1090 MHz. And the purpose of that first filter stage isn’t to narrow things down – that’s what the SAW is for – it’s to throw away the high level crap before it gets to the LNA. And a SAW will give you better skirts and narrower bandwidth than a hairpin with the same insertion loss, in addition to being much smaller.

Over the next week or so I’ll do some more A/B testing to tweak the RF strip. On paper (and on the spectrum analyzer screen) the SAW does an outstanding job. Does it make any difference to the SDR in terms of birds spotted and positions reported? I’ve already tried a quarter wave stub filter for my 1900 MHz cellular spike. The spectrum analyzer told me I’d flattened that spike into the noise floor. It made no difference in the desired product – birds spotted and positions reported, so I took it out. I want to try swapping out the SAW, using different LNAs, switching the SDR from max gain to AGC (think I need to have the SAW to do that), and probably a few others. I’ll also look in my box of RF goodies to see if I have a high IP3 amp with a reasonable noise figure and try that between the antenna and the SAW.

All too much fun – wish I had more time!

cheers and 73 – bob k6rtm

In the spirit of “what does the signal look like?”, here’s how dump1090 sees a message:

Green bars are the unprocessed magnitude data.
The 4 short blue lines on the left are where dump1090 found the preamble peaks that precede the Mode S message.
The vertical blue lines are where the bit boundaries fall.
The boxes under the main graph are the 0/1 bits that dump1090 extracted. The red box is where it made the wrong decision and CRC error correction fixed it.
The graph shows about 80us (0.08ms) in total.

1 Like

Very nice! Shows what we’re up against! I’m in the RF camp, turning RF into quality I/Q data for the demod wizards. You are a demod wizard. If you need data sets or there is something I can help with, let me know.

bob krtm

This makes clear the need for a filter.

1 Like