Wednesday, October 3, 2018

Re: [Discuss-gnuradio] Non-deterministic behavior in GNU Radio

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
#
# SPDX-License-Identifier: GPL-3.0
#
##################################################
# GNU Radio Python Flow Graph
# Title: Testindeterminate
# Generated: Wed Oct 3 13:46:04 2018
# GNU Radio version: 3.7.12.0
##################################################

from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser


class testindeterminate(gr.top_block):

def __init__(self, number_of_samples=1000000, output_file="out.bin"):
gr.top_block.__init__(self, "Testindeterminate")

##################################################
# Parameters
##################################################
self.number_of_samples = number_of_samples
self.output_file = output_file

##################################################
# Variables
##################################################
self.samp_rate = samp_rate = 2e6

##################################################
# Blocks
##################################################
self.blocks_vector_source_x_0_0 = blocks.vector_source_c((0.1,)*number_of_samples, False, 1, [])
self.blocks_vector_source_x_0 = blocks.vector_source_c((1.0,)*number_of_samples, False, 1, [])
self.blocks_file_sink_0_0 = blocks.file_sink(gr.sizeof_gr_complex*1, output_file, False)
self.blocks_file_sink_0_0.set_unbuffered(False)
self.blocks_divide_xx_0_0 = blocks.divide_cc(1)



##################################################
# Connections
##################################################
self.connect((self.blocks_divide_xx_0_0, 0), (self.blocks_file_sink_0_0, 0))
self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_divide_xx_0_0, 0))
self.connect((self.blocks_vector_source_x_0_0, 0), (self.blocks_divide_xx_0_0, 1))

def get_number_of_samples(self):
return self.number_of_samples

def set_number_of_samples(self, number_of_samples):
self.number_of_samples = number_of_samples
self.blocks_vector_source_x_0_0.set_data((0.1,)*self.number_of_samples, [])
self.blocks_vector_source_x_0.set_data((1.0,)*self.number_of_samples, [])

def get_output_file(self):
return self.output_file

def set_output_file(self, output_file):
self.output_file = output_file
self.blocks_file_sink_0_0.open(self.output_file)

def get_samp_rate(self):
return self.samp_rate

def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate


def argument_parser():
parser = OptionParser(usage="%prog: [options]", option_class=eng_option)
parser.add_option(
"-N", "--number-of-samples", dest="number_of_samples", type="intx", default=1000000,
help="Set number_of_samples [default=%default]")
parser.add_option(
"-o", "--output-file", dest="output_file", type="string", default="out.bin",
help="Set out.bin [default=%default]")
return parser


def main(top_block_cls=testindeterminate, options=None):
if options is None:
options, _ = argument_parser().parse_args()

tb = top_block_cls(number_of_samples=options.number_of_samples, output_file=options.output_file)
tb.start()
tb.wait()


if __name__ == '__main__':
main()
Hi all,

I simplified the flowgraph a bit and prepared a script that runs it
twice and compares the results.

https://imgur.com/a/CSjOeLc

In short something is wrong indeed.
Almost after every run of the script I get results with differences.

I tested it on GNU Radio  3.7.12.0, I'm compiling the most fresh version
now.

Best Regards,
Piotr Krysik

W dniu 03.10.2018 o 06:55, Reiichiro Nakano pisze:
> Here's an updated flowgraph where you don't need a separate file
> source. Just run the flowgraph twice for a few seconds each. You'll
> likely get different file sizes but `cmp` doesn't care, it'll still
> show the first differing byte which should still prove the bug exists.
>
>

No comments:

Post a Comment