Wednesday, November 30, 2022

Help Needed for Differentiation Implementaion

Hello all,

I am currently at the example "symbol_differential_filter.grc" in the GNU Radio tutorial. It's in the chapter "QPSK Mod and Demod". My question is how taps [-1, 0, 1] is implementing the differentiation in "Decimating FIR Filter" block.

For first difference, the equation should be y[n] = x[n] - x[n-1]. In that case the taps should be [1, -1]. Here is my confusion. Why taps [-1, 0, 1] have been used and which difference it is implementing?

Regards,
Shuvodip

Re: BW(Sample Rate) Issue

Hello Cinaed,

I've not experienced this problem with Gnuradio you describe, but
in another context, spacecraft communication, we had a simple test setup
that transmitted a fixed pattern of alternating ones and zeros.

However the way error coding was done the lock was always poor.

For testing purposes you might have much better luck by sending a "sudo-random"
noise sequence that you define and write into the transmit code. Then
test that this code arrives correctly on the receive side.

We found the lock was very reliable, for the noise-like sequence.

Hope this helps, but just a guess

Glen


> On Nov 30, 2022, at 3:54 PM, Cinaed Simson <cinaed.simson@gmail.com> wrote:
>
> Hi Rohith - Ihe minim sampling rate for the Pluto is in the ball park of 500 KHz.
>
> See
>
> https://ez.analog.com/adieducation/university-program/f/q-a/557730/pluto-sdr-sampling-rate
>
> -- Cinaed
>
>
> On 11/30/22 05:54, Rohith Rajan wrote:
>> I am asking a doubt regarding receiver using an Adalm Pluto SDR
>> In the receiver section we are using Polyphase Clock Sync, Linear Equalizer and Costas Loop.
>> My doubt is that is the configuration parameters of these blocks are dependent on the BW of the signal(Sample Rate)
>>
>> Keeping the parameters as Normal (In Polyphase Clock Sync block- No of filters(nfilts) as 32, Loop Bw .0628, RRC filter as
>>
>> firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), 0.35, 11*sps*nfilts), sps as 4
>>
>> ; In Linear Equalizer No of Taps as 15 ;In CostasLoop Loop BW as .0628) when I set the BW(sample Rate around)1MHz I can receive the datas.
>>
>> But when I set the BW(Sample Rate) as 125KHz I cannot receive the datas.
>>
>> Anyone plese tell me what modification I have to make ?
>>
>

Re: BW(Sample Rate) Issue

Hi Rohith - Ihe minim sampling rate  for the Pluto is in the ball park of 500 KHz.

See

  https://ez.analog.com/adieducation/university-program/f/q-a/557730/pluto-sdr-sampling-rate

-- Cinaed


On 11/30/22 05:54, Rohith Rajan wrote:

I am asking a doubt regarding receiver using an  Adalm Pluto SDR
In the receiver section we are using Polyphase Clock SyncLinear Equalizer and Costas Loop.
My doubt is that is the configuration parameters of these blocks are dependent on the BW of the signal(Sample Rate)

Keeping the parameters as Normal  (In Polyphase Clock Sync block- No of filters(nfilts) as 32, Loop Bw .0628, RRC filter as

firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), 0.35, 11*sps*nfilts), sps as 4

; In Linear Equalizer No of Taps as 15 ;In CostasLoop Loop BW as .0628) when I set the BW(sample Rate around)1MHz I can receive the datas.

But when I set the BW(Sample Rate) as 125KHz I cannot receive the datas.

Anyone plese tell me what modification I have to make ?


BW(Sample Rate) Issue

I am asking a doubt regarding receiver using an  Adalm Pluto SDR
In the receiver section we are using Polyphase Clock SyncLinear Equalizer and Costas Loop.
My doubt is that is the configuration parameters of these blocks are dependent on the BW of the signal(Sample Rate)

Keeping the parameters as Normal  (In Polyphase Clock Sync block- No of filters(nfilts) as 32, Loop Bw .0628, RRC filter as

firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), 0.35, 11*sps*nfilts), sps as 4

; In Linear Equalizer No of Taps as 15 ;In CostasLoop Loop BW as .0628) when I set the BW(sample Rate around)1MHz I can receive the datas.

But when I set the BW(Sample Rate) as 125KHz I cannot receive the datas.

Anyone plese tell me what modification I have to make ?

Tuesday, November 29, 2022

New HDL Co-Simulation with GNURadio and Riviera-PRO

Hi All –

 

Nice to meet most of you at GRCon22. We showcased our new HDL co-simulation interface between GNURadio and Riviera-PRO.

 

https://www.aldec.com/en/products/functional_verification/riviera-pro

 

You are now able to co-simulate and debug your HDL IPs within GNURadio flowgraphs.

 

Let me know if anyone is interested to do a free evaluation. We're very much looking forward to your feedback.

 

Simply reply to my email (louied@aldec.com) with the following information and we will process your request.

 

Company Name:

Address:

Contact Name:

Title:

Email:

MACID of your machine:

 

Thanks and good day!

Louie De Luna

Aldec Inc.

 

Monday, November 28, 2022

Re: QT GUI Label error in v 3.10.1.1

I'd recommend adding

  export QT_QPA_PLATFORM=wayland

to your

  $HOME/.bash_profile

file or your

  $HOME/.bashrc

file - if you feel comfortable editing files on Linux.

I prefer the .bashrc since this were I place all my exports and group them all together.

However, the .bashrc isn't as tolerant to errors as the .bash_profile file.

In either case make a backup of the file before you edit the file.

You can check the results after you login again by typing
 
   echo $QT_QPA_PLATFORM

-- Cinaed


On 11/28/22 13:05, Jose Ruvalcaba wrote:
HI Cinaed and Jeff,

Sorry for the late reply. I checked if I had the qt-6 wayland and xwayland installed. Turns out I didn't have the qt6-wayland installed so I installed it. The issue still remained so I disabled wayland and it seemed to work. Just like what you guys saw, I stopped seeing the issue on my flowgraph. 

However, I attempted another flowgraph that used QT GUI Label and the issue came back. I have added the new flowgraph I created along with its generated code.

I am working from a WIndows machine that has  a Virtual Machine with Ubuntu 22.04. One quick question though: Where would I set the export QT_QPA_PLATFORM

Thanks,
Jose Ruvalcaba

On Thu, Nov 24, 2022 at 5:25 PM Cinaed Simson <cinaed.simson@gmail.com> wrote:
Hi Jose - I can run your script for hours without any issues on both GR 3.8 and 3.10.

Have you tried setting

  export QT_QPA_PLATFORM=wayland

as indicated in the first error message - to see if the script runs longer then 10 minutes?

My guess is if you eliminate the first exception the other exceptions will disappear.

Are you working from the console of a linux machine - or are you working from the console of a Windows machine - and then connecting to the a Linux machine by some method?

-- Cinaed


On Tue, Nov 22, 2022 at 10:23 PM Jose Ruvalcaba <joruvalc@gmail.com> wrote:
Hello,

I've been noticing an issue popping out everytime I stop running my flowgraph and I was wondering if someone had some insight on it. I have a flowgraph where a signal source is connected to a probe signal block. This block is constantly updating values and are being displayed using the QT GUI Label block. However, after running my flowgraph for about 10 minutes I get the following error:

Executing: /usr/bin/python3 -u /home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py


Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.

Exception in thread Thread-1 (_amp_probe):

Traceback (most recent call last):

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 150, in _amp_probe

    self.doc.add_next_tick_callback(functools.partial(self.set_amp,val))

  File "/usr/lib/python3/dist-packages/gnuradio/gr/hier_block2.py", line 88, in __getattr__

    return getattr(self._impl, name)

AttributeError: 'gnuradio.gr.gr_python.top_block_pb' object has no attribute 'doc'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner

    self.run()

  File "/usr/lib/python3.10/threading.py", line 953, in run

    self._target(*self._args, **self._kwargs)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 152, in _amp_probe

    self.set_amp(val)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 182, in set_amp

    self.set_variable_qtgui_label_0(self.amp)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 189, in set_variable_qtgui_label_0

    Qt.QMetaObject.invokeMethod(self._variable_qtgui_label_0_label, "setText", Qt.Q_ARG("QString", str(self._variable_qtgui_label_0_formatter(self.variable_qtgui_label_0))))

RuntimeError: wrapped C/C++ object of type QLabel has been deleted


It seems that my issue is related to the QT GUI Label block because when I remove it and add say QT GUI Number sink, this issue doesn't appear.


Has anyone experienced this issue? If so, would anyone be able to steer me in the direction to fix it? I am currently running on Ubuntu 22.04 and am running GNU RADIO 3.10.1.1 which I installed using sudo apt-get install. I've also attached the flowgraph I am talking about.


Thanks,

Jose Ruvalcaba



Re: QT GUI Label error in v 3.10.1.1

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#
# SPDX-License-Identifier: GPL-3.0
#
# GNU Radio Python Flow Graph
# Title: Pyephem FSPL v1.0
# Author: spacerfvm
# GNU Radio version: 3.10.1.1

from packaging.version import Version as StrictVersion

if __name__ == '__main__':
import ctypes
import sys
if sys.platform.startswith('linux'):
try:
x11 = ctypes.cdll.LoadLibrary('libX11.so')
x11.XInitThreads()
except:
print("Warning: failed to XInitThreads()")

from PyQt5 import Qt
from gnuradio import eng_notation
from gnuradio import qtgui
from gnuradio.filter import firdes
import sip
from gnuradio import analog
from gnuradio import blocks
from gnuradio import gr
from gnuradio.fft import window
import sys
import signal
from argparse import ArgumentParser
from gnuradio.eng_arg import eng_float, intx
import pyephemfspltest_epy_block_0 as epy_block_0 # embedded python block
import time
import threading

from gnuradio import qtgui

class pyephemfspltest(gr.top_block, Qt.QWidget):

def __init__(self):
gr.top_block.__init__(self, "Pyephem FSPL v1.0", catch_exceptions=True)
Qt.QWidget.__init__(self)
self.setWindowTitle("Pyephem FSPL v1.0")
qtgui.util.check_set_qss()
try:
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
except:
pass
self.top_scroll_layout = Qt.QVBoxLayout()
self.setLayout(self.top_scroll_layout)
self.top_scroll = Qt.QScrollArea()
self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
self.top_scroll_layout.addWidget(self.top_scroll)
self.top_scroll.setWidgetResizable(True)
self.top_widget = Qt.QWidget()
self.top_scroll.setWidget(self.top_widget)
self.top_layout = Qt.QVBoxLayout(self.top_widget)
self.top_grid_layout = Qt.QGridLayout()
self.top_layout.addLayout(self.top_grid_layout)

self.settings = Qt.QSettings("GNU Radio", "pyephemfspltest")

try:
if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
self.restoreGeometry(self.settings.value("geometry").toByteArray())
else:
self.restoreGeometry(self.settings.value("geometry"))
except:
pass

##################################################
# Variables
##################################################
self.fspl_test = fspl_test = 0
self.variable_qtgui_label_1 = variable_qtgui_label_1 = fspl_test
self.samp_rate = samp_rate = 32000
self.atten_test = atten_test = -1.0/(10.0**(fspl_test/20.0))
self.TLE_LINE_2 = TLE_LINE_2 = "2 25544 51.6433 79.0852 0005185 353.3514 119.8705 15.49577743364510"
self.TLE_LINE_1 = TLE_LINE_1 = "1 25544U 98067A 22292.82819656 .00008231 00000-0 15426-3 0 9997"
self.Radio_1 = Radio_1 = 100e6
self.Name_of_satellite = Name_of_satellite = "ISS (ZARYA)"

##################################################
# Blocks
##################################################
self.fspl = blocks.probe_signal_f()
self._variable_qtgui_label_1_tool_bar = Qt.QToolBar(self)

if None:
self._variable_qtgui_label_1_formatter = None
else:
self._variable_qtgui_label_1_formatter = lambda x: eng_notation.num_to_str(x)

self._variable_qtgui_label_1_tool_bar.addWidget(Qt.QLabel("Uplink FSPL (dB) = "))
self._variable_qtgui_label_1_label = Qt.QLabel(str(self._variable_qtgui_label_1_formatter(self.variable_qtgui_label_1)))
self._variable_qtgui_label_1_tool_bar.addWidget(self._variable_qtgui_label_1_label)
self.top_grid_layout.addWidget(self._variable_qtgui_label_1_tool_bar, 3, 0, 1, 1)
for r in range(3, 4):
self.top_grid_layout.setRowStretch(r, 1)
for c in range(0, 1):
self.top_grid_layout.setColumnStretch(c, 1)
self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
1024, #size
window.WIN_BLACKMAN_hARRIS, #wintype
0, #fc
samp_rate, #bw
"", #name
1,
None # parent
)
self.qtgui_freq_sink_x_0.set_update_time(0.10)
self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB')
self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
self.qtgui_freq_sink_x_0.enable_autoscale(True)
self.qtgui_freq_sink_x_0.enable_grid(True)
self.qtgui_freq_sink_x_0.set_fft_average(1.0)
self.qtgui_freq_sink_x_0.enable_axis_labels(True)
self.qtgui_freq_sink_x_0.enable_control_panel(False)
self.qtgui_freq_sink_x_0.set_fft_window_normalized(False)

labels = ['Source', 'Source with Atten', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
colors = ["blue", "red", "green", "black", "cyan",
"magenta", "yellow", "dark red", "dark green", "dark blue"]
alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0]

for i in range(1):
if len(labels[i]) == 0:
self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
else:
self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])

self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.qwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win)
def _fspl_test_probe():
while True:

val = self.fspl.level()
try:
try:
self.doc.add_next_tick_callback(functools.partial(self.set_fspl_test,val))
except AttributeError:
self.set_fspl_test(val)
except AttributeError:
pass
time.sleep(1.0 / (10))
_fspl_test_thread = threading.Thread(target=_fspl_test_probe)
_fspl_test_thread.daemon = True
_fspl_test_thread.start()
self.epy_block_0 = epy_block_0.blk(Event='None', frequency=Radio_1, tle_line_1=Name_of_satellite, tle_line_2=TLE_LINE_1, tle_line_3=TLE_LINE_2)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(atten_test)
self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 1000, 1, 0, 0)


##################################################
# Connections
##################################################
self.connect((self.analog_sig_source_x_0, 0), (self.blocks_throttle_0, 0))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_freq_sink_x_0, 0))
self.connect((self.blocks_throttle_0, 0), (self.blocks_multiply_const_vxx_0, 0))
self.connect((self.epy_block_0, 0), (self.fspl, 0))


def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "pyephemfspltest")
self.settings.setValue("geometry", self.saveGeometry())
self.stop()
self.wait()

event.accept()

def get_fspl_test(self):
return self.fspl_test

def set_fspl_test(self, fspl_test):
self.fspl_test = fspl_test
self.set_atten_test(-1.0/(10.0**(self.fspl_test/20.0)))
self.set_variable_qtgui_label_1(self.fspl_test)

def get_variable_qtgui_label_1(self):
return self.variable_qtgui_label_1

def set_variable_qtgui_label_1(self, variable_qtgui_label_1):
self.variable_qtgui_label_1 = variable_qtgui_label_1
Qt.QMetaObject.invokeMethod(self._variable_qtgui_label_1_label, "setText", Qt.Q_ARG("QString", str(self._variable_qtgui_label_1_formatter(self.variable_qtgui_label_1))))

def get_samp_rate(self):
return self.samp_rate

def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.analog_sig_source_x_0.set_sampling_freq(self.samp_rate)
self.blocks_throttle_0.set_sample_rate(self.samp_rate)
self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate)

def get_atten_test(self):
return self.atten_test

def set_atten_test(self, atten_test):
self.atten_test = atten_test
self.blocks_multiply_const_vxx_0.set_k(self.atten_test)

def get_TLE_LINE_2(self):
return self.TLE_LINE_2

def set_TLE_LINE_2(self, TLE_LINE_2):
self.TLE_LINE_2 = TLE_LINE_2
self.epy_block_0.tle_line_3 = self.TLE_LINE_2

def get_TLE_LINE_1(self):
return self.TLE_LINE_1

def set_TLE_LINE_1(self, TLE_LINE_1):
self.TLE_LINE_1 = TLE_LINE_1
self.epy_block_0.tle_line_2 = self.TLE_LINE_1

def get_Radio_1(self):
return self.Radio_1

def set_Radio_1(self, Radio_1):
self.Radio_1 = Radio_1
self.epy_block_0.frequency = self.Radio_1

def get_Name_of_satellite(self):
return self.Name_of_satellite

def set_Name_of_satellite(self, Name_of_satellite):
self.Name_of_satellite = Name_of_satellite
self.epy_block_0.tle_line_1 = self.Name_of_satellite


def main(top_block_cls=pyephemfspltest, options=None):

if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
style = gr.prefs().get_string('qtgui', 'style', 'raster')
Qt.QApplication.setGraphicsSystem(style)
qapp = Qt.QApplication(sys.argv)

tb = top_block_cls()

tb.start()

tb.show()

def sig_handler(sig=None, frame=None):
tb.stop()
tb.wait()

Qt.QApplication.quit()

signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTERM, sig_handler)

timer = Qt.QTimer()
timer.start(500)
timer.timeout.connect(lambda: None)

qapp.exec_()

if __name__ == '__main__':
main()

HI Cinaed and Jeff,

Sorry for the late reply. I checked if I had the qt-6 wayland and xwayland installed. Turns out I didn't have the qt6-wayland installed so I installed it. The issue still remained so I disabled wayland and it seemed to work. Just like what you guys saw, I stopped seeing the issue on my flowgraph. 

However, I attempted another flowgraph that used QT GUI Label and the issue came back. I have added the new flowgraph I created along with its generated code.

I am working from a WIndows machine that has  a Virtual Machine with Ubuntu 22.04. One quick question though: Where would I set the export QT_QPA_PLATFORM

Thanks,
Jose Ruvalcaba

On Thu, Nov 24, 2022 at 5:25 PM Cinaed Simson <cinaed.simson@gmail.com> wrote:
Hi Jose - I can run your script for hours without any issues on both GR 3.8 and 3.10.

Have you tried setting

  export QT_QPA_PLATFORM=wayland

as indicated in the first error message - to see if the script runs longer then 10 minutes?

My guess is if you eliminate the first exception the other exceptions will disappear.

Are you working from the console of a linux machine - or are you working from the console of a Windows machine - and then connecting to the a Linux machine by some method?

-- Cinaed


On Tue, Nov 22, 2022 at 10:23 PM Jose Ruvalcaba <joruvalc@gmail.com> wrote:
Hello,

I've been noticing an issue popping out everytime I stop running my flowgraph and I was wondering if someone had some insight on it. I have a flowgraph where a signal source is connected to a probe signal block. This block is constantly updating values and are being displayed using the QT GUI Label block. However, after running my flowgraph for about 10 minutes I get the following error:

Executing: /usr/bin/python3 -u /home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py


Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.

Exception in thread Thread-1 (_amp_probe):

Traceback (most recent call last):

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 150, in _amp_probe

    self.doc.add_next_tick_callback(functools.partial(self.set_amp,val))

  File "/usr/lib/python3/dist-packages/gnuradio/gr/hier_block2.py", line 88, in __getattr__

    return getattr(self._impl, name)

AttributeError: 'gnuradio.gr.gr_python.top_block_pb' object has no attribute 'doc'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner

    self.run()

  File "/usr/lib/python3.10/threading.py", line 953, in run

    self._target(*self._args, **self._kwargs)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 152, in _amp_probe

    self.set_amp(val)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 182, in set_amp

    self.set_variable_qtgui_label_0(self.amp)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 189, in set_variable_qtgui_label_0

    Qt.QMetaObject.invokeMethod(self._variable_qtgui_label_0_label, "setText", Qt.Q_ARG("QString", str(self._variable_qtgui_label_0_formatter(self.variable_qtgui_label_0))))

RuntimeError: wrapped C/C++ object of type QLabel has been deleted


It seems that my issue is related to the QT GUI Label block because when I remove it and add say QT GUI Number sink, this issue doesn't appear.


Has anyone experienced this issue? If so, would anyone be able to steer me in the direction to fix it? I am currently running on Ubuntu 22.04 and am running GNU RADIO 3.10.1.1 which I installed using sudo apt-get install. I've also attached the flowgraph I am talking about.


Thanks,

Jose Ruvalcaba


Sunday, November 27, 2022

Re: Implementation of OFDM TX and RX using GNURadio and USRP

On 27/11/2022 16:05, Daniel Estévez wrote:
> On 27/11/2022 17:23, Marcus D. Leech wrote:
>> On 27/11/2022 05:26, Daniel Estévez wrote:
>>>
>>> Hi,
>>>
>>> Another option for extracting one or a range of items from a vector
>>> is to use Vector to Stream followed by Keep 1 in N or Keep M in N.
>>> See near the bottom of this flowgraph for an example:
>>>
>>> https://github.com/daniestevez/reu-2022/blob/main/polyphase/polyphase_filter.grc
>>>
>>>
>>> Best,
>>> Daniel.
>>>
>> That would only allow the first or first-N of the streams to be
>> captured, rather than some arbitrary single stream, no?
>
> No, because these blocks have an initial offset parameter (and if they
> didn't, we could use "Skip Head"). As an example, say that we have
> 1024-point FFTs given as vectors and we only want the FFT bin number 42.
>
> We do vector to stream, then Keep 1 in N with N = 1024 and initial
> offset = 42. This would give us a stream where only the FFT bin number
> 42 appears.
>
> Now say that w want FFT bin numbers 42, 43, 44, 45. We do vector to
> stream, then Keep M in N with N = 1024, M = 4, initial offset = 42.
> This would give us a stream that contains:
>
> bin_42(t0), bin_43(t0), bin_44(t0), bin_45(t0), bin_42(t1),
> bin_43(t1), bin_44(t1), bin_45(t1)...
>
> If desired, we can turn this into vectors of 4 elements using stream
> to vector or use a deinterleave block to separate each of the bins in
> its own stream.
>
> Best,
> Daniel.
>
Hah!  I've used "Keep One in N" and "Keep M in N" for *years*, and never
noticed that!   Color me chagrined.....

Re: Implementation of OFDM TX and RX using GNURadio and USRP

On 27/11/2022 17:23, Marcus D. Leech wrote:
> On 27/11/2022 05:26, Daniel Estévez wrote:
>>
>> Hi,
>>
>> Another option for extracting one or a range of items from a vector is
>> to use Vector to Stream followed by Keep 1 in N or Keep M in N. See
>> near the bottom of this flowgraph for an example:
>>
>> https://github.com/daniestevez/reu-2022/blob/main/polyphase/polyphase_filter.grc
>>
>> Best,
>> Daniel.
>>
> That would only allow the first or first-N of the streams to be
> captured, rather than some arbitrary single stream, no?

No, because these blocks have an initial offset parameter (and if they
didn't, we could use "Skip Head"). As an example, say that we have
1024-point FFTs given as vectors and we only want the FFT bin number 42.

We do vector to stream, then Keep 1 in N with N = 1024 and initial
offset = 42. This would give us a stream where only the FFT bin number
42 appears.

Now say that w want FFT bin numbers 42, 43, 44, 45. We do vector to
stream, then Keep M in N with N = 1024, M = 4, initial offset = 42. This
would give us a stream that contains:

bin_42(t0), bin_43(t0), bin_44(t0), bin_45(t0), bin_42(t1), bin_43(t1),
bin_44(t1), bin_45(t1)...

If desired, we can turn this into vectors of 4 elements using stream to
vector or use a deinterleave block to separate each of the bins in its
own stream.

Best,
Daniel.

Re: Implementation of OFDM TX and RX using GNURadio and USRP

On 27/11/2022 05:26, Daniel Estévez wrote:
>
> Hi,
>
> Another option for extracting one or a range of items from a vector is
> to use Vector to Stream followed by Keep 1 in N or Keep M in N. See
> near the bottom of this flowgraph for an example:
>
> https://github.com/daniestevez/reu-2022/blob/main/polyphase/polyphase_filter.grc
>
>
> Best,
> Daniel.
>
That would only allow the first or first-N of the streams to be
captured, rather than some arbitrary single stream, no?

Re: Implementation of OFDM TX and RX using GNURadio and USRP

On 27/11/2022 04:01, Marcus D. Leech wrote:
>>>
>>> Could anyone please give me advice how to extract certain carriers
>>> from the FFT bins of the demodulator?
>
> I just thought of this little "idiom" for picking a single item from a
> vector, that doesn't require that you write your own block.
>   It takes advantage of "busports" (as a notational convenience).

Hi,

Another option for extracting one or a range of items from a vector is
to use Vector to Stream followed by Keep 1 in N or Keep M in N. See near
the bottom of this flowgraph for an example:

https://github.com/daniestevez/reu-2022/blob/main/polyphase/polyphase_filter.grc

Best,
Daniel.

Saturday, November 26, 2022

Re: Implementation of OFDM TX and RX using GNURadio and USRP

On 26/11/2022 20:56, Al Amiri, Wesam (waalamiri42) wrote:
Thanks for your reply, Mr. Leech!

This is what I am trying to do in this stage, but my embedded python block causes the flowgraph to freeze when I run it. 
I will try to figure out how to fix that!

Regards,
Wesam

From: discuss-gnuradio-bounces+waalamiri42=tntech.edu@gnu.org <discuss-gnuradio-bounces+waalamiri42=tntech.edu@gnu.org> on behalf of Marcus D. Leech <patchvonbraun@gmail.com>
Sent: Saturday, November 26, 2022 6:44 PM
To: discuss-gnuradio@gnu.org <discuss-gnuradio@gnu.org>
Subject: Re: Implementation of OFDM TX and RX using GNURadio and USRP
 

External Email Warning

This email originated from outside the university. Please use caution when opening attachments, clicking links, or responding to requests.


On 26/11/2022 15:19, Al Amiri, Wesam (waalamiri42) wrote:
Dears, 

I am working on the implementation of OFDM TX and RX using GNURadio 3.10.3 and USRP N210 (with UHD_4.2.0). In the implementation, I followed the GRC flow graph provided by GNU Radio Workshop (Slides 259 - 260) with changing the carrier frequency to 2 GHz, Sampling rate 1MHz at TX, and 10 MHz for Rx. 
The Tx USRP is connected to a Log Periodic antenna and similarly for the Rx USRP. There is no LOS between the TX and Rx antennas. They directed toward a reflective board so that the transmitted signal will be reflected by the board and received by the receiver. The implementation works fine, and I was able to receive the OFDM signal by the RX USRP.  
What I am trying to do is to extract some carriers from the FFT bins at the demodulator to do phase measurements on each one of the extracted carriers
I tried to create my own block to do that, but that didn't work and caused the GRC graph to freeze. Then, I tried to do that offline using Matlab, where I attached the FFT block to a file sink. 
In Matlab, I plotted the absolute of I/Q samples of the file sink as shown in the attached figure. But still, I am not able to distinguish between the subcarriers. 

Could anyone please give me advice how to extract certain carriers from the FFT bins of the demodulator?

Regards,
Wesam Al Amiri
Without completely dissecting your flow-graph, if this were MY problem, I might make an embedded Python block that allows me
  to select a single FFT bin and pass that along to an analysis function.  The FFT output is a vector, so it should be straightforward
  to implement a "pick a single carrier" function in Python, since your sample-rate is only 1Msps, and your FFT size is (I think) 64,
  that means your function has to deal with a new vector at 15kHz, which is achievable for a Python embedded block.

That's a quick thought based on an only superficial analysis of the problem, and others here might have better ways of
 doing it.


I just thought of this little "idiom" for picking a single item from a vector, that doesn't require that you write your own block.
  It takes advantage of "busports" (as a notational convenience).



The key here is the multiply-const, where you set the constant to a vector with a "1" in the position that you want to
 "pick", and 0s elsewhere.  Convert that to a set of streams, and then add the streams--in this case we use a bus-port
  on the output of the vector-to-streams and the input of the 'add'.  Since only one of those streams will contain
  non-zero data after the multiply-const, you can see that this has the effect of picking only a single FFT "bin" as a
  sample stream, and doesn't require that you navigate the intricacies of writing your own embedded Python block.
  It's likely much faster, too.

This is a common need, I suspect, and I wonder if there's another block that does this, but with some other,
  clever, domain-specific name.



There are probably other idiomatic ways to do this, but this is what I thought of just a few minutes ago...



Re: Implementation of OFDM TX and RX using GNURadio and USRP

On 26/11/2022 15:19, Al Amiri, Wesam (waalamiri42) wrote:
Dears, 

I am working on the implementation of OFDM TX and RX using GNURadio 3.10.3 and USRP N210 (with UHD_4.2.0). In the implementation, I followed the GRC flow graph provided by GNU Radio Workshop (Slides 259 - 260) with changing the carrier frequency to 2 GHz, Sampling rate 1MHz at TX, and 10 MHz for Rx. 
The Tx USRP is connected to a Log Periodic antenna and similarly for the Rx USRP. There is no LOS between the TX and Rx antennas. They directed toward a reflective board so that the transmitted signal will be reflected by the board and received by the receiver. The implementation works fine, and I was able to receive the OFDM signal by the RX USRP.  
What I am trying to do is to extract some carriers from the FFT bins at the demodulator to do phase measurements on each one of the extracted carriers
I tried to create my own block to do that, but that didn't work and caused the GRC graph to freeze. Then, I tried to do that offline using Matlab, where I attached the FFT block to a file sink. 
In Matlab, I plotted the absolute of I/Q samples of the file sink as shown in the attached figure. But still, I am not able to distinguish between the subcarriers. 

Could anyone please give me advice how to extract certain carriers from the FFT bins of the demodulator?

Regards,
Wesam Al Amiri
Without completely dissecting your flow-graph, if this were MY problem, I might make an embedded Python block that allows me
  to select a single FFT bin and pass that along to an analysis function.  The FFT output is a vector, so it should be straightforward
  to implement a "pick a single carrier" function in Python, since your sample-rate is only 1Msps, and your FFT size is (I think) 64,
  that means your function has to deal with a new vector at 15kHz, which is achievable for a Python embedded block.

That's a quick thought based on an only superficial analysis of the problem, and others here might have better ways of
 doing it.


Thursday, November 24, 2022

Re: QT GUI Label error in v 3.10.1.1

Hi Jose - I can run your script for hours without any issues on both GR 3.8 and 3.10.

Have you tried setting

  export QT_QPA_PLATFORM=wayland

as indicated in the first error message - to see if the script runs longer then 10 minutes?

My guess is if you eliminate the first exception the other exceptions will disappear.

Are you working from the console of a linux machine - or are you working from the console of a Windows machine - and then connecting to the a Linux machine by some method?

-- Cinaed


On Tue, Nov 22, 2022 at 10:23 PM Jose Ruvalcaba <joruvalc@gmail.com> wrote:
Hello,

I've been noticing an issue popping out everytime I stop running my flowgraph and I was wondering if someone had some insight on it. I have a flowgraph where a signal source is connected to a probe signal block. This block is constantly updating values and are being displayed using the QT GUI Label block. However, after running my flowgraph for about 10 minutes I get the following error:

Executing: /usr/bin/python3 -u /home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py


Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.

Exception in thread Thread-1 (_amp_probe):

Traceback (most recent call last):

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 150, in _amp_probe

    self.doc.add_next_tick_callback(functools.partial(self.set_amp,val))

  File "/usr/lib/python3/dist-packages/gnuradio/gr/hier_block2.py", line 88, in __getattr__

    return getattr(self._impl, name)

AttributeError: 'gnuradio.gr.gr_python.top_block_pb' object has no attribute 'doc'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner

    self.run()

  File "/usr/lib/python3.10/threading.py", line 953, in run

    self._target(*self._args, **self._kwargs)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 152, in _amp_probe

    self.set_amp(val)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 182, in set_amp

    self.set_variable_qtgui_label_0(self.amp)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 189, in set_variable_qtgui_label_0

    Qt.QMetaObject.invokeMethod(self._variable_qtgui_label_0_label, "setText", Qt.Q_ARG("QString", str(self._variable_qtgui_label_0_formatter(self.variable_qtgui_label_0))))

RuntimeError: wrapped C/C++ object of type QLabel has been deleted


It seems that my issue is related to the QT GUI Label block because when I remove it and add say QT GUI Number sink, this issue doesn't appear.


Has anyone experienced this issue? If so, would anyone be able to steer me in the direction to fix it? I am currently running on Ubuntu 22.04 and am running GNU RADIO 3.10.1.1 which I installed using sudo apt-get install. I've also attached the flowgraph I am talking about.


Thanks,

Jose Ruvalcaba


European GNU Radio Days 2023: March 29-30 in Paris, France

Dear GNU Radio community,
the 2023 edition of the European GNU Radio Days will be held in
France, hosted by the SYRTE laboratory of the Paris Observatory,
March 29 & 30, 2023.

The call for participation is hosted at
https://gnuradio-eu-23.sciencesconf.org
with some preliminary program by organizers.

The call for contribution is open under the keyword "Synchronization"
applied to all layers of the GNU Radio framework, from radiofrequency
signal sampling (MIMO) to symbol or OFDM synchronization, to packet
transfer. Of course GNU Radio is the common framework we wish to share
our experience with during this conference.

If unable to attend, the presentations will be shared after the
conference on the European GNU Radio YouTube channel
https://www.youtube.com/channel/UCFzddPoztcHLuwFWRPJTNrQ
but will *not* be live streamed so please join us to participate to
the discussions or the Q&A sessions.

Best wishes, hoping to see you at the meeting,
for the European GNU Radio Days committee, JM



--
JM Friedt, FEMTO-ST Time & Frequency, 26 rue de l'Epitaphe, 25000
Besancon, France

OFDM Subcarrier Parsing

Hello, 

I am working on OFDM TX and RX using GNURadio and N210 USRPs. The OFDM implementation is already exists and it works perfectly. 
I am trying to pick or extract some of the subcarriers (or multi-tone) to do some phase measurements on some of the extracted subcarriers. 
This should be done after the demodulation. As depicted in the attached figure, it should be after the FFT of the payload and before the OFDM frame equalizer. 
The problem that I am facing now, is how to extract these subcarriers?
I found something called Subcarrier Parser in Matlab Simulink (https://www.mathworks.com/help/wireless-hdl/ug/hdlofdmreceiver.html), but I could not find a description about its implementation.  

Regards,
Wesam

Wednesday, November 23, 2022

Help is needed to connect the RFNoc block to the gnuradio blocks.

Hello,

 RFNoc block is built, and the FPGA image is flashed without errors. But, when I use the same RFNoc blocks in any designs and try to connect them with the gnuradio blocks, I am getting the connection error. Then, I tried to run example designs from the gr-ettus folder and faced the same problem. The grc image is attached for reference. All the block datatypes in the design (attached below) show a matching color, but still, there is a connection error. So, when I opened the blocks and checked, the datatype for the RFNoc block is "complex32 float and complex16 float," and the datatype for the "Throttle" and "QT GUI Time Sink" blocks is complex. Would that be a problem? If so, how do I correct this? Help is very much appreciated.

Help with understanding message pair to var

Hello All,

I am writing a block that decodes metadata from an incoming stream and I would like the decoded metadata to be available to other downstream blocks. The best way to do this (I think) is to use the message passing functionality,

My ultimate aim is to receive multiple metadata values via a single message from a c++ block and then to create a custom Python block which will parse the received message and set multiple variables.

For reference I have been looking at the "message pair to var" block, but I am having trouble understanding exactly how the block updates the runtime variable.

I think it has something to do with the callback line (self.callback(new_val)) here: https://github.com/gnuradio/gnuradio/blob/main/gr-blocks/python/blocks/msg_pair_to_var.py and the template make statement here: https://github.com/gnuradio/gnuradio/blob/main/gr-blocks/grc/blocks_msg_pair_to_var.block.yml. However, I am not 100% certain.

Would someone be kind enough to explain to me exactly how the variable is set so I can determine how to write similar code that will update multiple variables. Thanks in advance!

Kind Regards,
Nik

Tuesday, November 22, 2022

Re: QT GUI Label error in v 3.10.1.1

Hi Jose - since it's complaining about wayland, check to see if the following software is installed

   qt6-wayland
   xwayland

On debian systems, type

  apt list --installed | grep wayland

to see what's installed.

wayland is efficient way to connect to your desktop.

-- Cinaed


On 11/22/22 19:22, Jose Ruvalcaba wrote:
Hello,

I've been noticing an issue popping out everytime I stop running my flowgraph and I was wondering if someone had some insight on it. I have a flowgraph where a signal source is connected to a probe signal block. This block is constantly updating values and are being displayed using the QT GUI Label block. However, after running my flowgraph for about 10 minutes I get the following error:

Executing: /usr/bin/python3 -u /home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py


Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.

Exception in thread Thread-1 (_amp_probe):

Traceback (most recent call last):

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 150, in _amp_probe

    self.doc.add_next_tick_callback(functools.partial(self.set_amp,val))

  File "/usr/lib/python3/dist-packages/gnuradio/gr/hier_block2.py", line 88, in __getattr__

    return getattr(self._impl, name)

AttributeError: 'gnuradio.gr.gr_python.top_block_pb' object has no attribute 'doc'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner

    self.run()

  File "/usr/lib/python3.10/threading.py", line 953, in run

    self._target(*self._args, **self._kwargs)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 152, in _amp_probe

    self.set_amp(val)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 182, in set_amp

    self.set_variable_qtgui_label_0(self.amp)

  File "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", line 189, in set_variable_qtgui_label_0

    Qt.QMetaObject.invokeMethod(self._variable_qtgui_label_0_label, "setText", Qt.Q_ARG("QString", str(self._variable_qtgui_label_0_formatter(self.variable_qtgui_label_0))))

RuntimeError: wrapped C/C++ object of type QLabel has been deleted


It seems that my issue is related to the QT GUI Label block because when I remove it and add say QT GUI Number sink, this issue doesn't appear.


Has anyone experienced this issue? If so, would anyone be able to steer me in the direction to fix it? I am currently running on Ubuntu 22.04 and am running GNU RADIO 3.10.1.1 which I installed using sudo apt-get install. I've also attached the flowgraph I am talking about.


Thanks,

Jose Ruvalcaba