示例#1
0
    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
示例#2
0
    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")
示例#3
0
 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)
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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
示例#7
0
    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
示例#8
0
    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)