Efficient floating-point decoder for BPSK/QPSK manchester code

2022-09-05 Thread Moses Browne Mwakyanjala
Hi everyone,
I've been struggling to decode manchester signals. I have tried to use some
ad-hoc methods for BPSK that work well. However, there were some if-else
branches that tax the CPU greatly, especially at high symbol rates. The
input is 2 SPS, output 1 SPS. And they didn't seem to work for QPSK.

I have tried to use the matched-filter approach (treating the manchester
pulse as 1,1,-1,-1), with 4 SPS input, and 1 SPS output. The PFB taps are
thus the convolution of manchester taps (1,1,-1,-1) and SRRC. This approach
didn't work well. Upon further examination, I discovered that the symbol
synchronizer failed to lock.

I was wondering if there were alternative algorithms that could work for
both BPSK and QPSK.


Thanks in advance,

Moses.


Re: GNURadio and UHD versions

2022-09-05 Thread Dor Ratz
Hey Marcus,


Thanks a lot.


Another question is how can we avoid late command in the USRP?  I get
many "L" and the Tx/Rx leds are turned off.



I have a USRP-X310 with 2 UBX-160 Daughterboards.



I want to transmit simultaneously from the 2 Daughterboards at the same
time in 200MHz (one in RF A , the second is in RF B).



I'm using 2 different 10G Ethernet cables

I'm using GNURadio version 3.11.0.0 and UHD version 4.2.0.1.



How we can avoid late command in the USRP?  I get many "L" and the Tx/Rx
leds are turned off.



I tried to use many discussions from the internet, but the problem proceeds.



Thanks for any advice.

Dor

בתאריך יום א׳, 4 בספט׳ 2022, 12:00 אחה״צ, מאת Marcus Müller ‏<
mmuel...@gnuradio.org>:

> Hey Dor!
>
> On 04.09.22 10:30, Dor Ratz wrote:
> > 1. What are the differences between those GNURADIO versions:
> > 3.10.2.0 And 3.9.6.0
>
> to numerous to list in in an email, but that's why we've got a Changelog.
> Compare what
> happened between 3.9.5.0 and 3.10.2.0 in [1] and what happened between
> 3.9.5.0 and 3.9.6.0
> in [2].
>
> > 2. When you did build of the latest GNURADIO version , what UHD version
> did you use?
>
> A lot of people build GNU Radio, so this has many answers. Anyway, the
> minimum version of
> UHD is 3.9.7; that and any later version works.
> Note that, as for any other library, the version of the library you used
> when building
> needs to be the same as for running.
>
> Best,
> Marcus
>
> [1] https://github.com/gnuradio/gnuradio/blob/v3.10.2.0/CHANGELOG.md
> [2] https://github.com/gnuradio/gnuradio/blob/v3.9.6.0/CHANGELOG.md
>
>


GrRangeWidget is buggy

2022-09-05 Thread Miklos Maroti
Hi All,

If you use the value of the range widget in an expression for a callback,
then you get the error:

TypeError: unsupported operand type(s) for +: 'float' and 'GrRangeWidget'

I have tested this for the maint 3.10 branch, but the relevant files are
unchanged in the master branch. I have attached a simple flowgraph where we
have two range widgets, one noise source and one frequency sink. The
amplitude of the noise source is the sum of the two range widget values. If
you change any of the widgets, then the flowgraph crashes with the above
error.

I am not sure why this is happening, any help would be appreciated. One
workaround which seems to help if I uncomment the "self.${id} = ${win}"
line in the grc yml file.

Best,
Miklos


test_gr_range_widget.grc
Description: application/gnuradio-grc
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#
# SPDX-License-Identifier: GPL-3.0
#
# GNU Radio Python Flow Graph
# Title: Not titled yet
# GNU Radio version: 3.10.3.0

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 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
from gnuradio import eng_notation
from gnuradio.qtgui import Range, GrRangeWidget
from PyQt5 import QtCore



from gnuradio import qtgui

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

def __init__(self):
gr.top_block.__init__(self, "Not titled yet", catch_exceptions=True)
Qt.QWidget.__init__(self)
self.setWindowTitle("Not titled yet")
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", "test_gr_range_widget")

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.value2 = value2 = 50
self.value1 = value1 = 50
self.samp_rate = samp_rate = 32000

##
# Blocks
##
self._value2_range = Range(0, 100, 1, 50, 200)
self._value2_win = GrRangeWidget(self._value2_range, self.set_value2, "'value2'", "counter_slider", float, QtCore.Qt.Horizontal, "value")
self.value2 = self._value2_win

self.top_layout.addWidget(self._value2_win)
self._value1_range = Range(0, 100, 1, 50, 200)
self._value1_win = GrRangeWidget(self._value1_range, self.set_value1, "'value1'", "counter_slider", float, QtCore.Qt.Horizontal, "value")
self.value1 = self._value1_win

self.top_layout.addWidget(self._value1_win)
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(False)
self.qtgui_freq_sink_x_0.enable_grid(False)
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 = ['', '', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
   

Re: GrRangeWidget is buggy

2022-09-05 Thread Miklos Maroti
Dear All,

This is the commit that introduced the line "self.${id} = ${win}" which I
think is the main cause of the bug. I wonder if that was intentional or a
simple mistake.

https://github.com/gnuradio/gnuradio/commit/0427b2a6781a08cc57d82b27fbdd9a2300a34919

Best,
Miklos

On Mon, Sep 5, 2022 at 8:31 PM Miklos Maroti  wrote:

> Hi All,
>
> If you use the value of the range widget in an expression for a callback,
> then you get the error:
>
> TypeError: unsupported operand type(s) for +: 'float' and 'GrRangeWidget'
>
> I have tested this for the maint 3.10 branch, but the relevant files are
> unchanged in the master branch. I have attached a simple flowgraph where we
> have two range widgets, one noise source and one frequency sink. The
> amplitude of the noise source is the sum of the two range widget values. If
> you change any of the widgets, then the flowgraph crashes with the above
> error.
>
> I am not sure why this is happening, any help would be appreciated. One
> workaround which seems to help if I uncomment the "self.${id} = ${win}"
> line in the grc yml file.
>
> Best,
> Miklos
>