HackRF-Treasure-Chest/Software/Universal Radio Hacker/tests/auto_interpretation/test_additional_signals.py

153 lines
5.9 KiB
Python
Raw Permalink Normal View History

2022-09-22 22:46:47 +02:00
import os
import sys
import unittest
from urh.ainterpretation import AutoInterpretation
from urh.signalprocessing.Signal import Signal
from tests.auto_interpretation.auto_interpretation_test_util import demodulate
class TestAutoInterpretationIntegration(unittest.TestCase):
SIGNALPATH = "~/GIT/publications/ainterpretation/experiments/signals/"
def get_path(self, signalname):
if sys.platform == "win32":
return None
path = os.path.join(os.path.expanduser(self.SIGNALPATH), signalname)
if os.path.exists(path):
return path
else:
return None
def test_action(self):
path = self.get_path("action_FB_A_B_C_D.coco")
if not path:
return
data = Signal(path, "").iq_array
result = AutoInterpretation.estimate(data)
mod_type, bit_length = result["modulation_type"], result["bit_length"]
center, noise, tolerance = result["center"], result["noise"], result["tolerance"]
self.assertEqual(mod_type, "ASK")
self.assertGreaterEqual(bit_length, 400)
self.assertLessEqual(bit_length, 600)
print("noise", noise, "center", center, "bit length", bit_length, "tolerance", tolerance)
demodulated = demodulate(data, mod_type, bit_length, center, noise, tolerance)
print(demodulated)
self.assertEqual(len(demodulated), 19)
for i in range(2):
self.assertTrue(demodulated[i].startswith("8e8eeeeeee8"))
def test_audi(self):
path = self.get_path("audi_auf_sr5m.coco")
if not path:
return
data = Signal(path, "").iq_array
result = AutoInterpretation.estimate(data)
mod_type, bit_length = result["modulation_type"], result["bit_length"]
center, noise, tolerance = result["center"], result["noise"], result["tolerance"]
self.assertEqual(mod_type, "ASK")
self.assertGreaterEqual(bit_length, 2400)
self.assertLessEqual(bit_length, 2500)
self.assertGreaterEqual(center, 0.005)
self.assertLessEqual(center, 0.32)
print("noise", noise, "center", center, "bit length", bit_length, "tolerance", tolerance)
demodulated = demodulate(data, mod_type, bit_length, center, noise, tolerance)
print(demodulated)
self.assertEqual(len(demodulated), 1)
self.assertTrue(demodulated[0].startswith("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))
self.assertTrue(demodulated[0].endswith("cad4c"))
def test_brennenstuhl(self):
path = self.get_path("brennenstuhl_signal_ABCD_onoff.coco")
if not path:
return
data = Signal(path, "").iq_array
result = AutoInterpretation.estimate(data)
mod_type, bit_length = result["modulation_type"], result["bit_length"]
center, noise, tolerance = result["center"], result["noise"], result["tolerance"]
self.assertEqual(mod_type, "ASK")
self.assertEqual(bit_length, 300)
print("noise", noise, "center", center, "bit length", bit_length, "tolerance", tolerance)
demodulated = demodulate(data, mod_type, bit_length, center, noise, tolerance, pause_threshold=8)
print(demodulated)
self.assertEqual(len(demodulated), 64)
for i in range(64):
self.assertTrue(demodulated[i].startswith("88888888888"))
self.assertEqual(len(demodulated[i]), len(demodulated[0]))
def test_esaver(self):
path = self.get_path("esaver_test4on.complex")
if not path:
return
data = Signal(path, "").iq_array
result = AutoInterpretation.estimate(data)
mod_type, bit_length = result["modulation_type"], result["bit_length"]
center, noise, tolerance = result["center"], result["noise"], result["tolerance"]
print(center, noise)
self.assertEqual(mod_type, "FSK")
self.assertEqual(bit_length, 100)
print("noise", noise, "center", center, "bit length", bit_length, "tolerance", tolerance)
demodulated = demodulate(data, mod_type, bit_length, center, noise, tolerance)
print(demodulated)
self.assertEqual(len(demodulated), 12)
for i in range(12):
self.assertTrue(demodulated[i].startswith("aaaaaaaa"))
def test_scislo(self):
path = self.get_path("scislo.complex")
if not path:
return
data = Signal(path, "").iq_array
result = AutoInterpretation.estimate(data)
mod_type, bit_length = result["modulation_type"], result["bit_length"]
center, noise, tolerance = result["center"], result["noise"], result["tolerance"]
self.assertEqual(mod_type, "FSK")
self.assertEqual(bit_length, 200)
self.assertGreaterEqual(noise, 0.0120)
print("noise", noise, "center", center, "bit length", bit_length, "tolerance", tolerance)
demodulated = demodulate(data, mod_type, bit_length, center, noise, tolerance)
print(demodulated)
self.assertEqual(len(demodulated), 8)
for i in range(8):
self.assertTrue(demodulated[i].startswith("000000000000aaaaaa"))
def test_vw(self):
path = self.get_path("vw_auf.complex")
if not path:
return
data = Signal(path, "").iq_array
result = AutoInterpretation.estimate(data)
mod_type, bit_length = result["modulation_type"], result["bit_length"]
center, noise, tolerance = result["center"], result["noise"], result["tolerance"]
self.assertEqual(mod_type, "ASK")
self.assertGreaterEqual(bit_length, 2000)
self.assertLessEqual(bit_length, 3000)
demodulated = demodulate(data, mod_type, bit_length, center, noise, tolerance)
print(demodulated)
self.assertEqual(len(demodulated), 1)
self.assertTrue(demodulated[0].startswith("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))