Files
urh/tests/test_modulator.py
2017-04-25 12:20:33 +02:00

67 lines
2.4 KiB
Python

import os
import time
import array
from PyQt5.QtCore import QDir
from tests.QtTestCase import QtTestCase
from urh.signalprocessing.Modulator import Modulator
from urh.signalprocessing.ProtocolAnalyzer import ProtocolAnalyzer
from urh.signalprocessing.Signal import Signal
class TestModulator(QtTestCase):
def setUp(self):
self.modulation_data = array.array("B", [True, False, False, False, True, True, False, True])
self.samples_per_bit = 100
self.pause = 1000
self.total_samples = len(self.modulation_data) * self.samples_per_bit + self.pause
def test_ask_fsk_psk_modulation(self):
modulations = ["ASK", "FSK", "PSK"]
for i, modulation in enumerate(modulations):
modulator = Modulator(modulation)
tmp_dir = QDir.tempPath()
filename = "{0}_mod.complex".format(modulation)
filename = os.path.join(tmp_dir, filename)
modulator.modulation_type = i
modulator.samples_per_bit = self.samples_per_bit
if modulation == "ASK":
modulator.param_for_zero = 0
modulator.param_for_one = 100
elif modulation == "FSK":
modulator.param_for_zero = 1000
modulator.param_for_one = 2500
elif modulation == "PSK":
modulator.param_for_zero = 0
modulator.param_for_one = 180
modulator.modulate(self.modulation_data, self.pause)
modulator.modulated_samples.tofile(filename)
signal = Signal(filename, modulation)
signal.modulation_type = i
signal.bit_len = self.samples_per_bit
if modulation == "ASK":
signal.qad_center = 0.5
elif modulation == "FSK":
signal.qad_center = 0.0097
elif modulation == "PSK":
signal.qad_center = 0
self.assertEqual(signal.num_samples, self.total_samples, msg=modulation)
pa = ProtocolAnalyzer(signal)
pa.get_protocol_from_signal()
self.assertEqual(1, len(pa.messages), msg=modulation)
self.assertEqual(self.modulation_data, pa.messages[0].plain_bits, msg=modulation)
def test_performance(self):
t = time.time()
modulator = Modulator("Perf")
modulator.modulation_type = 1
modulator.modulate([True]*1000, pause=10000000)
elapsed = time.time() - t
self.assertLess(elapsed, 0.5)