У меня есть простое тестовое приложение для GNUradio, в котором я пытаюсь преобразовать входное значение в диапазоне -180 ... 180 в диапазон 0 ... 360.Я написал код Python и код QA для этого, но, похоже, не могу заставить операторы if-else работать должным образом.
Кажется, проблема в том, что предложение if видит только первый элемент теста src_dataвектор, потому что я использую input_elements [0] [0].Я попытался использовать input_elements [0], но в этом случае я получаю сообщение об ошибке при сравнении массива с целым числом.Как решить эту проблему?
Блок в Python выглядит следующим образом:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy
from gnuradio import gr
class convert_ff(gr.sync_block):
"""
docstring for block convert_ff
"""
def __init__(self):
gr.sync_block.__init__(self,
name="convert_ff",
in_sig=[numpy.float32],
out_sig=[numpy.float32])
def work(self, input_items, output_items):
print input_items[:][0]
out = output_items[0]
if input_items[0][0] < 0:
out[:]=360+input_items[0]
print "negative value processed"
else:
out[:]=input_items[0]
return len(output_items[0])
И код QA выглядит следующим образом:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gnuradio import gr, gr_unittest
from gnuradio import blocks
from convert_ff import convert_ff
class qa_convert_ff (gr_unittest.TestCase):
def setUp (self):
self.tb = gr.top_block ()
def tearDown (self):
self.tb = None
def test_001_t (self):
src_data = (20,90,180,280,-20,-90,-190)
print "This is source data"
print src_data
expected_result = (20,90,180,280,340,270,170)
src=blocks.vector_source_f(src_data)
convert=convert_ff()
snk=blocks.vector_sink_f()
self.tb.connect(src,convert)
self.tb.connect(convert,snk)
self.tb.run ()
# check data
self.assertFloatTuplesAlmostEqual(expected_result, result_data, 6)
if __name__ == '__main__':
gr_unittest.run(qa_convert_ff, "qa_convert_ff.xml")