ulab.utils — вспомогательные средства ulab

Подмодуль ulab.utils предоставляет небольшой набор вспомогательных средств, которые работают с объектами numpy.ndarray, но находятся за пределами стандартной поверхности NumPy / SciPy. Эти средства настроены для потоковых сценариев, распространённых на встраиваемых платформах — буферов периферийных устройств шире 16 бит, спектров амплитуд без выделения памяти.

Преобразователи буферов

Стандартная numpy.frombuffer() обрабатывает только те dtype, которые определяет сам numpy (uint8, int8, uint16, int16, float). Приведённые ниже средства расширяют это покрытие на байтовые буферы int16 / uint16 / int32 / uint32 и за один проход возвращают 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 в numpy.ndarray из чисел с плавающей точкой за один проход.

Параметры:
  • bufferbytes-подобный буфер, содержащий выборки.

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

  • offset – число байтов, пропускаемых в начале буфера.

  • out – необязательный заранее выделенный numpy.ndarray из чисел с плавающей точкой для записи результата. Если передан, новый массив не выделяется.

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

Результат:

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 в numpy.ndarray из чисел с плавающей точкой за один проход.

Параметры:
  • buffer – bytes-подобный буфер, содержащий выборки.

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

  • offset – число байтов, пропускаемых в начале буфера.

  • out – необязательный заранее выделенный numpy.ndarray из чисел с плавающей точкой для записи результата. Если передан, новый массив не выделяется.

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

Результат:

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 в numpy.ndarray из чисел с плавающей точкой за один проход.

Параметры:
  • buffer – bytes-подобный буфер, содержащий выборки.

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

  • offset – число байтов, пропускаемых в начале буфера.

  • out – необязательный заранее выделенный numpy.ndarray из чисел с плавающей точкой для записи результата. Если передан, новый массив не выделяется.

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

Результат:

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 в numpy.ndarray из чисел с плавающей точкой за один проход.

Параметры:
  • buffer – bytes-подобный буфер, содержащий выборки.

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

  • offset – число байтов, пропускаемых в начале буфера.

  • out – необязательный заранее выделенный numpy.ndarray из чисел с плавающей точкой для записи результата. Если передан, новый массив не выделяется.

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

Результат:

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 – вещественная часть входных данных как одномерный numpy.ndarray из чисел с плавающей точкой. Её длина должна быть степенью двойки.

  • imag – необязательная мнимая часть входных данных той же формы, что и r. Если опущена, входные данные считаются чисто вещественными.

  • scratchpad – необязательный рабочий буфер для FFT. Если передан, временный рабочий массив не выделяется.

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

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

Результат:

numpy.ndarray из чисел с плавающей точкой той же длины, что и r, содержащий амплитуду (или её логарифм) в каждом частотном бине.