Esempio n. 1
0
    def test_4_psk(self):
        bits = array.array("B", [1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1])
        angles_degree = [-135, -45, 45, 135]

        parameters = array.array("f", [np.pi*a/180 for a in angles_degree])
        result = modulate_c(bits, 100, "PSK", parameters, 2, 1, 40e3, 0, 1e6, 1000, 0)

        signal = Signal("")
        signal.iq_array = IQArray(result)
        signal.bits_per_symbol = 2
        signal.center = 0
        signal.center_spacing = 1
        signal.modulation_type = "PSK"

        proto_analyzer = ProtocolAnalyzer(signal)
        proto_analyzer.get_protocol_from_signal()
        demod_bits = proto_analyzer.plain_bits_str[0]
        self.assertEqual(len(demod_bits), len(bits))
        self.assertTrue(demod_bits.startswith("10101010"))

        np.random.seed(42)
        noised = result + 0.1 * np.random.normal(loc=0, scale=np.sqrt(2)/2, size=(len(result), 2))
        signal.iq_array = IQArray(noised.astype(np.float32))
        signal.center_spacing = 1.5
        signal.noise_threshold = 0.2
        signal._qad = None
        proto_analyzer.get_protocol_from_signal()
        demod_bits = proto_analyzer.plain_bits_str[0]
        self.assertEqual(len(demod_bits), len(bits))
        self.assertTrue(demod_bits.startswith("10101010"))
Esempio n. 2
0
    def __init__(self,
                 samples_per_symbol: int,
                 center: float,
                 center_spacing: float,
                 noise: float,
                 tolerance: int,
                 modulation_type: str,
                 bits_per_symbol: int,
                 device: str,
                 backend_handler: BackendHandler,
                 network_raw_mode=False):
        signal = Signal("", "LiveSignal")
        signal.samples_per_symbol = samples_per_symbol
        signal.center = center
        signal.center_spacing = center_spacing
        signal.noise_threshold = noise
        signal.tolerance = tolerance
        signal.silent_set_modulation_type(modulation_type)
        signal.bits_per_symbol = bits_per_symbol
        ProtocolAnalyzer.__init__(self, signal)
        QObject.__init__(self, None)

        self.network_raw_mode = network_raw_mode
        self.backend_handler = backend_handler
        self.rcv_device = VirtualDevice(self.backend_handler,
                                        device,
                                        Mode.receive,
                                        resume_on_full_receive_buffer=True,
                                        raw_mode=network_raw_mode)

        signal.iq_array = IQArray(None, self.rcv_device.data_type, 0)

        self.sniff_thread = Thread(target=self.check_for_data, daemon=True)

        self.rcv_device.started.connect(self.__emit_started)
        self.rcv_device.stopped.connect(self.__emit_stopped)

        self.__buffer = IQArray(None, np.float32, 0)
        self.__init_buffer()
        self.__current_buffer_index = 0

        self.reading_data = False
        self.adaptive_noise = False
        self.automatic_center = False

        self.pause_length = 0
        self.is_running = False

        self.store_messages = True

        self.__sniff_file = ""
        self.__store_data = True
Esempio n. 3
0
    def test_4_fsk(self):
        bits = array.array("B", [1, 0, 1, 0, 1, 1, 0, 0, 0, 1])
        parameters = array.array("f", [-20e3, -10e3, 10e3, 20e3])
        result = modulate_c(bits, 100, "FSK", parameters, 2, 1, 40e3, 0, 1e6, 1000, 0)

        signal = Signal("")
        signal.iq_array = IQArray(result)
        signal.bits_per_symbol = 2
        signal.center = 0
        signal.center_spacing = 0.1

        proto_analyzer = ProtocolAnalyzer(signal)
        proto_analyzer.get_protocol_from_signal()
        self.assertEqual(proto_analyzer.plain_bits_str[0], "1010110001")
Esempio n. 4
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()

        try:
            signal_filename = os.path.relpath(signal.filename,
                                              self.project_path)
        except ValueError:
            signal_filename = signal.filename

        for sig_tag in root.iter("signal"):
            if sig_tag.attrib["filename"] == signal_filename:
                signal.name = sig_tag.attrib["name"]
                center = sig_tag.get("qad_center", None)  # legacy support
                signal.center = float(sig_tag.get(
                    "center", 0)) if center is None else float(center)
                signal.center_spacing = float(
                    sig_tag.get("center_spacing", 0.1))
                signal.tolerance = int(sig_tag.get("tolerance", 5))
                signal.bits_per_symbol = int(sig_tag.get("bits_per_symbol", 1))
                signal.costas_loop_bandwidth = float(
                    sig_tag.get("costas_loop_bandwidth", 0.1))

                signal.noise_threshold = float(
                    sig_tag.get("noise_threshold", 0.1))
                signal.sample_rate = float(sig_tag.get("sample_rate", 1e6))
                signal.samples_per_symbol = int(sig_tag.get(
                    "bit_length", 0))  # Legacy for old project files
                if signal.samples_per_symbol == 0:
                    signal.samples_per_symbol = int(
                        sig_tag.get("samples_per_symbol", 100))

                try:
                    # Legacy support when modulation type was integer
                    signal.modulation_type = Signal.MODULATION_TYPES[int(
                        sig_tag.get("modulation_type", 0))]
                except (ValueError, IndexError):
                    signal.modulation_type = sig_tag.get(
                        "modulation_type", "ASK")
                signal.pause_threshold = int(sig_tag.get("pause_threshold", 8))
                signal.message_length_divisor = int(
                    sig_tag.get("message_length_divisor", 1))
                break

        return True