def read_project_file_for_signal(self, signal: Signal): if self.project_file is None or len(signal.filename) == 0: return False tree = ET.parse(self.project_file) root = tree.getroot() for sig_tag in root.iter("signal"): if sig_tag.attrib["filename"] == os.path.relpath(signal.filename, self.project_path): signal.name = sig_tag.attrib["name"] signal.qad_center = float(sig_tag.attrib["zero_treshold"]) signal.tolerance = int(sig_tag.attrib["tolerance"]) signal.auto_detect_on_modulation_changed = False if \ sig_tag.attrib[ "auto_detect_on_modulation_changed"] == 'False' else True signal.noise_treshold = float(sig_tag.attrib["noise_treshold"]) try: signal.sample_rate = float(sig_tag.attrib["sample_rate"]) except KeyError: pass # For old project files signal.bit_len = int(sig_tag.attrib["bit_length"]) signal.modulation_type = int(sig_tag.attrib["modulation_type"]) break return True
def test_psk(self): signal = Signal("./data/psk_gen_noisy.complex", "PSK-Test") QTest.qWait(100) signal.modulation_type = 2 signal.bit_len = 300 signal.qad_center = 0.0281 signal.noise_treshold = 0 signal.tolerance = 10 proto_analyzer = ProtocolAnalyzer(signal) proto_analyzer.get_protocol_from_signal() self.assertEqual(proto_analyzer.plain_bits_str[0], "101100")
def test_fabema_get_proto(self): signal = Signal( "../../noack/USRP/Fabema/Testdata/trafficlight_fhside_full.complex", "PerfTest", modulation="ASK") signal.noise_treshold = 0.1 signal.qad_center = 0.009 signal.bit_len = 16 proto_analyzer = ProtocolAnalyzer(signal) t = time.time() proto_analyzer.get_protocol_from_signal() dur = time.time() - t print(self.prefix + "Get Protocol: {0:.2f}s".format(dur)) self.assertLess(dur, 2.85)
def test_freq_detection(self): s = Signal("./data/rwe_steckdose_anlernen.complex", "RWE") s.noise_treshold = 0.06 s.qad_center = 0 s.bit_len = 100 pa = ProtocolAnalyzer(s) pa.get_protocol_from_signal() self.assertEqual(pa.blocks[0].plain_bits_str, "101010101010101010101010101010101001101001111101100110100111110111010010011000010110110101111" "010111011011000011000101000010001001101100101111010110100110011100100110000101001110100001111" "111101000111001110000101110100100111010110110100001101101101010100011011010001010110011100011" "010100010101111110011010011001000000110010011010001000100100100111101110110010011111011100010" "10110010100011111101110111000010111100111101001011101101011011010110101011100") start, nsamples = pa.get_samplepos_of_bitseq(0, 0, 0, 1, False) freq = s.estimate_frequency(start, start + nsamples, 1e6) self.assertEqual(freq, 10000) # Freq for 1 is 10K
def test_fsk_freq_detection(self): s = Signal("./data/rwe_steckdose_anlernen.complex", "RWE") s.noise_treshold = 0.06 s.qad_center = 0 s.bit_len = 100 pa = ProtocolAnalyzer(s) pa.get_protocol_from_signal() self.assertEqual(pa.blocks[0].plain_bits_str, "101010101010101010101010101010101001101001111101100110100111110111010010011000010110110101111" "010111011011000011000101000010001001101100101111010110100110011100100110000101001110100001111" "111101000111001110000101110100100111010110110100001101101101010100011011010001010110011100011" "010100010101111110011010011001000000110010011010001000100100100111101110110010011111011100010" "10110010100011111101110111000010111100111101001011101101011011010110101011100") freq = pa.estimate_frequency_for_one(1e6) self.assertAlmostEqual(1, freq / 10000, places = 1) # Freq for 1 is 10K freq = pa.estimate_frequency_for_zero(1e6) self.assertAlmostEqual(3, freq / 10000, places = 1) # Freq for 0 is 30K
def __init__(self, bit_len: int, center: float, noise: float, tolerance: int, modulation_type: int, sample_rate: float, freq: float, gain: int, bandwidth: float, device: str, usrp_ip="192.168.10.2"): signal = Signal("", "LiveSignal") signal.bit_len = bit_len signal.qad_center = center signal.noise_treshold = noise signal.tolerance = tolerance signal.silent_set_modulation_type(modulation_type) super().__init__(signal) self.rcv_thrd = ReceiverThread(sample_rate, freq, gain, bandwidth, initial_bufsize=1e8, is_ringbuffer=True) self.rcv_thrd.usrp_ip = usrp_ip self.rcv_thrd.device = device self.rcv_thrd.index_changed.connect(self.on_rcv_thread_index_changed) self.rcv_timer = QTimer() self.rcv_timer.setInterval(1000) self.rcv_timer.timeout.connect(self.on_rcv_timer_timeout) self.rel_symbol_len = self._read_symbol_len() self.data_cache = [] self.conseq_non_data = 0 self.reading_data = False self.store_blocks = True self.__sniff_file = "" self.__store_data = True
def test_symbols(self): old_sym_len = constants.SETTINGS.value('rel_symbol_length', type=int) constants.SETTINGS.setValue('rel_symbol_length', 20) # Set Symbol length for this test s = Signal("./data/vw_symbols.complex", "VW") s.noise_treshold = 0.0111 s.qad_center = 0.0470 s.bit_len = 500 s.modulation_type = 0 # ASK pa = ProtocolAnalyzer(s) pa.get_protocol_from_signal() block = pa.blocks[0] for i in range(255): # First 255 are bits self.assertEqual(type(block[i]), bool) for i in range(255, 261): self.assertNotEqual(type(block[i]), bool) # 6 Symbols print("Symbol", block[i].name, "NSamples:", block[i].nsamples, "Pulsetype:", block[i].pulsetype) symbols = block.plain_bits_str[255:261] self.assertEqual(symbols, "ABABAB") constants.SETTINGS.setValue('rel_symbol_length', old_sym_len) # Restore Symbol Length
def test_fabema_many_blocks(self): signal = Signal( "../../noack/USRP/Fabema/Testdata/trafficlight_fhside_full.complex", "PerfTest", modulation="ASK") signal.noise_treshold = 0.1 signal.qad_center = -0.0249 signal.bit_len = 1 proto_analyzer = ProtocolAnalyzer(signal) t = time.time() proto_analyzer.get_protocol_from_signal() print("Got protocol", time.time() - t) t = time.time() proto_analyzer.plain_to_string(0) total = time.time() - t print("First run", total) t = time.time() proto_analyzer.plain_to_string(0) total = time.time() - t print("With cached", total) print("Num Blocks", proto_analyzer.num_blocks)