Wiki sections

Wiki SDR SA PRO

Level calibration in dBm

An IQ receiver shows levels relative to its own full scale — in dBFS; what that means at the input is known only to someone who fed a known power into it. The Calibration tab of SDR SA PRO turns such a measurement into a table of offsets: you feed a reference power at the tuning frequency, enter it in dBm and take a point from trace T1, and where the table applies the levels move to dBm. This page covers how to take a point, why the app may refuse, where the table applies and where a frame stays in dBFS, which sources this does not concern and where the file lies. PRO

How it works 0.9.57

Point
Three values: the tuning frequency, the gain path signature and the offset. Offset = reference power − the level shown on trace T1.
Gain path signature
The string by which the app names the device's present gain, for example lna32-vga36-amp0 on a HackRF One, lna3-vga18 on a Fobos SDR, g30 on a bladeRF, modemanual-gain40 on a Pluto. A point applies only with the same signature: an offset taken at one gain does not fit another.
Table
All the points of one receiver. Each receiver has its own: a device is told apart by driver, board and serial number. When you connect a receiver, the app reads its file by itself if there is one.
Stations
When the window holds several stations, each has its own Calibration tab, with its own table and its own Apply the dBm scale box; the side panel shows the tab of the active station 0.9.58. The files of all devices lie in one shared folder (below). See Several devices: stations.
Constant offset
The Cable / attenuator / antenna, dB field — one number for the whole path, apart from the points.

Where the table applies, the reading = dBFS + the point offset + the constant offset.

How to take a point

  1. Open the receiver and set the gain you measure at — manually, not AGC.
  2. On trace T1 set the rms detector and the Live or Average mode. By default T1 has the peak detector, and with it the app will not take a point (Traces, Detectors). If T1 is in the Average mode, pick Power in the Averaging list: the app does not check for Log (video) here, and it would shift the point.
  3. Feed a known power into the receiver input at the tuning frequency — for example, a generator through an attenuator.
  4. On the Calibration tab enter this power in the Reference power, dBm field.
  5. Press Take a point at … MHz. The result or the reason for a refusal appears under the button.
  6. Repeat at other frequencies and at another gain. Where the table already applies, the trace is already in dBm and the app will refuse; first clear the Apply the dBm scale box, and set it again after the last point.
  7. Press Save. There is deliberately no auto-save: a calibration is a measurement, and a stray point must not overwrite it by itself.

The “Level scale” group

Now: dBm — …
In green: the table applies to the latest frame. After the dash — the table's label.
Now: dBFS — the table exists but does not apply: …
In amber: there are points, but the frame is outside them. After the colon — the reason.
Now: dBFS — no table (… points, application …)
There are no points yet, or the box has switched application off.
Device: … · gain path now: …
Whom this table is for and what the gain path signature is. A point gets the signature of the moment the button is pressed, and the result line shows it.
Apply the dBm scale
A check box; on by default, not saved between launches. When it is off, frames go in dBFS and the points stay in the table. Points can be taken in this state as well.

The “Take a point” group

Reference power, dBm
What is fed into the input. From −150 to 30 dBm, −30 by default; not saved between launches. This number is your responsibility: the app takes it on trust.
Take a point at … MHz
The button's name holds the present tuning frequency. The button is disabled unless a receiver is open: no point can be taken with the demo signal or a recording.
Result line
Taken: … MHz · shown … dBFS · reference … dBm → offset … dB · gain path … or the reason for a refusal (table below).

The app reads the live trace T1 and takes the largest cell within three cells on either side of the tuning frequency. So the reference signal must clearly stand above everything else in this window. A new point at the same frequency (closer than half a cell) on the same gain path replaces the old one.

Why a point was not taken

A refusal adds no point; the reason is written under the button.

What it saysWhat it means
A power analyser already shows dBm — there is nothing to calibrate.A tinySA is open: the instrument calibrates its levels itself.
The tuning frequency is unknown — no receiver is open.The app does not know the tuning frequency.
There is no trace T1: switch it on and wait for a frame.T1 is off, hidden or has no frame yet.
Trace T1 is empty.The trace has no data.
Trace T1 was taken at another tuning — wait for a fresh frame.The receiver has just been retuned, and the trace content is still the old one.
The trace is already in dBm — there is nothing to calibrate.The table already applies to this frame. To add or retake a point, clear Apply the dBm scale.
The detector «…» does not give mean power — set RMS.T1 has the wrong detector. The app accepts rms and sample.
The trace is held — switch hold off and wait for a fresh frame.T1 is in the Max hold or Min hold mode.
The frequency … MHz is outside the trace (…–… MHz).The tuning frequency lies outside the band T1 shows.
The trace is not measured around the tuning frequency.The cells near the tuning frequency hold no numbers.
The gain path signature is unknown — there is nothing to bind the point to.The source has not named its gain state.
Under AGC the gain drifts — switch AGC off and take the point with manual gain.An RTL-SDR or a bladeRF under AGC. On a Pluto the AGC modes have a differently worded signature, and this refusal does not occur there: watch the manual mode yourself.

The “Point table” group

  • A point row holds the frequency, the offset in dB, the gain path signature and a button with a cross that deletes this point. While there are no points it says No points yet.
  • Cable / attenuator / antenna, dB — the constant offset for cable loss, an attenuator or an antenna factor. From −100 to 100 dB, 0 by default. The number is added to the reading at all frequencies: a positive one raises it, a negative one lowers it. Choose the sign by where you want to see the level. The value is saved in the file together with the points. Enter it after the first point: while there are neither points nor a file, the app does not keep this number.

The “File” group

Save
Writes the table to this receiver's file or to the file you last opened or saved. The path stands under the buttons; while there is no file yet — Will be written to …. Without points the button is disabled.
Open…
Reads a JSON file in place of the present table: the points and the constant offset. The app does not check whose file it is. A bad file is not read, and the reason stands in a red line.
Save as…
The same as Save, to a file you choose. When a device is connected, the app by itself reads only the file at its default path.
Clear
Removes all points from the window. The file on disk stays, and at the next start the table is read again; Save will not write an empty table.

The default file lies in the calibration subfolder of the data folder, in the installed package — Documents\SDR SA PRO\calibration (Settings, files and language). Each receiver has its own: the name is made from the driver, the board and the serial number, in safe characters only. The format is JSON. All stations share the folder: each has its own device, and so its own file.

Where the table applies

Every frame is checked separately. The table applies when there are points for the present gain path signature and the whole frame lies within their frequencies plus a margin.

  • Between points the offset is linear in frequency.
  • Beyond the outermost points the offset is constant — the same as at the outermost point, but not far: the margin is the larger of two numbers, 20 MHz or 10 % of the range of this gain path's points.
  • One point applies within ±20 MHz of its frequency. A point at 2255 MHz covers 2235–2275 MHz, so a frame wider than 40 MHz around it stays in dBFS.
  • Two points, at 2000 and 3000 MHz, cover 1900–3100 MHz.
  • A sweep is one frame as well: the table has to cover the whole swept range.
  • Zero span takes the offset at the tuning frequency.

An honest dBFS is better than an invented dBm: outside these limits the app does not convert the levels and says why.

What changes when the table applies

  • The frame levels are converted to dBm before they are shown: traces, markers, the scale, auto scale and the density display all see them.
  • The trust bar gains a Cal. field with the table's label: the word cal, a date and the device name. The date in the label is today's, not the date the points were taken.
  • IQ recording is not concerned: the samples themselves go into the file.
  • The level in the Scanner list and the threshold of the alarm zones stay in dB above the local floor, not in dBm.

The unit label in the corner of the spectrum, in the Amplitude group and next to the marker numbers, and the dBFS — UNCAL badge do not depend on the table in versions 0.9.57 and 0.9.58 and keep saying dBFS, although the numbers themselves are already in dBm. Whether the dBm scale applies is shown by the Cal. field on the trust bar and the Now: … line on the tab.

Why a frame stayed in dBFS

When there are points but the frame is outside them, the Cal. field stands in amber with the words dBFS — …, and after the dash comes one of these reasons:

What it saysWhat to do
no points for the gain «…» (available for: …)Go back to a gain that has points, or take points at this one.
the calibration was taken at …–… MHz, the frame is …–… MHzNarrow the span or the swept range, or take points at the edges.
zero span without a known tuning frequencyThe app does not know at which frequency to take the offset.

Which sources this concerns

  • IQ receivers — HackRF One, RTL-SDR, ADALM-Pluto / Pluto+, Fobos SDR, bladeRF 2.0 micro: each has its own table.
  • tinySA / tinySA Ultra — not concerned: it is a power instrument, it delivers dBm by itself, and the table does not touch its frames.
  • The demo signal and IQ recordings — no point can be taken: the button is disabled.
  • The free edition — there is no tab, and no Cal. field on the trust bar either.

Limitations

  • The reference source and the error are yours. The app records what you entered and does not invent a calibration error. The accuracy of the dBm scale is the accuracy of your generator, attenuator and cables and of how the points were taken.
  • Points are taken only from trace T1, only with the rms or sample detector, without hold and without AGC.
  • A point is bound only to the frequency and the gain path signature. Sample rate, RBW and window are not part of it, and the app does not check that they are the same.
  • Every gain you measure at needs points of its own.
  • Saving is by button only; unsaved points are gone when you exit the app.
  • The tab exists only with a valid key — SDR SA PRO.

The wiki describes version 0.9.58. Your app's version is shown in the Help menu, under About. Found a mistake? Write to us.