waveform_processor.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import numpy as np
  2. from ..src.core.waveform_processor import WaveformProcessor
  3. from ..src.hardware.constraints import HardwareConstraints
  4. def test_process_rf_numba_scaling():
  5. # Тестируем масштабирование RF-сигнала
  6. rf = np.array([0.0, 0.5, -0.5, 1.0, -1.0], dtype=np.float32)
  7. max_val = 127
  8. result = WaveformProcessor.process_rf_numba(rf, max_val)
  9. # Ожидаем int8 значения
  10. assert result.dtype == np.int8
  11. expected = np.array([0, 64, -64, 127, -128], dtype=np.int8)
  12. # Проверяем равенство с ожидаемым результатом (с учетом округления)
  13. assert np.array_equal(result, expected)
  14. def test_process_gradient_numba_scaling():
  15. # Тестируем масштабирование градиентного сигнала
  16. grad = np.array([-1.0, -0.5, 0.0, 0.5, 1.0], dtype=np.float32)
  17. max_val = 32767 # максимальное значение для int16
  18. result = WaveformProcessor.process_gradient_numba(grad, max_val)
  19. assert result.dtype == np.int16
  20. expected = np.array([-32767, -16384, 0, 16384, 32767], dtype=np.int16)
  21. assert np.array_equal(result, expected)
  22. def test_preprocess_adc_contiguity():
  23. hw = HardwareConstraints()
  24. wp = WaveformProcessor(hw)
  25. # Создаем не смежный массив (шаг 2)
  26. arr = np.array([1.0, 2.5, 3.0], dtype=np.float64)
  27. arr_slice = arr[::2] # это представление: [1.0, 3.0], не смежное в памяти
  28. processed = wp.preprocess_adc(arr_slice)
  29. # Проверяем, что результат смежен в памяти и имеет dtype float32
  30. assert processed.dtype == np.float32
  31. assert processed.flags['C_CONTIGUOUS'] is True
  32. # Проверяем, что значения сохранились
  33. assert np.allclose(processed, arr_slice.astype(np.float32))