Hey all,
trying to send a text file using B200 and receive it using B210 or PLUTO
over OFDM Tx/Rx blocks.
the setup works fine, but I need this setup to be repeated for 100
different text files. So, I modified the python code to read, send and
transmit the files one by one. the code works good for the first two
(sometimes three) files and after that the files written at receiver side
are all of size zero byte. I used another SDR on a nearby machine and could
detect that there is transmission going there.
attached is :
- the flow graph to illustrate the idea
-python code files (main one is ofdmrx_processor)
I wonder if it is related to buffering issues, you kind help is appreciated.
Moath Sulaiman
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# SPDX-License-Identifier: GPL-3.0
#
# GNU Radio Python Flow Graph
# Title: FullDupx_OFDM_forCode
# Author: Moath Sulaiman
# Description: send and receive a file using OFDM over USRPs
# GNU Radio version: v3.11.0.0git-393-ga07ced54
from packaging.version import Version as StrictVersion
from PyQt5 import Qt
# from gnuradio import qtgui
from gnuradio import digital
from gnuradio import blocks
import pmt,os
from gnuradio import gr
from gnuradio.filter import firdes
from gnuradio.fft import window
import sys
import signal
from PyQt5 import Qt
from argparse import ArgumentParser
from gnuradio.eng_arg import eng_float, intx
from gnuradio import eng_notation
from gnuradio import uhd
import time
import numpy as np
from gnuradio import iio
class ofdm_rxblock(gr.top_block):
def __init__(self,fname):
gr.top_block.__init__(self, "ofdm_block_code", catch_exceptions=True)
##
# Variables
##
self.samp_rate = samp_rate = 150
self.rf_rate = rf_rate = 150
self.rand = rand = np.random.randint(0, 2, 100)
self.packet_len = packet_len = 48
self.len_tag_key = len_tag_key = "packet_len"
self.fft_len = fft_len = 64
self.cfreq = cfreq = int(2.8e9)
self.BW = BW = 2e6
GR_FIXED_BUFFER_SIZE = 128e6
##
# Blocks
##
# Rx Part 30D3F3D ##
# B200 series receiver ##
# self.uhd_usrp_source_0 = uhd.usrp_source(
# ",".join(('serial=30D3F3D', '')),
# uhd.stream_args(
# cpu_format="fc32",
# args='',
# channels=list(range(0,1)),
# ),
# )
# self.uhd_usrp_source_0.set_samp_rate(samp_rate)
# self.uhd_usrp_source_0.set_time_unknown_pps(uhd.time_spec(0))
# self.uhd_usrp_source_0.set_center_freq(cfreq, 0)
# self.uhd_usrp_source_0.set_antenna("TX/RX", 0)
# self.uhd_usrp_source_0.set_bandwidth(BW, 0)
# self.uhd_usrp_source_0.set_gain(75, 0)
PLUTO Receiver ##
self.iio_pluto_source_0 = iio.fmcomms2_source_fc32('ip:192.168.2.1' if 'ip:192.168.2.1' else iio.get_pluto_uri(), [True, True], 32768)
self.iio_pluto_source_0.set_len_tag_key('packet_len')
self.iio_pluto_source_0.set_frequency(cfreq)
self.iio_pluto_source_0.set_samplerate(samp_rate)
self.iio_pluto_source_0.set_gain_mode(0, 'slow_attack')
self.iio_pluto_source_0.set_gain(0, 64)
self.iio_pluto_source_0.set_quadrature(True)
self.iio_pluto_source_0.set_rfdc(True)
self.iio_pluto_source_0.set_bbdc(True)
self.iio_pluto_source_0.set_filter_params('Auto', '', 0, 0)
# OFDM Rcvr #
self.digital_ofdm_rx_0 = digital.ofdm_rx(
fft_len=fft_len, cp_len=(fft_len//4),
frame_length_tag_key='frame_'+"rx_len",
packet_length_tag_key="rx_len",
occupied_carriers=((-4,-3,-2,-1,1,2,3,4),),
pilot_carriers=((-6,-5,5,6),),
pilot_symbols=((-1,1,-1,1),),
sync_word1=None,
sync_word2=None,
bps_header=1,
bps_payload=2,
debug_log=False,
scramble_bits=False)
# self.digital_ofdm_rx_0.set_min_output_buffer(65536)
# self.digital_ofdm_rx_0.set_max_output_buffer(int(65536))
os.chdir(r'//home/moath/Documents/OFDM/ofdm_block/RandVector/Code/files/Rx_data')
# self.blocks_vector_source_x_0_0 = blocks.vector_source_f(rand, True, 1, [])
# self.blocks_sub_xx_0 = blocks.sub_ff(1)
# self.blocks_float_to_char_1 = blocks.float_to_char(1, 1)
# outfile = fname.replace('txt','out')
# self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_char*1, outfile, False)
# self.blocks_file_sink_0.set_unbuffered(False)
# self.blocks_char_to_float_1 =