How are you Marcus?
First, thanks a lot.
I've done measurements for a specific Gain, frequency, temperature.
I've transmitted from a signal generator CW signal -> power
splitter 1:2 to( spectrum analyzer and the USRP X310).
I first transmitted a CW, and then I transmitted another my
system unique signal.
Can you please elaborate why you have suggested to use noise
source? I'm familiar with using it for Noise Figure measurements
of DUT by using Y Factor method, but I want to calibrate the
power of signal between Power[dBFS] in GRC to Power[dBm]
presented in spectrum analyzer.
I used RMS for [linear voltage] and after that 20*log(linear
voltage) to get Power[dBFS].
I understand that in the GNURadio flow graph everything
is float-point values in the range {-1.0,+1.0} and so I
calculated power[dBFS] according to 20*log10(1)=0[dBFS]
I think the calibration was OK and I've found the correction
factor between Power[dBFS] in GNURadio to the Power[dBm] received
in RX ANT connector as was displayed in the spectrum analyzer at
the same time by using power splitter.
As for saving complex\short to File Sink I'll update.
Thanks
Dor
image.png
בתאריך יום ד׳, 28 ביוני 2023 ב-23:43 מאת Marcus D. Leech
<patchvonbr...@gmail.com>:
On 28/06/2023 16:35, Dor Ratz wrote:
Hey Marcus,
Thanks.
Let me see if I get it right.
Please see the attached gnuradio setup below .
1. Does the USRP pass with Wire Format=Automatic the int16
samples to the host computer? The ADC of X310 is 14 bits
represented by 16 bits samples, so the maximal possible
value in time domain for a strong enough signal is 2^(14-1)=
(+-8192 ) ?
NO! I've already said, the samples from the ADC are *scaled*
before they hit the wire, into the wire format, which in this
case
is sc16. Further, the samples that "hit the wire" are
*after* any manipulations by the DDC. The values on the wire
can go from +/- 32767, although they rarely actually do.
2. So if I open the file sink (which was saved as short =
int16) with python as int16 and look in python in the time
domain:
* In the time domain the maximal possible value is still
(+-8192 ) ?
Once the samples hit the GR flow-graph they are typically in
{-1.0,+1.0}, and then you can specify scaling coefficients when
you save them as complex int16.
* In FFT, can I calculate Power[dBFS] according to
20*log10(8192)=0[dBFS]?
I strongly suspect that you're trying to do power estimation
based on an empirical model, rather than by actual measurement
with actual calibration equipment present. I have
already said this is a bad approach, as have many others on
this list.
3. If I want to open samples in QT GUI Sink as in the setup
below, then can I do it as below with IShort to Complex
block with scale factor = 8192, and then in the time domain
in QT GUI Sink I will see :
* In time domain - a float value with maximal possible
value of (-+1) ? because it was normalized by 8192.
* In FFT , can I calculate Power[dBFS] according to
20*log10(1)=0[dBFS]?
Thanks you,
Dor
image.pnghugh
image.png
image.png
image.png
בתאריך יום ב׳, 26 ביוני 2023 ב-21:46 מאת Marcus D. Leech
<patchvonbr...@gmail.com>:
On 26/06/2023 14:43, Dor Ratz wrote:
Thanks Marcus.
If so, then I can calibrate USRP -> GNURadio by writing
down the :
- Power of the signal in FFT in [dB] -> convert to
[dBm] by comparing power when connected to a spectrum
analyzer and changing Gain, frequency and so on and
comparing both [dB] in FFT on GNURadio and power[dBm]
in laboratory spectrum analyzer.
- Power of signal [dBFS] by calculating from the time
domain on QT GUI Sink as we said.
If I save the samples as int16 to File Sink, then when
I open it with Python I should still see float values
{-1,+1} and calculate power[dBFS] according to
20*log10(1)=0[dBFS]? Correct me if I'm wrong.
Int16 conversion in GR will use a conversion constant.
Something like +/- 32767
Am I missing something?
Thanks
Dor
בתאריך יום ב׳, 26 ביוני 2023 ב-21:02 מאת Marcus D.
Leech <patchvonbr...@gmail.com>:
On 26/06/2023 13:58, Dor Ratz wrote:
Hey Steve and Marcus,
Thanks a lot.
I'll try to do it.
_Questions regarding dBFS, if you maybe have a clue _
1. Does the GNURadio amplitude axis in QT GUI
TIME DOMAIN are always float-point values in
the range {-1.0,+1.0} for a received signal
from USRP Source block?
There's a STRONG convention in Gnu Radio that
signals are always in the range {-1.0,+1.0}, and
drivers for SDR devices
are generally designed to comply with this.
1. If the answer to 1 is yes, then if I see
amplitude = 0.5 , does it mean
20*log10(0.5)=(-6dBFS) ? is that correct?
Yes.
I've assumed it because:
The ADC of X310 has 14 bits. so the MSB values are
2^(14-1)=2^13 = + - 8192 (signed values).
Power[dBFS] = 20*log10(voltage_value_measured/8192)
The problem is that Output Type and Wire Format in
USRP Source block are complex int16, so I'm not
sure if the samples that are streaming from USRP
into the host computer are 14 bits represented by
16 bits. And if yes, so do I need to change the
above calculation?
ADC values are scaled into the wire-format. But IN
ADDITION, "raw" ADC values will almost never
actually be seen in the
signal flow once it gets to Gnu Radio, because
they've been filtered by the DDC mechanism in the
radio--this is true not
just of USRPs, but most SDRs that have a bit of
DSP between the ADC and the host interface.
Thanks
Dor
בתאריך יום א׳, 25 ביוני 2023 ב-4:11 מאת Steve
Hubbard <stevezsuz...@iinet.net.au>:
Hi Dor,
I don't follow all your email but in general
you can add the powers (magnitudes squared) of
the FFT bins to give you the equivalent of
power in the time domain (Parceval's theorem).
Strictly speaking I recall there is a slight
tweak to the DC bin value but I don't remember
the detail. It goes without saying that
baseband signals and FFT bin values are
complex (IQ).
Keep in mind that when you feed a single
frequency into an FFT, it may fall between 2
bins. In this case the peak will be lowered
(scalloping loss). You might want to consider
the use of a suitable window to compensate for
this. The window will lower the total power,
which you also need to allow for.
I think -15 dBm is the point beyond which
saturation, distortion or worse might occur.
The point at which you reach full scale on the
ADC will depend on the front end gain setting.
I don't know what this might be for your set
up. At some gain settings compression might
occur in the analogue front end before you
reach full scale. Gain will also be frequency
and temperature dependent to some degree. The
UBX-160 datasheet lacks detail.
I have experience calibrating the X310 but
with a different front end, using GNU radio to
capture the baseband signal but Matlab to
process it.
Regards,
Steve
On 24/6/23 21:45, Dor Ratz wrote:
Hello,
I wish to use USRPX310 with UBX-160
daughterboard as a calibrated spectrum
analyzer to show the received signal power in
units of [dBm] and [dBFS] for my setup.
I've read discussion
<https://lists.gnu.org/archive/html/discuss-gnuradio/2017-06/msg00214.html> and
the GNURadio FAQ
<https://wiki.gnuradio.org/index.php/FAQ> before
so I know I must calibrate my setup
because the values in GNURadio don't mean a
thing.
So I wanted to ask if this procedure seems to
make sense for you. I will be glad to
receive any suggestions.
I'm gonna connect my signal generator to
spectrum analyzer to measure the cable loss.
After that, gonna connect it to the USRP to
measure the power[dB] in order to understand
what is the power[dBm] in GNURadio.
image.png
Is this table correct to calibrate and
calculate the Power[dBm] on GNURadio in FFT?
Signal generator Power[dBm] Power [dBm] on
spectrum anlayzer Power[dB] on GNURadio in
FFT Power[dBm] on GNURadio in FFT
-60 -61 -66 -61
-65 -66 -71 -66
-70 -71 -76 -71
-75 -76 -81 -76
-80 -81 -86 -81
-85 -86 -91 -86
-90 -91 -96 -91
_Procedure for wideband signal (not CW)_
Right now the power[dB] must be
calculated with the occupied FFT bins, let's
assume this is the signal and the NFFT=128,
so we can see that the signal occupies only
2/10 grids in the FFT so:
Power_of_signal[dB] = Peak_power[dB]+
10*log(FFT_bins_with_signal) = (-15dB) +
10*log10((2/10)*(128)) = (-15dB) + (14) = (-1dB)
image.png
_Convert to dBFS for the USRP X310_
How do you propose to do it?
The ADC of X310 has 14 bits. so the MSB
values are 2^13 = + - 8192 (signed values).
Power[dBFS] =
20*log10(voltage_value_measured/8192)
_Some questions:_
_
_
1. Does the gnuradio amplitude axis in QT
GUI TIME DOMAIN are always float-point
values in the range {-1.0,+1.0} for a
received signal from USRP?
2. If the answer to 1 is yes, then if I see
amplitude = 0.5 , does it mean
20*log10(0.5)=(-6dBFS) ? is that correct?
3. I know that the maximum input power for
the UBX is (-15 dBm), but what does it
mean that (-15dBm) input power is 0[dBFS]?
4. Has anyone had experience with RX power
calibration
<https://files.ettus.com/manual/page_power.html> of
USRPX310 with UBX-160?
If I understand correctly, it is
supporting the power API:
image.png
Thanks
Dor