summaryrefslogtreecommitdiff
path: root/gr-digital/python/digital/qa_scrambler.py
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital/python/digital/qa_scrambler.py')
-rw-r--r--gr-digital/python/digital/qa_scrambler.py72
1 files changed, 39 insertions, 33 deletions
diff --git a/gr-digital/python/digital/qa_scrambler.py b/gr-digital/python/digital/qa_scrambler.py
index 7d87f87b6c..b350d9e1b7 100644
--- a/gr-digital/python/digital/qa_scrambler.py
+++ b/gr-digital/python/digital/qa_scrambler.py
@@ -26,6 +26,7 @@ def additive_scramble_lfsr(mask, seed, reglen, bpb, data):
out.append(d ^ scramble_word)
return out
+
class test_scrambler(gr_unittest.TestCase):
def setUp(self):
@@ -34,33 +35,35 @@ class test_scrambler(gr_unittest.TestCase):
def tearDown(self):
self.tb = None
-
def test_lfsr_002(self):
- _a = lfsr_args(1,51,3,0)
+ _a = lfsr_args(1, 51, 3, 0)
l = digital.lfsr(*_a)
seq = [l.next_bit() for _ in range(2**10)]
- reg = np.zeros(52,np.int8)
- reg[::-1][(51,3,0),] = 1
- res = (np.convolve(seq,reg)%2)
- self.assertTrue(sum(res[52:-52])==0,"LRS not generated properly")
+ reg = np.zeros(52, np.int8)
+ reg[::-1][(51, 3, 0), ] = 1
+ res = (np.convolve(seq, reg) % 2)
+ self.assertTrue(sum(res[52:-52]) == 0, "LRS not generated properly")
def test_scrambler_descrambler_001(self):
- src_data = np.random.randint(0,2,500,dtype=np.int8)
+ src_data = np.random.randint(0, 2, 500, dtype=np.int8)
src = blocks.vector_source_b(src_data, False)
- scrambler = digital.scrambler_bb(*lfsr_args(0b1,7,2,0)) # p(x) = x^7 + x^2 + 1
- descrambler = digital.descrambler_bb(*lfsr_args(0b111,7,2,0)) # we can use any seed here, it is descrambling.
+ scrambler = digital.scrambler_bb(
+ *lfsr_args(0b1, 7, 2, 0)) # p(x) = x^7 + x^2 + 1
+ # we can use any seed here, it is descrambling.
+ descrambler = digital.descrambler_bb(*lfsr_args(0b111, 7, 2, 0))
m_tap = blocks.vector_sink_b()
dst = blocks.vector_sink_b()
self.tb.connect(src, scrambler, descrambler, dst)
self.tb.connect(scrambler, m_tap)
self.tb.run()
- self.assertEqual(src_data[:-7].tolist(), dst.data()[7:]) # skip garbage during synchronization
- self.assertEqual(tuple(np.convolve(m_tap.data(),[1,0,0,0,0,1,0,1])%2)[7:-10],
- tuple(src_data[:-10])) # manual descrambling test
+ # skip garbage during synchronization
+ self.assertEqual(src_data[:-7].tolist(), dst.data()[7:])
+ self.assertEqual(tuple(np.convolve(m_tap.data(), [1, 0, 0, 0, 0, 1, 0, 1]) % 2)[7:-10],
+ tuple(src_data[:-10])) # manual descrambling test
def test_scrambler_descrambler_002(self):
- _a = lfsr_args(0b1,51,6,0) #p(x) = x^51+x^6+1
- src_data = np.random.randint(0,2,1000,dtype=np.int8)
+ _a = lfsr_args(0b1, 51, 6, 0) # p(x) = x^51+x^6+1
+ src_data = np.random.randint(0, 2, 1000, dtype=np.int8)
src = blocks.vector_source_b(src_data, False)
scrambler = digital.scrambler_bb(*_a)
m_tap = blocks.vector_sink_b()
@@ -69,26 +72,29 @@ class test_scrambler(gr_unittest.TestCase):
self.tb.connect(src, scrambler, descrambler, dst)
self.tb.connect(scrambler, m_tap)
self.tb.run()
- self.assertTrue(np.all(src_data[:-51]==dst.data()[51:])) # skip garbage during synchronization
- reg = np.zeros(52,np.int8)
- reg[::-1][(51,6,0),] = 1
- self.assertTrue(np.all( np.convolve(m_tap.data(),reg)[51:-60]%2
- == src_data[:-60])) # manual descrambling test
+ # skip garbage during synchronization
+ self.assertTrue(np.all(src_data[:-51] == dst.data()[51:]))
+ reg = np.zeros(52, np.int8)
+ reg[::-1][(51, 6, 0), ] = 1
+ self.assertTrue(np.all(np.convolve(m_tap.data(), reg)[51:-60] % 2 ==
+ src_data[:-60])) # manual descrambling test
def test_scrambler_descrambler_003(self):
- src_data = np.random.randint(0,2,1000,dtype=np.int8)
+ src_data = np.random.randint(0, 2, 1000, dtype=np.int8)
src = blocks.vector_source_b(src_data, False)
- scrambler = digital.scrambler_bb(*lfsr_args(1,12,10,3,2,0)) # this is the product of the other two
- descrambler1 = digital.descrambler_bb(*lfsr_args(1,5,3,0))
- descrambler2 = digital.descrambler_bb(*lfsr_args(1,7,2,0))
+ # this is the product of the other two
+ scrambler = digital.scrambler_bb(*lfsr_args(1, 12, 10, 3, 2, 0))
+ descrambler1 = digital.descrambler_bb(*lfsr_args(1, 5, 3, 0))
+ descrambler2 = digital.descrambler_bb(*lfsr_args(1, 7, 2, 0))
dst = blocks.vector_sink_b()
self.tb.connect(src, scrambler, descrambler1, descrambler2, dst)
self.tb.run()
- self.assertTrue(np.all(src_data[:-12]==dst.data()[12:])) # skip garbage during synchronization
+ # skip garbage during synchronization
+ self.assertTrue(np.all(src_data[:-12] == dst.data()[12:]))
def test_additive_scrambler_001(self):
- _a = lfsr_args(1,51,3,0) #i p(x) = x^51+x^3+1, seed 0x1
- src_data = np.random.randint(0,2,1000,dtype=np.int8).tolist()
+ _a = lfsr_args(1, 51, 3, 0) # i p(x) = x^51+x^3+1, seed 0x1
+ src_data = np.random.randint(0, 2, 1000, dtype=np.int8).tolist()
src = blocks.vector_source_b(src_data, False)
scrambler = digital.additive_scrambler_bb(*_a)
descrambler = digital.additive_scrambler_bb(*_a)
@@ -98,18 +104,18 @@ class test_scrambler(gr_unittest.TestCase):
self.assertEqual(tuple(src_data), tuple(dst.data()))
def test_additive_scrambler_002(self):
- _a = lfsr_args(1,51,3,0) #i p(x) = x^51+x^3+1, seed 0x1
- src_data = [1,]*1000
+ _a = lfsr_args(1, 51, 3, 0) # i p(x) = x^51+x^3+1, seed 0x1
+ src_data = [1, ] * 1000
src = blocks.vector_source_b(src_data, False)
scrambler = digital.additive_scrambler_bb(*_a)
dst = blocks.vector_sink_b()
self.tb.connect(src, scrambler, dst)
self.tb.run()
- reg = np.zeros(52,np.int8)
- reg[::-1][(51,3,0),] = 1
- res = (np.convolve(dst.data(),reg)%2)[52:-52]
- self.assertEqual(len(res), sum(res)) # when convolved with mask,
- # after sync, only 1's would be returned.
+ reg = np.zeros(52, np.int8)
+ reg[::-1][(51, 3, 0), ] = 1
+ res = (np.convolve(dst.data(), reg) % 2)[52:-52]
+ self.assertEqual(len(res), sum(res)) # when convolved with mask,
+ # after sync, only 1's would be returned.
def test_scrambler_descrambler(self):
src_data = [1, ] * 1000