diff --git a/.gitignore b/.gitignore index 62a41131..7452def1 100644 --- a/.gitignore +++ b/.gitignore @@ -45,7 +45,7 @@ sdrplay.cpp usrp.c path_creator.cpp -signalFunctions.cpp +signal_functions.cpp util.cpp misc/* diff --git a/src/urh/cli/urh_cli.py b/src/urh/cli/urh_cli.py index 491d8a5a..48f6fe77 100755 --- a/src/urh/cli/urh_cli.py +++ b/src/urh/cli/urh_cli.py @@ -29,7 +29,7 @@ from urh.util import util util.set_shared_library_path() try: - import urh.cythonext.signalFunctions + import urh.cythonext.signal_functions import urh.cythonext.path_creator import urh.cythonext.util except ImportError: diff --git a/src/urh/cythonext/analyze.py b/src/urh/cythonext/analyze.py index 3cb9b21d..b60c7f1f 100644 --- a/src/urh/cythonext/analyze.py +++ b/src/urh/cythonext/analyze.py @@ -1,6 +1,6 @@ from subprocess import call, Popen -MODULES = ["path_creator", "signalFunctions", "util"] +MODULES = ["path_creator", "signal_functions", "util"] for module in MODULES: call(["cython", "-a", "--cplus", "-3", module + ".pyx"]) diff --git a/src/urh/cythonext/signalFunctions.pyx b/src/urh/cythonext/signal_functions.pyx similarity index 99% rename from src/urh/cythonext/signalFunctions.pyx rename to src/urh/cythonext/signal_functions.pyx index 34345cc0..0f2ea22b 100644 --- a/src/urh/cythonext/signalFunctions.pyx +++ b/src/urh/cythonext/signal_functions.pyx @@ -4,35 +4,19 @@ import cython import numpy as np from libcpp cimport bool +from urh.cythonext import util + +from cython.parallel import prange +from libc.math cimport atan2, sqrt, M_PI, sin, cos + # As we do not use any numpy C API functions we do no import_array here, # because it can lead to OS X error: https://github.com/jopohl/urh/issues/273 # np.import_array() -from urh.cythonext import util - -from cython.parallel import prange -# noinspection PyUnresolvedReferences -from libc.math cimport atan2, sqrt, M_PI, sin, cos - -cdef: - float complex imag_unit = 1j - +cdef float complex imag_unit = 1j cdef float NOISE_FSK_PSK = -4.0 cdef float NOISE_ASK = 0.0 - -cdef float calc_costa_alpha(float bw, float damp=1 / sqrt(2)) nogil: - # BW in range((2pi/200), (2pi/100)) - cdef float alpha = (4 * damp * bw) / (1 + 2 * damp * bw + bw * bw) - - return alpha - -cdef float calc_costa_beta(float bw, float damp=1 / sqrt(2)) nogil: - # BW in range((2pi/200), (2pi/100)) - cdef float beta = (4 * bw * bw) / (1 + 2 * damp * bw + bw * bw) - return beta - - cpdef float get_noise_for_mod_type(int mod_type): if mod_type == 0: return NOISE_ASK @@ -197,6 +181,17 @@ cpdef np.ndarray[np.complex64_t, ndim=1] modulate_gfsk(unsigned char[:] bit_arra return result +cdef float calc_costa_alpha(float bw, float damp=1 / sqrt(2)) nogil: + # BW in range((2pi/200), (2pi/100)) + cdef float alpha = (4 * damp * bw) / (1 + 2 * damp * bw + bw * bw) + + return alpha + +cdef float calc_costa_beta(float bw, float damp=1 / sqrt(2)) nogil: + # BW in range((2pi/200), (2pi/100)) + cdef float beta = (4 * bw * bw) / (1 + 2 * damp * bw + bw * bw) + return beta + cdef void costa_demod(float complex[::1] samples, float[::1] result, float noise_sqrd, float costa_alpha, float costa_beta, bool qam, long long num_samples): cdef float phase_error = 0 @@ -349,6 +344,7 @@ cpdef unsigned long long[:, ::1] grab_pulse_lens(float[::1] samples, float cente unsigned int tolerance, int modulation_type, unsigned int bit_length): """ Holt sich die Pulslängen aus den quadraturdemodulierten Samples + @param samples: Samples nach der QAD @param center: Alles über der Treshold ist ein Einserpuls, alles darunter 0er Puls @return: Ein 2D Array arr. diff --git a/src/urh/main.py b/src/urh/main.py index dba06fbe..12d684de 100755 --- a/src/urh/main.py +++ b/src/urh/main.py @@ -81,7 +81,7 @@ def main(): util.set_shared_library_path() try: - import urh.cythonext.signalFunctions + import urh.cythonext.signal_functions import urh.cythonext.path_creator import urh.cythonext.util except ImportError: diff --git a/src/urh/signalprocessing/Filter.py b/src/urh/signalprocessing/Filter.py index be470227..b4467e33 100644 --- a/src/urh/signalprocessing/Filter.py +++ b/src/urh/signalprocessing/Filter.py @@ -4,7 +4,7 @@ from enum import Enum import numpy as np from urh import constants -from urh.cythonext import signalFunctions +from urh.cythonext import signal_functions from urh.util import util from urh.util.Logger import logger @@ -31,7 +31,7 @@ class Filter(object): if input_signal.dtype != np.complex64: input_signal = np.array(input_signal, dtype=np.complex64) - return signalFunctions.fir_filter(input_signal, np.array(self.taps, dtype=np.complex64)) + return signal_functions.fir_filter(input_signal, np.array(self.taps, dtype=np.complex64)) @staticmethod def read_configured_filter_bw() -> float: diff --git a/src/urh/signalprocessing/Modulator.py b/src/urh/signalprocessing/Modulator.py index c6302b99..5b3f3d7f 100644 --- a/src/urh/signalprocessing/Modulator.py +++ b/src/urh/signalprocessing/Modulator.py @@ -7,7 +7,7 @@ from PyQt5.QtGui import QPen from PyQt5.QtWidgets import QGraphicsScene from urh import constants -from urh.cythonext import path_creator, signalFunctions +from urh.cythonext import path_creator, signal_functions from urh.ui.painting.ZoomableScene import ZoomableScene from urh.util.Formatter import Formatter @@ -163,26 +163,26 @@ class Modulator(object): result = np.zeros(0, dtype=np.complex64) if mod_type == "FSK": - result = signalFunctions.modulate_fsk(data, pause, start, self.carrier_amplitude, + result = signal_functions.modulate_fsk(data, pause, start, self.carrier_amplitude, self.param_for_zero, self.param_for_one, self.carrier_phase_deg * (np.pi / 180), self.sample_rate, self.samples_per_bit) elif mod_type == "ASK": a0 = self.carrier_amplitude * (self.param_for_zero / 100) a1 = self.carrier_amplitude * (self.param_for_one / 100) - result = signalFunctions.modulate_ask(data, pause, start, a0, a1, + result = signal_functions.modulate_ask(data, pause, start, a0, a1, self.carrier_freq_hz, self.carrier_phase_deg * (np.pi / 180), self.sample_rate, self.samples_per_bit) elif mod_type == "PSK": phi0 = self.param_for_zero * (np.pi / 180) phi1 = self.param_for_one * (np.pi / 180) - result = signalFunctions.modulate_psk(data, pause, start, self.carrier_amplitude, + result = signal_functions.modulate_psk(data, pause, start, self.carrier_amplitude, self.carrier_freq_hz, phi0, phi1, self.sample_rate, self.samples_per_bit) elif mod_type == "GFSK": - result = signalFunctions.modulate_gfsk(data, pause, start, self.carrier_amplitude, + result = signal_functions.modulate_gfsk(data, pause, start, self.carrier_amplitude, self.param_for_zero, self.param_for_one, self.carrier_phase_deg * (np.pi / 180), self.sample_rate, self.samples_per_bit, self.gauss_bt, self.gauss_filter_width) diff --git a/src/urh/signalprocessing/ProtocolAnalyzer.py b/src/urh/signalprocessing/ProtocolAnalyzer.py index ad1f19f2..128615c2 100644 --- a/src/urh/signalprocessing/ProtocolAnalyzer.py +++ b/src/urh/signalprocessing/ProtocolAnalyzer.py @@ -9,7 +9,7 @@ from PyQt5.QtCore import QObject, pyqtSignal, Qt from urh import constants from urh.awre.FormatFinder import FormatFinder -from urh.cythonext import signalFunctions, util +from urh.cythonext import signal_functions, util from urh.signalprocessing.Encoding import Encoding from urh.signalprocessing.FieldType import FieldType from urh.signalprocessing.Message import Message @@ -223,7 +223,7 @@ class ProtocolAnalyzer(object): bit_len = signal.bit_len try: - ppseq = signalFunctions.grab_pulse_lens(signal.qad, signal.qad_center, signal.tolerance, + 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 diff --git a/src/urh/signalprocessing/ProtocolSniffer.py b/src/urh/signalprocessing/ProtocolSniffer.py index eb5eaa4a..b171bc0d 100644 --- a/src/urh/signalprocessing/ProtocolSniffer.py +++ b/src/urh/signalprocessing/ProtocolSniffer.py @@ -6,7 +6,7 @@ from threading import Thread import numpy as np from PyQt5.QtCore import pyqtSignal, QObject -from urh.cythonext.signalFunctions import grab_pulse_lens +from urh.cythonext.signal_functions import grab_pulse_lens from urh.dev.BackendHandler import BackendHandler, Backends from urh.dev.VirtualDevice import VirtualDevice, Mode from urh.signalprocessing.Message import Message diff --git a/src/urh/signalprocessing/Signal.py b/src/urh/signalprocessing/Signal.py index b3e4c69e..9c93da13 100644 --- a/src/urh/signalprocessing/Signal.py +++ b/src/urh/signalprocessing/Signal.py @@ -7,7 +7,7 @@ import numpy as np from PyQt5.QtCore import pyqtSignal, QObject, QDir, Qt from PyQt5.QtWidgets import QApplication -import urh.cythonext.signalFunctions as signal_functions +import urh.cythonext.signal_functions as signal_functions from urh import constants from urh.signalprocessing.Filter import Filter from urh.util import FileOperator diff --git a/src/urh/ui/painting/SignalSceneManager.py b/src/urh/ui/painting/SignalSceneManager.py index afe4f756..6874bc3f 100644 --- a/src/urh/ui/painting/SignalSceneManager.py +++ b/src/urh/ui/painting/SignalSceneManager.py @@ -1,6 +1,3 @@ -import numpy as np - -from urh.cythonext import signalFunctions from urh.signalprocessing.Signal import Signal from urh.ui.painting.SceneManager import SceneManager diff --git a/tests/PlotTests.py b/tests/PlotTests.py index 24cd5005..2c83e05c 100644 --- a/tests/PlotTests.py +++ b/tests/PlotTests.py @@ -5,7 +5,7 @@ import matplotlib.pyplot as plt import numpy as np from urh.signalprocessing.Modulator import Modulator -from urh.cythonext import signalFunctions +from urh.cythonext import signal_functions from urh.signalprocessing.ProtocolAnalyzer import ProtocolAnalyzer from urh.signalprocessing.Signal import Signal from tests.utils_testing import get_path_for_data_file @@ -34,7 +34,7 @@ class PlotTests(unittest.TestCase): plt.title("Modulated Wave") plt.subplot(2, 1, 2) - qad = signalFunctions.afp_demod(np.ascontiguousarray(data), 0, 1) + qad = signal_functions.afp_demod(np.ascontiguousarray(data), 0, 1) plt.plot(qad) plt.title("Quad Demod") diff --git a/tests/SpectrogramTest.py b/tests/SpectrogramTest.py index 423b70f8..c00259ff 100644 --- a/tests/SpectrogramTest.py +++ b/tests/SpectrogramTest.py @@ -7,7 +7,7 @@ from urh.signalprocessing.Signal import Signal import array from matplotlib import pyplot as plt -from urh.cythonext import signalFunctions +from urh.cythonext import signal_functions from urh.signalprocessing.Spectrogram import Spectrogram @@ -124,7 +124,7 @@ class SpectrogramTest(unittest.TestCase): #b /= s print(a, b) - filtered_data = signalFunctions.iir_filter(a, b, data) + filtered_data = signal_functions.iir_filter(a, b, data) #plt.plot(data, label='Noisy signal') plt.plot(np.fft.fft(filtered_data), label='Filtered signal (%g Hz)' % f0)