ulab.utils — допоміжні утиліти ulab

Підмодуль ulab.utils надає невеликий набір допоміжних функцій, що працюють з об’єктами numpy.ndarray, але знаходяться поза стандартним інтерфейсом NumPy / SciPy. Ці утиліти оптимізовані для потокових шаблонів, типових на вбудованих цільових платформах — буфери периферійних пристроїв розрядністю понад 16 біт, спектри магнітуд без виділення пам’яті.

Перетворювачі буферів

Стандартна функція numpy.frombuffer() обробляє лише типи, що визначені самим numpy (uint8, int8, uint16, int16, float). Наведені нижче утиліти розширюють підтримку до байтових буферів int16 / uint16 / int32 / uint32 і повертають float numpy.ndarray за один прохід.

ulab.utils.from_int16_buffer(buffer: bytes, *, count: int = -1, offset: int = 0, out: numpy.ndarray | None = None, byteswap: bool = False) numpy.ndarray

Перетворити буфер вибірок int16 на float numpy.ndarray за один прохід.

Параметри:
  • bufferbytes-подібний буфер із вибірками.

  • count – кількість елементів для читання. -1 читає весь буфер від offset до кінця.

  • offset – кількість байтів, які слід пропустити на початку буфера.

  • out – необов’язковий попередньо виділений float numpy.ndarray для запису результату. Якщо задано, новий масив не виділяється.

  • byteswap – змінити порядок байтів кожного елемента перед перетворенням — потрібний параметр, якщо буфер надійшов від периферійного пристрою, що записав дані у протилежному порядку байтів відносно CPU камери.

Повертає:

float numpy.ndarray довжиною count (або доступну кількість вибірок, якщо count дорівнює -1).

ulab.utils.from_uint16_buffer(buffer: bytes, *, count: int = -1, offset: int = 0, out: numpy.ndarray | None = None, byteswap: bool = False) numpy.ndarray

Перетворити буфер вибірок uint16 на float numpy.ndarray за один прохід.

Параметри:
  • buffer – байтоподібний буфер із вибірками.

  • count – кількість елементів для читання. -1 читає весь буфер від offset до кінця.

  • offset – кількість байтів, які слід пропустити на початку буфера.

  • out – необов’язковий попередньо виділений float numpy.ndarray для запису результату. Якщо задано, новий масив не виділяється.

  • byteswap – змінити порядок байтів кожного елемента перед перетворенням — потрібний параметр, якщо буфер надійшов від периферійного пристрою, що записав дані у протилежному порядку байтів відносно CPU камери.

Повертає:

float numpy.ndarray довжиною count (або доступну кількість вибірок, якщо count дорівнює -1).

ulab.utils.from_int32_buffer(buffer: bytes, *, count: int = -1, offset: int = 0, out: numpy.ndarray | None = None, byteswap: bool = False) numpy.ndarray

Перетворити буфер вибірок int32 на float numpy.ndarray за один прохід.

Параметри:
  • buffer – байтоподібний буфер із вибірками.

  • count – кількість елементів для читання. -1 читає весь буфер від offset до кінця.

  • offset – кількість байтів, які слід пропустити на початку буфера.

  • out – необов’язковий попередньо виділений float numpy.ndarray для запису результату. Якщо задано, новий масив не виділяється.

  • byteswap – змінити порядок байтів кожного елемента перед перетворенням — потрібний параметр, якщо буфер надійшов від периферійного пристрою, що записав дані у протилежному порядку байтів відносно CPU камери.

Повертає:

float numpy.ndarray довжиною count (або доступну кількість вибірок, якщо count дорівнює -1).

ulab.utils.from_uint32_buffer(buffer: bytes, *, count: int = -1, offset: int = 0, out: numpy.ndarray | None = None, byteswap: bool = False) numpy.ndarray

Перетворити буфер вибірок uint32 на float numpy.ndarray за один прохід.

Параметри:
  • buffer – байтоподібний буфер із вибірками.

  • count – кількість елементів для читання. -1 читає весь буфер від offset до кінця.

  • offset – кількість байтів, які слід пропустити на початку буфера.

  • out – необов’язковий попередньо виділений float numpy.ndarray для запису результату. Якщо задано, новий масив не виділяється.

  • byteswap – змінити порядок байтів кожного елемента перед перетворенням — потрібний параметр, якщо буфер надійшов від периферійного пристрою, що записав дані у протилежному порядку байтів відносно CPU камери.

Повертає:

float numpy.ndarray довжиною count (або доступну кількість вибірок, якщо count дорівнює -1).

Спектрограма

ulab.utils.spectrogram(r: numpy.ndarray, imag: numpy.ndarray | None = None, *, scratchpad: numpy.ndarray | None = None, out: numpy.ndarray | None = None, log: bool = False) numpy.ndarray

Повернути магнітуду дискретного перетворення Фур’є вхідних даних, що концептуально еквівалентно np.sqrt(real * real + imag * imag) після виклику numpy.fft.fft() — без виділення проміжних буферів, яке потребує явна форма.

Параметри:
  • r – дійсна частина вхідних даних у вигляді одновимірного float numpy.ndarray. Її довжина має бути степенем двійки.

  • imag – необов’язкова уявна частина вхідних даних, тієї самої форми, що й r. Якщо не задано, вхідні дані вважаються суто дійсними.

  • scratchpad – необов’язковий робочий буфер для FFT. Якщо задано, тимчасовий робочий масив не виділяється.

  • out – необов’язковий попередньо виділений буфер призначення для спектра магнітуд. Якщо задано, результат записується безпосередньо до нього.

  • log – якщо True, повертається натуральний логарифм магнітуди замість самої магнітуди.

Повертає:

float numpy.ndarray тієї самої довжини, що й r, що містить магнітуду (або її логарифм) у кожному частотному бині.