Skip to content

Calibration

Todd Schumann edited this page Jul 12, 2019 · 12 revisions

This test is still in development. Notes on this wiki page may be out of date.

The Calibration test is a fully automated routine which determines the scale factor, noise figure, equivalent noise bandwidth, and compression point across a user-set range of frequencies, gains, and sample rate/clock frequency pairs.

The test procedure is as follows (each part can be skipped if the corresponding test parameter is set to False):

  1. Measures noise powers across frequency, gain, and sample rate
  2. Measures scale factor across frequency, gain, and sample rate
  3. Measures equivalent noise bandwidth (ENBW) across sample rate*
  4. Uses ENBW to determine noise figure assuming a temperature of 300K on the input noise**
  5. Measures compression across frequency, gain, and sample rate***

* ENBW is assumed to be the same for all frequencies and gains with the same sample rate. This is not technically true as the front end is changing in different frequency ranges and gains. However, the digital filter, which is dependent on sample rate is by far the sharpest filter, so this estimation is relatively accurate.

** If ENBWs are not measured during this test, they must be supplied as a Python list in parameter noise_figure_enbws.

*** Compression testing takes the longest by far since it requires 20+ data points are each frequency/gain/sample rate point. To reduce the calibration time, the user may skip running compression tests at different sample rates, since the sample rate (digital side) should not affect the compression point (analog side). Additionally, to further speed up the calibration, the user has the option to decimate the frequencies that the compression test is run over and interpolate the data into the final calibration point.

Test capabilities

  • Applying a stimulus
  • Verify power

Data Saving and Plotting

  • logging_save_test_summary: Setting this to True will save a calibration file for the SDR which can be loaded by scos-sensor or SDR Calibrator. It also saves CSV files summarizing the data taken which can be more easily compared to one another to look for anomalies.

Possible equipment

* Care should be taken when choosing a power meter that its dynamic range is sufficient to verify the entire power range. This test will likely use a very broad range of power if testing compression at multiple gain levels.

Profile Categories

  • Test Parameters
    • test_type = 'calibrate
    • test_measure_scale_factor = [USER_SET]: if set to True, the test will measure scale factors
    • test_measure_enbw = [USER_SET]: if set to True, the test will measure equivalent noise bandwidths (see above)
    • test_measure_noise_figure = [USER_SET]: if set to True, the test will measure noise figures
    • test_measure_compression = [USER_SET]: if set to True, the test will measure compression points
    • test_sample_rates= [USER_SET]: A Python list of the sample rates to measure the above values at
    • test_clock_frequencies= [USER_SET]: A Python list of the clock frequencies to use with the above sample rates. Every sample rate must have a corresponding clock frequency.
  • Sweep Parameters
  • Frequency Parameters
  • Power Parameters
  • FFT Parameters
  • Logging Parameters

In addition, each type of measurement that this test runs has its own set of parameters similar to the test corresponding to those measurements. See the example profile for more details on these.

  • Scale Factor Parameters
    • scale_factor_power_level = [USER_SET]: Power level to measure scale factors with
    • scale_factor_measurement_method = [USER_SET]: Power measurement method to determine scale factor. It's recommended to use 'normalized_fft_maximum_power' to avoid issues if the power approaches the noise floor.
  • ENBW Parameters
    • enbw_frequency = [USER_SET]: Frequency to measure the ENBW at
    • enbw_gain = [USER_SET]: SDR gain to measure the ENBW at
    • enbw_power_level = [USER_SET]: Power level to measure the ENBW at
    • enbw_measurement_band_stretch = [USER_SET]: Factor to enlarge the bandwidth when measuring the filter transfer function. Setting to 1 will measure the a band equal to the sample rate. Setting to 2 will measure a band twice the sample rate. It's recommended to use the Bandwidth test first to ensure that the band that's measured stretches down to the noise floor.
    • enbw_transfer_function_points = [USER_SET]: Number of points to measure in the transfer function. Ensure that sufficient points are on the rolloff of sharp filters to accurately integrate the power.
  • Noise Figure Parameters
    • noise_figure_enbws = [USER_SET]: ENBWs measured separately to use when calculating noise figures. Currently, this parameter has to be set, even if the test is measuring ENBW, however, it is ignored.
    • noise_figure_terminating = [USER_SET]: Setting this to True will cause the test to pause and allow the user to connect a 50Ohm terminator to the input of the SDR before measuring noise power. Care should be taken as it also pauses after measuring noise powers to allow the user to reconnect the RF feed from the signal generator to resume (make sure you don't run it in this configuration and forget to reconnect or the program will wait indefinitely). Setting this to False will have the signal generator use the power in the next parameter when measuring noise. _If the signal generator is outputting power far below the noise floor, the input to the SDR looks approximately like a 50Ohm terminator.
    • noise_figure_input_power = [USER_SET]: Power to use when measuring noise power. Note that this is set on the signal generator regardless of the previous setting. Ensure that this is well below the noise floor and ensure that it will not cause damage or injury (for example, use -200).
  • Compression Parameters
    • compression_skip_sample_rate_cycling = [USER_SET]: Setting this to True will allow SDR Calibrator to skip cycling between sample rate/clock frequency pairs when measuring compression. If set to False, compression will be measured at all sample rate/clock frequency pairs.
    • compression_decimate_frequencies = [USER_SET]: Factor to decimate the number of frequencies when measuring compression (e.g. setting to 10 will use every 10th frequency). Frequency division boundaries are still added in. Care should be taken that at least 2 frequencies are measured or interpolation errors can result. Setting this to 1 or False will disable this. Note: setting this to a value less than 1 will cause errors. There is currently no check to ensure that this is set correctly.
    • compression_min_power = [USER_SET]: Minimum power to begin measuring compression
    • compression_max_power = [USER_SET]: Maximum power to measure compression. If this power is reached and compression has not been found, the compression level will be set to 100.
    • compression_power_step = [USER_SET]: Step size to increase the power when measuring compression.
    • compression_measurement_method = [USER_SET]: Power measurement method to use when measuring compression. It is recommended to use 'normalized_fft_maximum_power' since some powers may be very close to the noise floor depending on settings.
    • compression_threshold = [USER_SET]: Difference, in dB, between the measured power and the input power to determine compression. For example, setting this to 3 will measure 3dB compression.
    • compression_linearity_steps = [USER_SET]: Number of points to use when checking for linearity between the input power and measured power. Please refer to the compression test description for more information.
    • compression_linearity_threshold = [USER_SET]: R2 threshold value for the linear fit between input and measured power to determine when the linear range has been found. Please refer to the compression test description for more information.
  • Spurious Free Parameters
    • This test has not been implemented yet, so all parameters in this category are ignored.