def get_protocol_from_signal(self): signal = self.signal if signal is None: self.messages = None return if self.messages is not None: self.messages[:] = [] else: self.messages = [] bit_len = signal.bit_len ppseq = signal_functions.grab_pulse_lens(signal.qad, signal.qad_center, signal.tolerance, signal.modulation_type, signal.bit_len, signal.bits_per_symbol) bit_data, pauses, bit_sample_pos = self._ppseq_to_bits(ppseq, bit_len, self.signal.bits_per_symbol, pause_threshold=signal.pause_threshold) if signal.message_length_divisor > 1 and signal.modulation_type == "ASK": self.__ensure_message_length_multiple(bit_data, signal.bit_len, pauses, bit_sample_pos, signal.message_length_divisor) i = 0 for bits, pause in zip(bit_data, pauses): middle_bit_pos = bit_sample_pos[i][int(len(bits) / 2)] start, end = middle_bit_pos, middle_bit_pos + bit_len rssi = np.mean(signal.iq_array.subarray(start, end).magnitudes_normalized) message = Message(bits, pause, message_type=self.default_message_type, bit_len=bit_len, rssi=rssi, decoder=self.decoder, bit_sample_pos=bit_sample_pos[i]) self.messages.append(message) i += 1 self.qt_signals.protocol_updated.emit()
def get_protocol_from_signal(self): signal = self.signal if signal is None: self.messages = None return if self.messages is not None: self.messages[:] = [] else: self.messages = [] bit_len = signal.bit_len ppseq = signal_functions.grab_pulse_lens(signal.qad, signal.qad_center, signal.tolerance, signal.modulation_type, signal.bit_len) bit_data, pauses, bit_sample_pos = self._ppseq_to_bits(ppseq, bit_len, pause_threshold=signal.pause_threshold) if signal.message_length_divisor > 1 and signal.modulation_type_str == "ASK": self.__ensure_message_length_multiple(bit_data, signal.bit_len, pauses, bit_sample_pos, signal.message_length_divisor) i = 0 for bits, pause in zip(bit_data, pauses): middle_bit_pos = bit_sample_pos[i][int(len(bits) / 2)] start, end = middle_bit_pos, middle_bit_pos + bit_len rssi = np.mean(np.abs(signal.data[start:end])) message = Message(bits, pause, message_type=self.default_message_type, bit_len=bit_len, rssi=rssi, decoder=self.decoder, bit_sample_pos=bit_sample_pos[i]) self.messages.append(message) i += 1 self.qt_signals.protocol_updated.emit()
def get_protocol_from_signal(self): signal = self.signal if signal is None: self.messages = None return if self.messages is not None: self.messages[:] = [] else: self.messages = [] bit_len = signal.bit_len try: ppseq = signal_functions.grab_pulse_lens(signal.qad, signal.qad_center, signal.tolerance, signal.modulation_type, signal.bit_len) except TypeError: # Remove this check in version 1.7 print( "Extension method has changed! To fix this, first move to URHs base directory " "then recompile the extensions using the following command:") print("python3 src/urh/cythonext/build.py") print("and finally restart the application") sys.exit(1) bit_data, pauses, bit_sample_pos = self._ppseq_to_bits( ppseq, bit_len, pause_threshold=signal.pause_threshold) if signal.message_length_divisor > 1 and signal.modulation_type_str == "ASK": self.__ensure_message_length_multiple( bit_data, signal.bit_len, pauses, bit_sample_pos, signal.message_length_divisor) i = 0 for bits, pause in zip(bit_data, pauses): middle_bit_pos = bit_sample_pos[i][int(len(bits) / 2)] start, end = middle_bit_pos, middle_bit_pos + bit_len rssi = np.mean(np.abs(signal.data[start:end])) message = Message(bits, pause, message_type=self.default_message_type, bit_len=bit_len, rssi=rssi, decoder=self.decoder, bit_sample_pos=bit_sample_pos[i]) self.messages.append(message) i += 1 self.qt_signals.protocol_updated.emit()
def __demodulate_data(self, data): """ Demodulates received IQ data and adds demodulated bits to messages :param data: :return: """ if len(data) == 0: return power_spectrum = data.real ** 2 + data.imag ** 2 is_above_noise = np.sqrt(np.mean(power_spectrum)) > self.signal.noise_threshold if self.adaptive_noise and not is_above_noise: self.signal.noise_threshold = 0.9 * self.signal.noise_threshold + 0.1 * np.sqrt(np.max(power_spectrum)) if is_above_noise: self.__add_to_buffer(data) self.pause_length = 0 if not self.__buffer_is_full(): return else: self.pause_length += len(data) if self.pause_length < 10 * self.signal.bit_len: self.__add_to_buffer(data) if not self.__buffer_is_full(): return if self.__current_buffer_index == 0: return # clear cache and start a new message self.signal._fulldata = self.__buffer[0:self.__current_buffer_index] self.__clear_buffer() self.signal._qad = None bit_len = self.signal.bit_len if self.automatic_center: self.signal.qad_center = AutoInterpretation.detect_center(self.signal.qad, max_size=150*self.signal.bit_len) ppseq = grab_pulse_lens(self.signal.qad, self.signal.qad_center, self.signal.tolerance, self.signal.modulation_type, self.signal.bit_len) bit_data, pauses, bit_sample_pos = self._ppseq_to_bits(ppseq, bit_len, write_bit_sample_pos=False) for bits, pause in zip(bit_data, pauses): message = Message(bits, pause, bit_len=bit_len, message_type=self.default_message_type, decoder=self.decoder) self.messages.append(message) self.message_sniffed.emit(len(self.messages) - 1)
def __demodulate_data(self, data): """ Demodulates received IQ data and adds demodulated bits to messages :param data: :return: """ if len(data) == 0: return rssi_squared = np.mean(data.real ** 2 + data.imag ** 2) is_above_noise = rssi_squared > self.signal.noise_threshold ** 2 if self.adaptive_noise and not is_above_noise: self.signal.noise_threshold = 0.9 * self.signal.noise_threshold + 0.1 * np.max(np.abs(data)) if is_above_noise: self.data_cache.append(data) self.pause_length = 0 return else: self.pause_length += len(data) if self.pause_length < 10 * self.signal.bit_len: self.data_cache.append(data) return if len(self.data_cache) == 0: return # clear cache and start a new message self.signal._fulldata = np.concatenate(self.data_cache) self.data_cache.clear() self.signal._qad = None bit_len = self.signal.bit_len ppseq = grab_pulse_lens(self.signal.qad, self.signal.qad_center, self.signal.tolerance, self.signal.modulation_type, self.signal.bit_len) bit_data, pauses, bit_sample_pos = self._ppseq_to_bits(ppseq, bit_len, write_bit_sample_pos=False) for bits, pause in zip(bit_data, pauses): message = Message(bits, pause, bit_len=bit_len, message_type=self.default_message_type, decoder=self.decoder) self.messages.append(message) self.message_sniffed.emit(len(self.messages)-1)