Noise figure measurements of rtl-sdr dongles

29.03.2015 19:53

Noise figure is a measure of how much noise a component introduces into a signal that passes through it. For a radio receiver, it defines how weak a radio signal it is capable of receiving before the signal is drowned in the receiver's own noise. For instance, in spectrum sensing, having a low noise figure receiver helps a lot when trying to detect hidden transmitters. To have some reference to compare my own receiver design with, I recently performed some noise figure measurements on an Ezcap DVB-T dongle.

Ezcap DVB-T dongle and a R&S SMBV signal generator.

Principles of noise measurements are nicely detailed in an application note from Agilent. Unfortunately I don't have access to specialized noise measurement equipment. I do however have a calibrated Rohde & Schwarz SMBV vector signal generator at work. It can be used as both a continuous wave and a somewhat decent noise source, so I chose to measure the noise figure using both the Y-factor method and the generator twice-power methods.

Both methods require measuring the power of the signal exiting the receiver. I implemented a power meter in GNU Radio using the flow graph shown below (GRC file). It measures true (RMS) signal power in a 200 kHz wide band that is offset by -500 kHz from the center frequency of the tuner. This is to exclude low-frequency noise from the measurement. High level of noise around the DC is characteristic of the direct conversion tuner used by the Ezcap dongle.

rtl-sdr power detector GRC flow graph

The settings used for the RTL-SDR source block are:

  • Sample rate 2.048 Msample/s,
  • LO frequency 700.5 MHz (which puts the center of the 200 kHz measured band at 700 MHz)

I used GNU Radio release

RTL-SDR source block settings.

For twice-power method, I set the signal generator to unmodulated sine wave at 700 MHz and manually found the output power setting that caused a 3 dB change in the power meter reading. This is the minimum discernible signal MDS:

MDS = -104 \mathrm{dBm}
NF_{tp} = -104\mathrm{dB} + 174 \mathrm{dB} - 10\log{\frac{200 \mathrm{kHz}}{1\mathrm{Hz}}} = 17.0 \mathrm{dB}

For the Y-factor method, I used the arbitrary waveform function on the generator to produce Gaussian noise in a 50 MHz band centered on 700 MHz. Total power on the generator was 80 dBm. For such a setup, the excess noise ratio is:

ENR = \frac{P_{gen}}{BW_{gen}\cdot k\cdot T_0} - 1

With the noise generator turned off, the power detector showed -41.5 dB. With the noise generator turned on, the power detector showed -36.5 dB. This gives the following noise figure:

Y = \frac{P_{on}}{P_{off}}
NF_{yf} = 10\log{\frac{ENR}{Y-1}} = 10\log{\frac{49.0}{3.16 - 1}} = 13.6 \mathrm{dB}

These results are curious for several reasons.

First of all, the two methods should produce the same result, but in fact the resulting noise figures differ by 3.4 dB (a factor of around 2). My first suspect was an error in my calculations somewhere. The twice-power method, for example, is sensitive to the measurement bandwidth and this is a common source of errors in my experience. However I have repeated these exact same measurements using a completely simulated receiver in GNU Radio and the same power meter (and hence the same 200 kHz filter). In simulation the two methods agree perfectly, which makes me think the error is not in my calculations.

Another suspect was the quality of the noise for the Y-factor method. This method is typically used with specialized (analog) noise sources, not a pseudo-random vector loaded into an arbitrary waveform generator. However, repeated measurements with different signal powers, pseudo-random cycle lengths and sampling rates are in very good agreement (less than 0.5 dB difference in resulting noise figure). I have also measured the spectral power density used in the ENR calculation (Pgen/BWgen) with a spectrum analyzer and that measurement agrees with the calculated figure to within 0.1 dB.

Above makes me think that both measurements are correct and that there is some physical process in the receiver that is causing this difference. There may be some automatic gain control somewhere that behaves differently. Crest factor for instance is significantly different between noise and constant-wave inputs.

Update: Based on my later discovery that the noise power and ENR was not correct in my Y-factor calculation, it is likely that the 17.0 dB result is more accurate.

The second weird thing is the unusually large value. The noise figure is largely determined by the first stage, which is the low-noise amplifier in the Elonics E4000 tuner integrated circuit in this case. The datasheet specifies a noise figure around 4 dB, which is significantly lower than what I saw. It's not that far fetched though that a cheap design like this would perform worse than the best-case promoted in the datasheet. There might be a noisy power supply and interference from the USB bus for instance.

The most elaborate existing characterization of the rtl-sdr DVB-T dongles I'm aware of was done in 2013 by HB9AJG. Among other things, it also includes measurements of the minimum discernible signal. For the E4000 tuner at 700 MHz, that document states a noise figure of 11.0 dB, which is also somewhat lower than both my measurements. However, I believe HB9AJG made several errors in their article and in fact after accounting for them, their results nicely match mine for the twice-power method (I plan to write a bit more on that in a future post).

In conclusion, even though the results look unusual, I can't find any concrete reason to doubt their accuracy. The noise figure for this particular receiver seems to be between 17.0 and 13.6 dB, which is not particularly good. It depends on what you want to do, of course, but in general these dongles do not work very well with weak signals.

Posted by Tomaž | Categories: Analog


A nice approach to measure noise figure!

Did you consider the two different concepts used in the SDR-RTL dogles? E4000 tuners use a zero IF concept and R820T tuners use IF downmixing. Does a R820T based dongle give the same uncorrelated results?

A third method to measure NF is the AM concept: measuring S/N in the voice channel for an AM modulated defined signal.

NF is by far the best parameter to specify the sensitivity of a receiver/amplifier. However it is difficult to measure.

Posted by JMG

Unfortunately I don't have any R820T based dongles at hand to check. I'm not sure how the difference between zero-IF and low-IF designs would matter though. I think it is more likely that some automation in the tuner was lowering the gain of a variable-gain amplifier somewhere for a high crest factor signal.

Posted by Tomaž

May I suggest you read:

"Noise Figure Measurement Accuracy - The Y-Factor Method"

This is not to say you are doing anything wrong, but this application note may provide some insight into the errors that may be introduced by the test setup.

Thanks for the interesting post. David

David, thanks for the link. I will have a look. I haven't seen this application note before.

Posted by Tomaž

The measured results are unrealistic. It seems you used a low gain setting.

Following your MDS method (GNU radio), I got
NF=4.0dB for a R820T dongle and
NF=8.1dB for a E4000 dongle

In parallel I measured the noise figure for the two units with my NF test equipment:
NF= 3.9dB (R820T)
NF= 7.9dB (E4000)
This is in good agreement with the results I got some time ago.

I added a gain slider to the program to optimise the gain settings for best S/N.

Posted by JMG

JMG, all the gain settings for the RTL-SDR Source I used should be visible on the screenshot above. Can you share the optimised settings you have?

Posted by Tomaž

my gain settings have been 45/45/10.
You did set MX_gain=0. This results in a very bad sensitivity. RF_gain should at least be set to 40dB. BB_gain setting does not matter.

I took my measurments at f=430MHz. That is where my signal generator is calibratet to +/-0.2dB.

Will you do some additional work on the project? I have done some similar work before with HDSDR - with disappointing results concernig accuracy.

Did you think about a correct power (!) measurement of the total noise in the test channel?

Posted by JMG

JMG, thanks for the info. I'll repeat the measurements with the settings you suggest. It might be though that different dongles with E4000 simply have different noise performance.

I plan to do some more experiments with my rtl-sdr to try to explain the weird results I got. I also have a E4000-based Fun Cube Dongle Pro which I haven't looked at yet. My goal in all this is to get some reliable results for these dongles and a reliable measurement procedure I can apply to my own design.

Measuring absolute noise power is even more unreliable in my experience, because you need to know the gain of the receiver. With a tuner that has many stages of AGC that is hard to determine reliably.

Posted by Tomaž

JMG, using your gain settings (RF gain = 45 dB, IF gain = 45 dB, BB gain = 10 dB), I get the following results:

At 700 MHz:
NF = 16.4 dB for twice-power method
NF = 13.1 dB for Y-factor method

At 430 MHz:
NF = 9.0 dB for twice-power method
NF = 5.0 dB for Y-factor method

So, not that much difference at 700 MHz compared to the results in my original post above. For 430 MHz the results are similar to yours. HB9AJG also saw better performance at lower frequencies (although not that much).

Posted by Tomaž

Hi Tomaz,

I'm interested in your noise measurement.
I'm searching for a way of syncronising multiple dongles with no hardware modification.
A part of the noise of the power supply should be possible to be measured at any time at any dongle of a system
no matter to which frequency it is tuned, right?

I don't know if it is sufficient,
but it is also a good spot, to put some artificial noise in, as it can be easily
accessed and does not interfere with rf circuitry when it is switched off.

Is that an useful approach?
Do you think this could work? Did I miss something?



Steve, power supply noise should be a very small part of the total noise you see in the received signal. At first guess I would say it's probably not significant enough to be used for synchronization.

You can use an artificial signal that is common across all dongles as a reference for synchronization. I would suggest using the antenna input for that, if you don't want to modify your dongles. I don't know how sensitive these dongles are to noise on the power lines (or if they have internal voltage regulators). If they are well designed, you should see very little effect (search for "power supply rejection ratio").

Posted by Tomaž

Add a new comment

(No HTML tags allowed. Separate paragraphs with a blank line.)