1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-04 16:01:14 -05:00
sdrangel/plugins/channelrx/noisefigure
Daniele Forsi ff47deee60 Fix spelling
Fixed with:
find . \( -name '*.md' -o -name '*.ui' -o -name '*.html' \) -exec codespell --ignore-words-list=cach,doas,ehr,inout,lits,nd,som,verry --summary --write-changes {} \+
and manual editing.
2023-07-09 09:06:18 +02:00
..
CMakeLists.txt Update CMakeLists.txt to support both Qt5 and Qt6. Add option ENABLE_QT6 2022-11-17 14:34:54 +00:00
noisefigure.cpp Noise figure: Fix saving of power on command. Add debug for running power on/off scripts. 2023-02-23 09:14:44 +00:00
noisefigure.h v7: API: added workspace handling for device, spectrum, feature and channel. Implements #1242 2022-05-13 22:24:48 +02:00
noisefigurebaseband.cpp Replace deprecated QMutex(Recursive) with QRecursiveMutex 2022-09-17 23:00:07 +02:00
noisefigurebaseband.h Replace deprecated QMutex(Recursive) with QRecursiveMutex 2022-09-17 23:00:07 +02:00
noisefigurecontroldialog.cpp NoiseFigure plugin: Fix #1269 and #1268 2022-06-01 11:41:40 +01:00
noisefigurecontroldialog.h Fix gcc warnings 2021-06-09 17:14:56 +01:00
noisefigurecontroldialog.ui Fix spelling 2023-07-09 09:06:18 +02:00
noisefigureenrdialog.cpp Fix for #1087. Support compilation with Boost >= 1.77 2021-12-28 11:31:15 +00:00
noisefigureenrdialog.h Update plugins to compile with Qt5 and Qt6 2022-11-17 14:36:12 +00:00
noisefigureenrdialog.ui Add support for linear interpolation, which can be more accurate if 2021-06-10 20:10:19 +01:00
noisefiguregui.cpp Add DialogPositioner to ensure dialogs are fully on screen and remain on 2022-12-20 10:31:15 +00:00
noisefiguregui.h Update plugins to compile with Qt5 and Qt6 2022-11-17 14:36:12 +00:00
noisefiguregui.ui Arrange rollups after restore geometry to mitigate issue #1474 2022-11-03 19:07:44 +01:00
noisefigureplugin.cpp Updated version and changelogs 2023-03-18 13:45:42 +01:00
noisefigureplugin.h Add noise figure plugin 2021-06-09 16:17:59 +01:00
noisefiguresettings.cpp Noise figure: Fix saving of power on command. Add debug for running power on/off scripts. 2023-02-23 09:14:44 +00:00
noisefiguresettings.h Massive UI revamping (v7): persistent channel show/hide 2022-04-12 18:27:27 +02:00
noisefiguresink.cpp Fix gcc warnings 2021-06-09 17:14:56 +01:00
noisefiguresink.h AIS mod and demod, IEEE 802.15.4 mod: scope and spectrum feed optimization 2021-07-16 02:40:44 +02:00
noisefigurewebapiadapter.cpp Add noise figure plugin 2021-06-09 16:17:59 +01:00
noisefigurewebapiadapter.h Add noise figure plugin 2021-06-09 16:17:59 +01:00
readme.md Update docs to match 2022-06-01 11:48:28 +01:00

Noise Figure plugin

Introduction

This plugin can be used to calculate the noise figure (NF) of a receiver (SDR as well as optionally one or more LNAs). It uses the Y-factor method and requires a calibrated noise source.

The noise figure of a receiver is important, as it determines the noise floor: Noise floor (dBm) = 10log10(1000kT)+NF+10log10(BW)

The noise figure will vary with frequency and gain settings. Typically, the noise figure will increase with frequency and decrease with gain. When measuring noise figure, AGC should be disabled.

Interface

The top and bottom bars of the channel window are described here

Noise figure plugin GUI

1: Measurement frequency shift from center

Use the wheels to adjust the measurement frequency in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.

Many SDRs have a large DC offset, which can significantly interfere with the NF measurement, so this setting should be used to move the measurement frequency away from the radio's center frequency or any other spurs.

2: Channel power

Average total power in dB relative to a +/- 1.0 amplitude signal received in the measurement band.

3: Level meter in dB

  • top bar (green): average value
  • bottom bar (blue green): instantaneous peak value
  • tip vertical bar (bright green): peak hold value

4: FFT size

Determines the size (number of points) of the FFT used to measure noise power. Only a single output bin of the FFT is used, which is selected by (1).

5: BW

Displays the measurement bandwidth in Hz as determined by the FFT size (4) and the sample rate.

6: FFTs to average

Determines the number of FFTs that are used to measure the average noise power. Using more FFTs can improve accuracy, at the expense of increased measurement time.

7: Sweep setting

The device setting to sweep should be entered. Predefined values include "centerFrequency" and "gain", but it is possible to enter any setting supported by the device (that is accessible via the Web API). Not all devices support the "gain" setting.

When "centerFrequency" is set, sweep ranges and values are in MHz. For all other settings, the values are used without any scaling. Note that some device settings are scaled in the SDRangel GUI compared to the values in the Web API. For example, RTL SDR gain setting of 40.2 in the GUI, is 402 in the Web API.

8: Sweep range

Specifies the values of the setting (E.g. centerFrequency of gain) to measure the noise figure at.

When the sweep setting (7) is "centerFrequency":

  • Range - Specify start frequency in MHz, stop frequency in MHz and the number of steps. 100, 200, 5, would measure at 100MHz, 125MHz, 150MHz, 175MHz and 200MHz.
  • Step - Specify start frequency in MHz, stop frequency in MHz and the step frequency in MHz. 100, 200, 25, would measure at 100MHz, 125MHz, 150MHz, 175MHz and 200MHz.
  • List - Specify a space or comma separated list of frequencies in MHz. "100 125 150 175 200", would measure at 100MHz, 125MHz, 150MHz, 175MHz and 200MHz.

For other settings:

  • Range - Specify start value, stop value and the number of steps. 100, 200, 5, would measure at 100, 125, 150, 175 and 200.
  • Step - Specify start value, stop value and the step. 100, 200, 25, would measure at 100, 125, 150, 175 and 200.
  • List - Specify a space or comma separated list of values. "100 125 150 175 200", would measure at 100, 125, 150, 175 and 200.

9: Start/stop noise figure measurement

Starts or stops the noise figure measurement. When starting a new measurement, existing results are cleared.

10: Save results

Saves the results in the table to a .csv file.

11: Clear results

Clears the current results from the table and chart.

12: Open ENR dialog

Opens the ENR dialog to allow entering the Excess Noise Ratios (ENRs) for noise source. ENR specifies the difference in noise source power output in dB from when the source is powered off compared to when it is powered on. This typically varies with frequency, so values should be entered for each calibrated frequency. When a measurement is attempted at a frequency for which a value is not specified, an interpolated value will be used. You can choose between linear and barycentric rational interpolation, and the difference between the two is shown in the chart.

Noise figure ENR dialog

13: Open Noise Source Control dialog

Opens the noise source control dialog, to allow setting how the plugin turns the power to the noise source off and on. Two control methods are supported: A program or script can be run to turn the power on or off, or the VISA library (if installed) can be used to send SCPI commands to a programmable power supply or other test equipment.

The delay setting determines how long after the noise source's power is turned on or off, before the noise figure measurement starts. This should be long enough to allow the noise source output to settle, but not too long so that tests over a large number of frequencies take a long time to run. The ideal value will vary with the noise source and power supply.

Noise source control dialog

14: Results Table

Displays measurement results.

  • Frequency/gain - Frequency of the measurement in MHz, gain or other setting as per (7).
  • NF - Calculated noise figure in dB.
  • T - Calculated noise temperature in Kelvin with a reference temperature of 290K.
  • Y - Measured Y factor in dB (difference in measured power when the noise source is on and off).
  • ENR - Excess noise factor of the noise source in dB.
  • Floor - Noise floor in dBm assuming 1Hz bandwidth at 290K.

Noise figure results table

15: Results Chart

Plots the results (NF, T or Y) vs frequency as a line chart.

16: Open reference data

A set of reference data in .csv format can be loaded for comparisons with the measurement results. The first column of the .csv file should contain frequency and the second the noise figure in dB. The first row should contain a header (E.g. "Frequency,NF" although the exact text is ignored).

SDRPlay Duo Noise figure comparison

16: Clear reference data

Clears the reference data, so the chart only plots the measured data.

Usage

A typical h/w setup for measuring the noise figure of a receiver is shown below:

H/W setup

A DC blocking capacitor at the output of the noise source for SDRs with a bias tee is recommended.

The noise source may be a device from the 346 family (E.g. Keysight 346B or NoiseCom NC346), but also can be a lower cost device that is supplied with accurate ENR calibration data. (Inaccurate ENR values can significantly impact the calculated NF). The ENR calibration data indicates the difference in power output when the noise source is powered off compared with when it is powered on. As the first setup step, this calibration data should be entered in to the ENR dialog (12).

Next, we need to setup how the SDRangel powers on and off the noise source. This is set in the Noise Source Control Dialog (13). For a 346 device, a programmable power supply outputting 28V would be used. Providing the VISA libraries are installed (see below), we can send SCPI commands to enable and disable the PSU's output. As an example, for a Rigol DP832, we can set the channel 1 output to be 28V and enable it, with:

:SOURCE1:VOLTage 28
:OUTPut:STATe CH1,ON

And then disable it with:

:OUTPut:STATe CH1,OFF

The final settings needed are the frequencies or gains to measure the NF at. This can be set with (7) and (8), to step through a range or a list of specific values.

To start the measurement, press (9).

Examples

Here is a plot comparing the measured noise figure for tuner 1 of a SDRplay Duo, compared to the datasheet values.

SDRPlay Duo NF comparison

Here is a plot comparing measured values for a USRP B210 for the RF A RX2 port to measured values for the TX/RX port. As we can see, there is lower noise on the RX2 port:

B210 input NF comparison

Here is a plot comparing measured values for a Nooelec SMArTee XTR on its own, with a Nooelec Sawbird GOES LNA and with a Sawbird+ GOES LNA. As can be seen, a LNA makes a massive difference (12dB+) to the overall NF, and allows low cost SDRs to get similar NFs to more expensive devices, as the total NF is primarily determined by the LNA, if it has a decent amount of gain:

LNA comparison

In these plots, gain is swept at a single frequency (1420MHz), firstly for a B210 on its own, and then a B210 with a Nooelec H1 LNA. While the NF is lowest at maximum gain for the standalone B210, due to the high gain of the LNA, the lowest NF for the combined devices is actually well below the maximum B210 gain setting.

NF vs Gain comparison

VISA libraries

VISA libraries are available for Windows, Linux and MacOS from: